clutter-stage: Set the Cogl framebuffer size after allocating
When handling an allocation on the stage, Clutter uses the oppurtunity to inform Cogl of the new size of the framebuffer so that it can handle the viewport correctly. It queries the size of the window implementation using a backend virtual function. However it was doing this before letting the backend handle the allocation so on Win32 it would end up using the previous framebuffer size. This wasn't affecting the X11 backend because in that case the resizes are asynchronous so setting the stage size causes one allocation which ends up sending a window size request. Eventually a ConfigureNotify is received which causes the size of the stage to be set again and another allocation is fired meaning the framebuffer size will be set again this time with the correct size. In Win32 the resizes are synchronous so we don't have this second allocation.
This commit is contained in:
parent
cc7977988c
commit
52744c0d9d
@ -268,10 +268,6 @@ clutter_stage_allocate (ClutterActor *self,
|
|||||||
height = clutter_actor_box_get_height (box);
|
height = clutter_actor_box_get_height (box);
|
||||||
_clutter_stage_window_get_geometry (priv->impl, &geom);
|
_clutter_stage_window_get_geometry (priv->impl, &geom);
|
||||||
|
|
||||||
/* XXX: Until Cogl becomes fully responsible for backend windows Clutter
|
|
||||||
* need to manually keep it informed of the current window size */
|
|
||||||
_cogl_onscreen_clutter_backend_set_size (geom.width, geom.height);
|
|
||||||
|
|
||||||
/* if the stage is fixed size (for instance, it's using a frame-buffer)
|
/* if the stage is fixed size (for instance, it's using a frame-buffer)
|
||||||
* then we simply ignore any allocation request and override the
|
* then we simply ignore any allocation request and override the
|
||||||
* allocation chain.
|
* allocation chain.
|
||||||
@ -343,6 +339,14 @@ clutter_stage_allocate (ClutterActor *self,
|
|||||||
klass->allocate (self, &override, flags);
|
klass->allocate (self, &override, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* XXX: Until Cogl becomes fully responsible for backend windows
|
||||||
|
* Clutter need to manually keep it informed of the current window
|
||||||
|
* size. We do this after the allocation above so that the stage
|
||||||
|
* window has a chance to update the window size based on the
|
||||||
|
* allocation. */
|
||||||
|
_clutter_stage_window_get_geometry (priv->impl, &geom);
|
||||||
|
_cogl_onscreen_clutter_backend_set_size (geom.width, geom.height);
|
||||||
|
|
||||||
clutter_actor_get_allocation_geometry (self, &geom);
|
clutter_actor_get_allocation_geometry (self, &geom);
|
||||||
if (geom.width != prev_geom.width || geom.height != prev_geom.height)
|
if (geom.width != prev_geom.width || geom.height != prev_geom.height)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user