Ensure valid data after QImage::invertPixels

QImage::invertPixels may produce invalid data after inversions of
images with premultiplied alpha, because the inverted colors will be
larger than the alpha.

This patch converts any image with a premultiplied alpha channel to
ARGB32 before inverting the pixels, and then back to the original
format after the inversion.

Support is added for correct inversion of RGBA8888 and RGB30 formats.

Task-number: QTBUG-39901
Change-Id: Ief24c55f495e67ef2ad6429b5b418d02963a64dd
Reviewed-by: Gunnar Sletta <gunnar.sletta@jollamobile.com>
Add a test for move assignment to tst_QPalette

It was simply missing.

Change-Id: I6645bb9fe9c81aec9c46ac5efc7d2295a3784ff6
Reviewed-by: J-P Nurmi <jpnurmi@digia.com>
Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
tst_QTimeZone: test QTimeZonePrivate::isValidId()

This is in preparation of rewriting the function for efficiency.

Change-Id: Id5c16b984b95d76e1f26d862e3813f75980f44fb
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
QTimeZone: optimize QTimeZonePrivate::isValidId()

This function is used in the named timezone ctor and was using QByteArray::split(),
followed by size checks and a linear scan for invalid chars per section. The use of
split() resulted in a lot of memory allocations and, unsurprisingly, bad performance.

The new code just performs one linear scan through the byte array, calculating
section sizes on the fly.

Benchmark results (with the test data in tst_QTimeZone::isValidId_data()) show
typical speedups of ~10x for valid IDs:

   RESULT : tst_QTimeZone::isValidId_bench():"minimal middle":
  -     0.00036 msecs per iteration (total: 95, iterations: 262144)
  +     0.000035 msecs per iteration (total: 74, iterations: 2097152)

Even in the sweet-spot case of the old code---a space character anywhere in the
string, checked for before the split---the new code is anywhere between slightly
faster and not much slower:

   RESULT : tst_QTimeZone::isValidId_bench():"invalid char ' ' front":
  -     0.000011 msecs per iteration (total: 94, iterations: 8388608)
  +     0.000010 msecs per iteration (total: 86, iterations: 8388608)
   RESULT : tst_QTimeZone::isValidId_bench():"invalid char ' ' middle":
  -     0.000014 msecs per iteration (total: 62, iterations: 4194304)
  +     0.000016 msecs per iteration (total: 69, iterations: 4194304)
   RESULT : tst_QTimeZone::isValidId_bench():"invalid char ' ' back":
  -     0.000018 msecs per iteration (total: 79, iterations: 4194304)
  +     0.000023 msecs per iteration (total: 98, iterations: 4194304)

This is not surprising, as the space character was singled out for a fast-exit
check before. For any other invalid character, the new version is anywhere from
15x to 35x faster:

   RESULT : tst_QTimeZone::isValidId_bench():"invalid char ? front":
  -     0.00034 msecs per iteration (total: 91, iterations: 262144)
  +     0.000010 msecs per iteration (total: 87, iterations: 8388608)
   RESULT : tst_QTimeZone::isValidId_bench():"invalid char ? middle":
  -     0.00036 msecs per iteration (total: 96, iterations: 262144)
  +     0.000016 msecs per iteration (total: 68, iterations: 4194304)
   RESULT : tst_QTimeZone::isValidId_bench():"invalid char ? back":
  -     0.00035 msecs per iteration (total: 94, iterations: 262144)
  +     0.000021 msecs per iteration (total: 92, iterations: 4194304)

If there was a deeper reason to single out the space character, that fast-exit
path can easily be restored.

This function is often used in conjunction with availableTimeZoneIds(), which
currently vastly dominates the runtime of the function calling both, but I'll
add another optimization for the common use-case of just checking for a time-zone's
existence in a subsequent commit.

Change-Id: Ife1d096fcd39464083ea464c23e49ad98fabf345
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Fix linking of the Direct2D platform plugin with dynamic Open GL.

Change-Id: I0a3272233de7e685c750f001eb45a5e326d0f35b
Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>