#include <stdio.h>
#include <string.h>
+#include <math.h>
#include "chimara-glk-private.h"
#include "glk.h"
#include "style.h"
ChimaraGlkPrivate *glk_data = g_private_get(glk_data_key);
/* Place the default text tags in the textbuffer's tag table */
- g_hash_table_foreach(glk_data->styles->text_buffer, style_add_tag_to_textbuffer, gtk_text_buffer_get_tag_table(buffer));
+ g_hash_table_foreach(glk_data->styles->text_buffer, style_copy_tag_to_textbuffer, gtk_text_buffer_get_tag_table(buffer));
/* Copy the override text tags to the textbuffers's tag table */
g_hash_table_foreach(glk_data->glk_styles->text_buffer, style_copy_tag_to_textbuffer, gtk_text_buffer_get_tag_table(buffer));
ChimaraGlkPrivate *glk_data = g_private_get(glk_data_key);
/* Place the default text tags in the textbuffer's tag table */
- g_hash_table_foreach(glk_data->styles->text_grid, style_add_tag_to_textbuffer, gtk_text_buffer_get_tag_table(buffer));
+ g_hash_table_foreach(glk_data->styles->text_grid, style_copy_tag_to_textbuffer, gtk_text_buffer_get_tag_table(buffer));
/* Copy the current text tags to the textbuffers's tag table */
g_hash_table_foreach(glk_data->glk_styles->text_grid, style_copy_tag_to_textbuffer, gtk_text_buffer_get_tag_table(buffer));
_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 */
tag = gtk_text_tag_new("header");
//g_object_set(tag, "font-desc", default_font_desc, "size-points", 18.0, "weight", PANGO_WEIGHT_BOLD, NULL);
- g_object_set(tag, "size-points", 18.0, "weight", PANGO_WEIGHT_BOLD, NULL);
+ g_object_set(tag, "weight", PANGO_WEIGHT_BOLD, NULL);
g_hash_table_insert(default_text_buffer_styles, "header", tag);
tag = gtk_text_tag_new("subheader");
//g_object_set(tag, "font-desc", default_font_desc, "size-points", 14.0, "weight", PANGO_WEIGHT_BOLD, NULL);
- g_object_set(tag, "size-points", 14.0, "weight", PANGO_WEIGHT_BOLD, NULL);
+ g_object_set(tag, "weight", PANGO_WEIGHT_BOLD, NULL);
g_hash_table_insert(default_text_buffer_styles, "subheader", tag);
tag = gtk_text_tag_new("alert");
for(i=0; i<style_NUMSTYLES; i++) {
tag = gtk_text_tag_new(GLK_TAG_NAMES[i]);
g_hash_table_insert(glk_text_grid_styles, (gchar*) GLK_TAG_NAMES[i], tag);
+ tag = gtk_text_tag_new(GLK_TAG_NAMES[i]);
g_hash_table_insert(glk_text_buffer_styles, (gchar*) GLK_TAG_NAMES[i], tag);
}
return TRUE;
}
-/* Internal function: parses a glk color to a #hex-value */
-static void
-glkcolor_to_hex(glui32 val, gchar *buffer)
-{
- g_return_if_fail(buffer != NULL);
-
- sprintf(buffer, "#%02X%02X%02X",
- ((val & 0xff0000) >> 16),
- ((val & 0x00ff00) >> 8),
- (val & 0x0000ff)
- );
-}
-
/* Internal function: parses a glk color to a GdkColor */
void
glkcolor_to_gdkcolor(glui32 val, GdkColor *color)
gint reverse_color = GPOINTER_TO_INT( g_object_get_data(tag_object, "reverse-color") );
int i = 0;
- gchar color[20];
+ GdkColor color;
switch(hint) {
case stylehint_Indentation:
g_object_set(tag_object, "left-margin", 5*val, "left-margin-set", TRUE, NULL);
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_object_set(tag_object, "scale", scale, "scale-set", TRUE, NULL);
+ }
break;
case stylehint_Oblique:
gchar *font_family;
GtkTextTag *font_tag = g_hash_table_lookup(
wintype == wintype_TextBuffer? glk_data->styles->text_buffer : glk_data->styles->text_grid,
- val? "normal" : "preformatted");
+ val? "default" : "preformatted");
g_object_get(font_tag, "family", &font_family, NULL);
g_object_set(tag_object, "family", font_family, "family-set", TRUE, NULL);
g_free(font_family);
break;
case stylehint_TextColor:
- glkcolor_to_hex(val, color);
+ glkcolor_to_gdkcolor(val, &color);
if(!reverse_color)
- g_object_set(tag_object, "foreground", color, "foreground-set", TRUE, NULL);
+ g_object_set(tag_object, "foreground", &color, "foreground-set", TRUE, NULL);
else
- g_object_set(tag_object, "background", color, "background-set", TRUE, NULL);
+ g_object_set(tag_object, "background", &color, "background-set", TRUE, NULL);
break;
case stylehint_BackColor:
- glkcolor_to_hex(val, color);
+ glkcolor_to_gdkcolor(val, &color);
if(!reverse_color)
- g_object_set(tag_object, "background", color, "background-set", TRUE, NULL);
+ g_object_set(tag_object, "background", &color, "background-set", TRUE, NULL);
else
- g_object_set(tag_object, "foreground", color, "background-set", TRUE, NULL);
+ g_object_set(tag_object, "foreground", &color, "background-set", TRUE, NULL);
break;
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);
get_current_font(guint32 wintype)
{
ChimaraGlkPrivate *glk_data = g_private_get(glk_data_key);
- GtkTextTag *normal;
+ GtkTextTag *tag;
switch(wintype) {
case wintype_TextGrid:
- normal = g_hash_table_lookup(glk_data->styles->text_grid, "normal");
+ tag = g_hash_table_lookup(glk_data->styles->text_grid, "default");
break;
case wintype_TextBuffer:
- normal = g_hash_table_lookup(glk_data->styles->text_buffer, "normal");
+ tag = g_hash_table_lookup(glk_data->styles->text_buffer, "default");
break;
default:
return NULL;
}
PangoFontDescription *font;
- g_object_get( G_OBJECT(normal), "font-desc", &font, NULL );
+ g_object_get( G_OBJECT(tag), "font-desc", &font, NULL );
return font;
}