#include <stdio.h>
#include <string.h>
+#include <math.h>
#include "chimara-glk-private.h"
#include "glk.h"
#include "style.h"
_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 */
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:
query_tag(GtkTextTag *tag, glui32 wintype, glui32 hint)
{
gint intval;
+ gdouble doubleval;
GdkColor *colval;
g_return_val_if_fail(tag != NULL, 0);
}
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);
{
/* Create user style before creating windows */
glk_stylehint_set(wintype_AllTypes, style_User1, stylehint_Size, -1);
- glk_stylehint_set(wintype_AllTypes, style_User2, stylehint_Size, 0);
+ glk_stylehint_set(wintype_AllTypes, style_User2, stylehint_Size, +1);
mainwin = glk_window_open(0, 0, 0, wintype_TextBuffer, 0);
if(!mainwin)
glk_set_style(style_Normal);
glk_put_string(".\n");
glk_set_style(style_User2);
- glk_put_string("This test is in User2 at normal size");
+ glk_put_string("This text is in User2 and slightly larger");
glk_set_style(style_Normal);
glk_put_string(".\n");
}