summaryrefslogtreecommitdiffstats
path: root/src/gui/text
Commit message (Collapse)AuthorAgeFilesLines
* Fix crash when fallback font is not #0 in multi font engineEskil Abrahamsen Blomfeldt2011-08-262-0/+7
| | | | | | | | | | | | | | | | | | | | | Easily reproducible by testing Chinese with the threaded renderer. The multi engine would then have a list of engines with a single item, but the glyphs might belong to e.g. engine 11. In that case, engine() would assert when it couldn't find the engine if the layout had been done in a different thread. We force the loading of the required engine if it's not already loaded. Note that this fix does not work on Mac, as loadEngine() will crash there, so the layout has to be done in the same thread as the rendering, since loading the engines is part of the layout process. Task-number: QTBUG-21112 Change-Id: I71cc396664e3b95fbb4815a90873457e1f89528e Reviewed-on: http://codereview.qt.nokia.com/3631 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Jiang Jiang <jiang.jiang@nokia.com>
* Fix justification of RTL textEskil Abrahamsen Blomfeldt2011-08-251-1/+2
| | | | | | | | | | | | | | | | | | | | Since the trailing space is included in the QScriptLine, it may affect the positions of preceding script items when the text is RTL. The best solution for this would be to disregard the trailing space in the layout process, or somehow make it have an advance of 0 so it doesn't affect the layout. However, to minimize the impact of the change, and to be consistent with previous work arounds such as bf992df6434fc37715f728ca09601c5567dd83c9, we simply include the trailing (visually leading) space in the justification pass for now. Task-number: QTBUG-20920 Reviewed-by: Lars (cherry picked from commit 1a8a36eb6b6df9e2550b5eaa4606f2d411fd4294) Change-Id: I94972ebaea2e1bdb09950523c43844351b304abe Reviewed-on: http://codereview.qt.nokia.com/3462 Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@nokia.com> Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
* Enablers for using QGlyphRun in SceneGraphEskil Abrahamsen Blomfeldt2011-08-198-24/+135
| | | | | | | | | | | | | | | | | Several required fixes and changes to fix problems that arose when porting SceneGraph's QSGTextInput and QSGTextEdit to use QSGTextNode, especially related to having selections on the text. Also fixes crashes with the threaded renderer on Mac OS X when using the TextEdit or TextInput elements. Task-number: QTBUG-18019, QTBUG-20017 Change-Id: I67f24465352daa1d2cb12b6d2f378feb676c9804 Reviewed-on: http://codereview.qt.nokia.com/2864 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Gunnar Sletta <gunnar.sletta@nokia.com> Reviewed-by: Jiang Jiang <jiang.jiang@nokia.com>
* Fixed broken lookup of fallback fonts on qpaRohan McGovern2011-08-191-2/+1
| | | | | | | | | | | | | | Loading of fallback fonts from the font cache was broken. While iterating through fallback fonts, we would incorrectly skip any fonts which were already in the cache. This would cause unstable lookup results for some fonts, depending on the order in which fonts were loaded during the current process. Change-Id: I56a6a07e93196ed14f33f4cc181e41c5b8f19498 Reviewed-on: http://codereview.qt.nokia.com/3059 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Jiang Jiang <jiang.jiang@nokia.com> Reviewed-by: Rohan McGovern <rohan.mcgovern@nokia.com>
* Fix bidi reordering of RTL text with embedded imagesEskil Abrahamsen Blomfeldt2011-08-181-2/+0
| | | | | | | | | | | | | | | | According to the UBA, the object replacement character should be considered ON. There's no reason to special case its directionality, as the bidi algorithm will already have given it an implicit directionality. Task-number: QTBUG-20910 Reviewed-by: Lars (cherry picked from commit 2657bfa7c4de9f114331d1714a306b3999ae30d8) Change-Id: I1c8e45d67ef44b1b6f96edb2f5074331b5422eb7 Reviewed-on: http://codereview.qt.nokia.com/2999 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@nokia.com>
* Minor optimizations for QTextEngineRitt Konstantin2011-08-181-17/+25
| | | | | | | | | | | | | | | Optimize script assignment, skip calls to QUnicodeTables::script() for the codepoints handled explicitly. Make the helper functions of QTextEngine::elidedText() inlined Merge-request: 1298 Reviewed-by: yoann (cherry picked from commit 857202824e7d6083eeb87fc52d3770f8fd82b559) Change-Id: I1afc6405a800dbc2b5f63a2f98c63e607e3ee255 Reviewed-on: http://codereview.qt.nokia.com/2998 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@nokia.com>
* Remove all non-const operator==Harald Fernengel2011-08-093-35/+1
| | | | | | | | | | | We had to leave the non-const operator== for binary compatibility. Remove them all, just leave the const version in there. 100% source compatible. Change-Id: Ib7a70fb441fe51d5164d9cbf495cbeda0f48fafe Reviewed-on: http://codereview.qt.nokia.com/2773 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Robert Griebl <robert.griebl@nokia.com>
* Switch to use floating point pixelSize in QRawFont completelyJiang Jiang2011-07-297-13/+13
| | | | | | | | | | Reviewed-by: Eskil (cherry picked from commit 500f8a4368be85a0ae8b7c46012deb0ab0c844ad) Change-Id: I6cfebcbb68697c9bf7a5634e98a09a26928467d7 Reviewed-on: http://codereview.qt.nokia.com/2386 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Jiang Jiang <jiang.jiang@nokia.com>
* Fix off-by-one error in binary searchJiang Jiang2011-07-291-1/+1
| | | | | | | | | | | | | | | | This one-line change makes the binary search in QTextEngine::findItem behave consistently with the linear search that it replaced in commit acf678e57ed088f3e56a551cac6c7c3322005750. The new behavior seems to cause crashes in kword (and perhaps other applications) by triggering a logClusters assert, although I have been unable to create a unit test that reproduces this. Task-number: QTBUG-17209 Done-by: Dr. Robert Marmorstein <robert@narnia.homeunix.com> Change-Id: I68b79f024e9836e1cc8b0f3514889120541eb2ea Reviewed-on: http://codereview.qt.nokia.com/2343 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Jiang Jiang <jiang.jiang@nokia.com>
* Emit selectionChanged signals when input method alters the selection.Andrew den Exter2011-07-261-0/+3
| | | | | | | | | | | | | Check if the input method removes the selection and force emit selectionChanged if it sets a new selection. Task-number: QTBUG-19727 Reviewed-by: Martin Jones Change-Id: Ic8ea1044d0917aac4e52368f431ac9e5c7db7c56 Reviewed-on: http://codereview.qt.nokia.com/2076 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Andrew den Exter <andrew.den-exter@nokia.com>
* Changed QLibrary::resolve() to return a function pointer.Kim Motoyoshi Kalland2011-07-251-2/+4
| | | | | | | | | | | According to the C++ standard, there is no guarantee that you can cast between function pointers and void pointers without data loss (section 5.2.10-6). Change-Id: I27f4d835e4c8ca8ecca0d76cfea9ce34491956bd Reviewed-on: http://codereview.qt.nokia.com/1995 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: João Abecasis <joao.abecasis@nokia.com>
* Use QUuid::toByteArray() instead of QUuid::toString().toAscii()liangqi2011-07-221-1/+1
| | | | | | | | | This is a cheaper way. Change-Id: Ibfc67e0ac46a77e95b2ef32cd6f28c7409c42d63 Reviewed-on: http://codereview.qt.nokia.com/2037 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Liang Qi <liang.qi@nokia.com>
* Add support for rawFonts loaded from data in FaceIdPierre Rossi2011-07-212-1/+4
| | | | | | | | | | | | | The problem was that with an empty filename and index of 0, all raw fonts loaded from data had the same FaceId, and we wouldn't bother to load another one after doing this once. This commit introduces a uuid in FaceId to help distinguish them in that case. Change-Id: I93655ff07a7d8856af1f854024e207c519f8ed1a Reviewed-on: http://codereview.qt.nokia.com/1882 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Jiang Jiang <jiang.jiang@nokia.com>
* Get rid of the evilness of Q_GLOBAL_STATIC_WITH_INITIALIZERThiago Macieira2011-07-211-6/+13
| | | | | | | | | | | | | | | | | | | That macro is a nightmare. It leads to writing code that is thread-unsafe or other problems. So rewrite the code that used this macro to use special-purpose classes with constructors. This commit does not introduce new errors. The FIXME in qicon.cpp (qtIconCache()) was a condition already present. It does fix the race conditions that were present in qbrush.cpp nullBrushInstance() and qfontengine.cpp qt_grayPalette(). Specialising QGlobalStatic is also evil. Change-Id: I039311f6a5ac9ea4ad7b310b870a2adf888da7e5 Merge-request: 10 Reviewed-by: Olivier Goffart <olivier.goffart@nokia.com> Reviewed-on: http://codereview.qt.nokia.com/1895 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
* Add a way to check if we have a matching family in the database.Pierre Rossi2011-07-202-0/+12
| | | | | | | | | | | | | | This is needed in order to get proper font fallback, and incidentally webfonts, working in QtWebKit. See: https://bugs.webkit.org/show_bug.cgi?id=55036 Internal for now, maybe it could be made public for a future release. Task-number: QTBUG-15575 Change-Id: I5c454689125cd9d5fda26ff2149208ed1beec24d Reviewed-on: http://codereview.qt.nokia.com/1829 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Jiang Jiang <jiang.jiang@nokia.com> Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@nokia.com>
* Do not use qRound with integersOlivier Goffart2011-07-201-1/+1
| | | | | | | | | | Required for https://qt.gitorious.org/qt/qtbase/merge_requests/17 Change-Id: I5319ea99eb083c5931c55a246f7057fbc88c8fa4 Reviewed-by: Thiago Reviewed-on: http://codereview.qt.nokia.com/1866 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Olivier Goffart <olivier.goffart@nokia.com>
* Use truncate only for subpixel boundingBox x positionJiang Jiang2011-07-201-2/+2
| | | | | | | | | | | | | | | | | | Since Lion, Core Text starts to return fractional values for x origin in the glyph bounding box. To get correct alignment we need to make it integer, it seems that round will cut certain pixels (x = 0.6 will be round to 1, then that glyph will be moved too much to the left in image glyph cache). Reverting 4297b85a appears to work fine on previous version of Mac OS X as well. This change will not affect Windows (DirectWrite) and FreeType font engines since they both return integer values for that. Change-Id: I830f5b0bd27cad3a3a84b157da428134fb979703 Reviewed-by: Eskil Reviewed-on: http://codereview.qt.nokia.com/1667 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Jiang Jiang <jiang.jiang@nokia.com>
* Fix warning for uninitialized variableJiang Jiang2011-07-141-1/+1
| | | | | | | | | | Reviewed-by: Eskil (cherry picked from commit 94913c337a388e3d5938ece3a460f1f6e9590cd5) Change-Id: Ie3c0986a3f5c70a654d9f14c3fae42b528c06b9e Reviewed-on: http://codereview.qt.nokia.com/1632 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Jiang Jiang <jiang.jiang@nokia.com>
* Skip boundry neutral characters in bidi itemizationJiang Jiang2011-07-141-4/+22
| | | | | | | | | | | | | | | According to UAX #9, bidiItemize should act as if those characters don't exist. If we don't, dir and status.eor here may become QChar::DirBN, thus interfere the result of bidiItemize. Task-number: QTBUG-19949 Reviewed-by: Lars Knoll (cherry picked from commit a5c3064439a9f1483565e5d9dfbf0342cd9236f0) Change-Id: I224cfdf5b38433a31d33b6d944d5770accf74546 Reviewed-on: http://codereview.qt.nokia.com/1631 Reviewed-by: Jiang Jiang <jiang.jiang@nokia.com> Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
* Fix crash when app font is addedJiang Jiang2011-07-143-19/+28
| | | | | | | | | | | | | | | | | | | Loading app fonts will clear the application font cache, but QFontPrivate::engineWithScript will try to load the font again, in Mac the font engine used here must be the one used for shaping, because subsequent sub font engines may be added to it during the shaping process (QCoreTextFontEngineMulti::stringToCMap). That is why we need to fetch the font engine directly from QTextEngine's fontEngine cache instead of QFontCache. Task-number: QTBUG-20250 Reviewed-by: Eskil (cherry picked from commit 1f90ae36cff8acf581d1624bf011fe3a55c623c0) Change-Id: Ibc0054cd7df65b65a67af4a7b15027731ba417fe Reviewed-on: http://codereview.qt.nokia.com/1630 Reviewed-by: Jiang Jiang <jiang.jiang@nokia.com> Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
* Apply 57993ba7 properly to 4.8Jiang Jiang2011-07-141-1/+1
| | | | | | | | | | | | | Because we have moved alignLine from qtextlayout.cpp to QTextEngine, this patch has to be applied manually. Reviewed-by: TrustMe (cherry picked from commit 705416cdc8ee91ac88d80298dbe2971a9384c196) Change-Id: Ibd657a52da1c510c839623738d49602b5c4a0824 Reviewed-on: http://codereview.qt.nokia.com/1640 Reviewed-by: Jiang Jiang <jiang.jiang@nokia.com> Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
* Fix potential crash when clicking in a text editEskil Abrahamsen Blomfeldt2011-07-131-0/+1
| | | | | | | | | | | | | | | Since the attributes() call might resize the layout and therefore delete the previous data, the logClusters pointer might be dangling at this point. We need to reget it to make sure it's valid. Task-number: QTBUG-20310 Reviewed-by: Jiang Jiang (cherry picked from commit c0772f44fb1d53608ff629fc622103698c6d0ee5) Change-Id: I20a29d0c529764eb5d41cb3383c22b6cad8de255 Reviewed-on: http://codereview.qt.nokia.com/1598 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@nokia.com>
* Fix uses of qRound on non-floating-point types.Thiago Macieira2011-07-121-2/+2
| | | | | | | | | | | It's silly to round integeres, since they are already round. At most, this would waste CPU cycles without any benefit. Change-Id: I6fc0152f4416d723b65966e5d48cc7a07957b83c Merge-request: 17 Reviewed-by: Olivier Goffart <olivier.goffart@nokia.com> Reviewed-on: http://codereview.qt.nokia.com/1541 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
* Remove some metrics parsing code from Core TextJiang Jiang2011-07-112-20/+3
| | | | | | | | | | | | | | | | | | The respective value in some of the default fonts like Lucida Grande are simply not reliable. It seems that the only reliable way to get such information is by going through all the glyphs. It seems that these code are not well tested on Mac and should be removed for now since it caused visible regressions in QLineEdit rendering. Reviewed-by: Eskil (cherry picked from commit 8032d6f4ced50837e126f28c1475ad89eaf91ad7) Change-Id: I85e71a2e3228a367659be9f5f6ec3e667e0ce902 Reviewed-on: http://codereview.qt.nokia.com/1264 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Jiang Jiang <jiang.jiang@nokia.com>
* Don't cast a string from asciiLars Knoll2011-07-071-1/+1
| | | | | | | Change-Id: Ia902e5be3ff61057b2e895a491bb68f1b7c6dd64 Reviewed-on: http://codereview.qt.nokia.com/1221 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Liang Qi <liang.qi@nokia.com>
* Fix regressions in previous QFontDatabase patchJiang Jiang2011-07-076-57/+64
| | | | | | | | | | | | | | | | | 1. QtFontStyle::Key comparison should either use styleName or style, etc., but not both. 2. When initializing a QFont from QFontDatabase::font(), style and weight parameters should always be set even when we found a match styleName, in case these parameters will be used for comparison later. 3. Move styleName out of QtFontStyle::Key so that the code can be clearer and more explicit. Change-Id: Icdee8e97568a0f31f57d2cdb8d414f47331fde75 Reviewed-by: Eskil Reviewed-on: http://codereview.qt.nokia.com/1263 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Jiang Jiang <jiang.jiang@nokia.com>
* Doc: Fixed qdoc warnings.David Boddie2011-07-012-7/+33
| | | | | | | Change-Id: I7b4e9ef513b82a82d2365c9256d09520a44ad10d Reviewed-on: http://codereview.qt.nokia.com/324 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@nokia.com>
* Fix resource leak in QFontEngineDirectWriteEskil Abrahamsen Blomfeldt2011-07-011-2/+3
| | | | | | | | | | | | | Bug introduced by f54c5d9133d7aa7636988db36fa6cc51d26434b6. The release statement has to come before the return statement :) Reviewed-by: Jiang Jiang (cherry picked from commit d58eec3c932d1cdbcf3b42534e8fe870ec109487) Change-Id: Ib0b550ead3f971736142d88f4ca19bb8edc1b654 Reviewed-on: http://codereview.qt.nokia.com/949 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@nokia.com>
* Fix transformations on DirectWrite rasterized textEskil Abrahamsen Blomfeldt2011-07-012-47/+104
| | | | | | | | | | | | | | | | | | | | | | | | | | | There were a few bugs in the DirectWrite font engine that caused transformed text to break. First of all, alphaMapForGlyph() ignored the transform, so no gray antialiased text would be transformed. Second of all, the imageForGlyph() function would use the wrong bounding box for the rasterized glyph, causing its positioning to become a little bit off when rotating. The fix is to get the bounding box from the system and add a margin to this instead of trying to predict how it will appear after the vertical hinting etc. has been applied. So that the positioning metrics are in sync with the actual metrics used by the alphaMap* functions, we also need to implement the alphaMapBoundingBox() function. Task-number: QTBUG-19829 Reviewed-by: Jiang Jiang (cherry picked from commit f54c5d9133d7aa7636988db36fa6cc51d26434b6) Change-Id: I3c3840b41e19fcacf926dbf454bdc2cba4bd5a99 Reviewed-on: http://codereview.qt.nokia.com/948 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@nokia.com>
* Fix text color in some cases of QML and QStaticTextEskil Abrahamsen Blomfeldt2011-06-301-3/+7
| | | | | | | | | | | | | | | | | | | | | | | This reverts 518c2a58ed6fdfd7449cb4476aa8ea0d32ad16e3 which caused a regression. When writing systems are mixed and an underline is set on the font, QPainter will set a pen with the current color and a new width on itself before drawing the decoration. This would cause the recorder in QStaticText to mark the pen as dirty, saving the current pen color in all subsequent text items. The effect was e.g. that in QML the cached color would override the current one, making it impossible to change the color on the text without forcing a relayout somehow. The right fix is to only mark the pen as dirty when its color actually changes. Task-number: QTBUG-20159 Change-Id: Ia819b67cccc9eaedd23fde655eab58cd892646f8 Reviewed-by: Jiang Jiang Reviewed-on: http://codereview.qt.nokia.com/870 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@nokia.com>
* Add HB_LineBreakType to qharfbuzz_copy_p.h.Frederik Gladhorn2011-06-301-0/+7
| | | | | | | | | The QTextLayout relies on this enum to be defined. Change-Id: Ibcc8a0073bd56e29431c52c4ea54a909ff42f07b Reviewed-on: http://codereview.qt.nokia.com/537 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Simon Hausmann <simon.hausmann@nokia.com>
* Move glyph run merging logic to QTextLayout levelJiang Jiang2011-06-302-110/+101
| | | | | | | | | So that we can merge glyph runs from different QTextLines. Change-Id: Id8e0cc1aa21a482a995773fd55599c0011245e82 Reviewed-on: http://codereview.qt.nokia.com/950 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@nokia.com>
* compile on Mac OS XGunnar Sletta2011-06-281-1/+2
| | | | | | | Change-Id: Ibe74e51aab6e6b8d7a0e71cd88dcc97f72fcd1f9 Reviewed-on: http://codereview.qt.nokia.com/833 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@nokia.com>
* Add missing APIs to QRawFont and some additional notes to fromFontJiang Jiang2011-06-272-0/+29
| | | | | | | Change-Id: I8487a2e32f5b71a1eb51dcb8540cb5de2def09f6 Reviewed-on: http://codereview.qt.nokia.com/769 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@nokia.com>
* Only compare styleNames if they are not emptyJiang Jiang2011-06-272-2/+2
| | | | | | | | | | Task-number: QTBUG-19366 (cherry picked from commit 15e6ac8f4d9e7a419cd0c10405954bde78559fac) Change-Id: I5f06bb5133f23dbc8ad6d745d44ca0a85ef49686 Reviewed-on: http://codereview.qt.nokia.com/760 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@nokia.com>
* Store styleName in font databaseJiang Jiang2011-06-273-12/+38
| | | | | | | | | | | | | | | | So that queries like QFontDatabase::styles() can return exactly the same styles as the system does. Then application can use QFont::setStyleName() to select those styles later. With a lot of fonts not providing correct numeric weight/width values and even if they did, values are usually not directly mapped to QFont enums, styleName is probably the only reliable way to select any possible font in the system. Reviewed-by: QTBUG-13518 Change-Id: Id8a9469b804f1b5bb81d8c7378e7e8778f9a4fff Reviewed-on: http://codereview.qt.nokia.com/739 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@nokia.com>
* Add styleName to QFontDef comparisonJiang Jiang2011-06-272-0/+4
| | | | | | | | | | | To make sure we cache different font engines with different style names. Task-number: QTBUG-19366 Change-Id: Iefaebd5418f212ff759e03c1745f839a7f23d013 Reviewed-on: http://codereview.qt.nokia.com/738 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@nokia.com>
* Fix fontconfig usage in X11 font databaseJiang Jiang2011-06-222-52/+31
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | We should do FcConfigSubstitute(0, pattern, FcMatchFont) on a FcPattern for query because the family list in it will contain almost all the families after FcConfigSubstitute(0, pattern, FcMatchPattern), then the test in <match target="font"> will almost always succeed. In general, FcMatchFont substitute should only be done on the FcPattern that we got after FcFontMatch() or FcFontRenderPrepare(). Based on the suggestion of fontconfig author Behdad Esfahbod, this patch reorganized the tryPatternLoad logic so that it only does the QFontEngine creation part, FcPattern *match is retrieved outside of that function. In this way, the match pattern we got can be either from FcFontMatch() or after FcFontRenderPrepare() on one of the fonts we got from qt_fontSetForPattern(). Then we don't need to duplicate the pattern and add all criterias back with qt_addPatternProps(). It not only simplified the code a lot but also fix the way we apply FcMatchFont substitution. This substitution will either be done by FcFontMatch() or FcFontRenderPrepare, both implicitly. Task-number: QTBUG-2148, QTBUG-19947 Change-Id: I2e4dbbe7f448e81850176732b4a65028f2b912fa Reviewed-by: Eskil Reviewed-on: http://codereview.qt.nokia.com/579 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Jiang Jiang <jiang.jiang@nokia.com>
* Support -qtnamespace and -qtlibinfix againLiang Qi2011-06-203-5/+13
| | | | | | | | | | | | This fix is for qtbase libraries with -qtnamespace and -qtlibinfix options in configure. Task-number: QTBUG-19964 Change-Id: I2f2ff1748f2c1c2b20d5f73b6be36f68a7a26cef Reviewed-on: http://codereview.qt.nokia.com/505 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Rohan McGovern <rohan.mcgovern@nokia.com> Reviewed-by: Gunnar Sletta <gunnar.sletta@nokia.com>
* Fix empty lines in Qt HTML when displayed in external browsers (again)Eskil Abrahamsen Blomfeldt2011-06-203-4/+11
| | | | | | | | | | | | | | | | | This redoes f541c78e1bc5b293466b40e6f10496199a4a5d73 in a way which should be more compliant with different browsers. In particular, Outlook didn't support the CSS trick in the last fix, so we need the somewhat larger patch which adds an extra line break node to the tree and then ignores it when re-importing the document. Task-number: QTBUG-3669 Reviewed-by: Simon Hausmann (cherry picked from commit cb760eaef631abd49836ae5c8dc12a61ef5eff0d) Change-Id: Ia55bf39d52461aa9445a9a5d0bfb5b4c5bf1e9bd Reviewed-on: http://codereview.qt.nokia.com/492 Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@nokia.com> Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
* Fix bug which caused repeated characters in a QML TextEskil Abrahamsen Blomfeldt2011-06-201-2/+2
| | | | | | | | | | | | We would include too much in the characters displayed, since itemEnd is actually the start of the next item and not the end of the current one. Adding a minus one removes the duplicated characters at the end of text lines. Change-Id: I1e13470548fafaa692ae58e019e9e2469a947f5e Reviewed-on: http://codereview.qt.nokia.com/495 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Gunnar Sletta <gunnar.sletta@nokia.com>
* Fix missing empty lines in Qt HTML when displayed in compliant browsersEskil Abrahamsen Blomfeldt2011-06-101-1/+1
| | | | | | | | | | | | | | | | | | | | | When QTextDocument exports HTML, it makes an effort to be compatible with its own importer, hence it has to be compatible with the dialect of HTML which Qt has developed over the years. One incorrect interpretation in Qt is that an empty paragraph is interpreted as an empty line. So if you use a QTextDocument to produce HTML for text where an empty line has been added, this empty line will not be visible when the document is viewed in a compliant browser. The fix is to set the height of the empty paragraph to 1em, so that it will match the current pixel size of the font, thus look the same as a <p><br /></p> but without altering the structure of the document. Reviewed-by: Gunnar (cherry picked from commit f541c78e1bc5b293466b40e6f10496199a4a5d73) Change-Id: Ic0eae2c81609b8872eb2eb9344a3ec416cd09149 Reviewed-on: http://codereview.qt.nokia.com/445 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@nokia.com>
* Fontengine buildfix for xcb platform plugin.Tapani Mikola2011-06-104-11/+7
| | | | | | Change-Id: Ic909e1ac08163e62634643c68862e802a016b911 Reviewed-on: http://codereview.qt.nokia.com/442 Reviewed-by: Gunnar Sletta <gunnar.sletta@nokia.com>
* Allow selecting fonts with irregular style namesJiang Jiang2011-06-0911-96/+204
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fonts like "Helvetica Neue UltraLight" or "Skia Regular Black Condensed" can't be selected in Qt because either they don't report correct numeric values for weight/stretch/etc. or these values are not mapped from QFont enums in a linear way. Thus we provide a shortcut to select these fonts with PostScript name or full name without resorting to family name matching in QFontDatabase (these fonts are not registered in font database anyway). After this, we can simply use: QFont font("Helvetica Neue"); font.setStyleName("UltraLight"); to select these fonts. QCoreTextFontEngineMulti matched like this can be created directly from the CTFontRef instance instead of creating from the font name, making this process faster. The commit also cleaned up the font loading process in Mac font database a bit, moving the code for family matching into a separate function. Add QFontInfo::styleName() and QRawFont::styleName() to access the resolved style name for a font. Task-number: QTBUG-19366 Change-Id: Iad07768c02ed06cc8d6b7395dec554384f410506 Reviewed-on: http://codereview.qt.nokia.com/333 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Jiang Jiang <jiang.jiang@nokia.com>
* Duplicate some harfbuzz symbols inside Qt.Gunnar Sletta2011-06-094-3/+115
| | | | | | | | | | | | | | | This is done to remove a compile-time dependency on the harfbuzz source files inside qtbase/src/3rdparty. These are not accessible now that QT_SOURCE_TREE is not accessible as a qmake variable anymore. With the refactor branch we might solve this differently, but for now this is how we get svg and declarative to compile. Change-Id: I5dad23f2ea1f650e2621c1c1fcf39632a3a22ae8 Reviewed-on: http://codereview.qt.nokia.com/378 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@nokia.com>
* Reorder member varibles in QGlyphRunPrivate to eliminate warningJiang Jiang2011-06-081-4/+4
| | | | | | | | | | Reviewed-by: Eskil (cherry picked from commit 74a1135341783449970d579b273d00c837ac14b0) Change-Id: I8e1c6bdc7f0957d8f389531f5f5682c536cdc286 Reviewed-on: http://codereview.qt.nokia.com/374 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Jiang Jiang <jiang.jiang@nokia.com>
* Fix warning in qtextengine compilationJiang Jiang2011-06-081-1/+1
| | | | | | | | | | | | enableHarfbuzz() should only be defined on Mac. Reviewed-by: Eskil (cherry picked from commit 5ce3fbb67b79c3732fd47b296ef9421398ca520c) Change-Id: I9ecb5db49478c3f5beb5d41cf99320f0faedce2e Reviewed-on: http://codereview.qt.nokia.com/375 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Jiang Jiang <jiang.jiang@nokia.com>
* Fix compile when configure with no fontconfig supportJiang Jiang2011-06-081-3/+3
| | | | | | | | | | | Task-number: QTBUG-19716 Reviewed-by: Eskil (cherry picked from commit 5a598afa3f1928e9ad18257e2fa48fe3d5739917) Change-Id: I05107970e3273fce48303c9956e1c9aa928832b9 Reviewed-on: http://codereview.qt.nokia.com/376 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Jiang Jiang <jiang.jiang@nokia.com>
* Add function QGlyphRun::setRawData()Eskil Abrahamsen Blomfeldt2011-06-074-46/+101
| | | | | | | | | | | | | | | | | | | | | | | | | | To provide an optimized way of constructing QGlyphRun objects with no copying or allocation, we add function setRawData() (naming inspired by QByteArray::setRawData()). Data retrieved from QRawFont can be passed directly into this. The logic is now that the data pointers in QGlyphRunPrivate should always point to the current valid data and is what will be used in comparisons and drawing calls. The vectors are optimizations to avoid unnecessary copying if the user wants to use the QVector based API (which makes it easier to manage the memory.) This reflected in the functions that return QVectors, which will return the stored vector if and only if it is identical to the current pointer. Otherwise we will have to copy the memory. The internal addition operators in QGlyphRun have been removed since they really provide no real optimization and have an unclear definition if the two glyph runs are based on different fonts. Reviewed-by: Jiang Jiang (cherry picked from commit 86d88c5b719fd3d50336d9d8e7127b8045ee82ae) Change-Id: Id5bb55ee3d93afb32ffca850f53382e856df7b3e Reviewed-on: http://codereview.qt.nokia.com/342 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@nokia.com>
* Correct antialias disabling logic for Core TextJiang Jiang2011-06-041-3/+2
| | | | | | | | | | We should always turn antialias off when QFont::NoAntialias being passed in styleStrategy. That corrects some QStaticText tests. Change-Id: Iaffc5f3bb7f501dcb648cab41a8b6ffcf93f90ae Reviewed-on: http://codereview.qt.nokia.com/328 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Jiang Jiang <jiang.jiang@nokia.com>