/* Empty cache */
if(link == NULL) {
gdk_threads_leave();
- printf("Cache miss for image %d\n", to_find->resource_number);
return NULL;
}
if(info->width == to_find->width && info->height == to_find->height) {
/* Prescaled image found */
gdk_threads_leave();
- printf("Exact cache hit for image %d\n", to_find->resource_number);
return info;
}
else if(info->width >= to_find->width && info->height >= to_find->height) {
} else {
if(!info->scaled) {
gdk_threads_leave();
- printf("Exact cache hit for image %d\n", to_find->resource_number);
return info; /* Found a match */
}
}
gdk_threads_leave();
- if(match == NULL)
- printf("Cache miss for image %d\n", to_find->resource_number);
- else
- printf("Approx cache hit for image %d\n", to_find->resource_number);
-
return match;
}
* <note><para>
* This function may only be used with graphics windows. To set background
* colors in a text window, use text styles with color hints; see <link
- * linkend="Styles">Styles</link>.
+ * linkend="chimara-Styles">Styles</link>.
* </para></note>
*/
void
VALID_WINDOW(win, return);
g_return_if_fail(win->type == wintype_Graphics);
-
gdk_threads_enter();
GdkPixmap *map;
gtk_image_get_pixmap( GTK_IMAGE(win->widget), &map, NULL );
GdkGC *gc = gdk_gc_new(map);
- gdk_gc_set_foreground( gc, glkcolor_to_gdkcolor(color) );
+ GdkColor gdkcolor;
+ glkcolor_to_gdkcolor(color, &gdkcolor);
+ gdk_gc_set_rgb_fg_color(gc, &gdkcolor);
gdk_draw_rectangle( GDK_DRAWABLE(map), gc, TRUE, left, top, width, height);
gtk_widget_queue_draw(win->widget);
g_object_unref(gc);
glk_window_fill_rect(win, win->background_color, left, top, width, height);
}
+/**
+ * glk_window_flow_break:
+ * @win: A window.
+ *
+ * You may wish to <quote>break</quote> the stream of text down below the
+ * current margin image. Since lines of text can be in any font and size, you
+ * cannot do this by counting newlines. Instead, use this function.
+ *
+ * If the current point in the text is indented around a margin-aligned image,
+ * this acts like the correct number of newlines to start a new line below the
+ * image. (If there are several margin-aligned images, it goes below all of
+ * them.) If the current point is not beside a margin-aligned image, this call
+ * has no effect.
+ *
+ * When a text buffer window is resized, a flow-break behaves cleverly; it may
+ * become active or inactive as necessary. You can consider this function to
+ * insert an invisible mark in the text stream. The mark works out how many
+ * newlines it needs to be whenever the text is formatted for display.
+ *
+ * An example of the use of glk_window_flow_break(): If you display a
+ * left-margin image at the start of every line, they can stack up in a strange
+ * diagonal way that eventually squeezes all the text off the screen.
+ * <note><para>
+ * If you can't picture this, draw some diagrams. Make the margin images more
+ * than one line tall, so that each line starts already indented around the
+ * last image.
+ * </para></note>
+ * To avoid this problem, call glk_window_flow_break() immediately before
+ * glk_image_draw() for every margin-aligned image.
+ *
+ * In all windows other than text buffers, glk_window_flow_break() has no
+ * effect.
+ *
+ * <warning><para>
+ * This function is not implemented yet.
+ * </para></warning>
+ */
void glk_window_flow_break(winid_t win)
{
+ VALID_WINDOW(win, return);
}
/*** Called when the graphics window is resized. Resize the backing pixmap if necessary ***/