canvas: Allow invalidating the content along with the size
Currently, clutter_canvas_set_size() causes invalidation of the canvas contents only if the newly set size is different. There are cases when we want to invalidate the content regardless of the size set, but we cannot do that right now without possibly causing two invalidations, for instance: clutter_canvas_set_size (canvas, new_width, new_height); clutter_content_invalidate (canvas); will cause two invalidations if the newly set size is different than the existing one. One way to work around it is to check the current size of the canvas and either call set_size() or invalidate() depending on whether the size differs or not, respectively: g_object_get (canvas, "width", &width, "height", &height, NULL); if (width != new_width || height != new_height) clutter_canvas_set_size (canvas, new_width, new_height); else clutter_content_invalidate (canvas); this, howevere, implies knowledge of the internals of ClutterCanvas, and of its optimizations — and encodes a certain behaviour in third party code, which makes changes further down the line harder. We could remove the optimization, and just issue an invalidation regardless of the surface size, but it's not something I'd be happy to do. Instead, we can add a new function specifically for ClutterCanvas that causes a forced invalidation regardless of the size change. If we ever decide to remove the optimization further down the road, we can simply deprecate the function, and make it an alias of invalidate() or set_size().
This commit is contained in:
@ -89,11 +89,16 @@ CLUTTER_AVAILABLE_IN_1_10
|
||||
GType clutter_canvas_get_type (void) G_GNUC_CONST;
|
||||
|
||||
CLUTTER_AVAILABLE_IN_1_10
|
||||
ClutterContent * clutter_canvas_new (void);
|
||||
ClutterContent * clutter_canvas_new (void);
|
||||
CLUTTER_AVAILABLE_IN_1_10
|
||||
void clutter_canvas_set_size (ClutterCanvas *canvas,
|
||||
int width,
|
||||
int height);
|
||||
void clutter_canvas_set_size (ClutterCanvas *canvas,
|
||||
int width,
|
||||
int height);
|
||||
|
||||
CLUTTER_AVAILABLE_IN_1_16
|
||||
void clutter_canvas_invalidate_with_size (ClutterCanvas *canvas,
|
||||
int width,
|
||||
int height);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
|
Reference in New Issue
Block a user