Fixed text rendring on GTK+.
This commit is contained in:
parent
fa0b3ea8dd
commit
6394446461
14
unix/draw.c
14
unix/draw.c
|
@ -532,6 +532,7 @@ uiDrawTextFont *uiDrawLoadClosestFont(const uiDrawTextFontDescriptor *desc)
|
||||||
uiDrawTextFont *font;
|
uiDrawTextFont *font;
|
||||||
PangoFontDescription *pdesc;
|
PangoFontDescription *pdesc;
|
||||||
PangoVariant variant;
|
PangoVariant variant;
|
||||||
|
PangoContext *context;
|
||||||
|
|
||||||
font = uiNew(uiDrawTextFont);
|
font = uiNew(uiDrawTextFont);
|
||||||
|
|
||||||
|
@ -553,12 +554,17 @@ uiDrawTextFont *uiDrawLoadClosestFont(const uiDrawTextFontDescriptor *desc)
|
||||||
pango_font_description_set_gravity(pdesc,
|
pango_font_description_set_gravity(pdesc,
|
||||||
pangoGravities[desc->Gravity]);
|
pangoGravities[desc->Gravity]);
|
||||||
|
|
||||||
// TODO should this really be NULL?
|
// we need a context for metrics to be correct
|
||||||
font->f = pango_font_map_load_font(pango_cairo_font_map_get_default(), NULL, pdesc);
|
// the documentation suggests creating cairo_t-specific, GdkScreen-specific, or even GtkWidget-specific contexts, but we can't really do that because we want our uiDrawTextFonts to be context-independent
|
||||||
|
// so this will have to do
|
||||||
|
// TODO really see if there's a better way instead; what do GDK and GTK+ do internally?
|
||||||
|
context = pango_font_map_create_context(pango_cairo_font_map_get_default());
|
||||||
|
font->f = pango_font_map_load_font(pango_cairo_font_map_get_default(), context, pdesc);
|
||||||
if (font->f == NULL) {
|
if (font->f == NULL) {
|
||||||
// TODO
|
// TODO
|
||||||
g_error("[libui] no match in xxxxx(); report to andlabs");
|
g_error("[libui] no match in uiDrawLoadClosestFont(); report to andlabs");
|
||||||
}
|
}
|
||||||
|
g_object_unref(context);
|
||||||
|
|
||||||
return font;
|
return font;
|
||||||
}
|
}
|
||||||
|
@ -596,9 +602,7 @@ void uiDrawTextFontGetMetrics(uiDrawTextFont *font, uiDrawTextFontMetrics *metri
|
||||||
PangoFontMetrics *pm;
|
PangoFontMetrics *pm;
|
||||||
|
|
||||||
pm = pango_font_get_metrics(font->f, NULL);
|
pm = pango_font_get_metrics(font->f, NULL);
|
||||||
// TODO this does NOT include space for the accents, which throws everything off
|
|
||||||
metrics->Ascent = pangoToCairo(pango_font_metrics_get_ascent(pm));
|
metrics->Ascent = pangoToCairo(pango_font_metrics_get_ascent(pm));
|
||||||
// TODO this always seems to be 0, which throws everything off even more
|
|
||||||
metrics->Descent = pangoToCairo(pango_font_metrics_get_descent(pm));
|
metrics->Descent = pangoToCairo(pango_font_metrics_get_descent(pm));
|
||||||
// Pango doesn't seem to expose this :( Use 0 and hope for the best.
|
// Pango doesn't seem to expose this :( Use 0 and hope for the best.
|
||||||
metrics->Leading = 0;
|
metrics->Leading = 0;
|
||||||
|
|
Loading…
Reference in New Issue