summaryrefslogtreecommitdiffstats
path: root/src/gui/text
Commit message (Collapse)AuthorAgeFilesLines
* Fix crash in QTextLayout::cursorToXKevin Funk2014-09-021-1/+1
| | | | | | | | | | When 'cursorPos' is out of bounds ([0, lineEnd]), this method crashed. Change-Id: Ia0540ab3afbffb5c598f7b8515263cce3b3928e4 Task-number: QTBUG-40753 Reviewed-by: Dominik Haumann <dhaumann@kde.org> Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@digia.com> Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
* Revert "Make unicode ranges in font take precedence over codepage"Eskil Abrahamsen Blomfeldt2014-08-281-53/+51
| | | | | | | | | | | | | | | | | | | | | This reverts commit 3a84d92f5736da3dc3f6a385bf3723984a5640ed because it caused a regression with certain fonts on Windows that have divided information about writing system support in unicode ranges and codepage ranges. The original commit fixed a problem on Android where one of the fonts had an entry for Arabic in its codepage range but no glyphs for this script. This issue has been fixed in a different way now, by 0b87f4f6c912a508f170cd25ff5317bb77665fa9 which makes fallback fonts work properly, so the commit is no longer needed to fix said bug. [ChangeLog][Fonts] Fixed regression in font families returned by QFontDatabase::families() for certain writing systems. Task-number: QTBUG-39846 Change-Id: I3077b1e618b21680549abc1734cb6df6e264387e Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
* Fix several regressions in font selectionEskil Abrahamsen Blomfeldt2014-08-201-1/+1
| | | | | | | | | | | | | | | | | | 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>
* Fix rendering of fonts matched based on stretchAllan Sandfeld Jensen2014-08-141-0/+7
| | | | | | | | | | | | If the fontdatabase matches a font based on the stretch aka width then the stretch factor on the font-engine needs to be 100 to avoid the fontengine doing manual stretching. Without this a font requested with 75 stretch and matched with a font of 75 stretch would be further condensed 25% by the fontengine. Change-Id: Ib85ff027420c0ce891b0808dab13d25417d22df1 Reviewed-by: Shawn Rutledge <shawn.rutledge@digia.com>
* Fix selection of fonts based on styleNameAllan Sandfeld Jensen2014-08-141-4/+4
| | | | | | | | | | | | | | By carrying the styleName through from QFontDef to bestFoundry and giving it to bestStyle that can use it we can accurately match fonts based on styleName. This makes it possible to match styles such as DejaVu Sans Condensed and Ubuntu Medium. The example fontsampler is updated so it can actually sample all the different styles it lists. Change-Id: I381effc74130311f98794cd07d30be10dee4fe45 Reviewed-by: Shawn Rutledge <shawn.rutledge@digia.com>
* Font Database: Add support for private, system UI font familiesGabriel de Dietrich2014-08-112-0/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We introduce QPlatformFontDatabase::isPrivateFontFamily() to allow testing for private, system UI font families. Both QFontComboBox and QFontDialog need to filter out those private font families which, by definition, should be hidden from the end user. (The textedit example had to be updated to fix the issue where the default font would be private. In 5.4, we will be adding an equivalent, public API in QFontDatabase, and a better solution for the textedit example and QTexEdit in general). In particular, on OS X and iOS, private fonts are used for the system UI font. Those have their font family name prefixed by a dot. QCoreTextFontDatabase knows about this, and makes sure those are tested positive as private font families. In order to have a cleaner layer separation, we moved the QPA theme font resolution from the platform theme classes into QCoreTextFontDatabase for both Cocoa and iOS QPA plugins. In both cases, we use CoreText's CTFontCreateUIFontForLanguage(), that nicely maps to the HITheme API we were using so far on Mac. That means one HITheme dependency less. We also cache the font descriptors we get for these font for each time QCTFD::populateFamilies() gets called. (While not common, this currently happens in auto-tests, like tst_QFontDatabase, and could happen in actual applications -- specially when adding and removing application fonts.) Change-Id: Ic6f0b60f9f597afee1a43596a669742dc546b97f Reviewed-by: Morten Johan Sørvig <morten.sorvig@digia.com>
* Doc: Hide QTextInlineObject constructor from the documentationTopi Reinio2014-07-141-0/+5
| | | | | | | | | | | The constructor takes an internal class instance as a parameter, and is not meant to be used externally. Add a note in the description and hide the constructor. Task-number: QTBUG-39785 Change-Id: Ice850f0968880f3933ebb7ae83efeaeed85441cb Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com> Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@digia.com>
* Fix fallbacks for adapted common scriptEskil Abrahamsen Blomfeldt2014-07-103-7/+7
| | | | | | | | | | | | | | | | | | | | | | When the platform plugin gives us specific fallbacks for a specific script, we need to respect this, and load the correct font family regardless of which writing systems it supports. This is especially important since the common script is adapted to match surrounding, proper scripts, so characters such as digits next to e.g. Hebrew text will be marked as Hebrew. On stock Android, there is a single Hebrew font, and this would previously be put in all fallback slots for Hebrew regardless of what fallback fonts were dictated by the platform plugin. Since this font does not support the digits, they would show up as boxes. [ChangeLog][Android] Fixed common characters like digits and punctuation showing as boxes when positioned next to non-latin scripts. Task-number: QTBUG-39377 Change-Id: I1555e208a8ddc587c0bbdbfff1600cafdd9442e9 Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
* Don't assert when HB-old is unable to deal with surrogatesKonstantin Ritt2014-07-081-1/+5
| | | | | | | | | | | | 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>
* REG: Fix nbsp in QTextLayoutEskil Abrahamsen Blomfeldt2014-07-081-1/+10
| | | | | | | | | | | | | | | | | | At some point since Qt 4.8, the nbsp character has acquired the whitespace attribute, causing it to be treated exactly like an ordinary space. To account for this, we add an extra check in the layout code to avoid breaking on non-breaking spaces even if they have the whiteSpace flag set. This is a temporary fix for the regression. The line breaking algorithm needs to be refactored and support Unicode tr14 properly, which it currently doesn't. [ChangeLog][Text] Fixed lines breaking on non-breaking spaces. Task-number: QTBUG-39832 Change-Id: Ibd7e1a11ce4b82c611ecda1542c8638a67bf3cae Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
* Merge remote-tracking branch 'origin/5.3.1' into 5.3Frederik Gladhorn2014-06-251-6/+21
|\ | | | | | | Change-Id: I51fb88701b19ce4f7ea78e12a4049156f3ef9d7f
| * Fix crash when reusing HB_Face in another font engineKonstantin Ritt2014-06-181-6/+21
| | | | | | | | | | | | | | | | | | | | After 717d39ac083e80, if HB_Face was instantiated by QFontEngineFT A and then used by QFontEngineFT B, whilst A already destroyed, a crash occurs in hb_getSFntTable() due to accessing a stale pointer. Task-number: QTBUG-39278 Change-Id: I3428669a311f49cdda1725b778f45219cbcf470d Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@digia.com>
* | Doc: Fix docs for QFontMetrics::height() to match codeEskil Abrahamsen Blomfeldt2014-06-231-4/+2
|/ | | | | | | | | | | | After cb8445f0323b0eefbb04f1d8adad81a00b53abd8, Qt no longer considers the baseline to have a vertical size, so it does not add an extra pixel to the font height. The documentation needs to be updated to reflect this. Task-number: QTBUG-39668 Change-Id: I28fc813e21d73bb03f7055b0f0843511a12d308b Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com> Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
* QTextLayout: Fix cursor position calculation for BiDi textAndrey Volykhin2014-05-121-1/+0
| | | | | | | | | | | Due excess 'break' in loop, function xToCursor() with "CursorOnCharacter" option for BiDI text returns wrong cursor position (start glyph position) all time. Task-number: QTBUG-38846 Change-Id: Iba6671905e0785da6f343db19d6c3bb3e2cf5e8a Reviewed-by: Andrey Volykhin <andrey.volykhin@lge.com> Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com> Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@digia.com>
* Respect fixed pitch request when font family is not availableEskil Abrahamsen Blomfeldt2014-05-121-1/+5
| | | | | | | | | | | | | | | | | | | | | In particular, if you have a <pre> tag in your HTML, this will become a QFont with family "Courier New" and fixedPitch==true. On Android, there's no "Courier New" font, and since the style hint is AnyStyle, we will just return Roboto, which is a proportional font. Note that this exactly matches the condition when fetching the fallback families for the font in the loadEngine() function, which was introduced by 06568ff89c48dee8aab278b8b0538c331aa84595 in Qt 4. [ChangeLog][Text] Respect QFont::fixedPitch() for fallbacks when font family cannot be matched. Task-number: QTBUG-36083 Change-Id: I64787c547dc492b9dd3c49f1edf0d9626d198260 Reviewed-by: Jørgen Lind <jorgen.lind@digia.com> Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
* Fix FT glyph outline to path conversionBernd Weimer2014-05-071-12/+24
| | | | | | | | | | | | | When the start point is not on the curve, the end point will be used as starting point for the QPainterPath, if it is on the curve - if it is not on the curve, the mid point between start and end point will be used. The origianl start point will still be used as a control point for the first bezier curve. Task-number: QTBUG-38601 Change-Id: I90e07f1141288873263f1f12fa51e6a248d0804f Reviewed-by: Fabian Bumberger <fbumberger@rim.com> Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* Add virtual function to QFontEngine report if outlines are reliableJørgen Lind2014-05-062-0/+11
| | | | | | | | | GetGlyphOutline fails for ttf fonts with embedded bitmaps. This results in distancefield rendering not rendering glyphs (for the failed paths). We need to fall back to texture rendering if this is the case. Change-Id: Ibdf7dc5c1d34f513c436f88fabbdcc4089bb6fef Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@digia.com>
* Fix assert on justification of QTextLine with only spacesEskil Abrahamsen Blomfeldt2014-04-301-1/+1
| | | | | | | | | | | | | | | | | | 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>
* Fix incorrect repaints with plain text editSimon Hausmann2014-04-301-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The plain text edit's smart repaint logic in QPlainTextDocumentLayout::documentChanged assumes that during a change inside just one block, the block is in the state before the edit and a call to layoutBlock() is going to bring it up-to-date. Then only a comparison of the bounding rect - before and after - is going to allow for smart repaints. The assumption of the layout being in the same state as before the edit got broken by commit cc57a2e90f18a39ce3c74b6ad0db9a64aa135ddf, which introduced code to use a QTextCursor within a slot connected to QTextDocument's contentsChange signal. The usage of the QTextCursor there ends up updating the layout of the block ahead of time, breaking the assumption and therefore the optimization, in the sense that during changes in the preedit that cause a change of height / line count, the old bounding rect in QPlainTextDocumentLayout::documentChanged and the new bounding rect will be the same. This causes a repaint of only the edited block, missing repaints of the following blocks, even though the line count effectively changed. So what's causing QTextCursor to mess with the layout is the attempt of updating the vertical movement x property. This patch inhibits the update, marking it as dirty for initialization later. This means that slots connected to this low-level signal cannot rely on the cursor's visual x position, but that doesn't seem useful anyway and isn't required for commit cc57a2e90f18a39ce3c74b6ad0db9a64aa135ddf. Task-number: QTBUG-38536 Change-Id: I5fae12d646a4b2d2cc22b9f2d021e5dc8cfdda94 Reviewed-by: Paul Olav Tvete <paul.tvete@digia.com> Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@digia.com> Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
* Improve the Unicode script itemization implementationKonstantin Ritt2014-04-141-16/+1
| | | | | | | | | | | | | | | | | | 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>
* Make HarfBuzz-NG the default shaper on MacKonstantin Ritt2014-04-141-0/+2
| | | | | | | | | | | | | | | | | 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>
* QTextImageHandler: Load @2x images on retinaMorten Johan Sørvig2014-04-091-7/+35
| | | | | | | | | | | | | | | | Look for and load "@2x" image versions. Adjust getPixmap/ImageSize to take the image devicePxielRatio into account. Use doc->documentLayout()->paintDevice() to get the target window devicePixelRatio (like the existing DPI-based scaling). In practice this pointer may/ will be null, fall back to qApp->devicePixelRatio as usual. Task-number: QTBUG-36383 Change-Id: Ib5e113b67242b5a9b3410272f2183a76a60bc773 Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@digia.com>
* QTextLayout: Fix cursor movement from invalid positionKonstantin Ritt2014-04-042-7/+13
| | | | | | | | 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>
* Optimize QTextEngine::insertionPointsForLine() a bitKonstantin Ritt2014-04-041-0/+3
| | | | | | | Reserve the insertionPoints vector capacity prior to multiple append()-s. Change-Id: I97ab5b2a1add9f2e87c04ad0707bf516c13ff4d7 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* QTextLayout: Fix visual cursor movement in some casesKonstantin Ritt2014-04-041-12/+8
| | | | | | | | | | | | | | | | 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>
* QTextEngine: Fix visual position movement for tab and object casesKonstantin Ritt2014-04-041-8/+7
| | | | | | | | | 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>
* [HB] Ensure we always working with non-multi font engineKonstantin Ritt2014-04-042-4/+9
| | | | | Change-Id: If88385d4cecdc527b7952d34e48f7ba889173c6c Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* Fix QFontCache::Key comparison for custom font fallbacks caseKonstantin Ritt2014-03-311-1/+1
| | | | | | | Just a C&P typo, of course we have to compare lists, not their sizes. Change-Id: I40542035b87f5bb8d75207cb02c0826cc3a2a413 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* Drop dead codeKonstantin Ritt2014-03-311-4/+1
| | | | | | | The QFontEngineMulti's `base` font engine always non-null. Change-Id: I5092b66bc839a6a3216ffa0b0afe55a8b62be620 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* Deprecate QFont::setRawName() and QFont::rawName()Sergio Ahumada2014-03-272-2/+6
| | | | | | | | | | | | | | We don't support xlfd fonts anymore and indeed QFont::setRawName() is an empty method. [Changelog][QtGui] QFont::setRawName() and QFont::rawName() are deprecated. Change-Id: Ic52d42a9bc200ba8b246dd4e28c77f84e086dad5 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@digia.com> Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com> Reviewed-by: Simon Hausmann <simon.hausmann@digia.com> Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@digia.com>
* Fix typos in QFont documentation.Mitch Curtis2014-03-271-2/+2
| | | | | | Change-Id: I0e8de5b47ec7b64719f875eecc46cc8ef009642b Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com> Reviewed-by: Jerome Pasion <jerome.pasion@digia.com>
* Android: Fix font mergingEskil Abrahamsen Blomfeldt2014-03-251-1/+1
| | | | | | | | | | | | | Our fallback fonts would contain a minimal list of hardcoded fallback fonts, which is neither sufficient for displaying all text, nor portable to different vendors which can supply different font sets. [ChangeLog][Android] Fixed font merging problem which caused e.g. missing glyphs for Arabic numerals. Task-number: QTBUG-37738 Change-Id: Ic971343a1cd5610c79a81f6f6152c637937b5626 Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
* Fix grammar in QFontInfo::styleName() doc.Mitch Curtis2014-03-251-1/+1
| | | | | Change-Id: I673ecc8931f4824dc4fb923056354cfd2e119e40 Reviewed-by: Jerome Pasion <jerome.pasion@digia.com>
* [HarfBuzz-NG] Optimize Unicode de-/composition callbacksKonstantin Ritt2014-03-251-33/+26
| | | | | | | Use QStringIterator instead of QString::toUcs4() and escape earlier. Change-Id: If80b886bece1a43af7078e8cdc9c31babf602731 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* Teach font database to populate families lazilyTor Arne Vestbø2014-03-203-26/+99
| | | | | | | | | | | | | | | | | | | | | | Instead of requiring that QPlatformFontDatabase::populateFontDatabase() populates every single font in the system by calling registerFont(), we now allow the platform database to call registerFontFamily() instead, and then keep track of which families we've yet to fully populate in the font database. Once a property of a family is requested (such as its writing system, style, etc), the family is lazily populated by calling back to the platform database through QPlatformFontDatabase::populateFamily(), which in turn does the final call to registerFont() as before. This cuts application startup on OS X and iOS (of which the font population used to be a major limiting factor) from roughly one second to about 350ms. Task-number: QTBUG-37165 Change-Id: Ic2fc3447beb818ffe23635a5b7816ed7e70c93a7 Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com> Reviewed-by: Erik Verbruggen <erik.verbruggen@digia.com> Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* Make QTextEngine::setAdditionalFormats() invalidate cached resultsKonstantin Ritt2014-03-171-1/+3
| | | | | | | | | ...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>
* Merge remote-tracking branch 'origin/release' into stableFrederik Gladhorn2014-03-171-1/+1
|\ | | | | | | | | | | | | | | | | Conflicts: src/gui/painting/qdrawhelper.cpp src/gui/painting/qdrawhelper_avx.cpp src/gui/painting/qdrawhelper_x86_p.h Change-Id: I09352d05119f6fd000319074a2705b38361b2c90
| * CSS parser: fix the pseudo-classes array lengthGiuseppe D'Angelo2014-02-261-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The pseudoclass array is declared with length "NumPseudos - 1", but the declaration has actually 44 elements, not 45. This caused a zero-initialized last element to be silently appended to the array. The zero-initialized element broke the sorting of the array, which in turn broke std::lower_bound usage (although of course the problem was there from before switching to the standard library algorithms). Task-number: QTBUG-36933 Change-Id: I8a02891fc36761b6ae72d15a0a8d6c6a96813947 Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
* | Fix rendering of grayscale antialiased FT fonts on QGLWidgetAllan Sandfeld Jensen2014-03-151-4/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | QFontEngineFT::alphaMapForGlyph and QFontEngineFT::alphaRGBMapForGlyph has been broken since change#65694. They always fall back to using the path rendering of QFontEngine because we zero the scoped pointer just before testing it. To fix it we need to release the scope pointer after we are done using it. Change-Id: I8811c1f5261f286f2f3dd3c0f93c988ba0909669 Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
* | Prevent DrawTextItemDevice::metric warning on MacMorten Johan Sørvig2014-03-151-0/+3
| | | | | | | | | | | | | | | | Implement PdmDevicePixelRatio. Task-number: QTBUG-36419 Change-Id: I4d2822d01e08c80e9b829d5f524e8e761e694fba Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@digia.com>
* | Build bundled HarfBuzz-NG outside QtGuiKonstantin Ritt2014-03-141-1/+1
| | | | | | | | | | | | | | | | | | Being a part of QtGui, HarfBuzz-NG breaks build with -Werror. Instead of disabling a particular warnings-as-errors, build a prefixed static library and make it a link-time dependency. Change-Id: Id0be1f0e0034092d50f83cd364d5c65940fee869 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* | Ensure that QGuiApplication is inited before using QFontDatabaseTor Arne Vestbø2014-03-131-0/+3
| | | | | | | | | | | | Change-Id: I494c4fdfa49139316efac0f68f8d463c02056372 Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com> Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* | Fix custom font substitution list supportKonstantin Ritt2014-03-112-8/+20
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | During the QPA refactoring, the custom font substitution list support was lost by ignoring the font request's fallbackFamilies member when the multi font engine gets created/initialized. If fallbackFamilies is not empty, it should be prepended to the font database default fallback families list. Also respect the custom fallback families list in the cache key to avoid picking a multi font engine with wrong fallbacks list. Task-number: QTBUG-36628 Change-Id: Ie2b84b3a397bee4816f421cddf76a5375829f13a Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com> Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* | Guarantee QPFDB::fontEngine() always return non-multi font engineKonstantin Ritt2014-03-111-5/+4
| | | | | | | | | | | | | | | | | | | | After QPA refactoring, QWindowsFontDatabase::fontEngine() was returning a multi font engine w/o any particular reason. This makes the code more obvious and opens the road to further improvements. Change-Id: I4858026ddf774d3159c89357b1c905f5112b1c51 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com> Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* | Fix CJK languages support with HarfBuzz-NGKonstantin Ritt2014-03-101-14/+17
| | | | | | | | | | | | | | | | | | 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>
* | Use QStringIterator instead of homebrewKonstantin Ritt2014-03-104-44/+24
| | | | | | | | | | | | | | Task-number: QTBUG-15664 Change-Id: I1ed3eb04ddd822e57a4d993af656dfe283f3af1a Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* | QFontEngineQPA: Get rid of unused externalCMapKonstantin Ritt2014-03-082-17/+6
| | | | | | | | | | | | | | It seems to be a leftover after dropping the QPF1 font engine. Change-Id: If8d3e1447fab9d042a85195d7bdb4d9811c37c6e Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* | Make QFontEngineQPA report the TT 'cmap' table supportKonstantin Ritt2014-03-081-4/+8
| | | | | | | | | | | | | | The QPF2 CMap is identical to the TrueType CMap table format. Change-Id: I8c34d7c6a5942375538f3b8cb71d5a808b4fb400 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* | Improve code readabilityKonstantin Ritt2014-03-081-4/+3
| | | | | | | | | | | | | | | | Since we were requesting a multi font engine, the returned font engine must be a multi one or nothing at all. Change-Id: I1ee4e1b7c68f54c83a8c7292082d015ebfa0a8cb Reviewed-by: Pierre Rossi <pierre.rossi@gmail.com>
* | Prevent repeated and unnecessary font population QCoreTextFontDatabaseTor Arne Vestbø2014-03-053-0/+13
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The platform font database is populated from QFontDatabase, through the static initializeDb() function, whenever the font database determines that the platform database has not been initialized (by checking if the font database is empty). There are other clients of QPlatformFontDatabase though, such as QFont, which uses the platform font database to check for the default family. The CoreText implementation of determining the default family relies on data that is computed during font population, and hence does an internal (self-triggered) populate. To prevent repeated populates as a result of calling QFont::defaultFamily() we guard the populate by a similar isEmpty() check as QFontDatabase does, but to ensure that this check works in the case of an invalidated font database, we need to propagate the font database invalidation down to the platform font database. Change-Id: I8d06c6f6fc5da6353c087335859eaca008c2f6a6 Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@digia.com>