#6920 paint single characters only when Qt4.7 or better, otherwise automatic kerning breaks cursor positioning

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@37781 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Stephan Witt 2011-02-24 21:38:12 +00:00
parent f8446ecd41
commit f6e7fbefce
5 changed files with 34 additions and 2 deletions

View File

@ -24750,6 +24750,7 @@ msgstr "Utente sconosciuto"
#~ msgid "&Previous"
#~ msgstr "&Precedente"
#~ msgid "Ch. "
#~ msgstr "Cap. "

View File

@ -99,6 +99,7 @@ LexerKeyword lyxrcTags[] = {
{ "\\example_path", LyXRC::RC_EXAMPLEPATH },
{ "\\export_overwrite", LyXRC::RC_EXPORT_OVERWRITE },
{ "\\font_encoding", LyXRC::RC_FONT_ENCODING },
{ "\\force_paint_single_char", LyXRC::RC_FORCE_PAINT_SINGLE_CHAR },
{ "\\format", LyXRC::RC_FILEFORMAT },
{ "\\forward_search_dvi", LyXRC::RC_FORWARD_SEARCH_DVI },
{ "\\forward_search_pdf", LyXRC::RC_FORWARD_SEARCH_PDF },
@ -422,6 +423,9 @@ LyXRC::ReturnValues LyXRC::read(Lexer & lexrc, bool check_format)
if (!lexrc.isOK())
return ReadError;
// default for current rowpainter capabilities
force_paint_single_char = true;
// format prior to 2.0 and introduction of format tag
unsigned int format = 0;
@ -523,6 +527,10 @@ LyXRC::ReturnValues LyXRC::read(Lexer & lexrc, bool check_format)
lexrc >> fontenc;
break;
case RC_FORCE_PAINT_SINGLE_CHAR:
lexrc >> force_paint_single_char;
break;
case RC_PRINTER:
lexrc >> printer;
break;
@ -2180,6 +2188,14 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
if (tag != RC_LAST)
break;
case RC_FORCE_PAINT_SINGLE_CHAR:
if (ignore_system_lyxrc ||
force_paint_single_char != system_lyxrc.force_paint_single_char) {
os << "\\force_paint_single_char \"" << force_paint_single_char << "\"\n";
}
if (tag != RC_LAST)
break;
os << "\n#\n"
<< "# FILE SECTION ######################################\n"
<< "#\n\n";
@ -2880,6 +2896,7 @@ void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new)
case LyXRC::RC_ESC_CHARS:
case LyXRC::RC_EXAMPLEPATH:
case LyXRC::RC_FONT_ENCODING:
case LyXRC::RC_FORCE_PAINT_SINGLE_CHAR:
case LyXRC::RC_FILEFORMAT:
case LyXRC::RC_GROUP_LAYOUTS:
case LyXRC::RC_HUNSPELLDIR_PATH:
@ -3122,6 +3139,10 @@ string const LyXRC::getDescription(LyXRCTags tag)
str = _("The font encoding used for the LaTeX2e fontenc package. T1 is highly recommended for non-English languages.");
break;
case RC_FORCE_PAINT_SINGLE_CHAR:
str = _("Disable any kerning and ligatures for text drawing on screen.");
break;
case RC_FILEFORMAT:
break;

View File

@ -79,6 +79,7 @@ public:
RC_EXAMPLEPATH,
RC_EXPORT_OVERWRITE,
RC_FONT_ENCODING,
RC_FORCE_PAINT_SINGLE_CHAR,
RC_FILEFORMAT,
RC_FORWARD_SEARCH_DVI,
RC_FORWARD_SEARCH_PDF,
@ -527,6 +528,8 @@ public:
};
///
ScrollWheelZoom scroll_wheel_zoom;
///
bool force_paint_single_char;
};

View File

@ -1838,6 +1838,13 @@ void GuiApplication::createView(QString const & geometry_arg, bool autoShow,
if (d->global_menubar_)
d->global_menubar_->releaseKeyboard();
#if QT_VERSION < 0x040700
// the option to disable kerning in rowpainter
// is needed only with Qt4.7.0 or better
lyxrc.force_paint_single_char = false;
system_lyxrc.force_paint_single_char = false;
#endif
// create new view
int id = view_id;
while (d->views_.find(id) != d->views_.end())

View File

@ -267,9 +267,9 @@ void RowPainter::paintChars(pos_type & vpos, FontInfo const & font,
// Maybe a more general fix would be draw character by character
// for some predefined fonts on some platform. In arabic and
// Hebrew we already do paint this way.
if (prev_char == 'f')
if (prev_char == 'f' || lyxrc.force_paint_single_char)
break;
pos = bidi_.vis2log(vpos);
if (pos < font_span.first || pos > font_span.last)
break;