Clean up
This commit is contained in:
parent
527a081f54
commit
4361fdd1be
@ -166,38 +166,29 @@ draw_item_border(FastivBrowser *self, cairo_t *cr, int width, int height)
|
|||||||
cairo_matrix_t matrix;
|
cairo_matrix_t matrix;
|
||||||
|
|
||||||
cairo_pattern_set_extend(mask, CAIRO_EXTEND_PAD);
|
cairo_pattern_set_extend(mask, CAIRO_EXTEND_PAD);
|
||||||
|
|
||||||
cairo_save(cr);
|
cairo_save(cr);
|
||||||
cairo_translate(cr, -g_item_border, -g_item_border);
|
cairo_translate(cr, -g_item_border, -g_item_border);
|
||||||
cairo_rectangle(cr, 0, 0, g_item_border + width, g_item_border + height);
|
cairo_rectangle(cr, 0, 0, g_item_border + width, g_item_border + height);
|
||||||
cairo_clip(cr);
|
cairo_clip(cr);
|
||||||
cairo_mask(cr, mask);
|
cairo_mask(cr, mask);
|
||||||
cairo_restore(cr);
|
cairo_restore(cr);
|
||||||
|
|
||||||
cairo_save(cr);
|
cairo_save(cr);
|
||||||
cairo_translate(cr, width + g_item_border, height + g_item_border);
|
cairo_translate(cr, width + g_item_border, height + g_item_border);
|
||||||
cairo_rectangle(cr, 0, 0, -g_item_border - width, -g_item_border - height);
|
cairo_rectangle(cr, 0, 0, -g_item_border - width, -g_item_border - height);
|
||||||
cairo_clip(cr);
|
cairo_clip(cr);
|
||||||
cairo_matrix_init_scale(&matrix, -1, -1);
|
cairo_scale(cr, -1, -1);
|
||||||
cairo_pattern_set_matrix(mask, &matrix);
|
|
||||||
cairo_mask(cr, mask);
|
cairo_mask(cr, mask);
|
||||||
cairo_restore(cr);
|
cairo_restore(cr);
|
||||||
|
|
||||||
cairo_pattern_set_extend(mask, CAIRO_EXTEND_NONE);
|
cairo_pattern_set_extend(mask, CAIRO_EXTEND_NONE);
|
||||||
|
|
||||||
cairo_save(cr);
|
|
||||||
cairo_translate(cr, width + g_item_border, -g_item_border);
|
|
||||||
cairo_matrix_init_scale(&matrix, -1, 1);
|
cairo_matrix_init_scale(&matrix, -1, 1);
|
||||||
|
cairo_matrix_translate(&matrix, -width - g_item_border, g_item_border);
|
||||||
cairo_pattern_set_matrix(mask, &matrix);
|
cairo_pattern_set_matrix(mask, &matrix);
|
||||||
cairo_mask(cr, mask);
|
cairo_mask(cr, mask);
|
||||||
cairo_restore(cr);
|
|
||||||
|
|
||||||
cairo_save(cr);
|
|
||||||
cairo_translate(cr, -g_item_border, height + g_item_border);
|
|
||||||
cairo_matrix_init_scale(&matrix, 1, -1);
|
cairo_matrix_init_scale(&matrix, 1, -1);
|
||||||
|
cairo_matrix_translate(&matrix, g_item_border, -height - g_item_border);
|
||||||
cairo_pattern_set_matrix(mask, &matrix);
|
cairo_pattern_set_matrix(mask, &matrix);
|
||||||
cairo_mask(cr, mask);
|
cairo_mask(cr, mask);
|
||||||
cairo_restore(cr);
|
|
||||||
|
|
||||||
// TODO(p): Distinguish between an inner and outer border,
|
// TODO(p): Distinguish between an inner and outer border,
|
||||||
// don't override part of the glow.
|
// don't override part of the glow.
|
||||||
@ -209,6 +200,31 @@ draw_item_border(FastivBrowser *self, cairo_t *cr, int width, int height)
|
|||||||
cairo_pattern_destroy(mask);
|
cairo_pattern_destroy(mask);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
draw_row(FastivBrowser *self, cairo_t *cr, const Row *row)
|
||||||
|
{
|
||||||
|
for (Item *item = row->items; item->entry; item++) {
|
||||||
|
cairo_surface_t *thumbnail = item->entry->thumbnail;
|
||||||
|
int width = cairo_image_surface_get_width(thumbnail);
|
||||||
|
int height = cairo_image_surface_get_height(thumbnail);
|
||||||
|
int x = row->x_offset + item->x_offset;
|
||||||
|
int y = row->y_offset + g_row_height - height;
|
||||||
|
|
||||||
|
cairo_save(cr);
|
||||||
|
cairo_translate(cr, x, y);
|
||||||
|
draw_item_border(self, cr, width, height);
|
||||||
|
|
||||||
|
// TODO(p): See if a mild checkerboard pattern would not look nice.
|
||||||
|
cairo_rectangle(cr, 0, 0, width, height);
|
||||||
|
cairo_set_source_rgb(cr, .25, .25, .25);
|
||||||
|
cairo_fill(cr);
|
||||||
|
|
||||||
|
cairo_set_source_surface(cr, thumbnail, 0, 0);
|
||||||
|
cairo_paint(cr);
|
||||||
|
cairo_restore(cr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// --- Boilerplate -------------------------------------------------------------
|
// --- Boilerplate -------------------------------------------------------------
|
||||||
|
|
||||||
// TODO(p): For proper navigation, we need to implement GtkScrollable.
|
// TODO(p): For proper navigation, we need to implement GtkScrollable.
|
||||||
@ -313,28 +329,8 @@ fastiv_browser_draw(GtkWidget *widget, cairo_t *cr)
|
|||||||
allocation.width, allocation.height);
|
allocation.width, allocation.height);
|
||||||
|
|
||||||
for (guint i = 0; i < self->layouted_rows->len; i++) {
|
for (guint i = 0; i < self->layouted_rows->len; i++) {
|
||||||
const Row *row = &g_array_index(self->layouted_rows, Row, i);
|
// TODO(p): Test whether we need to render the row first.
|
||||||
for (Item *item = row->items; item->entry; item++) {
|
draw_row(self, cr, &g_array_index(self->layouted_rows, Row, i));
|
||||||
cairo_surface_t *thumbnail = item->entry->thumbnail;
|
|
||||||
int width = cairo_image_surface_get_width(thumbnail);
|
|
||||||
int height = cairo_image_surface_get_height(thumbnail);
|
|
||||||
int x = row->x_offset + item->x_offset;
|
|
||||||
int y = row->y_offset + g_row_height - height;
|
|
||||||
|
|
||||||
// TODO(p): Test whether we need to render this first.
|
|
||||||
|
|
||||||
cairo_save(cr);
|
|
||||||
cairo_translate (cr, x, y);
|
|
||||||
draw_item_border(self, cr, width, height);
|
|
||||||
|
|
||||||
cairo_rectangle(cr, 0, 0, width, height);
|
|
||||||
cairo_set_source_rgb(cr, .25, .25, .25);
|
|
||||||
cairo_fill(cr);
|
|
||||||
|
|
||||||
cairo_set_source_surface(cr, thumbnail, 0, 0);
|
|
||||||
cairo_paint(cr);
|
|
||||||
cairo_restore(cr);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user