diff options
author | Thomas White <taw@bitwiz.org.uk> | 2013-09-20 08:51:46 +0200 |
---|---|---|
committer | Thomas White <taw@bitwiz.org.uk> | 2013-09-20 08:51:46 +0200 |
commit | be8a70704d830bae1bbf06cdf0026d24d27f94d1 (patch) | |
tree | 9930a2dcb1baa61ee5de7262de236948cbd28880 /src | |
parent | 4327c87db2f10937ed8c9d9c44376774e53258b4 (diff) |
Fix slide sorter resize
Diffstat (limited to 'src')
-rw-r--r-- | src/slide_sorter.c | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/src/slide_sorter.c b/src/slide_sorter.c index d3c37ba..c76aa20 100644 --- a/src/slide_sorter.c +++ b/src/slide_sorter.c @@ -74,14 +74,19 @@ static gboolean draw_sig(GtkWidget *da, cairo_t *cr, struct slide_sorter *n) int x = i % n->width; int y = i / n->width; + struct slide *s = n->p->slides[i]; cairo_save(cr); cairo_translate(cr, x*(tw+2*bw), y*(th+2*bw)); cairo_translate(cr, bw, bw); /* Border */ cairo_rectangle(cr, 0.0, 0.0, tw, th); - cairo_set_source_surface(cr, n->p->slides[i]->rendered_thumb, - 0.0, 0.0); + if ( s->rendered_thumb != NULL ) { + cairo_set_source_surface(cr, s->rendered_thumb, + 0.0, 0.0); + } else { + cairo_set_source_rgb(cr, 1.0, 1.0, 1.0); + } cairo_fill(cr); cairo_rectangle(cr, 0.5, 0.5, tw, th); @@ -97,7 +102,8 @@ static gboolean draw_sig(GtkWidget *da, cairo_t *cr, struct slide_sorter *n) } -static void size_sig(GtkWidget *da, GdkRectangle *size, struct slide_sorter *n) +static void size_sig(GtkWidget *widget, GdkRectangle *size, + struct slide_sorter *n) { int w, h; int tw, th; @@ -106,12 +112,13 @@ static void size_sig(GtkWidget *da, GdkRectangle *size, struct slide_sorter *n) tw = n->p->thumb_slide_width; th = (n->p->slide_height/n->p->slide_width) * n->p->thumb_slide_width; - w = size->width; + w = gtk_widget_get_allocated_width(n->da); n->width = (w-2*bw) / (tw+2*bw); + if ( n->width < 1 ) n->width = 1; - h = (n->p->num_slides / n->width) * (th+2*bw); + h = ((n->p->num_slides / n->width)+1) * (th+2*bw) + 2*bw; - gtk_widget_set_size_request(da, w, h); /* FIXME: Doesn't work */ + gtk_widget_set_size_request(n->da, tw+2*bw, h); } @@ -144,7 +151,7 @@ void open_slidesorter(struct presentation *p) gtk_window_set_title(GTK_WINDOW(n->window), "Slide sorter"); g_signal_connect(G_OBJECT(n->da), "draw", G_CALLBACK(draw_sig), n); - g_signal_connect(G_OBJECT(n->da), "size-allocate", G_CALLBACK(size_sig), + g_signal_connect(G_OBJECT(n->window), "size-allocate", G_CALLBACK(size_sig), n); g_signal_connect(G_OBJECT(n->window), "destroy", G_CALLBACK(close_slidesorter_sig), p); |