X-Git-Url: https://git.stderr.nl/gitweb?a=blobdiff_plain;f=libchimara%2Fchimara-glk.c;h=86522e53ace85d1019a0ade6c41d806ea4bc685e;hb=10ad9d86414a4ade89743c1b4b706be914ba00e6;hp=4d8b55249fd6b3f2136e3daf9e34141481b10bee;hpb=df5a5656a19699e1ea628f9149fe1b88ad3a0015;p=projects%2Fchimara%2Fchimara.git diff --git a/libchimara/chimara-glk.c b/libchimara/chimara-glk.c index 4d8b552..86522e5 100644 --- a/libchimara/chimara-glk.c +++ b/libchimara/chimara-glk.c @@ -32,7 +32,6 @@ * SECTION:chimara-glk * @short_description: Widget which executes a Glk program * @stability: Unstable - * @include: libchimara/chimara-glk.h * * The #ChimaraGlk widget opens and runs a Glk program. The program must be * compiled as a plugin module, with a function glk_main() @@ -178,7 +177,7 @@ chimara_glk_init(ChimaraGlk *self) priv->ignore_next_arrange_event = FALSE; priv->char_input_queue = g_async_queue_new(); priv->line_input_queue = g_async_queue_new(); - /* Should be g_async_queue_new_full(g_free); but only in GTK >= 2.16 */ + /* FIXME Should be g_async_queue_new_full(g_free); but only in GTK >= 2.16 */ priv->resource_map = NULL; priv->resource_lock = g_mutex_new(); priv->resource_loaded = g_cond_new(); @@ -329,7 +328,8 @@ request_recurse(winid_t win, GtkRequisition *requisition, guint spacing) glui32 division = win->split_method & winmethod_DivisionMask; glui32 direction = win->split_method & winmethod_DirMask; - + unsigned border = ((win->split_method & winmethod_BorderMask) == winmethod_NoBorder)? 0 : spacing; + /* If the split is fixed, get the size of the fixed child */ if(division == winmethod_Fixed) { @@ -363,13 +363,13 @@ request_recurse(winid_t win, GtkRequisition *requisition, guint spacing) { case winmethod_Left: case winmethod_Right: - requisition->width = child1.width + child2.width + spacing; + requisition->width = child1.width + child2.width + border; requisition->height = MAX(child1.height, child2.height); break; case winmethod_Above: case winmethod_Below: requisition->width = MAX(child1.width, child2.width); - requisition->height = child1.height + child2.height + spacing; + requisition->height = child1.height + child2.height + border; break; } } @@ -413,12 +413,13 @@ allocate_recurse(winid_t win, GtkAllocation *allocation, guint spacing) { glui32 division = win->split_method & winmethod_DivisionMask; glui32 direction = win->split_method & winmethod_DirMask; + unsigned border = ((win->split_method & winmethod_BorderMask) == winmethod_NoBorder)? 0 : spacing; /* If the space gets too small to honor the spacing property, then just ignore spacing in this window and below. */ - if( (spacing > allocation->width && (direction == winmethod_Left || direction == winmethod_Right)) - || (spacing > allocation->height && (direction == winmethod_Above || direction == winmethod_Below)) ) - spacing = 0; + if( (border > allocation->width && (direction == winmethod_Left || direction == winmethod_Right)) + || (border > allocation->height && (direction == winmethod_Above || direction == winmethod_Below)) ) + border = 0; GtkAllocation child1, child2; child1.x = allocation->x; @@ -432,22 +433,22 @@ allocate_recurse(winid_t win, GtkAllocation *allocation, guint spacing) { case winmethod_Left: child1.width = win->key_window? - CLAMP(win->constraint_size * win->key_window->unit_width, 0, allocation->width - spacing) + CLAMP(win->constraint_size * win->key_window->unit_width, 0, allocation->width - border) : 0; break; case winmethod_Right: child2.width = win->key_window? - CLAMP(win->constraint_size * win->key_window->unit_width, 0, allocation->width - spacing) + CLAMP(win->constraint_size * win->key_window->unit_width, 0, allocation->width - border) : 0; break; case winmethod_Above: child1.height = win->key_window? - CLAMP(win->constraint_size * win->key_window->unit_height, 0, allocation->height - spacing) + CLAMP(win->constraint_size * win->key_window->unit_height, 0, allocation->height - border) : 0; break; case winmethod_Below: child2.height = win->key_window? - CLAMP(win->constraint_size * win->key_window->unit_height, 0, allocation->height - spacing) + CLAMP(win->constraint_size * win->key_window->unit_height, 0, allocation->height - border) : 0; break; } @@ -458,16 +459,16 @@ allocate_recurse(winid_t win, GtkAllocation *allocation, guint spacing) switch(direction) { case winmethod_Left: - child1.width = MAX(0, (gint)ceil(fraction * (allocation->width - spacing)) ); + child1.width = MAX(0, (gint)ceil(fraction * (allocation->width - border)) ); break; case winmethod_Right: - child2.width = MAX(0, (gint)ceil(fraction * (allocation->width - spacing)) ); + child2.width = MAX(0, (gint)ceil(fraction * (allocation->width - border)) ); break; case winmethod_Above: - child1.height = MAX(0, (gint)ceil(fraction * (allocation->height - spacing)) ); + child1.height = MAX(0, (gint)ceil(fraction * (allocation->height - border)) ); break; case winmethod_Below: - child2.height = MAX(0, (gint)ceil(fraction * (allocation->height - spacing)) ); + child2.height = MAX(0, (gint)ceil(fraction * (allocation->height - border)) ); break; } } @@ -476,27 +477,27 @@ allocate_recurse(winid_t win, GtkAllocation *allocation, guint spacing) switch(direction) { case winmethod_Left: - child2.width = MAX(0, allocation->width - spacing - child1.width); - child2.x = child1.x + child1.width + spacing; + child2.width = MAX(0, allocation->width - border - child1.width); + child2.x = child1.x + child1.width + border; child2.y = child1.y; child1.height = child2.height = allocation->height; break; case winmethod_Right: - child1.width = MAX(0, allocation->width - spacing - child2.width); - child2.x = child1.x + child1.width + spacing; + child1.width = MAX(0, allocation->width - border - child2.width); + child2.x = child1.x + child1.width + border; child2.y = child1.y; child1.height = child2.height = allocation->height; break; case winmethod_Above: - child2.height = MAX(0, allocation->height - spacing - child1.height); + child2.height = MAX(0, allocation->height - border - child1.height); child2.x = child1.x; - child2.y = child1.y + child1.height + spacing; + child2.y = child1.y + child1.height + border; child1.width = child2.width = allocation->width; break; case winmethod_Below: - child1.height = MAX(0, allocation->height - spacing - child2.height); + child1.height = MAX(0, allocation->height - border - child2.height); child2.x = child1.x; - child2.y = child1.y + child1.height + spacing; + child2.y = child1.y + child1.height + border; child1.width = child2.width = allocation->width; break; } @@ -813,7 +814,7 @@ chimara_glk_class_init(ChimaraGlkClass *klass) _chimara_marshal_VOID__UINT_STRING, G_TYPE_NONE, 2, G_TYPE_UINT, G_TYPE_STRING); /** - * ChimaraGlk::iliad-update-screen: + * ChimaraGlk::iliad-screen-update: * @self: The widget that received the signal * @typing: Whether to perform a typing or full screen update * @@ -860,7 +861,10 @@ chimara_glk_class_init(ChimaraGlkClass *klass) /** * ChimaraGlk:spacing: * - * The amount of space between the Glk windows. + * The amount of space between the Glk windows. This space forms a visible + * border between windows; however, if you open a window using the + * %winmethod_NoBorder flag, there will be no spacing between it and its + * sibling window, no matter what the value of this property is. */ g_object_class_install_property(object_class, PROP_SPACING, g_param_spec_uint("spacing", _("Spacing"), @@ -1417,16 +1421,16 @@ chimara_glk_is_line_input_pending(ChimaraGlk *glk) /** * chimara_glk_get_tag: - * @glk: a #ChimarGlk widget + * @glk: a #ChimaraGlk widget * @window: The type of window to retrieve the tag for * @name: The name of the tag to retrieve * * Use this function to get a #GtkTextTag so style properties can be changed. - * See also #chimara_glk_set_css_from_string. + * See also chimara_glk_set_css_from_string(). * * The layout of the text in Chimara is controlled by two sets of tags: one set * describing the style in text buffers and one for text grids. See also the - * GLK specification for the difference between the two. The main narrative of + * Glk specification for the difference between the two. The main narrative of * a game is usually rendered in text buffers, whereas text grids are mostly * used for status bars and in game menus. * @@ -1445,9 +1449,9 @@ chimara_glk_is_line_input_pending(ChimaraGlk *glk) * user2 * hyperlink * pager - * + * */ -GtkTextTag* +GtkTextTag * chimara_glk_get_tag(ChimaraGlk *glk, ChimaraGlkWindowType window, const gchar *name) { CHIMARA_GLK_USE_PRIVATE(glk, priv); @@ -1466,12 +1470,12 @@ chimara_glk_get_tag(ChimaraGlk *glk, ChimaraGlkWindowType window, const gchar *n } /** - * chimara_glk_get_tag: - * @glk: a #ChimarGlk widget + * chimara_glk_get_tag_names: + * @glk: a #ChimaraGlk widget * - * Retrieves the possible tag names to use in #chimara_glk_get_tag. + * Retrieves the possible tag names to use in chimara_glk_get_tag(). */ -const gchar** +const gchar ** chimara_glk_get_tag_names(ChimaraGlk *glk) { return style_get_tag_names(); @@ -1481,7 +1485,7 @@ chimara_glk_get_tag_names(ChimaraGlk *glk) * chimara_glk_get_num_tag_names: * @glk: a #ChimaraGlk widget * - * Retrieves the number of style tags returned by #chimara_glk_get_tag_names. + * Retrieves the number of style tags returned by chimara_glk_get_tag_names(). */ gint chimara_glk_get_num_tag_names(ChimaraGlk *glk) @@ -1495,7 +1499,7 @@ chimara_glk_get_num_tag_names(ChimaraGlk *glk) * * Processes style updates and updates the widget to reflect the new style. * Call this every time you change a property of a #GtkTextTag retrieved by - * #chimara_glk_get_tag. + * chimara_glk_get_tag(). */ void chimara_glk_update_style(ChimaraGlk *glk)