mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-06 00:10:59 +00:00
Unicode support
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@5414 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
855925c969
commit
be90eb4453
@ -1,5 +1,8 @@
|
|||||||
2002-10-15 Dekel Tsur <dekelts@tau.ac.il>
|
2002-10-15 Dekel Tsur <dekelts@tau.ac.il>
|
||||||
|
|
||||||
|
* QLPainter.C (text): Unicode support.
|
||||||
|
* qfont_metrics.C (width): ditto.
|
||||||
|
|
||||||
* qfont_loader.C (available): Add code for QT 2.x.
|
* qfont_loader.C (available): Add code for QT 2.x.
|
||||||
|
|
||||||
2002-10-14 Dekel Tsur <dekelts@tau.ac.il>
|
2002-10-14 Dekel Tsur <dekelts@tau.ac.il>
|
||||||
|
@ -22,7 +22,9 @@
|
|||||||
#include "lyxrc.h"
|
#include "lyxrc.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "LyXView.h"
|
#include "LyXView.h"
|
||||||
|
#include "encoding.h"
|
||||||
|
#include "language.h"
|
||||||
|
|
||||||
#include "QWorkArea.h"
|
#include "QWorkArea.h"
|
||||||
#include "qfont_loader.h"
|
#include "qfont_loader.h"
|
||||||
#include "QLPainter.h"
|
#include "QLPainter.h"
|
||||||
@ -217,8 +219,7 @@ Painter & QLPainter::text(int x, int y,
|
|||||||
|
|
||||||
|
|
||||||
void QLPainter::smallCapsText(int x, int y,
|
void QLPainter::smallCapsText(int x, int y,
|
||||||
char const * s, size_t ls,
|
QString const & s, LyXFont const & f)
|
||||||
LyXFont const & f)
|
|
||||||
{
|
{
|
||||||
LyXFont smallfont(f);
|
LyXFont smallfont(f);
|
||||||
smallfont.decSize().decSize().setShape(LyXFont::UP_SHAPE);
|
smallfont.decSize().decSize().setShape(LyXFont::UP_SHAPE);
|
||||||
@ -229,16 +230,17 @@ void QLPainter::smallCapsText(int x, int y,
|
|||||||
QFontMetrics const & qsmallfontm = QFontMetrics(qsmallfont);
|
QFontMetrics const & qsmallfontm = QFontMetrics(qsmallfont);
|
||||||
|
|
||||||
int tmpx = x;
|
int tmpx = x;
|
||||||
|
size_t ls = s.length();
|
||||||
for (size_t i = 0; i < ls; ++i) {
|
for (size_t i = 0; i < ls; ++i) {
|
||||||
char const c = uppercase(s[i]);
|
QChar const c = s[i].upper();
|
||||||
if (c != s[i]) {
|
if (c != s[i]) {
|
||||||
qp_->setFont(qsmallfont);
|
qp_->setFont(qsmallfont);
|
||||||
qp_->drawText(tmpx, y, &c, 1);
|
qp_->drawText(tmpx, y, c);
|
||||||
tmpx += qsmallfontm.width(&c, 1);
|
tmpx += qsmallfontm.width(c);
|
||||||
} else {
|
} else {
|
||||||
qp_->setFont(qfont);
|
qp_->setFont(qfont);
|
||||||
qp_->drawText(tmpx, y, &c, 1);
|
qp_->drawText(tmpx, y, c);
|
||||||
tmpx += qfontm.width(&c, 1);
|
tmpx += qfontm.width(c);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -250,11 +252,32 @@ Painter & QLPainter::text(int x, int y,
|
|||||||
{
|
{
|
||||||
setPen(f.color());
|
setPen(f.color());
|
||||||
|
|
||||||
|
Encoding const * encoding = f.language()->encoding();
|
||||||
|
if (f.isSymbolFont())
|
||||||
|
encoding = encodings.symbol_encoding();
|
||||||
|
|
||||||
|
QString str;
|
||||||
|
str.setLength(ls);
|
||||||
|
for (size_t i = 0; i < ls; ++i)
|
||||||
|
str[i] = QChar(encoding->ucs(s[i]));
|
||||||
|
|
||||||
|
#if QT_VERSION >= 0x030000
|
||||||
|
// HACK: QT3 refuses to show single compose characters
|
||||||
|
if (ls = 1 && str[0].unicode() >= 0x05b0 && str[0].unicode() <= 0x05c2)
|
||||||
|
str = ' '+str;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (f.realShape() != LyXFont::SMALLCAPS_SHAPE) {
|
if (f.realShape() != LyXFont::SMALLCAPS_SHAPE) {
|
||||||
qp_->setFont(fontloader.get(f));
|
qp_->setFont(fontloader.get(f));
|
||||||
qp_->drawText(x, y, s, ls);
|
#if QT_VERSION >= 0x030000
|
||||||
|
// We need to draw the text as LTR as we use our own bidi
|
||||||
|
// code.
|
||||||
|
qp_->drawText(x, y, str, -1, QPainter::LTR);
|
||||||
|
#else
|
||||||
|
qp_->drawText(x, y, str);
|
||||||
|
#endif
|
||||||
} else {
|
} else {
|
||||||
smallCapsText(x, y, s, ls, f);
|
smallCapsText(x, y, str, f);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (f.underbar() == LyXFont::ON) {
|
if (f.underbar() == LyXFont::ON) {
|
||||||
|
@ -25,6 +25,7 @@
|
|||||||
class LyXFont;
|
class LyXFont;
|
||||||
class QWorkArea;
|
class QWorkArea;
|
||||||
class QPainter;
|
class QPainter;
|
||||||
|
class QString;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* QLPainter - a painter implementation for Xlib
|
* QLPainter - a painter implementation for Xlib
|
||||||
@ -122,8 +123,7 @@ public:
|
|||||||
private:
|
private:
|
||||||
/// draw small caps text
|
/// draw small caps text
|
||||||
void smallCapsText(int x, int y,
|
void smallCapsText(int x, int y,
|
||||||
char const * str, size_t l,
|
QString const & str, LyXFont const & f);
|
||||||
LyXFont const & f);
|
|
||||||
|
|
||||||
/// set pen parameters
|
/// set pen parameters
|
||||||
QPainter & setPen(LColor::color c,
|
QPainter & setPen(LColor::color c,
|
||||||
|
@ -20,6 +20,8 @@
|
|||||||
#include "font_metrics.h"
|
#include "font_metrics.h"
|
||||||
#include "qfont_loader.h"
|
#include "qfont_loader.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
#include "encoding.h"
|
||||||
|
#include "language.h"
|
||||||
|
|
||||||
#include <qfontmetrics.h>
|
#include <qfontmetrics.h>
|
||||||
#include <qfont.h>
|
#include <qfont.h>
|
||||||
@ -78,8 +80,17 @@ int rbearing(char c, LyXFont const & f)
|
|||||||
|
|
||||||
int width(char const * s, size_t ls, LyXFont const & f)
|
int width(char const * s, size_t ls, LyXFont const & f)
|
||||||
{
|
{
|
||||||
|
Encoding const * encoding = f.language()->encoding();
|
||||||
|
if (f.isSymbolFont())
|
||||||
|
encoding = encodings.symbol_encoding();
|
||||||
|
|
||||||
|
QString str;
|
||||||
|
str.setLength(ls);
|
||||||
|
for (size_t i = 0; i < ls; ++i)
|
||||||
|
str[i] = QChar(encoding->ucs(s[i]));
|
||||||
|
|
||||||
if (f.realShape() != LyXFont::SMALLCAPS_SHAPE) {
|
if (f.realShape() != LyXFont::SMALLCAPS_SHAPE) {
|
||||||
return metrics(f).width(s, ls);
|
return metrics(f).width(str);
|
||||||
}
|
}
|
||||||
|
|
||||||
// handle small caps ourselves ...
|
// handle small caps ourselves ...
|
||||||
@ -93,11 +104,11 @@ int width(char const * s, size_t ls, LyXFont const & f)
|
|||||||
int w = 0;
|
int w = 0;
|
||||||
|
|
||||||
for (size_t i = 0; i < ls; ++i) {
|
for (size_t i = 0; i < ls; ++i) {
|
||||||
char const c = uppercase(s[i]);
|
QChar const c = str[i].upper();
|
||||||
if (c != s[i])
|
if (c != str[i])
|
||||||
w += qsmallm.width(&c, 1);
|
w += qsmallm.width(c);
|
||||||
else
|
else
|
||||||
w += qm.width(&c, 1);
|
w += qm.width(c);
|
||||||
}
|
}
|
||||||
return w;
|
return w;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user