Commit Graph

24549 Commits

Author SHA1 Message Date
Paul Olav Tvete
62a56adfa6 Compile-time option for disabling high-DPI scaling
Even if QHighDpiScaling::isActive() returns false, there
is a small overhead from calling functions and multiplying
with 1.0. This change adds a QT_NO_HIGHDPISCALING #ifdef
that replaces all conversion functions with empty inline
functions.

Task-number: QTBUG-46615
Change-Id: Idf85e1700e3adf7f7174c6fa3f5e1d006d74c826
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@theqtcompany.com>
2015-08-06 11:45:28 +00:00
Morten Johan Sørvig
6c4bd85c1f OS X adaptations to the high-DPI API
Use QPlatformWindow::windowGeometry() and friends
instead of the QWindow API, which now returns
(possibly scaled) values in device-independent pixels.

Rename QCocoaWindow::windowGeometry() -> nativeWindowGeometry()

Change-Id: I70279145079c3df793059d16fed9aafba2d49a6d
Reviewed-by: Morten Johan Sørvig <morten.sorvig@theqtcompany.com>
Reviewed-by: Paul Olav Tvete <paul.tvete@theqtcompany.com>
2015-08-06 11:06:26 +00:00
Tim Blechmann
11de131053 platforms: cocoa - fix QCocoaWindow::bottomLeftClippedByNSWindowOffset
bottomLeftClippedByNSWindowOffset did not take multiple clippings into
account. with this patch, we compute the offset via NSView-visibleRect.

Change-Id: If4ec02eb983e30f7cc5a6a1cb73e8f5c28fe1551
Reviewed-by: Jørgen Lind <jorgen.lind@theqtcompany.com>
2015-08-06 10:48:44 +00:00
Timur Pocheptsov
462e537e03 Fix a memory leak
We create dirtyOnScreenWidgets even if QT_NO_OPENGL is defined,
but dtor deletes this object  only if no QT_NO_OPENGL is defined.
Also, copy ctor/assignment operator must be disabled for such a class.

Task-number: QTBUG-47499
Change-Id: I9f8b5721ff6324fa7b28b715af68d0a5496c5eb5
Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
2015-08-06 10:30:57 +00:00
Antonin Stefanutti
e9eeb68a65 Add support for drawing a hyperlink in QPdfEngine
Adds the drawHyperlink method so that clients can draw a hyperlink
pointing to the specified URL at the specified rectangle. That new
method is to be used by GraphicContext::setURLForRect implementations
that want to render anchors as clickable links in PDF documents.

Task-number: QTBUG-44563
Change-Id: I7b0c602da37ee157d18115c531ab1b11fe304c13
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
2015-08-06 09:40:02 +00:00
Thiago Macieira
fd57ec5c5f QDBusError: Disable function that isn't used in bootstrapped builds
Change-Id: Id3d5c7bf4d4c45069621ffff13f7b73144537d81
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
2015-08-06 07:34:20 +00:00
Laszlo Agocs
4e6e71aa8d Add ETC1 to QOpenGLTexture formats
On mobile and embedded ETC1 (via GL_OES_compressed_ETC1_RGB8_texture) is
still the most common (and sometimes the only) option for compressed textures,
at least until GLES3 (with ETC2) becomes widely available.

Note that we treat this format as unsized to prevent going on the immutable storage
path as there is no word on glTexStorage and friends in the extension so that may
just fail as well.

Change-Id: Icbc3c6f62f314d63c4df289ef456f047c5e84cf3
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
2015-08-06 07:30:57 +00:00
Laszlo Agocs
4d39da8734 eglfs: save state in the cursor
Running an example like hellogles3 with eglfs and the mouse cursor visible
breaks due to the cursor implementation not being aware of vertex array
objects. The cursor drawing code uses client side pointers and having a
VAO bound breaks this. Instead, the VAO should be reset to 0.

In addition, the same applies to all touched state: naive applications
doing custom OpenGL rendering expect the state to be unchanged between
frames and this is not unreasonable. So introduce saving and restoring
for all touched state, with the exception of Quick where there is no
need to waste time with this.

Change-Id: Ib79039e80993ab5fc8368357fc1147ee7863d055
Reviewed-by: Andy Nichols <andy.nichols@theqtcompany.com>
2015-08-06 07:30:50 +00:00
Thiago Macieira
752362b0fa Require more of the C++11 Standard Library
Since libstdc++ builds on OS X and QNX 6.5 are no longer supported,
simply require <initializer_list> and std::move in order to claim C++11
support works.

The minimum OS X versions need to be fixed elsewhere.

Change-Id: Ib056b47dde3341ef9a52ffff13ef1d2ac3923f5c
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Reviewed-by: Jake Petroules <jake.petroules@petroules.com>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@theqtcompany.com>
Reviewed-by: Rafael Roquetto <rafael.roquetto@kdab.com>
2015-08-06 07:13:46 +00:00
Topi Reinio
5677176d76 qdoc: Don't use QStringLiteral in string comparisons
Using QStringLiteral to compare strings performs poorly
compared to QLatin1String.

These cases were previously fixed by commit 1a5c0b26, but
some were reintroduced with new commits to QDoc.

Change-Id: I272376052e876d88817606deb0a6dda92867dcbf
Reviewed-by: Kai Koehne <kai.koehne@theqtcompany.com>
2015-08-06 07:03:35 +00:00
Simon Hausmann
5c1b9bbdf1 Blacklist test failing due to too new OpenSSL version
As advised by Rich :)

Change-Id: I76c425e840419bc68762628e401b3e51c62c8da9
Reviewed-by: Richard J. Moore <rich@kde.org>
2015-08-06 06:17:15 +00:00
Andrew Knight
c17134e2db winphone: Remove old code
The platform message dialogs are always used on WP.

Change-Id: If55e1ea804981201fded796adaaf11eb17bc5050
Reviewed-by: Maurice Kalinowski <maurice.kalinowski@theqtcompany.com>
2015-08-05 19:54:08 +00:00
Andrew Knight
18c4a08623 winphone: Remove old non-DirectWrite code
Since 8.1, DirectWrite is always used on WinRT platforms.

Change-Id: I742e4a48be6c478a62c16a32cf89852b850aff9d
Reviewed-by: Maurice Kalinowski <maurice.kalinowski@theqtcompany.com>
2015-08-05 19:54:03 +00:00
Laszlo Agocs
4a552d95f6 Avoid multisampled contexts in QOpenGLWidget
as it is not needed at all. Multisampled FBOs do not need multisampled
configs.

What's more, this fixes crashing Mesa with Intel and EGL, where creating
a pbuffer for a config with multisampling simply crashes. (and due to
other issues we disable surfaceless QOffscreenSurface for Intel so
the pbuffer cannot be avoided)

Task-number: QTBUG-47509
Change-Id: I3ae3fae8513a6dc64ca4ab11c61d4777c6c09cec
Reviewed-by: Andy Nichols <andy.nichols@theqtcompany.com>
2015-08-05 18:18:56 +00:00
Frederik Gladhorn
25981d9b7f QLoggingRegistry: allow Rules section to be lower case
In http://blog.qt.io/blog/2014/03/11/qt-weekly-1-categorized-logging/
the Rules section is given as:
[rules]
...

While in reality only Rules was accepted. Ignore casing instead.

Change-Id: Ibf0da6b6df857988d508ba9ec354cbce0b2c56d6
Reviewed-by: Kai Koehne <kai.koehne@theqtcompany.com>
2015-08-05 16:14:42 +00:00
Timur Pocheptsov
f8f357c0e9 QSKIP SSL-session related tests (SecureTransport backend)
A couple of test always fail on OS X/iOS with SecureTransport
(simply not implemented yet).

Change-Id: Idd82262512938c36b657b497751738fdc804c182
Reviewed-by: Jeremy Lainé <jeremy.laine@m4x.org>
Reviewed-by: Richard J. Moore <rich@kde.org>
2015-08-05 09:39:40 +00:00
Timur Pocheptsov
72680ce7e2 Fix for build with -qreal float
Resolve ambiguity with function calls (due to double->float conversion),
use qreal where needed intead of explicit 'double'.

Change-Id: I28f1fb4a2b424b1399fb082a36ba9cff666f7c62
Task-number: QTBUG-47433
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
2015-08-04 15:37:43 +00:00
Topi Reinio
1e39c712bd qdoc: Do not merge QML module nodes with different major versions
As we may have multiple versions of a QML module present in the
doc build, the logic QDoc uses for merging collection nodes from
different trees needs to be revised a bit.

After this change, the collection nodes for identically-named
QML and JS modules are merged only if the major version number
matches. This prevents the situation where QML types for both
versions are listed in QML module pages.

Change-Id: I76b056a2073744347b160b25ed5bb043279f2b8a
Task-number: QTBUG-47536
Reviewed-by: Martin Smith <martin.smith@digia.com>
2015-08-04 14:15:39 +00:00
Laszlo Agocs
abbf82bdfc Make EGL context init work when msaa is requested but there's no surfaceless
To query back certain things, like the actual OpenGL version from the created context,
the eglconvenience code makes the new context current either without a surface
(in case EGL_KHR_surfaceless_context is supported) or with a pbuffer (or other
platform specific equivalent). There is no problem with the former. The latter
can however fail when samples are requested for the context and there are no
matching pbuffer configs. The result is a pbuffer without multisampling,
which could lead to a BAD_MATCH.

This is visible on GLES 2.0 devices like the Beaglebone. The solution is to fall
back to creating a new, temporary context with a config matching the pbuffer's
whenever the makeCurrent attempt fails.

Change-Id: Icd9f3383f2cad36dd5b60dead655328b7b9af658
Reviewed-by: Andy Nichols <andy.nichols@theqtcompany.com>
2015-08-04 13:13:54 +00:00
Kai Koehne
1767c94e9e Doc: Fix qdoc warnings about missing \inmodule
Change-Id: Id04ac0d4825ad3e8489c0db186425e049e2c6108
Reviewed-by: Topi Reiniö <topi.reinio@digia.com>
2015-08-04 13:06:56 +00:00
Joerg Bornemann
d337fbe13c Doc: fix \sa for QT_NO_PROCESS_COMBINED_ARGUMENT_START
Change-Id: I4d2c1b1bc5773c23d3dfd8522268a422c3e513e6
Reviewed-by: Topi Reiniö <topi.reinio@digia.com>
2015-08-04 12:21:41 +00:00
Tor Arne Vestbø
e405665318 iOS: Refactor xcodebuild exclusive build logic into standalone makefile
Instead of going to qmake to generate the makefile that we want, we write
the makefile directly and include it from the generated makefile. This
leaves us with a single top level makefile for handling exclusive builds
through xcodebuild, and covers all the various build configurations in
a unified manner. It also allows for improved test device handling.

Change-Id: I66851f181ac4da2c8938645e0aa95ffa0fee33c7
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@theqtcompany.com>
2015-08-04 11:59:01 +00:00
Tor Arne Vestbø
5d511039f7 iOS: Refactor default_post logic into more appropriate units
The logic was lumped together in one big file. Now that things are more
stable and the logic has proven to work over time we can split it out
into the more appropriate sub-prfs.

Change-Id: I9a40ad72ad9d7550b609e7f50fade1049dfa3ac1
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@theqtcompany.com>
2015-08-04 11:58:05 +00:00
Friedemann Kleint
44520dfff6 QtGui/QtOpenGL: Fix compiler warnings by MSVC2015 (64bit).
opengl\qtriangulatingstroker.cpp(130): warning C4305: '=': truncation from 'double' to 'float'
opengl\qtriangulatingstroker.cpp(546): warning C4305: '=': truncation from 'double' to 'float'
opengl\qopenglshaderprogram.cpp(1779): warning C4312: 'reinterpret_cast': conversion from 'int' to 'const void *' of greater size
qglshaderprogram.cpp(1709): warning C4312: 'reinterpret_cast': conversion from 'int' to 'const void *' of greater size

Change-Id: If1de629aada308d18c3641b504d74d3294b1e8bf
Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
2015-08-03 20:15:30 +00:00
Topi Reinio
7b77ef6b0a qdoc: Make \target and \keyword commands link as expected
When resolving targets added for each node, QDoc didn't run the
check recursively; this meant that \target and \keyword commands
did not link when used in documentation nodes that are not direct
children of the root node. There include e.g. documentation for
functions and QML properties/methods.

This commit fixes that issue, and also modifies the behavior of
\keyword slightly: Using a \keyword no longer generates a HTML
anchor reference. Instead, linking to a keyword links directly
to the parent item which defines the \keyword. This produces
cleaner HTML by omitting unnecessary anchors.

Change-Id: I87659642770a5372409ecb09cb576fbad295155e
Task-number: QTBUG-47286
Reviewed-by: Martin Smith <martin.smith@digia.com>
2015-08-03 12:37:57 +00:00
Jani Vähäkangas
789c9954c7 Blacklist some cases from tst_qftp
Also removed the XFAIL from connectToUnresponsiveHost

Change-Id: Ie0f5685a8fa437c00d22f9e76b51ac61347ce03b
Task-number: QTBUG-15111
Reviewed-by: Caroline Chao <caroline.chao@theqtcompany.com>
Reviewed-by: Tony Sarajärvi <tony.sarajarvi@digia.com>
2015-08-03 06:54:21 +00:00
Laszlo Agocs
007c60e193 Do not access screens before initialize()
Change-Id: I1d6eaa5a1525ae060f8a9f37ae4295bee2f4bb38
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
Reviewed-by: Paul Olav Tvete <paul.tvete@theqtcompany.com>
2015-08-02 08:21:18 +00:00
Gabriel de Dietrich
69cca470fe Cocoa QPA plugin: Unlock full Q_DECL_OVERRIDE karma
Change-Id: I0f631c3b120d052ad552809d0aab9493e5b41a70
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@theqtcompany.com>
2015-08-01 21:34:12 +00:00
Gabriel de Dietrich
0193d6d5bb Cocoa Integration: Support non-native input context plugins
This is useful, for example, when we want to test the virtual
keyboard on OS X. It uses the usual QT_IM_MODULE code path
provided by QPlatformInputContextFactory if that environment
variable is set. If not, it defaults to QCocoaInputContext.

Change-Id: Ib917d7bd2f4e86eacbc50dd7592cc288a9a702de
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
2015-08-01 21:34:07 +00:00
Friedemann Kleint
b4f266c4e4 qwindowstheme.cpp: Fix compiler warnings by MSVC2015 (64bit).
qwindowstheme.cpp(635): warning C4312: 'reinterpret_cast': conversion from 'int' to 'FakePointer<int> *' of greater size

Change-Id: Ia2b7c14a5f31bd29243302e76105ad97563951b2
Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@theqtcompany.com>
2015-08-01 19:08:48 +00:00
Olivier Goffart
0e2d8ba792 QMainWindow: allow dropping QDockWidget to floating docks
In the QMainWindow::GroupedDragging mode, we can have floating
tabs of QDockWidget's, but it was not possible to drop onto
already floating QDockWidgets to tab them.

Task-number: QTBUG-47211
Change-Id: Ic666f6f8816d91a3eed844a6da1eb8698c8c7a0c
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
Reviewed-by: Paul Olav Tvete <paul.tvete@theqtcompany.com>
2015-08-01 06:48:17 +00:00
Thiago Macieira
3ae2387f37 QTemporaryDir: fail early if the error isn't EEXIST
Before, stat -c on Linux (enabling this code path):

% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 0.00    0.000000           0       256       256 mkdir

After:
 0.00    0.000000           0         1         1 mkdir

“To err is human, to persist in error is diabolical” - Georges
Canguilhem

“The definition of insanity is repeating the same mistakes over and over
again and expecting different results.” - Albert Einstein, Mark Twain or
Benjamin Franklin (all mis-attributed)

Change-Id: Ib306f8f647014b399b87ffff13f0a3c155053e6a
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Reviewed-by: David Faure <david.faure@kdab.com>
2015-08-01 01:36:58 +00:00
Thiago Macieira
1a3f340d0e Update/fix the qmake support for (f)lex
lex.prf was trying to be halfway between the standard POSIX lex
requirements and those of GNU flex. So fix it to work with both, more or
less, by noticing when lex is actually flex and using the extended GNU
options. Note that POSIX lex is untested and may still not work.

Change-Id: Ib306f8f647014b399b87ffff13f1e8e43fb68b3c
Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
2015-07-31 17:04:38 +00:00
Friedemann Kleint
af38340720 Port examples/widgets/itemviews to new connection syntax.
Rename some slots to avoid ugly casts.

Change-Id: I5d7b2c044ab6a725f7259e5e34f00c3d06fff050
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
2015-07-31 14:21:15 +00:00
Friedemann Kleint
7b72cc205c tests/auto/widgets: Replace Q[TRY]_VERIFY(a == b) by Q[TRY]_COMPARE(a, b).
- Replace Q[TRY]_VERIFY(pointer == 0) by Q[TRY]_VERIFY(!pointer).
- Replace Q[TRY]_VERIFY(smartPointer == 0)  by
          Q[TRY]_VERIFY(smartPointer.isNull()).
- Replace Q[TRY]_VERIFY(a == b) by  Q[TRY]_COMPARE(a, b) and
  add casts where necessary. The values will then be logged
  should a test fail.

Change-Id: Ie29640451dddeb58342038a8cd5fac152cce39e5
Reviewed-by: Mitch Curtis <mitch.curtis@theqtcompany.com>
2015-07-31 11:50:10 +00:00
Friedemann Kleint
3859b304e8 tests/auto/gui: Replace Q[TRY]_VERIFY(a == b) by Q[TRY]_COMPARE(a, b).
- Replace Q[TRY]_VERIFY(pointer == 0) by Q[TRY]_VERIFY(!pointer).
- Replace Q[TRY]_VERIFY(smartPointer == 0)  by
          Q[TRY]_VERIFY(smartPointer.isNull()).
- Replace Q[TRY]_VERIFY(a == b) by  Q[TRY]_COMPARE(a, b) and
  add casts where necessary. The values will then be logged
  should a test fail.

Change-Id: I624deb320c378c18a29b3707f48583d53bfd5186
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@theqtcompany.com>
2015-07-31 08:29:15 +00:00
Kimmo Leppälä
7b6be75796 Add Intel Q965/Q963 and G33/31 to the Windows OpenGL blacklist
Task-number: QTBUG-47522
Change-Id: I3b276e7a07c0b70eaafd244ab1203432df7a22c1
Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
2015-07-31 07:49:51 +00:00
Shawn Rutledge
e026fdc4a7 Tablet example: update the cursor according to the tool
Change-Id: Ibbe530856bb833e465dd9fa1da5425c018fecc21
Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
2015-07-31 04:33:27 +00:00
Shawn Rutledge
6a991f9cce Tablet example: smoother, rotation stylus, better airbrush
The drawing is antialiased and with rounded caps and joins.
Rotation stylus acts like a felt marker.
Airbrush sprays a radial gradient of color, and its alpha can
depend on the tangential pressure if so chosen.

Task-number: QTBUG-46694
Change-Id: I4fb16eb621707e3c56a75aa302dd0d3bf418a745
Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
Reviewed-by: Topi Reiniö <topi.reinio@digia.com>
2015-07-31 04:33:20 +00:00
Friedemann Kleint
ad4d25589f Add recent file handling to SDI/MDI and remove the recentfiles example.
The existing recentfiles example was basically a clone of the SDI
example with a "Recent" menu added. Assuming it is better to have
it all in one place, the functionality is merged into the existing
SDI/MDI examples.

- Implement recently opened files handling using a submenu and a
  QSettings array in the SDI/MDI examples.
- Remove recentfiles example.

Change-Id: Id5a1ab9fa1c2e6b9ec81309cfe74cf86f450392a
Reviewed-by: Topi Reiniö <topi.reinio@digia.com>
2015-07-31 04:30:35 +00:00
Friedemann Kleint
57dbdcd92f tests/auto/network: Replace Q[TRY]_VERIFY(a == b) by Q[TRY]_COMPARE(a, b).
- Replace Q[TRY]_VERIFY(pointer == 0) by Q[TRY]_VERIFY(!pointer).
- Replace Q[TRY]_VERIFY(smartPointer == 0)  by
          Q[TRY]_VERIFY(smartPointer.isNull()).
- Replace Q[TRY]_VERIFY(a == b) by  Q[TRY]_COMPARE(a, b) and
  add casts where necessary. The values will then be logged
  should a test fail.

Change-Id: Icaa1edafcc6e2779fbd6dbc2c058544d6e07f1e9
Reviewed-by: Richard J. Moore <rich@kde.org>
2015-07-31 04:29:33 +00:00
Thiago Macieira
cc7fcecd7a Add QStorageInfo::blockSize
[ChangeLog][QtCore][QStorageInfo] Added QStorageInfo::blockSize(), which
returns the optimal block size for data transfer to and from the
storage.

Change-Id: Ib306f8f647014b399b87ffff13f4eba6000452d4
Reviewed-by: Jake Petroules <jake.petroules@petroules.com>
Reviewed-by: Tobias Koenig <tobias.koenig@kdab.com>
2015-07-30 21:12:21 +00:00
Paul Olav Tvete
62bd4f5852 Extend high-DPI manual test
Add several new tests to verify that Qt behaves properly when
high-DPI scaling is enabled. Add a generic framework for
manual tests for good measure. This could be refactored and
used for other manual tests later.

Includes tests written by Morten and Friedemann.

Task-number: QTBUG-46615
Change-Id: Ib6762ec1454711e71f0c094b19015932b99e8d6d
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
2015-07-30 18:10:03 +00:00
Morten Johan Sørvig
6309062722 high-DPI tweaks for autotests
Task-number: QTBUG-46615
Change-Id: I724f56fb3bc1a4b671b5d010765ef4e354412e2e
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
2015-07-30 18:09:12 +00:00
Paul Olav Tvete
0f7bc885aa Turn off font hinting when active highdpi scaling
Font hinting is done in the Qt coordinate system, and ends up
looking very wrong if the painter is scaled. Now that high-DPI
scaling is cross platform, we can move the responsibility for
turning off hinting out of the platform plugin.

Note that we cannot change our minds later, since Qt does not have
a reference to all objects that perform text layout. Therefore, we
turn off hinting if and only if there is at least one screen with
scaling enabled at application startup. If this is not good enough
for you, you should disable scaling and support resolution independence
manually.

Task-number: QTBUG-46615
Change-Id: I15fa09aa1e952cf3abeb2d8c26f13ad1f1cbf9bf
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
2015-07-30 16:43:38 +00:00
Thiago Macieira
661854bb89 Add a quick optimization for QVersionNumber's constructors
If the data fits inline, let's store it using the dummy member. GCC,
Clang and ICC optimize the code on all architectures I tested to one
single store.

Previously, the function for "return QVersionNumber(5,4,0);" was:
 x86-64:
        movb    $7, (%rdi)
        movb    $5, 1(%rdi)
        movb    $4, 2(%rdi)
        movb    $0, 3(%rdi)
 x86:
        movb    $7, (%eax)
        movb    $5, 1(%eax)
        movb    $4, 2(%eax)
        movb    $0, 3(%eax)
 ia64:
        addl r17 = 7, r0
        adds r16 = 1, in0
        adds r15 = 2, in0
        adds r14 = 3, in0
        st1 [in0] = r17
        addl r17 = 5, r0
        ;;
        st1 [r16] = r17
        addl r16 = 4, r0
        ;;
        st1 [r15] = r16
        st1 [r14] = r0
 armv7a:
        mov     r1, #7
        mov     r2, #5
        strb    r1, [r0]
        mov     r1, #4
        strb    r2, [r0, #1]
        mov     r2, #0
        strb    r1, [r0, #2]
        strb    r2, [r0, #3]
 mips32:
        li      $3,7                    # 0x7
        sb      $3,3($4)
        li      $3,5                    # 0x5
        sb      $3,0($4)
        li      $3,4                    # 0x4
        sb      $3,1($4)
        sb      $0,2($4)
 mips64:
        li      $3,7                    # 0x7
        sb      $3,7($4)
        li      $3,5                    # 0x5
        sb      $3,0($4)
        li      $3,4                    # 0x4
        sb      $3,1($4)
        sb      $0,2($4)
 ppc32:
        li 10,7
        stb 10,3(3)
        li 10,5
        stb 10,0(3)
        li 10,4
        stb 10,1(3)
        li 10,0
        stb 10,2(3)
 ppc64:
        li 10,7
        stb 10,7(3)
        li 10,5
        stb 10,0(3)
        li 10,4
        stb 10,1(3)
        li 10,0
        stb 10,2(3)

Now it is:
 x86-64:
        movq    $263431, (%rdi)
 x86:
        movl    $263431, (%eax)
 ia64:
        addl r14 = 263431, r0
        ;;
        st8 [in0] = r14
 armv7a:
        movw    r3, #1287
        movt    r3, 4
        str     r3, [r0]
 mips32:
        li      $3,84148224                     # 0x5040000
        addiu   $3,$3,7
        sw      $3,0($4)
 mips64:
        li      $3,321                  # 0x141
        dsll    $3,$3,50
        daddiu  $3,$3,7
        sd      $3,0($4)
 ppc64:
        lis 9,0x504
        sldi 9,9,32
        ori 9,9,7
        std 9,0(3)
 ppc32:
        lis 9,0x504
        ori 9,9,7
        stw 9,0(3)

All assembly listings from GCC 4.8.1, but the Clang and ICC outputs are
identical or at least very similar (I tested Clang for ARM, MIPS and
PowerPC). Both MIPS and PowerPC were compiled in big-endian mode and this
listing shows that the 64-bit implementation is correct.

Additionally, the output is also the same for GCC when using brace
initialization (that is, return QVersionNumber{5,4,0}). Clang and ICC
couldn't optimize that.

Change-Id: I9a4a4c9fc83f1182401f63fd2da829c935a8c9da
Reviewed-by: Keith Gardner <kreios4004@gmail.com>
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
2015-07-30 16:15:47 +00:00
Paul Olav Tvete
3c12482df0 Fix highdpi drag-n-drop for X11
Task-number: QTBUG-46615
Change-Id: Iad548e62a580d6fbd15b7a826116a53ce23b4b8b
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
2015-07-30 12:45:16 +00:00
Paul Olav Tvete
ec462b245f X11 changes for highdpi
Adapt the xcb plugin to work with the new cross-platform
high-DPI scaling.

Fixes for drag and drop is done in a separate change.

Task-number: QTBUG-46615
Change-Id: I29002721169750b9de59edb0f3e9134adabc4855
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
2015-07-30 12:45:07 +00:00
Friedemann Kleint
fd6821740f Highdpi changes for Windows
Adapt the Windows plugin to work with the new cross-platform
high-DPI scaling.

Task-number: QTBUG-38993
Task-number: QTBUG-46615
Change-Id: I108d319255925a290b75611e95ef006d4aaf7ace
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
2015-07-30 12:44:58 +00:00
Morten Johan Sørvig
a705b4ec1f Introduce cross platform high-dpi scaling
Add a coordinate scaling layer to QtGui, which supports 'devicePixelRatio'
type high-dpi on all platforms, in production and also for
development and testing purposes.

High-DPI scaling is opt-in, by setting environment variables:
    QT_SCALE_FACTOR - sets a global scale factor
    QT_AUTO_SCREEN_SCALE_FACTOR - sets per-screen scale factors,
        where the scale factors are provided by the platform plugin.

This QtGui scaling can be used instead of or in addition to scaling
done by the window system. This distinction is not visible to
applications [when they use Qt API], which will see a change in
the value returned by the devicePixelRatio() accessors as usual.

Introduce a new (private to Qt) coordinate system: native pixels.
The coordinate system stack now looks like:
    device-independent pixels (app, upper parts of Qt)
    native pixels (lower parts of Qt Gui, platform plugins)
    device pixels (backing stores and OpenGL)

Add private QHighDpi namespace with scaling functions that convert
between device-independent pixels and native pixels:
    T toNativePixels(T, QWindow *);
    T fromNativePixels(T, QWindow *);

Add scaling calls the QWindow (and friends) cross-platform implementation,
around the calls to QPlatformWindow functions. QPlatformWindow now uses
native coordinates - platform code remains largely unchanged since native
coordinates are window system coordinates.

QWindow now uses (possibly) scaled coordinates. This means that
platform plugins no longer can rely on QWindow::geometry() and
related functions. QPlatformWindow::windowGeometry() and other
convenience functions have been added for use when the platform
plugin needs to convert scaled geometry to native geometry.

Add Qt::AA_NoHighDpiScaling, which can be use to disable any
scaling in QtGui, effectively ignoring the environment variables.
(Note that this does not disable any scaling done by the window
system.)

Contributions from Friedemann and Paul.

Task-number: QTBUG-46615
Change-Id: I673bbd69c130e73b13cce83be11bfb28f580bf60
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
2015-07-30 12:44:41 +00:00