X-Git-Url: https://git.stderr.nl/gitweb?a=blobdiff_plain;f=libchimara%2Fstyle.c;h=f7bce7f9a625a0f6f503928e7f4d4e5b7067c811;hb=187e23a5b183d6fea5d7d23bbf35188601a6a612;hp=9779a37e2c474ebf9ad0c6022e88637ee41ff70b;hpb=077b2a3c760d3c7c2fcab34d54eb74ee8744ed77;p=projects%2Fchimara%2Fchimara.git diff --git a/libchimara/style.c b/libchimara/style.c index 9779a37..f7bce7f 100644 --- a/libchimara/style.c +++ b/libchimara/style.c @@ -1,5 +1,6 @@ #include #include +#include #include "chimara-glk-private.h" #include "glk.h" #include "style.h" @@ -214,6 +215,7 @@ gtk_text_tag_copy(GtkTextTag *tag) _COPY_FLAG (invisible_set); _COPY_FLAG (editable_set); _COPY_FLAG (language_set); + _COPY_FLAG (scale_set); #undef _COPY_FLAG /* Copy the data that was added manually */ @@ -732,7 +734,24 @@ apply_stylehint_to_tag(GtkTextTag *tag, GtkTextTag *default_tag, glui32 wintype, break; case stylehint_Size: - g_object_set(tag_object, "size", 14+(2*val), "size-set", TRUE, NULL); + { + gdouble scale = PANGO_SCALE_MEDIUM; + switch(val) { + case -3: scale = PANGO_SCALE_XX_SMALL; break; + case -2: scale = PANGO_SCALE_X_SMALL; break; + case -1: scale = PANGO_SCALE_SMALL; break; + case 0: scale = PANGO_SCALE_MEDIUM; break; + case 1: scale = PANGO_SCALE_LARGE; break; + case 2: scale = PANGO_SCALE_X_LARGE; break; + case 3: scale = PANGO_SCALE_XX_LARGE; break; + default: + /* We follow Pango's convention of having each magnification + step be a scaling of 1.2 */ + scale = pow(1.2, (double)val); + } + g_printerr("Setting tag to %f\n", scale); + g_object_set(tag_object, "scale", scale, "scale-set", TRUE, NULL); + } break; case stylehint_Oblique: @@ -813,6 +832,7 @@ static gint query_tag(GtkTextTag *tag, glui32 wintype, glui32 hint) { gint intval; + gdouble doubleval; GdkColor *colval; g_return_val_if_fail(tag != NULL, 0); @@ -850,8 +870,8 @@ query_tag(GtkTextTag *tag, glui32 wintype, glui32 hint) } case stylehint_Size: - g_object_get(tag, "size", &intval, NULL); - return (intval/2)-14; + g_object_get(tag, "scale", &doubleval, NULL); + return (gint)round(log(doubleval) / log(1.2)); case stylehint_Oblique: g_object_get(tag, "style", &intval , NULL);