Commit Graph

235 Commits (e6880e7cd145fe07651e8afdfd4a15d57b810024)

Author SHA1 Message Date
Liang Qi 72f5867f14 Merge remote-tracking branch 'origin/5.6' into dev
Conflicts:
	src/corelib/kernel/qcoreapplication.cpp
	src/corelib/kernel/qeventdispatcher_blackberry.cpp
	src/network/bearer/qnetworkconfiguration.cpp
	src/plugins/bearer/blackberry/qbbengine.cpp
	src/plugins/platforms/android/androidjnimain.cpp
	src/plugins/platforms/android/qandroidplatformtheme.cpp
	src/plugins/platforms/qnx/qqnxbpseventfilter.cpp
	src/plugins/platforms/qnx/qqnxfiledialoghelper_bb10.cpp
	src/plugins/platforms/qnx/qqnxinputcontext_imf.cpp
	src/plugins/platforms/qnx/qqnxintegration.cpp
	src/plugins/platforms/qnx/qqnxnavigatorbps.cpp
	src/plugins/platforms/qnx/qqnxvirtualkeyboardbps.cpp
	src/plugins/platforms/qnx/qqnxwindow.cpp
	src/widgets/kernel/qwidgetwindow.cpp
	src/widgets/styles/qwindowsvistastyle.cpp
	src/widgets/styles/qwindowsxpstyle.cpp
	src/widgets/widgets/qtoolbararealayout.cpp
	tests/auto/corelib/global/qflags/qflags.pro
	tests/auto/corelib/itemmodels/qitemmodel/modelstotest.cpp
	tests/auto/corelib/tools/qversionnumber/qversionnumber.pro
	tests/auto/widgets/dialogs/qfilesystemmodel/tst_qfilesystemmodel.cpp

Change-Id: I37be88c6c185bb85404823353e027a0a6acdbce4
2015-12-02 23:33:06 +01:00
Eskil Abrahamsen Blomfeldt bf0af8b5a2 Round advances if subpixel position not supported
Due to kerning and other OpenType features, it's possible
that the advances from the shaping process are fractional, but
this gives uneven glyph positioning for font engines that don't
support subpixel positioning (since the glyph will not match the
expected position, some gaps will look too large and some
too small). To match how e.g. GDI renders this, we round the
advances before setting the glyph positions for engines that
do not support subpixel positions.

[ChangeLog][Windows] Fixed uneven kerning for some fonts.

Task-number: QTBUG-48546
Change-Id: Ic00dc402abf7149aab6bf9b05b42827b805c1a15
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
2015-12-02 18:25:45 +00:00
Simon Hausmann ea5f40a788 Merge remote-tracking branch 'origin/5.6' into dev
Change-Id: Ib43c6f126998eefcfed9a7c1f2bcbac8b4dd05ec
2015-11-27 08:27:53 +01:00
Konstantin Ritt fa00afe7d7 Optimize QTextEngine::findItem() usage cases
Since the item positions are guaranteed to grow, we could safely re-use
the obtained first item while looking for the last item in the chain.

Change-Id: I5e42f5de820c62a51a109a4b227b031c697aa898
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
2015-11-23 18:52:46 +00:00
John Cumming 208496091d Add Section Symbol at end of text flow when showing paragraphs
Insert a section symbol (U+00A7) to the end of a text flow instead of a
space as many text layout applications do.

Task-number: QTBUG-49252
Change-Id: Ib1276b508c24824b6329e0458ae5171bc1a288c3
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@theqtcompany.com>
2015-11-19 11:53:30 +00:00
Konstantin Ritt c1da13f6db QTextEngine: Apply CoreText specific post-processing for QFE::Mac only
These tricks has no meaning to other font engines (i.e. to FreeType).

Change-Id: I0410693d4d159367d760433062506691dc7c4610
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
2015-11-13 20:43:13 +00:00
Konstantin Ritt 50af66293d QTextEngine: Do not disable graphite2 HB shaper backend
This fixes-up bf013c9e74 by specifying
graphite2 shaper in a "safe" shaper list, one used for non-CoreText
font engines (currently, FreeType font engine only).

Make the the comment and the code a bit cleaner about the fallback
shaper list.

Change-Id: Ib0cedc0b593023c9ee771e8e98c314d9c8f13037
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
2015-11-13 20:43:10 +00:00
Mathias Hasselmann bf013c9e74 OSX: Add initial FreeType support
This permits text rendering consistent with other FreeType enabled platforms,
like Windows and Linux.

Task-number: QTBUG-42839
Change-Id: I8c99bcaa3fb07c16e935a0c3705af467bc3da584
Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
2015-08-11 09:40:30 +00:00
Simon Hausmann b2603b7665 Merge remote-tracking branch 'origin/5.5' into HEAD
Conflicts:
	src/plugins/platforms/windows/qwindowsopengltester.cpp

Change-Id: Ia7abeba9395ccf84e2fa81b91a5725a86dedb9fe
2015-07-17 16:35:42 +02:00
Thiago Macieira 153b0e50b1 Fix ambiguous overload call on OS X
Found by ICC:
qtextengine.cpp(1259): error: more than one instance of constructor "QFixed::QFixed" matches the argument list:
            function "QFixed::QFixed(int)"
            function "QFixed::QFixed(long)"
            function "QFixed::QFixed(qreal={double})"
            argument types are: (uint)
              QFixed stretch = QFixed(actualFontEngine->fontDef.stretch) / QFixed(100);
                               ^

Change-Id: I790fb4cae1abc692705253a7863291bc8743b832
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
Reviewed-by: Jake Petroules <jake.petroules@petroules.com>
2015-07-08 03:20:56 +00:00
Sérgio Martins eca8f1bf98 gui: Add several QList::reserve() calls.
Reduces reallocations.

Change-Id: I0db16726f413a67b76a73fabd013f910ab5f5109
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
2015-06-22 14:03:39 +00:00
Marc Mutz c0ddd5fa12 QTextLayout: replace a use of an inefficient QList with QVector
The QTextLayout::FormatRange is larger than void* and thus should not be held in
QList. Use a QVector instead.

Other parts of Qt already hold FormatRanges in QVectors, so this also makes
handling FormatRanges more consistent.

To avoid ugly names for the getter which doesn't overload on return type alone),
rename the set of function to format (from additionalFormats).

[ChangeLog][QtGui][QTextLayout] Added QVector-based alternatives setFormat(),
format(), and clearFormat() to setAdditionalFormats(), additionalFormats(),
and clearAdditionalFormats(), resp.

Change-Id: Ie04a561b43c91c3b2befb3cac2981821f84d5f77
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
2015-05-29 14:00:10 +00:00
Konstantin Ritt ba5af03a5a [QTextCursor] Better use of the cached whiteSpace attribute
In compare to QTextEngine::atSpace(), this also handles the less-common
"white spaces" and the exceptional control codes.

Change-Id: I52878932926b7f9fe36c9dd01007963b9691fbf0
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
2015-04-15 11:07:44 +00:00
Konstantin Ritt dec451cf67 Update Unicode data up to v7.0
* Two newly adopted currency symbols:
  the Azerbaijan manat and the Russia ruble
* Pictographic symbols (including many emoji), geometric symbols,
  arrows, and ornaments originating from the Wingdings and Webdings sets
* Twenty-three new lesser-used and historic scripts
  extending support for written languages of North America, China, India,
  other Asian countries, and Africa
* Letters used in Teuthonista and other transcriptional systems,
  and a new notational set, Duployan

For more details, see http://www.unicode.org/versions/Unicode7.0.0/

The Properties struct's .*Diff members were narrowed down
to signed 15 bits and the unicodeVersion has been expanded to 8 bits.

[ChangeLog][QtCore] Unicode data updated to v.7.0

Change-Id: I93ab6f79fa3b05f61abc7279f1d046834c1c1a0b
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
2015-03-27 16:40:06 +00:00
Konstantin Ritt cd1cdd1516 Fix soft-hyphen appearance at line-break
Replace it with '-' and set dontPrint to true;
later we unset the dontPrint flag if soft-hyphen appears at the
end of a line after line breaking.

Task-number: QTBUG-44234
Change-Id: I05b69bcbbe07e1ee8a5d35d24372356ce8ab9db8
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@theqtcompany.com>
2015-03-26 20:00:45 +00:00
Konstantin Ritt cfe3ac9c65 Set dontPrint flag for the respective glyph
The str_pos variable hasn't been incremented prior to string[str_pos].
Ouch!

Change-Id: I54a160c26e23821037bf6ee8aea3e0a94a5e71f9
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@theqtcompany.com>
2015-03-26 20:00:41 +00:00
Friedemann Kleint 7bbde34ee0 Fix invocations of static methods of QGuiApplication/QApplication.
Change-Id: I99ba58763f6063fa2a6f511adbea0163cce7ea32
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
Reviewed-by: Shawn Rutledge <shawn.rutledge@digia.com>
2015-02-25 14:06:27 +00:00
Jani Heikkinen 83a5694dc2 Update copyright headers
Qt copyrights are now in The Qt Company, so we could update the source
code headers accordingly. In the same go we should also fix the links to
point to qt.io.

Outdated header.LGPL removed (use header.LGPL21 instead)

Old header.LGPL3 renamed to header.LGPL3-COMM to match actual licensing
combination. New header.LGPL-COMM taken in the use file which were
using old header.LGPL3 (src/plugins/platforms/android/extract.cpp)

Added new header.LGPL3 containing Commercial + LGPLv3 + GPLv2 license
combination

Change-Id: I6f49b819a8a20cc4f88b794a8f6726d975e8ffbe
Reviewed-by: Matti Paaso <matti.paaso@theqtcompany.com>
2015-02-11 06:49:51 +00:00
Frederik Gladhorn fc35f71434 Merge remote-tracking branch 'origin/5.4' into dev
Conflicts:
	src/3rdparty/harfbuzz-ng/harfbuzz-ng.pro
	src/gui/image/qimage_conversions.cpp
	src/gui/opengl/qopenglextensions_p.h
	src/gui/text/qtextengine.cpp
	src/network/ssl/qsslsocket_openssl.cpp
	src/plugins/platforms/eglfs/qeglfshooks_stub.cpp
	src/plugins/platforms/eglfs/qeglfsscreen.cpp
	src/plugins/platforms/eglfs/qeglfswindow.cpp
	src/plugins/platforms/windows/qwindowsfontdatabase.cpp
	src/plugins/platforms/windows/qwindowsfontdatabase_ft.cpp
	src/plugins/platforms/windows/qwindowsnativeinterface.cpp
	src/plugins/platforms/windows/qwindowsscreen.cpp
	src/plugins/platforms/windows/qwindowswindow.cpp
	src/plugins/platforms/windows/qwindowswindow.h
	src/plugins/platforms/xcb/qxcbdrag.h
	src/widgets/itemviews/qabstractitemview.cpp
	src/widgets/kernel/qwidget.cpp
	src/widgets/util/qsystemtrayicon_p.h
	tests/auto/corelib/itemmodels/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp

Thanks to Friedemann Kleint for resolving the qwindowsfontdatabase.cpp
conflicts.

Change-Id: I937232c30523d5121c195d947d92aec6f129b03e
2015-02-10 09:42:25 +01:00
Frederik Gladhorn 55162dae7e Merge remote-tracking branch 'origin/5.4.1' into 5.4
Change-Id: Idadb5639da6e55e7ac8cc30eedf76d147d8d5d23
2015-01-29 10:05:01 +01:00
Konstantin Ritt 3c1e16df75 Micro optimizations to HB-NG path
No changes in functionality.

Change-Id: I9cf90241bdb087ef16fb0b759a5976848a197f55
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
2015-01-24 17:33:00 +01:00
Eskil Abrahamsen Blomfeldt 586fd04234 OS X/iOS: Fix stretched font rendering
Setting the stretch of a QFont did not work correctly on OS X or
iOS.

Two things are needed to make it work: First of all, we need to
properly set the transform when creating the CTFont.

In addition, we need to manually scale the advances, as
CTRunGetPositions() does not do this for us. On OS X 10.6, however,
there was a regression and CTRunGetPositions() would return scaled
positions, so we exclude the step to scale the advances on this
particular version.

This is an adaptation of bc25cfdd65452efa226cbd544c9ae9803eb6748a
in Qt 4.

[ChangeLog][QtGui][OS X/iOS] Fixed a bug when rendering fonts that
were set to be stretched.

Task-number: QTBUG-43801
Change-Id: I4902a9f5e29299761e3c2c5c6d6d80ee1dea1a25
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@theqtcompany.com>
2015-01-22 09:32:44 +01:00
Eskil Abrahamsen Blomfeldt 2603873e75 Make harfbuzz-old fallback available at run-time
The old harfbuzz code path is included as a fail safe for any
possible use case where the Harfbuzz-NG regresses, but because the
variable was checked statically, it was not actually possible to
build a releasable executable which employed the work-around.

Instead we use the regular global static pattern where the variable
is queried the first time it's needed.

Task-number: QTBUG-43850
Change-Id: I9ade76bf0825bbfefebdbdc4e6ee5571f1a3deec
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
2015-01-19 13:50:32 +01:00
Konstantin Ritt 8e3fdf1354 Merge QFontEngineMultiBasicImpl and QFontEngineMulti
Minor refactoring also improves the behavior and the code readability.

Change-Id: Id89dd224f4132a4c0dfbc16f414ef42cc8d8a4da
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@digia.com>
2014-11-26 01:28:38 +01:00
Konstantin Ritt 0600f7d629 Fix hb_face leaking in QFontEngineFT
Since HarfBuzz-old's HB_Face doesn't support ref-counting,
it is impossible to keep the same behavior as for NG's ref-counted hb_face
when we're going to reparent the data of unknown type in QFontEngineFT.

We should either not release the object returned by harfbuzzFace(),
or introduce ref-counting for HB-old's HB_Face. Stop referencing HB-NG's
objects on access for now and thus avoid a need to release them manually.

Task-number: QTBUG-42674
Change-Id: Ia21e7ba9c17185796b0dd98c2c27d02566f2a701
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@theqtcompany.com>
2014-11-15 14:45:43 +01:00
Gabriel de Dietrich 8ab25620d3 Merge remote-tracking branch 'origin/5.3' into 5.4
Conflicts:
	src/network/socket/qnativesocketengine_unix.cpp
	src/widgets/kernel/qwidget_qpa.cpp

Change-Id: I6f1aa320d5ca66cd92d601a95885aeaab0abb191
2014-09-29 13:38:11 +02:00
Matti Paaso 974c210835 Update license headers and add new license files
- Renamed LICENSE.LGPL to LICENSE.LGPLv21
- Added LICENSE.LGPLv3
- Removed LICENSE.GPL

Change-Id: Iec3406e3eb3f133be549092015cefe33d259a3f2
Reviewed-by: Iikka Eklund <iikka.eklund@digia.com>
2014-09-24 12:26:19 +02:00
Frederik Gladhorn c5a3e5edd9 Merge remote-tracking branch 'origin/5.3' into 5.4
The isAlwaysAskOption was removed in 3862171315
so manually removed code in
src/plugins/bearer/connman/qconnmanengine.cpp

Conflicts:
	src/corelib/global/qglobal.h
	src/corelib/tools/qcollator_macx.cpp
	src/corelib/tools/qstring.cpp
	src/gui/kernel/qwindow.cpp
	src/gui/kernel/qwindow_p.h
	src/gui/text/qtextengine.cpp
	src/platformsupport/fontdatabases/fontconfig/qfontenginemultifontconfig_p.h
	src/plugins/platforms/android/qandroidinputcontext.cpp
	src/plugins/platforms/xcb/qglxintegration.cpp
	src/plugins/platforms/xcb/qglxintegration.h
	src/plugins/platforms/xcb/qxcbconnection_xi2.cpp
	src/testlib/qtestcase.cpp
	src/testlib/qtestlog.cpp
	src/widgets/dialogs/qfiledialog.cpp
	src/widgets/kernel/qwindowcontainer.cpp
	tests/auto/corelib/tools/qcollator/tst_qcollator.cpp
	tests/auto/gui/text/qtextscriptengine/tst_qtextscriptengine.cpp
	tests/auto/widgets/kernel/qwidget_window/tst_qwidget_window.cpp
	tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp

Change-Id: Ic5d4187f682257a17509f6cd28d2836c6cfe2fc8
2014-09-23 11:23:36 +02:00
David Schulz 5d688c5780 Add backslash to the list of word separator.
Task-number: QTBUG-40384
Change-Id: I16ae1432f3bdd7e577593fc43336bf29c735a66b
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@digia.com>
2014-09-22 13:42:59 +02:00
Allan Sandfeld Jensen 9b556afc5a Fix menu mnemonic inside ligatures
The code to draw underlines on specific characters in widget menu could
not handle ligatures. Instead of using special code to handle this case
this patch changes the mnemonic underlines to use normal format-ranges
making the text engine deal with splitting ligatures as necessary.

Task-number: QTBUG-20960
Change-Id: I6159110eae7aa8c819af16ba4a393d758871e2e0
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@digia.com>
2014-09-18 00:13:28 +02:00
Maks Naumov 09754d218a QTextEngine: remove unnecessary assignment in LayoutData::reallocate()
Change-Id: I82e34d5525354fc20ca9aba6df3767e3fee51bf8
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
2014-09-02 08:05:10 +02:00
Eskil Abrahamsen Blomfeldt 198009db79 Fix several regressions in font selection
In Qt 5.3.0 a change was added which automatically adapts Common
script to surrounding scripts in accordance with the Unicode tr#24.

This broke *a lot* of cases of font selection because the font
selection algorithm is not prepared for handling characters with
adapted scripts. We need to disable this change for now and redo it
later with patches to font selection to avoid the regressions.

[ChangeLog][Text] Fixed several regressions in font selection when
combining different writing systems in the same text.

Task-number: QTBUG-39930
Task-number: QTBUG-39860
Change-Id: Id02b5ae2403c06542ed5d81e7c4deb2e0c7d816e
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
2014-08-20 13:10:55 +02:00
Konstantin Ritt dc4dfe4ffa A basic justification algorithm for HarfBuzz-NG
This does mostly the same HB-old did, except of non-BMP codepoints
support and better handling of space and punctuation characters.

Change-Id: Iaf8565a35f27d5f4837128cec345eff3d9d2bdf0
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@digia.com>
2014-07-27 22:31:39 +02:00
Konstantin Ritt 461c2b2004 Update bundled HarfBuzz-NG copy to 0.9.32
- Unicode 7.0 support
- New shapers
- Multiple improvements in Arabic, Indic, and Hebrew shapers
- Build fixes, optimizations, etc.

Change-Id: I0ba14b619c3e6fb35cddd9d65e694af41197d6ae
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@digia.com>
2014-07-20 01:12:24 +02:00
Frederik Gladhorn f035786021 Merge remote-tracking branch 'origin/5.3' into dev
Change-Id: Ia12ffdb27ecdf25c2a2bdb0eed1945387502108a
2014-07-10 10:11:11 +02:00
Konstantin Ritt e26660c004 Don't assert when HB-old is unable to deal with surrogates
Since we have no interest in fixing HB-old to properly support surrogates,
here is a simple workaround for the case when surrogate parts gets
treated like two separate glyphs in log_clusters but a single character.
And since it's a known issue that HB-old doesn't really support surrogates,
it's better to draw some garbage/boxes rather than to assert, IMO.

Task-number: QTBUG-39875
Change-Id: I95ff43e821ae989d7a6f792f71f157dcea92dd16
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@digia.com>
2014-07-08 09:40:24 +02:00
Konstantin Ritt 0412ad3513 Decrease code duplication by reusing QTextEngine::findItem()
Use the findItem()'s optimized binary search impl instead of a generic one.
Also drop the "already shaped item" case since setBoundary() is only
called from itemize(), where the items are not shaped yet.

Change-Id: Ifbecdc41b2e3cb7791a7896fbb0cbea439ca0706
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
2014-07-08 08:58:34 +02:00
Konstantin Ritt be0bfe09ee Guarantee QTextEngine::findItem() returns -1 for invalid strPos
...and check the returned value where it may cause undefined behavior
(i.e. negative amount of items or iteration from -1 to n).

Change-Id: Ib7bd9ab178526df45b792ad48b91ebbab6be861a
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
2014-05-23 12:10:13 +02:00
Konstantin Ritt 4dba08eebf Decrease the life time of SpecialData::resolvedFormats
Once LayoutData::items gets cleared, accessing (or re-using)
SpecialData::resolvedFormats may lead to a undefined behavior,
so clear SpecialData::resolvedFormats right after LayoutData::items.

Change-Id: Ib389f0029a0562f5d2837f62f76197510a0db099
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
2014-05-21 15:05:33 +02:00
Konstantin Ritt 0ab9188ad7 Rename some QTextEngine members to reflect their meaning
formats() -> formatCollection()
additionalFormats -> formats

QTextEngine has three different code paths: in context of QTextDocument,
additionalFormats are currently _additional_ formats;
though in QTextLayout, they are the only formats in use;
and the QRawFont-related path shares the QTextLayout's behavior.

This is a preparation step to consolidating these three into a single one.

Change-Id: I427ccc3c2f672ce090899bb0a0995972315daafa
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@digia.com>
2014-05-20 20:25:02 +02:00
Konstantin Ritt 4976e6817a Minor code clean-up
Change-Id: I5c43db4e0a499ecfd23f3dac63615e7c40208f36
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@digia.com>
2014-05-20 20:24:54 +02:00
Konstantin Ritt 4689a9b3f0 Minor optimization for QTextLineItemIterator
Don't store unused values (pos_x and levels) and re-use
already calculated ones (itemStart, itemEnd, and itemLength).
Also const-ify some members to make the code a bit more clear.

Change-Id: Ied80ebf9e4e7e8a1d057e413a9bd24f84b8aaf92
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
2014-05-16 21:42:45 +02:00
Tor Arne Vestbø a5ea74b98b qpa: Clean up and refactor qfontengine_qpa
QFontEngineQPA was really QFontEngineQPF2, and has been renamed. The
multi font engine in qfontengine_qpa.cpp was really a base implementation
of a multi font engine, used by other multi font engines, and has been
renamed and moved accordingly into qfontengine_p.h/cpp.

Change-Id: Iac7409c4dbf0fdc3ee993ce4f7dc96cb00a422e6
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
Reviewed-by: Paul Olav Tvete <paul.tvete@digia.com>
2014-05-15 02:51:06 +02:00
Eskil Abrahamsen Blomfeldt 7eae50a52d Fix assert on justification of QTextLine with only spaces
In the justification code, we unconditionally subtracted one
from the line_length, but then compared the result to 0 afterwards,
so we did not support when the line_length is 0 initially, which
can happen if it only consists of spaces (in which case
trailingSpaces will be non-zero and line_length will be zero.)
The fix is to bail out for both strings of length 1 and length 0.

[ChangeLog][Text] Fixed an assert when justifying a QTextLine
which only contains spaces.

Task-number: QTBUG-38520
Change-Id: Ib04993f47eb2f9f7fc49c4a5400f18f9682a72f2
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
2014-04-30 18:23:33 +02:00
Konstantin Ritt 0ec07b68ad Improve the Unicode script itemization implementation
Make it closer to the Unicode specs (UAX#24):
* Common now inherits the preceding character's script, if any;
* In a combining character sequence, if the base character is
  of Common script, the entire sequence is treated like if it were
  of the first non-Inherited, non-Common script in the sequence.
See http://www.unicode.org/reports/tr24/tr24-21.html for more details.

[ChangeLog][QtGui] Fixed regression in arabic text rendering.

Task-number: QTBUG-28813
Task-number: QTBUG-29930 (related)
Task-number: QTBUG-35836
Change-Id: Id85761965b08ca94c674d5f3613fe58b82b2ce9c
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@digia.com>
Reviewed-by: Ahmed Saidi <justroftest@gmail.com>
2014-04-14 06:43:57 +02:00
Konstantin Ritt ef77c16cb0 Make HarfBuzz-NG the default shaper on Mac
For AAT shaping support, we need either the pre-QPA shaping trick
or the new HarfBuzz on Mac; prefer the latter.
Disable some test cases aimed to test the HB-old behavior; enable ones
that should guarantee shaping-unaware behavior.

[ChangeLog][OS X] Use CoreText text shaping engine for support of
complex scripts. If required, the shaping engine used in previous
versions can be preferred by configuring Qt with -no-harfbuzz.
Alternatively, the QT_HARFBUZZ environment variable could be set to "old".

Task-number: QTBUG-18980 (relates)
Task-number: QTBUG-38246
Change-Id: Iee6fe4f5bc047e77259182b8585385c5febd02b3
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@digia.com>
2014-04-14 06:43:54 +02:00
Konstantin Ritt 330f6e3598 QTextLayout: Fix cursor movement from invalid position
Actually guarantee cursor doesn't move in this case for both logical
and visual modes (just what the documentation says we already do ;)

Change-Id: Iabdca7aa1d205672386a0095e3487e585611cdb5
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
2014-04-04 19:32:21 +02:00
Konstantin Ritt 47056e78d3 Optimize QTextEngine::insertionPointsForLine() a bit
Reserve the insertionPoints vector capacity prior to multiple append()-s.

Change-Id: I97ab5b2a1add9f2e87c04ad0707bf516c13ff4d7
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
2014-04-04 19:32:21 +02:00
Konstantin Ritt 0b5911f376 QTextLayout: Fix visual cursor movement in some cases
To guarantee proper positioning at the end of the last line in a
bidirectional text we have to insert the eol position into the
insertion points vector, accordingly to the visual ordering.
Detection of the last *logical* item in a *visual* line is unrelaed
to the text direction, it is simply `iterator.item == iterator.lastItem`.

[ChangeLog][QtGui][QTextLayout] Fixed visual cursor movement
in bidirectional text.

Task-number: QTBUG-18060 (partially related)
Change-Id: I53b6ab889ef580ab0560b620b808b1e09efc0fbd
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Reviewed-by: Ahmed Saidi <justroftest@gmail.com>
2014-04-04 19:32:21 +02:00
Konstantin Ritt d828672945 QTextEngine: Fix visual position movement for tab and object cases
QTextLineItemIterator::next() was never updating itemStart and itemEnd
for QScriptAnalysis::TabOrObject, thus producing incorrect
insertion points for the line that contains tabs and/or objects.

Change-Id: Ia964c663cc0636ba6be4500702656f989b252fba
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
2014-04-04 19:32:21 +02:00
Konstantin Ritt 4f2872c64f Make QTextEngine::setAdditionalFormats() invalidate cached results
...which ensures we're not getting the formatting/rendering
artefacts in case of QStackTextEngine.

Change-Id: Ia0696a3e67eb866cf9776c6649c43775944edd1d
Reviewed-by: Andy Shaw <andy.shaw@digia.com>
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
2014-03-17 16:27:55 +01:00
Konstantin Ritt b7f013bf19 Fix CJK languages support with HarfBuzz-NG
By some reason, mapping to Han script doesn't work for some (most?)
fonts. Until the issue is really fixed, pretend the HB-old behavior
and simply map to Common script.

Change-Id: I4c146f5ff2a42f64b971b2f5ebd7f65e2513fdf0
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
2014-03-10 20:28:52 +01:00
Konstantin Ritt f697f3ceb6 Optimize glyph lookups with QFontEngine::glyphIndex(uint)
Change-Id: I56c7e727f3d9b08195f38939106620c744c6eaf0
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Reviewed-by: BogDan Vatra <bogdan@kde.org>
2014-03-05 13:45:44 +01:00
Konstantin Ritt fd498ad1c0 Make QGlyphLayout consume one byte less per glyph
Change-Id: Iddcc2e1f284dcf13ae98b57ea2d5854e57c83530
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
2014-03-03 11:10:56 +01:00
Konstantin Ritt 25e34dadab Hide the justification algorithm implementation details
The justification "classes" stored in the glyph attributes
are actually a justification priorities suitable for a particular
language (script). The external API only uses the justification
metrics array calculated on top of these priorities.

Change-Id: I5b0a39e35954084c63a798b632fd6108f9ae7608
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
2014-03-03 11:10:50 +01:00
Konstantin Ritt 6a7747f30c HarfBuzz-NG: Hide characters that should normally be invisible
These are non-ambigue NLF characters that should only imply the
sctructure of the document.
For details, see http://www.unicode.org/reports/tr13/ .

The issue could be reproduced with use of multi-line QML Text element.

Change-Id: Ibb4d5cd26bc0ac6b79a4cb549e6a3cd7633bd071
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
2014-02-25 16:10:33 +01:00
Konstantin Ritt 8e57ad1a27 Respect the QTextBlock's character formats in itemization
This fixes regression introduced in f864bdaf59
(in resolveAdditionalFormats(), formatIndex(si) returned an invalid
block format index due to non-empty specialData->resolvedFormats)

Task-number: QTBUG-36759

Change-Id: I4da13d2edaf1987bcd85b2ef326e9d22345eb8f3
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@digia.com>
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
2014-02-17 16:43:58 +01:00
Frederik Gladhorn a9c88c1f39 Merge remote-tracking branch 'origin/stable' into dev
Conflicts:
	src/gui/image/qimage.cpp
	src/gui/text/qtextengine.cpp
	src/plugins/platforms/linuxfb/qlinuxfbscreen.cpp
	src/printsupport/kernel/qprintengine_win.cpp

Change-Id: I09ce991a57f39bc7b1ad6978d0e0d858df0cd444
2014-02-12 16:28:07 +01:00
Frederik Gladhorn df62c31807 Merge "Merge remote-tracking branch 'origin/stable' into dev" into refs/staging/dev 2014-02-11 15:12:00 +01:00
Konstantin Ritt bbdea065aa Minor optimization for QTextEngine::shapeText()
Remember the engine index for each sub-item and avoid moveGlyphData()
where possible (ie. when there are no glyph indexes to care about).
Also don't memmove data we didn't ever initialize.

Change-Id: Ib8e5fd937a10e4e3c8c0e18961a2e2c1a4167924
Reviewed-by: Ahmed Saidi <justroftest@gmail.com>
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
2014-02-11 05:01:05 +01:00
Konstantin Ritt c77222c0e7 Fix log_clusters calculation in HarfBuzz-NG code path
The old code wasn't good enough to catch all the glyph (de)composition cases,
thus leading to an assertion in QTextLayout's addNextCluster() helper.

The new code catches all the corner cases and introduces somewhat
better performance to the HB-NG shaper backend.

Change-Id: I5b6c673395a4a039dc55b200abbf74b0ba5d0829
Reviewed-by: Ahmed Saidi <justroftest@gmail.com>
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
2014-02-11 05:01:01 +01:00
Konstantin Ritt 4e319ca4c4 Optimize stringToCMap() usage
CMAP guarantees there is 1:1 mapping between the Unicode code points
array and the glyph indexes array, which means the QString length
always greater than or equal to a sufficient glyph indexes array length.

Simply add some asserts and improve the memory consumption
and the performance where possible.

Change-Id: I0bc8cdba5f86c1c0ba9e79c8d5f96cbe56ec463e
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
2014-02-07 15:31:55 +01:00
Frederik Gladhorn a1fe728fa5 Merge remote-tracking branch 'origin/stable' into dev
Conflicts:
	src/gui/kernel/qguiapplication.cpp
	src/plugins/platforms/android/androidjnimain.cpp
	src/plugins/platforms/android/qandroidplatformintegration.cpp
	src/plugins/platforms/android/qandroidplatformintegration.h
	src/plugins/platforms/android/qandroidplatformopenglcontext.cpp
	src/plugins/platforms/cocoa/qcocoawindow.h
	src/plugins/platforms/cocoa/qcocoawindow.mm
	src/plugins/platforms/xcb/qxcbconnection_xi2.cpp
	src/sql/doc/src/sql-driver.qdoc
	src/widgets/widgets/qtoolbararealayout.cpp

Change-Id: Ifd7e58760c3cb6bd8a7d1dd32ef83b7ec190d41e
2014-02-07 13:07:25 +01:00
Konstantin Ritt f864bdaf59 Get rid of SpecialData::addFormatIndices
and rename SpecialData:: resolvedFormatIndices to resolvedFormats.
Instead, resolvedFormats now stores QTextCharFormat shared copies.

Change-Id: I4a22cb3f5679b980ef52d47e4e1935663dd257ea
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
2014-02-06 11:40:22 +01:00
Konstantin Ritt 11fe2bcd7b Fix japanese text rendering with Harfbuzz-NG
In rendering, treat (Hiragana|Katakana|Han)+ sequence like Han.

Task-number: QTBUG-36066
Change-Id: I3b5d2833e73431b07fa0df859b5d716357374cf4
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
2014-02-06 11:38:26 +01:00
Konstantin Ritt 19463c5c3f Fix character mirroring issue with HarfBuzz-NG
HarfBuzz-NG does character mirroring where appropriate.
A simple solution is to unset RightToLeft shaper flag when
text gets shaped with HB-NG. Instead, move the mirroring code
right to HB-old proxy function and decrease code duplication.

Change-Id: Icdcd50b73b3e6a43da4b85addc7d8f51edf86512
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
2014-02-04 13:37:14 +01:00
Allan Sandfeld Jensen f34e080063 Fix access after delete with Harfbuzz NG code path.
Remove reference to released font-engine so we don't risk returning it
later.

Change-Id: I741a741567a079818c7f414ac1f9c0b5a9677322
Task-number: QTBUG-36522
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
2014-02-03 12:13:22 +01:00
Konstantin Ritt 2d576f79f7 Make HarBuzz-NG the default shaper on Mac
Since we dropped all platform-related shapers during the
QPA refactoring, thus making HarfBuzz the only shaper on all
platforms, we can not deal with AAT-capable fonts anymore.
HarBuzz-NG now supports it's own shaper backend infrastructure,
so the decision was to enable HB's CoreText shaper backend on Mac
and simply make HB-NG the default shaper there.

Task-number: QTBUG-36056

Change-Id: If22e24fd5cc00c25952934332a2f4123f38135a4
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@digia.com>
2014-01-31 12:07:59 +01:00
Konstantin Ritt a5614264d5 Get rid of QGlyphLayout::advances_y
...and thus consume 4 bytes less per glyph and increase the performance a bit.
It seems, the only CTFontGetAdvancesForGlyphs() returns both x and y
advances, though y advances are always equal to 0 for horizontal
orientation and x advances are always equal to 0 for vertical orientation.

Also, rename `advances_x` to `advances` for consistency
and declare QGlyphLayout's data size in a single place.

Change-Id: I56b20f893f8a6feb7aa870e3edbca99dd93ba2e2
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@digia.com>
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
2014-01-30 12:43:33 +01:00
Konstantin Ritt b80fcbdba6 Introduce QChar::JoiningType enum and QChar::joiningType() method
This aimed to disctinct joining types "L", "T", and "U" from just "U".
Unicode 6.3.0 has introduced a character with joining type "L" and
Unicode 7.0 will add a few more characters of joining type "L", so
we'll have to deal with it anyways.

[ChangeLog][QtCore][QChar] Added JoiningType enum and joiningType()
 method that deprecates the old QChar::Joining enum and joining() method.

Change-Id: I4be3a3f745d944e689feb9b62d4ca86d1cf371b0
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2014-01-29 23:19:47 +01:00
Konstantin Ritt edfce46a6c Update the Unicode Data and Algorithms up to Unicode 6.3.0
* Mongolian and Phags-pa characters have been given a Joining_Type
  classification for contextual shaping. As a part of these additions,
  one Phags-pa character has the Joining_Type value of L (Left Joining),
  which no character had been assigned before.
* The unassigned code points in the Currency Symbols block have been
  given the Bidi_Class property value ET and the Line_Break property
  value PR, to help implementations support new currency symbols,
  when they are encoded.
* Hebrew letters and basic punctuation marks have been assigned
  the newly introduced Word_Break property values Hebrew_Letter,
  Single_Quote, and Double_Quote.
* The Bidi_Class property has been extended with four new values
  for directional isolates.
For more details, see http://www.unicode.org/versions/Unicode6.3.0/

Change-Id: Iad62d02edc58a8497898dcd6d6c70d5aece317ea
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
2014-01-14 15:38:57 +01:00
Eskil Abrahamsen Blomfeldt 753b472cb8 REG: Fix support for strings spanning multiple font engines
E.g. in the case where the first char in a font got a font engine
index != 0, and the second character got font engine index == 0,
we would not count the second character as a separate glyph run.
The result would be that its glyph indexes would refer to font #0,
but the font used to render them would be the same as for the first
character, i.e. random.

Task-number: QTBUG-35740
[ChangeLog][Text][QTBUG-35740] Fixed regression when shaping some
strings containing characters from multiple fonts.

Change-Id: I668804045c8b276787c7b256bc87916c467f3f59
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
2014-01-03 13:00:18 +01:00
Konstantin Ritt e1804dcf3d Fix build with HarfBuzz-NG older than 0.9.20
It is annoying that HB maintains binary compatibility but does not
really care about source compatibility.

Change-Id: Ife7b011919f28527b77858ad8398fe723c65b1b3
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
2013-12-17 08:58:53 +01:00
Konstantin Ritt 3bcba4ceed Fix build with -Werror
Change-Id: I2fe4b006dc0696e5491792846bdb8c99ac31af6e
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
2013-12-17 08:58:28 +01:00
David Faure d270bd8673 QTextEngine: fix layouting of inline objects in right-aligned tabs.
(same thing for center- and delimiter-aligned tabs)

The width of the inline object wasn't taken into account, the code in
QTextEngine::calculateTabWidth only looked at glyph widths.

Change-Id: I303a6561c67870ff2094a685698e642fc1b53b12
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@digia.com>
2013-12-05 16:40:06 +01:00
Joshua Grauman f18fd0450c Fix finding cursor position in words with accents
In positionInLigature() we were mixing indexes into the script item with
indexes into the entire string. The getClusterLength() function would expect
an attributes array for the current script item and it thus needs to be
adjusted by si->position. In addition, when looking for the next grapheme
boundary, we were comparing pos (which indexed the string) with end (which
indexed the script item). This has also now been fixed by adjusting for
si->position as well.

Task-number: QTBUG-30123
Change-Id: Id02e2eddcc5b7888eacb34bd1e39cc6911880ca1
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@digia.com>
2013-10-30 09:44:07 +01:00
Allan Sandfeld Jensen 5e4b9f1154 Use QAtomicInt ref/deref pattern
Change check of QAtomicInt::load with the preferred ref() deref() pattern.

Change-Id: I12d2e24812259c16623c8a59cac30cafa4b05565
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
2013-10-11 18:47:27 +02:00
Allan Sandfeld Jensen 894f867090 Memory leak with Small-caps QRawFont
Make sure we deallocate the scaled rawfont, when it is not used due
to a cached engine being used instead.

This fixes a major memory leak in Qt WebKit when using Small Caps in the
complex font path. The complex font path is always used for small caps
since Qt 5.1.

Task-number: QTBUG-33576

Change-Id: I500db9ae6f6576734f1a972387a1a488218a9db6
Reviewed-by: pierre.rossi@digia.com
Reviewed-by: Pierre Rossi <pierre.rossi@gmail.com>
2013-10-11 12:10:20 +02:00
Giuseppe D'Angelo bacbf1fcf3 Remove some qBinaryFind usages from QtGui
This is done per the mailing list discussion at
http://www.mail-archive.com/development@qt-project.org/msg01603.html

Change-Id: Iecb921cd778571d24680254566e9aa8fc8d5edff
Reviewed-by: Gunnar Sletta <gunnar.sletta@digia.com>
2013-09-23 21:20:47 +02:00
Nicolás Alvarez 1985f818e7 Fix QTextEngine build on MSVC2008 debug mode.
This was broken in 7ac6ce21 which removed some unused functions;
but MSVC2008 in debug mode requires this particular operator overload.
I'm re-adding it in an appropriate #ifdef so it doesn't cause "unused"
warnings in other platforms/compilers.

Task-number: QTBUG-33473
Change-Id: I6dfba0fa5f835e848e8a1e4213efb030fb5def3d
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
2013-09-15 19:51:50 +02:00
Konstantin Ritt c72eb0372b Add HarfBuzz-NG support
Some features are of limited usefulness for now (same as with HB-old):
* mixed scripts cases aren't handled correctly due to an outdated
  script and bidi itemization implementation;
* language-by-script detection: the only fallback to locale's LANG is used

Some features are missing entirely (in compare to HB-old):
* justification points support: not implemented in HarfBuzz-NG

Task-number: QTBUG-18980
Task-number: QTBUG-14590
Task-number: QTBUG-16128

Change-Id: Ic98a10054be5fac55224ef31c7261168c0bf8739
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
2013-09-08 07:48:40 +02:00
Konstantin Ritt 9ff76c27b9 QTextEngine::shapeText(): Better error handling for corner cases
Use Q_UNREACHABLE() instead of silly return to catch shaping errors,
which are fatal ones in fact, since the application would assert/crash
some later due to a hard dependency on the shaping result.

Change-Id: Ie58a2f2686a795f6178a588de6f2a2e37e1ed13c
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
2013-09-08 04:21:51 +02:00
Konstantin Ritt 7b8f33fb78 QTextEngine::shapeTextWithHarfbuzz() code simplification
Move (sub-)item boundaries calculation (aka fallback font items)
outside to be shared with HarfBuzz-NG based shaping a bit later.

This implementation might silently break words or even graphemes
so it needs to be reworked anyways; keeping it in a single place
would make futher work some cheaper.

Change-Id: Id9ca82b40e90b07ca29363fd43247c5fa9897eff
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
2013-09-08 04:21:47 +02:00
Giuseppe D'Angelo aa3f358d43 Remove deprecated QtAlgorithms calls from QtGui
QtAlgorithms is getting deprecated,
see http://www.mail-archive.com/development@qt-project.org/msg01603.html

Change-Id: I324ddf6129fe8884ecea97ef47abb7c071dfb34c
Reviewed-by: Gunnar Sletta <gunnar.sletta@digia.com>
2013-09-05 23:20:09 +02:00
Thiago Macieira 7ac6ce2133 Fix ICC warnings about functions declared but not used
Added Q_DECL_UNUSED for the function used in Q_ASSERT; removed the
functions that really weren't used and added the #ifdef for the
function that was only used under #ifdef.

qmetaobjectbuilder.cpp(93): warning #177: function "priv" was declared but never referenced
qobject.cpp(2349): warning #177: function "check_and_warn_compat" was declared but never referenced
qpathsimplifier.cpp(141): error #177: function "<unnamed>::Rational::isValid" was declared but never referenced
qtextengine.cpp(2584): error #177: function "<unnamed>::QScriptItemComparator::operator()(const QScriptItem &, const QScriptItem &)" was declared but never referenced

Change-Id: I89a140d59211f10ecd88d751f0bcc0ea2fedff7f
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@digia.com>
Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
2013-09-04 00:05:12 +02:00
Konstantin Ritt 32983c2027 Improve QTextEngine::elidedText() in TextShowMnemonic mode
Check if the sequence is really a mnemonic and emulate grapheme cluster if so,
rather than blindly reset the next character's attributes.
This covers cases like "& ", "&<U+034F>", etc.

Change-Id: Ibb063a2d258aff6455b9bb41bbe1a58a5036d0d6
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@digia.com>
2013-04-02 22:23:28 +02:00
Konstantin Ritt e006624a42 Improve shapeTextWithHarfbuzz() logic a bit
* Move non-specific code to shapeText();
* Make shapeTextWithHarfbuzz() re-use variables obtained in shapeText();
* Make shapeTextWithHarfbuzz() return amount of shaped glyphs
  instead of nothing. Right now, this is not about error reporting,
  since failed shaping causes assertion/crash in most cases.

Change-Id: I2e0c91b9e5de8b19e0bc22ca60add1b1fc6ebdb0
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
2013-04-01 11:54:09 +02:00
Konstantin Ritt af553b7b1b Replace HB_JustificationClass with QGlyphAttributes::JustificationClass
Also move stringToGlyphs() helper closer to shapeTextWithHarfbuzz(),
where it is only used.
As of now, Harfbuzz-old dependency in QTextEngine can be disabled
by simply if-defing a single piece of code.

Change-Id: Ic6f7d9b64bf9201d7540c58db46e20f28de8120d
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
2013-04-01 11:53:58 +02:00
Konstantin Ritt 36cb3f3f65 Fix the font engines leaking
1. when there were some engines with ref > 1 in the cache, prior to calling
   QFontDatabase::{add,remove}ApplicationFont()/removeAllApplicationFonts()
   (QFontCache::clear() has never decreased engine's cache_count);
2. when the QFontEngineData's engine is not in cache i.e. the Box or Test font engine
   (~QFontEngineData() didn't free engines it keeps).

Instead of using the font engine's (external) "cache_count" counter,
QFontCache now references a given font engine every time it is inserted to
the cache and dereferences exactly that number of times in clear().

Change-Id: I87677ebd24c1f4a81a53526f2e726e596b043c61
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
2013-03-20 07:02:29 +01:00
Konstantin Ritt 0654c066d9 Move QTextEngine implementation details from QTextLayout
As of now, we'll have everything related to the additional formats handling
just in a single place. Make specialData private to prevent accessing it
from outside. This helped in tracking-down several related issues:
- in format(const QScriptItem *), the resolvedFormatIndices can not be empty
  at that point, so the code path is dead;
- in resolveAdditionalFormats(), testing if formats has not been indexed yet
  is not needed since they are indexed just in the setter;
- in useRawFont mode, hasFormats() didn't check if QTextEngine really
  has some formats, which potentially leads to formatting artifacts.

Change-Id: Id4b912888fd5a1fa83f01007170134b6386e2879
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@digia.com>
2013-03-19 18:16:41 +01:00
Allan Sandfeld Jensen ee328adb2e QTextEngine capitalization doesn't work with QRawFont
The capitalization settings is attempted read via specialData->addFormats,
but the QTextCharFormat there is reset when added, and should instead be
accessed through specialData->addFormatIndices.

Change-Id: I190c419f07c3f7e803ca1d44059e8f538216b9ab
Reviewed-by: Pierre Rossi <pierre.rossi@gmail.com>
2013-03-14 19:49:38 +01:00
Konstantin Ritt c20422af13 Move Unicode script itemization code from text engine to UnicodeTools
This is still the same trivial implementation with the only difference in that
that it properly handles surrogate pairs and combining marks.

This temporarily makes QTextEngine::itemize() insignificatly slower due to
using intermediate buffer, until refactoring is done.

Change-Id: I7987d6306b0b5cdb21b837968e292dd70abfe223
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@digia.com>
2013-03-14 19:49:38 +01:00
Konstantin Ritt 39b4955da3 QTextEngine::itemize(): Minor optimization
Avoid using script_to_hbscript() in generateScriptItems()'s loop.
This is absolutely unnecessary due to hbscript_to_script(script_to_hbscript(..))
in QTextEngine::itemize().

Change-Id: I44e710d010f8e57043a6c74dd80f3164e95e18e6
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
2013-03-13 14:46:26 +01:00
Konstantin Ritt cfa663d62b Avoid using HB types in QFontEngine API
This affects HB_Font and HB_Face.

As of now, the Hurfbuzz API usage is concentrated in qfontengine(|_ft).cpp
and qtextengine.cpp, thus it is a lot easier to switch to Hurfbuzz-NG.

Change-Id: Ie06959efd5d6080fe44c407d9f5de0a07dd1c210
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Reviewed-by: Josh Faust <jfaust@suitabletech.com>
2013-03-13 14:46:26 +01:00
Konstantin Ritt f69c9059d6 Replace HB types used in API with Qt analogs
hb_uint32 <-> quint32
HB_Glyph <-> glyph_t
HB_Fixed <-> QFixed, HB_FixedPoint <-> QFixedPoint
HB_GlyphAttributes <-> QGlyphAttributes

Change-Id: I4338ec4ce9a9c20ea591606ab10e6ef4f19931b8
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
2013-03-12 18:13:37 +01:00
Frederik Gladhorn c608ec8254 Merge remote-tracking branch 'origin/stable' into dev
Conflicts:
	src/corelib/io/qsavefile_p.h
	src/corelib/tools/qregularexpression.cpp
	src/gui/util/qvalidator.cpp
	src/gui/util/qvalidator.h

Change-Id: I58fdf0358bd86e2fad5d9ad0556f3d3f1f535825
2013-01-22 18:40:13 +01:00
Sergio Ahumada 48e0c4df23 Update copyright year in Digia's license headers
Change-Id: Ic804938fc352291d011800d21e549c10acac66fb
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
2013-01-18 09:07:35 +01:00
Frederik Gladhorn cdf13ce286 Merge branch 'stable' into dev
Conflicts:
	tests/auto/widgets/graphicsview/qgraphicsscene/tst_qgraphicsscene.cpp

Change-Id: I6b8d505fc22f052c307ca27f58f7d16f98965f47
2013-01-07 15:18:16 +01:00
Eskil Abrahamsen Blomfeldt 248ccb2889 Fix possible crash in QTextDocument
With trailing spaces in some cases, we would not get the
"no justification at end of paragraph" special case, and continue
in the code, getting the unexpected case where line_length becomes
< 0 which would lead to memory corruption because we were writing
outside our buffers. I added an assert to catch this type of bug
earlier, and I added the trailing spaces to the test for the end
of the paragraph.

The test case added is one example which would crash.

Task-number: QTBUG-27354
Change-Id: Id720a6fa55dbc709ce04dd5321e55687bf960d75
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
2013-01-03 16:15:37 +01:00
Konstantin Ritt 9b0fab6b62 Update Qt internals to use QChar::Script
...and remove the outdated QUnicodeTables::Script enum.
QFontEngineData now has one extra slot that never used
(engines[QChar::Script_Inherited]). engines[QChar::Script_Unknown],
if accessed, would be set with a Box engine instance, and could be used
as a minor optimization some time later.

In order to preserve the existing behavior, we map all scripts up to Latin to Common.

Change-Id: Ide4182a0f8447b4bf25713ecc3fe8097b8fed040
Reviewed-by: Pierre Rossi <pierre.rossi@gmail.com>
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
2012-12-21 19:01:35 +01:00