Commit Graph

26 Commits

Author SHA1 Message Date
Jean-Marc
f4fc035cf6 Better algorithm for forcing bidi drawing
The use of RLO/LRO overrides to force text orientation was really hackish and the way it was done caused dropped letters in Mac OS X (for some unknown reasons).

This new approach is much cleaner, except that it relies on features not advertised in documentation
but present at least from Qt 4.5 to Qt 5.3:
* TextFlag enum values TextForceLeftToRight and TextForceRightToLeft, which are strong versions
  of QPainter::setLayoutDirection; they are passed as a parameter of QPainter::drawText.

* QTextLayout::setFlags method, which is required to pass the above flags to QTextLayout.

The unicode override method is still used to draw strings Mac OS X because, for some reason, the direction was not really enforced in this case.
2014-07-25 19:56:51 +02:00
Jean-Marc Lasgouttes
ec42b2e4c9 Do not split words at selection boundary
The display of partially-selected word is now done in a new Painter::text method
which displays the string twice with different clip settings. This allows to
catter for the case where Color_selectiontext is not black.

Morover, the code that uses unicode override characters to force the
direction of a string is moved to lstrings.h.

Fixes: #9116
2014-07-08 21:30:06 +02:00
Jean-Marc Lasgouttes
2ff639a0e6 Fix positionning of cursor
The old implementation of Row::Element::pos2x and x2pos did not work
correctly with Arabic text, because characters can have shapes that
depend on context.

This new implementation leverages QTextLayout in a simplified way,
since only one word is added to the layout.

This allows to make Row::Element::x2pos more readable.

Fixes: #9115.
2014-07-08 21:30:05 +02:00
Jean-Marc Lasgouttes
4176795e72 Remove support for LyXRC::force_paint_single_char
This workaround is not necessary anymore, and it complicates the code.

The variable itself will be removed after the landing of the branch on
master.
2014-07-08 21:30:05 +02:00
Jean-Marc Lasgouttes
8539f756ed Implement real string width computation
Important features:
* widths are cached in a map
* old behavior is still used when lyxrc.force_paint_single_char is true.
2014-06-25 17:54:15 +02:00
Jean-Marc Lasgouttes
015333d987 Rely on Qt to handle small caps text
This has the advantage of simplifying our code and to produce the
correct output: the small capitals should have the exact same width as
the lower case letters.

The slanted fonts are also translated to oblique on Qt side, but this
does not seems to have an effect in my testing. It may be that proper
oblique fonts need to be installed.
2014-05-07 12:13:27 +02:00
Richard Heck
1b1f8dd235 Audit all the LASSERT calls, and try to do something sensible at
each failure.

There are several places I was not sure what to do. These are marked
by comments beginning "LASSERT:" so they can be found easily. At the
moment, they are at:

Author.cpp:105: // LASSERT: What should we do here?
Author.cpp:121: // LASSERT: What should we do here?
Buffer.cpp:4525:        // LASSERT: Is it safe to continue here, or should we just return?
Cursor.cpp:345:         // LASSERT: Is it safe to continue here, or should we return?
Cursor.cpp:403:         // LASSERT: Is it safe to continue here, or should we return?
Cursor.cpp:1143:                // LASSERT: There have been several bugs around this code, that seem
CursorSlice.cpp:83:     // LASSERT: This should only ever be called from an InsetMath.
CursorSlice.cpp:92:     // LASSERT: This should only ever be called from an InsetMath.
LayoutFile.cpp:303:                     // LASSERT: Why would this fail?
Text.cpp:995:           // LASSERT: Is it safe to continue here?
2013-04-25 17:27:10 -04:00
Georg Baum
f67cf6f4bb Add support for stmaryrd.sty (bug #8434)
The stmaryrd package adds support for lots of math symbols, using a font
designed to accompany the computer modern fonts. The changes in detail:

- Fix generate_symbols_list.py to work with stmaryrd.sty. It loooks like it
  was automatically translated from a perl version and never used.
- Generate the new symbols in lib/symbols using generate_symbols_list.py and
  add some manual adjustments
- Generate stmary10.ttf by a simple ttf export from stmary10.sfd with fontforge
- Add license info for stmary10.ttf
- Create a test file with all symbols from stmaryrd.sty. Actually it would be
  nice to have this for the other fonts as well.
- The mechanics: lyx2lyx, tex2lyx, font machinery etc.
2012-12-15 13:10:31 +01:00
Vincent van Ravesteijn
1f5c77ec65 Fix bug #7187: Font painting problems with emulated scaling.
When creating the QFontMetrics object, we should specify a QPaintDevice. 0 is a paint device which is screen-compatible or pixmap-compatible. This makes sure that the correct DPI is used in font metrics calculations.

see also:
http://bugreports.qt.nokia.com/browse/QTBUG-16331.

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@37030 a592a061-630c-0410-9148-cb99ea01b6c8
2010-12-29 05:35:03 +00:00
Richard Heck
67a4b590aa We don't generally use "static" this way in the LyX code any more. (Just
a bit of cleanup while studying other things....)


git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@36354 a592a061-630c-0410-9148-cb99ea01b6c8
2010-11-17 22:00:42 +00:00
Pavel Sanda
c1173eb11c Coding style
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@26335 a592a061-630c-0410-9148-cb99ea01b6c8
2008-09-08 01:18:33 +00:00
Jean-Marc Lasgouttes
9b4a26a252 rename assert.h to lassert.h
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@24559 a592a061-630c-0410-9148-cb99ea01b6c8
2008-04-30 08:26:40 +00:00
André Pönitz
7f461f4392 infrastructure for 'graceful asserts'
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@24216 a592a061-630c-0410-9148-cb99ea01b6c8
2008-04-10 21:49:34 +00:00
Abdelrazak Younes
bced544674 Hopefully fix monolithic build.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@23380 a592a061-630c-0410-9148-cb99ea01b6c8
2008-03-02 10:20:13 +00:00
Abdelrazak Younes
15ff669dd0 factorize code between GuiFontMetrics::rectText() and buttonText().
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@23000 a592a061-630c-0410-9148-cb99ea01b6c8
2008-02-14 09:44:12 +00:00
Abdelrazak Younes
9e4780ffd8 * buttonText(): painting tweaks.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@22999 a592a061-630c-0410-9148-cb99ea01b6c8
2008-02-14 08:49:45 +00:00
Abdelrazak Younes
537481ebe5 header cleanup
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@22573 a592a061-630c-0410-9148-cb99ea01b6c8
2008-01-14 23:18:52 +00:00
Abdelrazak Younes
9383f4c3c6 'using namespace std' instead of 'using std::xxx'
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@22097 a592a061-630c-0410-9148-cb99ea01b6c8
2007-12-12 10:16:00 +00:00
André Pönitz
0ee7c6e283 remove #includes; cosmetics
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@21588 a592a061-630c-0410-9148-cb99ea01b6c8
2007-11-13 23:00:36 +00:00
André Pönitz
14f7e7fffe shuffle stuff around
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@21511 a592a061-630c-0410-9148-cb99ea01b6c8
2007-11-08 00:09:58 +00:00
Abdelrazak Younes
bd720f7277 Add a FIXME and a hint for implementation of surrogate pair metric problem.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@20839 a592a061-630c-0410-9148-cb99ea01b6c8
2007-10-08 08:55:21 +00:00
Abdelrazak Younes
484dd46b35 Optimisation: don't search twice the hash tables.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@19501 a592a061-630c-0410-9148-cb99ea01b6c8
2007-08-13 13:56:54 +00:00
Abdelrazak Younes
1c2cf3567c Put again the (slightly edited) caution warning from Georg Baum about abusing the ucs4_to_qchar() conversion with symbol fonts. This comment was accidentally deleted in rev 18593.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@18598 a592a061-630c-0410-9148-cb99ea01b6c8
2007-05-31 16:40:11 +00:00
Abdelrazak Younes
f8175cca5e This commit allows to support the full unicode range in GuiFontMetrics thus fixing the crash in this bug:
http://bugzilla.lyx.org/show_bug.cgi?id=3759

It also simplifies and fix the smallcaps case which was not correct WRT unicode. Even though I don't know if toUpper() means something in the non ucs2 range.

FYI, I used toqstr() to do the ucs4 -> ucs2 conversion when needed. This helper method works only with Qt >= 4.2. 

* GuiFontMetrics::smallcapsWidth(): changed to work with single ucs4 characters.
* GuiFontMetrics::xxx(): make sure that font metrics works with characters not in the ucs2 range.



git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@18593 a592a061-630c-0410-9148-cb99ea01b6c8
2007-05-31 12:48:42 +00:00
Bo Peng
00e305c9d9 Rename .C ==> .cpp for files in src, part one
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@18018 a592a061-630c-0410-9148-cb99ea01b6c8
2007-04-26 04:41:58 +00:00
Bo Peng
8c5f097b5d Rename .C ==> .cpp for files in src/frontends/qt4, part two
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@18015 a592a061-630c-0410-9148-cb99ea01b6c8
2007-04-26 03:53:51 +00:00