[libhandy] carousel-box: Invalidate cache on realize
- From: Alexander Mikhaylenko <alexm src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libhandy] carousel-box: Invalidate cache on realize
- Date: Mon, 9 Nov 2020 20:12:35 +0000 (UTC)
commit a6c40868a0c013261d575e2c9670c5ac3e1e5a95
Author: Alexander Mikhaylenko <exalm7659 gmail com>
Date: Tue Nov 10 00:26:54 2020 +0500
carousel-box: Invalidate cache on realize
Fixes https://gitlab.gnome.org/GNOME/libhandy/-/issues/363
src/hdy-carousel-box.c | 64 ++++++++++++++++++++++++++------------------------
1 file changed, 33 insertions(+), 31 deletions(-)
---
diff --git a/src/hdy-carousel-box.c b/src/hdy-carousel-box.c
index 0c4c5759..a0bc4cf1 100644
--- a/src/hdy-carousel-box.c
+++ b/src/hdy-carousel-box.c
@@ -235,6 +235,37 @@ invalidate_handler_cb (GdkWindow *window,
cairo_region_union (info->dirty_region, region);
}
+static void
+invalidate_cache_for_child (HdyCarouselBox *self,
+ HdyCarouselBoxChildInfo *child)
+{
+ cairo_rectangle_int_t rect;
+
+ rect.x = 0;
+ rect.y = 0;
+ rect.width = self->child_width;
+ rect.height = self->child_height;
+
+ if (child->surface)
+ g_clear_pointer (&child->surface, cairo_surface_destroy);
+
+ if (child->dirty_region)
+ cairo_region_destroy (child->dirty_region);
+ child->dirty_region = cairo_region_create_rectangle (&rect);
+}
+
+static void
+invalidate_drawing_cache (HdyCarouselBox *self)
+{
+ GList *l;
+
+ for (l = self->children; l; l = l->next) {
+ HdyCarouselBoxChildInfo *child_info = l->data;
+
+ invalidate_cache_for_child (self, child_info);
+ }
+}
+
static void
register_window (HdyCarouselBoxChildInfo *info,
HdyCarouselBox *self)
@@ -273,6 +304,8 @@ register_window (HdyCarouselBoxChildInfo *info,
info->window = window;
gdk_window_set_invalidate_handler (window, invalidate_handler_cb);
+
+ invalidate_cache_for_child (self, info);
}
static void
@@ -679,37 +712,6 @@ hdy_carousel_box_get_preferred_height_for_width (GtkWidget *widget,
minimum_height, natural_height, NULL, NULL);
}
-static void
-invalidate_cache_for_child (HdyCarouselBox *self,
- HdyCarouselBoxChildInfo *child)
-{
- cairo_rectangle_int_t rect;
-
- rect.x = 0;
- rect.y = 0;
- rect.width = self->child_width;
- rect.height = self->child_height;
-
- if (child->surface)
- g_clear_pointer (&child->surface, cairo_surface_destroy);
-
- if (child->dirty_region)
- cairo_region_destroy (child->dirty_region);
- child->dirty_region = cairo_region_create_rectangle (&rect);
-}
-
-static void
-invalidate_drawing_cache (HdyCarouselBox *self)
-{
- GList *l;
-
- for (l = self->children; l; l = l->next) {
- HdyCarouselBoxChildInfo *child_info = l->data;
-
- invalidate_cache_for_child (self, child_info);
- }
-}
-
static void
update_windows (HdyCarouselBox *self)
{
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]