Package: anjuta
Version: 2.0.1-1
Severity: normal
Tags: experimental patch
The experimental package has the same bug as #322996: the font rendering is
messed up. A backport of the fix from CVS is attached. (Too bad that 2.0 is not
that usable yet, imo).
--- ./PlatGTK.cxx 2005-09-30 19:07:21.000000000 +0200
+++ /usr/src/gnome-cvs/anjuta-bak/scintilla/PlatGTK.cxx 2005-08-04 16:59:56.000000000 +0200
@@ -1250,6 +1258,7 @@
if (font_.GetID()) {
int totalWidth = 0;
#ifdef USE_PANGO
+ const int lenPositions = len;
if (PFont(font_)->pfd) {
if (len == 1) {
int width = PFont(font_)->CharWidth(*s, et);
@@ -1264,6 +1273,7 @@
// Simple and direct as UTF-8 is native Pango encoding
pango_layout_set_text(layout, s, len);
PangoLayoutIter *iter = pango_layout_get_iter (layout);
+ pango_layout_iter_get_cluster_extents(iter, NULL, &pos);
int i = 0;
while (pango_layout_iter_next_cluster (iter)) {
pango_layout_iter_get_cluster_extents(iter, NULL, &pos);
@@ -1273,7 +1283,10 @@
positions[i++] = position;
}
}
+ while (i < lenPositions)
+ positions[i++] = PANGO_PIXELS(pos.x + pos.width);
pango_layout_iter_free (iter);
+ PLATFORM_ASSERT(i == lenPositions);
} else {
int positionsCalculated = 0;
if (et == dbcs) {
@@ -1288,6 +1301,7 @@
int i = 0;
int utfIndex = 0;
PangoLayoutIter *iter = pango_layout_get_iter (layout);
+ pango_layout_iter_get_cluster_extents(iter, NULL, &pos);
while (pango_layout_iter_next_cluster (iter)) {
pango_layout_iter_get_cluster_extents (iter, NULL, &pos);
int position = PANGO_PIXELS(pos.x);
@@ -1302,8 +1316,11 @@
utfIndex += UTF8CharLength(utfForm+utfIndex);
}
}
+ while (i < lenPositions)
+ positions[i++] = PANGO_PIXELS(pos.x + pos.width);
pango_layout_iter_free (iter);
delete []utfForm;
+ PLATFORM_ASSERT(i == lenPositions);
}
}
if (positionsCalculated < 1 ) {
@@ -1317,16 +1334,20 @@
pango_layout_set_text(layout, utfForm, len);
int i = 0;
PangoLayoutIter *iter = pango_layout_get_iter (layout);
+ pango_layout_iter_get_cluster_extents(iter, NULL, &pos);
while (pango_layout_iter_next_cluster (iter)) {
pango_layout_iter_get_cluster_extents(iter, NULL, &pos);
positions[i++] = PANGO_PIXELS(pos.x);
}
+ while (i < lenPositions)
+ positions[i++] = PANGO_PIXELS(pos.x + pos.width);
pango_layout_iter_free(iter);
if (useGFree) {
g_free(utfForm);
} else {
delete []utfForm;
}
+ PLATFORM_ASSERT(i == lenPositions);
}
}
if (len == 1) {