cogl/onscreen: Remove explicit 'resizable':ness
Mutter didn't use the APIs for resizeability of CoglOnscreens but managed the size itself. For the native backend we don't ever resize onscreens. Thus, remove this unused functionality. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1514>
This commit is contained in:
parent
e43b95cd11
commit
4ec0975e91
10 changed files with 1 additions and 399 deletions
|
@ -70,9 +70,6 @@ _cogl_onscreen_notify_frame_sync (CoglOnscreen *onscreen, CoglFrameInfo *info);
|
||||||
COGL_EXPORT void
|
COGL_EXPORT void
|
||||||
_cogl_onscreen_notify_complete (CoglOnscreen *onscreen, CoglFrameInfo *info);
|
_cogl_onscreen_notify_complete (CoglOnscreen *onscreen, CoglFrameInfo *info);
|
||||||
|
|
||||||
void
|
|
||||||
_cogl_onscreen_notify_resize (CoglOnscreen *onscreen);
|
|
||||||
|
|
||||||
void
|
void
|
||||||
_cogl_onscreen_queue_dirty (CoglOnscreen *onscreen,
|
_cogl_onscreen_queue_dirty (CoglOnscreen *onscreen,
|
||||||
const CoglOnscreenDirtyInfo *info);
|
const CoglOnscreenDirtyInfo *info);
|
||||||
|
|
|
@ -48,9 +48,6 @@ typedef struct _CoglOnscreenPrivate
|
||||||
{
|
{
|
||||||
CoglList frame_closures;
|
CoglList frame_closures;
|
||||||
|
|
||||||
gboolean resizable;
|
|
||||||
CoglList resize_closures;
|
|
||||||
|
|
||||||
CoglList dirty_closures;
|
CoglList dirty_closures;
|
||||||
|
|
||||||
int64_t frame_counter;
|
int64_t frame_counter;
|
||||||
|
@ -76,10 +73,6 @@ cogl_dummy_free (gpointer data)
|
||||||
COGL_GTYPE_DEFINE_BOXED (FrameClosure, frame_closure,
|
COGL_GTYPE_DEFINE_BOXED (FrameClosure, frame_closure,
|
||||||
cogl_dummy_copy,
|
cogl_dummy_copy,
|
||||||
cogl_dummy_free);
|
cogl_dummy_free);
|
||||||
COGL_GTYPE_DEFINE_BOXED (OnscreenResizeClosure,
|
|
||||||
onscreen_resize_closure,
|
|
||||||
cogl_dummy_copy,
|
|
||||||
cogl_dummy_free);
|
|
||||||
COGL_GTYPE_DEFINE_BOXED (OnscreenDirtyClosure,
|
COGL_GTYPE_DEFINE_BOXED (OnscreenDirtyClosure,
|
||||||
onscreen_dirty_closure,
|
onscreen_dirty_closure,
|
||||||
cogl_dummy_copy,
|
cogl_dummy_copy,
|
||||||
|
@ -118,7 +111,6 @@ cogl_onscreen_init_from_template (CoglOnscreen *onscreen,
|
||||||
CoglFramebuffer *framebuffer = COGL_FRAMEBUFFER (onscreen);
|
CoglFramebuffer *framebuffer = COGL_FRAMEBUFFER (onscreen);
|
||||||
|
|
||||||
_cogl_list_init (&priv->frame_closures);
|
_cogl_list_init (&priv->frame_closures);
|
||||||
_cogl_list_init (&priv->resize_closures);
|
|
||||||
_cogl_list_init (&priv->dirty_closures);
|
_cogl_list_init (&priv->dirty_closures);
|
||||||
|
|
||||||
cogl_framebuffer_init_config (framebuffer, &onscreen_template->config);
|
cogl_framebuffer_init_config (framebuffer, &onscreen_template->config);
|
||||||
|
@ -145,7 +137,6 @@ cogl_onscreen_dispose (GObject *object)
|
||||||
CoglOnscreenPrivate *priv = cogl_onscreen_get_instance_private (onscreen);
|
CoglOnscreenPrivate *priv = cogl_onscreen_get_instance_private (onscreen);
|
||||||
CoglFrameInfo *frame_info;
|
CoglFrameInfo *frame_info;
|
||||||
|
|
||||||
_cogl_closure_list_disconnect_all (&priv->resize_closures);
|
|
||||||
_cogl_closure_list_disconnect_all (&priv->frame_closures);
|
_cogl_closure_list_disconnect_all (&priv->frame_closures);
|
||||||
_cogl_closure_list_disconnect_all (&priv->dirty_closures);
|
_cogl_closure_list_disconnect_all (&priv->dirty_closures);
|
||||||
|
|
||||||
|
@ -556,19 +547,6 @@ _cogl_onscreen_notify_complete (CoglOnscreen *onscreen, CoglFrameInfo *info)
|
||||||
notify_event (onscreen, COGL_FRAME_EVENT_COMPLETE, info);
|
notify_event (onscreen, COGL_FRAME_EVENT_COMPLETE, info);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
_cogl_onscreen_notify_resize (CoglOnscreen *onscreen)
|
|
||||||
{
|
|
||||||
CoglOnscreenPrivate *priv = cogl_onscreen_get_instance_private (onscreen);
|
|
||||||
CoglFramebuffer *framebuffer = COGL_FRAMEBUFFER (onscreen);
|
|
||||||
|
|
||||||
_cogl_closure_list_invoke (&priv->resize_closures,
|
|
||||||
CoglOnscreenResizeCallback,
|
|
||||||
onscreen,
|
|
||||||
cogl_framebuffer_get_width (framebuffer),
|
|
||||||
cogl_framebuffer_get_height (framebuffer));
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
_cogl_framebuffer_winsys_update_size (CoglFramebuffer *framebuffer,
|
_cogl_framebuffer_winsys_update_size (CoglFramebuffer *framebuffer,
|
||||||
int width, int height)
|
int width, int height)
|
||||||
|
@ -584,58 +562,6 @@ _cogl_framebuffer_winsys_update_size (CoglFramebuffer *framebuffer,
|
||||||
_cogl_onscreen_queue_full_dirty (COGL_ONSCREEN (framebuffer));
|
_cogl_onscreen_queue_full_dirty (COGL_ONSCREEN (framebuffer));
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
cogl_onscreen_set_resizable (CoglOnscreen *onscreen,
|
|
||||||
gboolean resizable)
|
|
||||||
{
|
|
||||||
CoglOnscreenPrivate *priv = cogl_onscreen_get_instance_private (onscreen);
|
|
||||||
CoglFramebuffer *framebuffer;
|
|
||||||
const CoglWinsysVtable *winsys;
|
|
||||||
|
|
||||||
if (priv->resizable == resizable)
|
|
||||||
return;
|
|
||||||
|
|
||||||
priv->resizable = resizable;
|
|
||||||
|
|
||||||
framebuffer = COGL_FRAMEBUFFER (onscreen);
|
|
||||||
if (cogl_framebuffer_is_allocated (framebuffer))
|
|
||||||
{
|
|
||||||
winsys = _cogl_framebuffer_get_winsys (COGL_FRAMEBUFFER (onscreen));
|
|
||||||
|
|
||||||
if (winsys->onscreen_set_resizable)
|
|
||||||
winsys->onscreen_set_resizable (onscreen, resizable);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
gboolean
|
|
||||||
cogl_onscreen_get_resizable (CoglOnscreen *onscreen)
|
|
||||||
{
|
|
||||||
CoglOnscreenPrivate *priv = cogl_onscreen_get_instance_private (onscreen);
|
|
||||||
|
|
||||||
return priv->resizable;
|
|
||||||
}
|
|
||||||
|
|
||||||
CoglOnscreenResizeClosure *
|
|
||||||
cogl_onscreen_add_resize_callback (CoglOnscreen *onscreen,
|
|
||||||
CoglOnscreenResizeCallback callback,
|
|
||||||
void *user_data,
|
|
||||||
CoglUserDataDestroyCallback destroy)
|
|
||||||
{
|
|
||||||
CoglOnscreenPrivate *priv = cogl_onscreen_get_instance_private (onscreen);
|
|
||||||
|
|
||||||
return _cogl_closure_list_add (&priv->resize_closures,
|
|
||||||
callback,
|
|
||||||
user_data,
|
|
||||||
destroy);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
cogl_onscreen_remove_resize_callback (CoglOnscreen *onscreen,
|
|
||||||
CoglOnscreenResizeClosure *closure)
|
|
||||||
{
|
|
||||||
_cogl_closure_disconnect (closure);
|
|
||||||
}
|
|
||||||
|
|
||||||
CoglOnscreenDirtyClosure *
|
CoglOnscreenDirtyClosure *
|
||||||
cogl_onscreen_add_dirty_callback (CoglOnscreen *onscreen,
|
cogl_onscreen_add_dirty_callback (CoglOnscreen *onscreen,
|
||||||
CoglOnscreenDirtyCallback callback,
|
CoglOnscreenDirtyCallback callback,
|
||||||
|
|
|
@ -493,168 +493,6 @@ COGL_EXPORT void
|
||||||
cogl_onscreen_remove_frame_callback (CoglOnscreen *onscreen,
|
cogl_onscreen_remove_frame_callback (CoglOnscreen *onscreen,
|
||||||
CoglFrameClosure *closure);
|
CoglFrameClosure *closure);
|
||||||
|
|
||||||
/**
|
|
||||||
* cogl_onscreen_set_resizable:
|
|
||||||
* @onscreen: A #CoglOnscreen framebuffer
|
|
||||||
*
|
|
||||||
* Lets you request Cogl to mark an @onscreen framebuffer as
|
|
||||||
* resizable or not.
|
|
||||||
*
|
|
||||||
* By default, if possible, a @onscreen will be created by Cogl
|
|
||||||
* as non resizable, but it is not guaranteed that this is always
|
|
||||||
* possible for all window systems.
|
|
||||||
*
|
|
||||||
* <note>Cogl does not know whether marking the @onscreen framebuffer
|
|
||||||
* is truly meaningful for your current window system (consider
|
|
||||||
* applications being run fullscreen on a phone or TV) so this
|
|
||||||
* function may not have any useful effect. If you are running on a
|
|
||||||
* multi windowing system such as X11 or Win32 or OSX then Cogl will
|
|
||||||
* request to the window system that users be allowed to resize the
|
|
||||||
* @onscreen, although it's still possible that some other window
|
|
||||||
* management policy will block this possibility.</note>
|
|
||||||
*
|
|
||||||
* <note>Whenever an @onscreen framebuffer is resized the viewport
|
|
||||||
* will be automatically updated to match the new size of the
|
|
||||||
* framebuffer with an origin of (0,0). If your application needs more
|
|
||||||
* specialized control of the viewport it will need to register a
|
|
||||||
* resize handler using cogl_onscreen_add_resize_callback() so that it
|
|
||||||
* can track when the viewport has been changed automatically.</note>
|
|
||||||
*
|
|
||||||
* Since: 2.0
|
|
||||||
*/
|
|
||||||
COGL_EXPORT void
|
|
||||||
cogl_onscreen_set_resizable (CoglOnscreen *onscreen,
|
|
||||||
gboolean resizable);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* cogl_onscreen_get_resizable:
|
|
||||||
* @onscreen: A #CoglOnscreen framebuffer
|
|
||||||
*
|
|
||||||
* Lets you query whether @onscreen has been marked as resizable via
|
|
||||||
* the cogl_onscreen_set_resizable() api.
|
|
||||||
*
|
|
||||||
* By default, if possible, a @onscreen will be created by Cogl
|
|
||||||
* as non resizable, but it is not guaranteed that this is always
|
|
||||||
* possible for all window systems.
|
|
||||||
*
|
|
||||||
* <note>If cogl_onscreen_set_resizable(@onscreen, %TRUE) has been
|
|
||||||
* previously called then this function will return %TRUE, but it's
|
|
||||||
* possible that the current windowing system being used does not
|
|
||||||
* support window resizing (consider fullscreen windows on a phone or
|
|
||||||
* a TV). This function is not aware of whether resizing is truly
|
|
||||||
* meaningful with your window system, only whether the @onscreen has
|
|
||||||
* been marked as resizable.</note>
|
|
||||||
*
|
|
||||||
* Return value: Returns whether @onscreen has been marked as
|
|
||||||
* resizable or not.
|
|
||||||
* Since: 2.0
|
|
||||||
*/
|
|
||||||
COGL_EXPORT gboolean
|
|
||||||
cogl_onscreen_get_resizable (CoglOnscreen *onscreen);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* CoglOnscreenResizeCallback:
|
|
||||||
* @onscreen: A #CoglOnscreen framebuffer that was resized
|
|
||||||
* @width: The new width of @onscreen
|
|
||||||
* @height: The new height of @onscreen
|
|
||||||
* @user_data: The private passed to
|
|
||||||
* cogl_onscreen_add_resize_callback()
|
|
||||||
*
|
|
||||||
* Is a callback type used with the
|
|
||||||
* cogl_onscreen_add_resize_callback() allowing applications to be
|
|
||||||
* notified whenever an @onscreen framebuffer is resized.
|
|
||||||
*
|
|
||||||
* <note>Cogl automatically updates the viewport of an @onscreen
|
|
||||||
* framebuffer that is resized so this callback is also an indication
|
|
||||||
* that the viewport has been modified too</note>
|
|
||||||
*
|
|
||||||
* <note>A resize callback will only ever be called while dispatching
|
|
||||||
* Cogl events from the system mainloop; so for example during
|
|
||||||
* cogl_poll_renderer_dispatch(). This is so that callbacks shouldn't
|
|
||||||
* occur while an application might have arbitrary locks held for
|
|
||||||
* example.</note>
|
|
||||||
*
|
|
||||||
* Since: 2.0
|
|
||||||
*/
|
|
||||||
typedef void (*CoglOnscreenResizeCallback) (CoglOnscreen *onscreen,
|
|
||||||
int width,
|
|
||||||
int height,
|
|
||||||
void *user_data);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* CoglOnscreenResizeClosure:
|
|
||||||
*
|
|
||||||
* An opaque type that tracks a #CoglOnscreenResizeCallback and
|
|
||||||
* associated user data. A #CoglOnscreenResizeClosure pointer will be
|
|
||||||
* returned from cogl_onscreen_add_resize_callback() and it allows you
|
|
||||||
* to remove a callback later using
|
|
||||||
* cogl_onscreen_remove_resize_callback().
|
|
||||||
*
|
|
||||||
* Since: 2.0
|
|
||||||
* Stability: unstable
|
|
||||||
*/
|
|
||||||
typedef struct _CoglClosure CoglOnscreenResizeClosure;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* cogl_onscreen_resize_closure_get_gtype:
|
|
||||||
*
|
|
||||||
* Returns: a #GType that can be used with the GLib type system.
|
|
||||||
*/
|
|
||||||
COGL_EXPORT
|
|
||||||
GType cogl_onscreen_resize_closure_get_gtype (void);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* cogl_onscreen_add_resize_callback:
|
|
||||||
* @onscreen: A #CoglOnscreen framebuffer
|
|
||||||
* @callback: (scope notified): A #CoglOnscreenResizeCallback to call when
|
|
||||||
* the @onscreen changes size.
|
|
||||||
* @user_data: (closure): Private data to be passed to @callback.
|
|
||||||
* @destroy: (allow-none): An optional callback to destroy @user_data
|
|
||||||
* when the @callback is removed or @onscreen is freed.
|
|
||||||
*
|
|
||||||
* Registers a @callback with @onscreen that will be called whenever
|
|
||||||
* the @onscreen framebuffer changes size.
|
|
||||||
*
|
|
||||||
* The @callback can be removed using
|
|
||||||
* cogl_onscreen_remove_resize_callback() passing the returned closure
|
|
||||||
* pointer.
|
|
||||||
*
|
|
||||||
* <note>Since Cogl automatically updates the viewport of an @onscreen
|
|
||||||
* framebuffer that is resized, a resize callback can also be used to
|
|
||||||
* track when the viewport has been changed automatically by Cogl in
|
|
||||||
* case your application needs more specialized control over the
|
|
||||||
* viewport.</note>
|
|
||||||
*
|
|
||||||
* <note>A resize callback will only ever be called while dispatching
|
|
||||||
* Cogl events from the system mainloop; so for example during
|
|
||||||
* cogl_poll_renderer_dispatch(). This is so that callbacks shouldn't
|
|
||||||
* occur while an application might have arbitrary locks held for
|
|
||||||
* example.</note>
|
|
||||||
*
|
|
||||||
* Return value: a #CoglOnscreenResizeClosure pointer that can be used to
|
|
||||||
* remove the callback and associated @user_data later.
|
|
||||||
* Since: 2.0
|
|
||||||
*/
|
|
||||||
COGL_EXPORT CoglOnscreenResizeClosure *
|
|
||||||
cogl_onscreen_add_resize_callback (CoglOnscreen *onscreen,
|
|
||||||
CoglOnscreenResizeCallback callback,
|
|
||||||
void *user_data,
|
|
||||||
CoglUserDataDestroyCallback destroy);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* cogl_onscreen_remove_resize_callback:
|
|
||||||
* @onscreen: A #CoglOnscreen framebuffer
|
|
||||||
* @closure: An identifier returned from cogl_onscreen_add_resize_callback()
|
|
||||||
*
|
|
||||||
* Removes a resize @callback and @user_data pair that were previously
|
|
||||||
* associated with @onscreen via cogl_onscreen_add_resize_callback().
|
|
||||||
*
|
|
||||||
* Since: 2.0
|
|
||||||
*/
|
|
||||||
COGL_EXPORT void
|
|
||||||
cogl_onscreen_remove_resize_callback (CoglOnscreen *onscreen,
|
|
||||||
CoglOnscreenResizeClosure *closure);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* CoglOnscreenDirtyInfo:
|
* CoglOnscreenDirtyInfo:
|
||||||
* @x: Left edge of the dirty rectangle
|
* @x: Left edge of the dirty rectangle
|
||||||
|
|
|
@ -50,7 +50,6 @@ struct _CoglOnscreenGlx
|
||||||
uint32_t last_swap_vsync_counter;
|
uint32_t last_swap_vsync_counter;
|
||||||
uint32_t pending_sync_notify;
|
uint32_t pending_sync_notify;
|
||||||
uint32_t pending_complete_notify;
|
uint32_t pending_complete_notify;
|
||||||
uint32_t pending_resize_notify;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
G_DEFINE_TYPE (CoglOnscreenGlx, cogl_onscreen_glx,
|
G_DEFINE_TYPE (CoglOnscreenGlx, cogl_onscreen_glx,
|
||||||
|
@ -552,8 +551,7 @@ cogl_onscreen_glx_flush_notification (CoglOnscreen *onscreen)
|
||||||
CoglOnscreenGlx *onscreen_glx = COGL_ONSCREEN_GLX (onscreen);
|
CoglOnscreenGlx *onscreen_glx = COGL_ONSCREEN_GLX (onscreen);
|
||||||
|
|
||||||
while (onscreen_glx->pending_sync_notify > 0 ||
|
while (onscreen_glx->pending_sync_notify > 0 ||
|
||||||
onscreen_glx->pending_complete_notify > 0 ||
|
onscreen_glx->pending_complete_notify > 0)
|
||||||
onscreen_glx->pending_resize_notify > 0)
|
|
||||||
{
|
{
|
||||||
if (onscreen_glx->pending_sync_notify > 0)
|
if (onscreen_glx->pending_sync_notify > 0)
|
||||||
{
|
{
|
||||||
|
@ -573,12 +571,6 @@ cogl_onscreen_glx_flush_notification (CoglOnscreen *onscreen)
|
||||||
cogl_object_unref (info);
|
cogl_object_unref (info);
|
||||||
onscreen_glx->pending_complete_notify--;
|
onscreen_glx->pending_complete_notify--;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (onscreen_glx->pending_resize_notify > 0)
|
|
||||||
{
|
|
||||||
_cogl_onscreen_notify_resize (onscreen);
|
|
||||||
onscreen_glx->pending_resize_notify--;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -958,44 +950,6 @@ _cogl_winsys_onscreen_glx_get_window_xid (CoglOnscreen *onscreen)
|
||||||
return onscreen_glx->xwin;
|
return onscreen_glx->xwin;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
_cogl_winsys_onscreen_glx_set_resizable (CoglOnscreen *onscreen,
|
|
||||||
gboolean resizable)
|
|
||||||
{
|
|
||||||
CoglOnscreenGlx *onscreen_glx = COGL_ONSCREEN_GLX (onscreen);
|
|
||||||
CoglFramebuffer *framebuffer = COGL_FRAMEBUFFER (onscreen);
|
|
||||||
CoglContext *context = cogl_framebuffer_get_context (framebuffer);
|
|
||||||
CoglXlibRenderer *xlib_renderer =
|
|
||||||
_cogl_xlib_renderer_get_data (context->display->renderer);
|
|
||||||
|
|
||||||
XSizeHints *size_hints = XAllocSizeHints ();
|
|
||||||
|
|
||||||
if (resizable)
|
|
||||||
{
|
|
||||||
/* TODO: Add cogl_onscreen_request_minimum_size () */
|
|
||||||
size_hints->min_width = 1;
|
|
||||||
size_hints->min_height = 1;
|
|
||||||
|
|
||||||
size_hints->max_width = INT_MAX;
|
|
||||||
size_hints->max_height = INT_MAX;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
int width = cogl_framebuffer_get_width (framebuffer);
|
|
||||||
int height = cogl_framebuffer_get_height (framebuffer);
|
|
||||||
|
|
||||||
size_hints->min_width = width;
|
|
||||||
size_hints->min_height = height;
|
|
||||||
|
|
||||||
size_hints->max_width = width;
|
|
||||||
size_hints->max_height = height;
|
|
||||||
}
|
|
||||||
|
|
||||||
XSetWMNormalHints (xlib_renderer->xdpy, onscreen_glx->xwin, size_hints);
|
|
||||||
|
|
||||||
XFree (size_hints);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
cogl_onscreen_glx_notify_swap_buffers (CoglOnscreen *onscreen,
|
cogl_onscreen_glx_notify_swap_buffers (CoglOnscreen *onscreen,
|
||||||
GLXBufferSwapComplete *swap_event)
|
GLXBufferSwapComplete *swap_event)
|
||||||
|
@ -1079,8 +1033,6 @@ cogl_onscreen_glx_resize (CoglOnscreen *onscreen,
|
||||||
NULL);
|
NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
onscreen_glx->pending_resize_notify++;
|
|
||||||
|
|
||||||
if (configure_event->send_event)
|
if (configure_event->send_event)
|
||||||
{
|
{
|
||||||
x = configure_event->x;
|
x = configure_event->x;
|
||||||
|
|
|
@ -47,10 +47,6 @@ _cogl_winsys_onscreen_glx_get_buffer_age (CoglOnscreen *onscreen);
|
||||||
uint32_t
|
uint32_t
|
||||||
_cogl_winsys_onscreen_glx_get_window_xid (CoglOnscreen *onscreen);
|
_cogl_winsys_onscreen_glx_get_window_xid (CoglOnscreen *onscreen);
|
||||||
|
|
||||||
void
|
|
||||||
_cogl_winsys_onscreen_glx_set_resizable (CoglOnscreen *onscreen,
|
|
||||||
gboolean resizable);
|
|
||||||
|
|
||||||
void
|
void
|
||||||
cogl_onscreen_glx_resize (CoglOnscreen *onscreen,
|
cogl_onscreen_glx_resize (CoglOnscreen *onscreen,
|
||||||
XConfigureEvent *configure_event);
|
XConfigureEvent *configure_event);
|
||||||
|
|
|
@ -39,8 +39,6 @@ struct _CoglOnscreenXlib
|
||||||
CoglOnscreenEgl parent;
|
CoglOnscreenEgl parent;
|
||||||
|
|
||||||
Window xwin;
|
Window xwin;
|
||||||
|
|
||||||
gboolean pending_resize_notify;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
G_DEFINE_TYPE (CoglOnscreenXlib, cogl_onscreen_xlib,
|
G_DEFINE_TYPE (CoglOnscreenXlib, cogl_onscreen_xlib,
|
||||||
|
@ -196,44 +194,6 @@ cogl_onscreen_xlib_dispose (GObject *object)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
_cogl_winsys_onscreen_xlib_set_resizable (CoglOnscreen *onscreen,
|
|
||||||
gboolean resizable)
|
|
||||||
{
|
|
||||||
CoglOnscreenXlib *onscreen_xlib = COGL_ONSCREEN_XLIB (onscreen);
|
|
||||||
CoglFramebuffer *framebuffer = COGL_FRAMEBUFFER (onscreen);
|
|
||||||
CoglContext *context = cogl_framebuffer_get_context (framebuffer);
|
|
||||||
CoglXlibRenderer *xlib_renderer =
|
|
||||||
_cogl_xlib_renderer_get_data (context->display->renderer);
|
|
||||||
|
|
||||||
XSizeHints *size_hints = XAllocSizeHints ();
|
|
||||||
|
|
||||||
if (resizable)
|
|
||||||
{
|
|
||||||
/* TODO: Add cogl_onscreen_request_minimum_size () */
|
|
||||||
size_hints->min_width = 1;
|
|
||||||
size_hints->min_height = 1;
|
|
||||||
|
|
||||||
size_hints->max_width = INT_MAX;
|
|
||||||
size_hints->max_height = INT_MAX;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
int width = cogl_framebuffer_get_width (framebuffer);
|
|
||||||
int height = cogl_framebuffer_get_height (framebuffer);
|
|
||||||
|
|
||||||
size_hints->min_width = width;
|
|
||||||
size_hints->min_height = height;
|
|
||||||
|
|
||||||
size_hints->max_width = width;
|
|
||||||
size_hints->max_height = height;
|
|
||||||
}
|
|
||||||
|
|
||||||
XSetWMNormalHints (xlib_renderer->xdpy, onscreen_xlib->xwin, size_hints);
|
|
||||||
|
|
||||||
XFree (size_hints);
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32_t
|
uint32_t
|
||||||
_cogl_winsys_onscreen_xlib_get_window_xid (CoglOnscreen *onscreen)
|
_cogl_winsys_onscreen_xlib_get_window_xid (CoglOnscreen *onscreen)
|
||||||
{
|
{
|
||||||
|
@ -251,69 +211,14 @@ cogl_onscreen_xlib_is_for_window (CoglOnscreen *onscreen,
|
||||||
return onscreen_xlib->xwin == window;
|
return onscreen_xlib->xwin == window;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
flush_pending_resize_notifications_cb (void *data,
|
|
||||||
void *user_data)
|
|
||||||
{
|
|
||||||
CoglFramebuffer *framebuffer = data;
|
|
||||||
|
|
||||||
if (COGL_IS_ONSCREEN (framebuffer))
|
|
||||||
{
|
|
||||||
CoglOnscreen *onscreen = COGL_ONSCREEN (framebuffer);
|
|
||||||
CoglOnscreenXlib *onscreen_xlib = COGL_ONSCREEN_XLIB (onscreen);
|
|
||||||
|
|
||||||
if (onscreen_xlib->pending_resize_notify)
|
|
||||||
{
|
|
||||||
_cogl_onscreen_notify_resize (onscreen);
|
|
||||||
onscreen_xlib->pending_resize_notify = FALSE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
flush_pending_resize_notifications_idle (void *user_data)
|
|
||||||
{
|
|
||||||
CoglContext *context = user_data;
|
|
||||||
CoglRenderer *renderer = context->display->renderer;
|
|
||||||
CoglRendererEGL *egl_renderer = renderer->winsys;
|
|
||||||
|
|
||||||
/* This needs to be disconnected before invoking the callbacks in
|
|
||||||
* case the callbacks cause it to be queued again */
|
|
||||||
_cogl_closure_disconnect (egl_renderer->resize_notify_idle);
|
|
||||||
egl_renderer->resize_notify_idle = NULL;
|
|
||||||
|
|
||||||
g_list_foreach (context->framebuffers,
|
|
||||||
flush_pending_resize_notifications_cb,
|
|
||||||
NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
cogl_onscreen_xlib_resize (CoglOnscreen *onscreen,
|
cogl_onscreen_xlib_resize (CoglOnscreen *onscreen,
|
||||||
int width,
|
int width,
|
||||||
int height)
|
int height)
|
||||||
{
|
{
|
||||||
CoglOnscreenXlib *onscreen_xlib = COGL_ONSCREEN_XLIB (onscreen);
|
|
||||||
CoglFramebuffer *framebuffer = COGL_FRAMEBUFFER (onscreen);
|
CoglFramebuffer *framebuffer = COGL_FRAMEBUFFER (onscreen);
|
||||||
CoglContext *context = cogl_framebuffer_get_context (framebuffer);
|
|
||||||
CoglRenderer *renderer = context->display->renderer;
|
|
||||||
CoglRendererEGL *egl_renderer = renderer->winsys;
|
|
||||||
|
|
||||||
|
|
||||||
_cogl_framebuffer_winsys_update_size (framebuffer, width, height);
|
_cogl_framebuffer_winsys_update_size (framebuffer, width, height);
|
||||||
|
|
||||||
/* We only want to notify that a resize happened when the
|
|
||||||
* application calls cogl_context_dispatch so instead of immediately
|
|
||||||
* notifying we queue an idle callback */
|
|
||||||
if (!egl_renderer->resize_notify_idle)
|
|
||||||
{
|
|
||||||
egl_renderer->resize_notify_idle =
|
|
||||||
_cogl_poll_renderer_add_idle (renderer,
|
|
||||||
flush_pending_resize_notifications_idle,
|
|
||||||
context,
|
|
||||||
NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
onscreen_xlib->pending_resize_notify = TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CoglOnscreenXlib *
|
CoglOnscreenXlib *
|
||||||
|
|
|
@ -49,10 +49,6 @@ cogl_onscreen_xlib_new (CoglContext *context,
|
||||||
void
|
void
|
||||||
_cogl_winsys_egl_onscreen_xlib_deinit (CoglOnscreen *onscreen);
|
_cogl_winsys_egl_onscreen_xlib_deinit (CoglOnscreen *onscreen);
|
||||||
|
|
||||||
void
|
|
||||||
_cogl_winsys_onscreen_xlib_set_resizable (CoglOnscreen *onscreen,
|
|
||||||
gboolean resizable);
|
|
||||||
|
|
||||||
uint32_t
|
uint32_t
|
||||||
_cogl_winsys_onscreen_xlib_get_window_xid (CoglOnscreen *onscreen);
|
_cogl_winsys_onscreen_xlib_get_window_xid (CoglOnscreen *onscreen);
|
||||||
|
|
||||||
|
|
|
@ -590,9 +590,6 @@ _cogl_winsys_egl_xlib_get_vtable (void)
|
||||||
vtable.renderer_connect = _cogl_winsys_renderer_connect;
|
vtable.renderer_connect = _cogl_winsys_renderer_connect;
|
||||||
vtable.renderer_disconnect = _cogl_winsys_renderer_disconnect;
|
vtable.renderer_disconnect = _cogl_winsys_renderer_disconnect;
|
||||||
|
|
||||||
vtable.onscreen_set_resizable =
|
|
||||||
_cogl_winsys_onscreen_xlib_set_resizable;
|
|
||||||
|
|
||||||
vtable.onscreen_x11_get_window_xid =
|
vtable.onscreen_x11_get_window_xid =
|
||||||
_cogl_winsys_onscreen_xlib_get_window_xid;
|
_cogl_winsys_onscreen_xlib_get_window_xid;
|
||||||
|
|
||||||
|
|
|
@ -1472,8 +1472,6 @@ static CoglWinsysVtable _cogl_winsys_vtable =
|
||||||
.onscreen_get_buffer_age = _cogl_winsys_onscreen_glx_get_buffer_age,
|
.onscreen_get_buffer_age = _cogl_winsys_onscreen_glx_get_buffer_age,
|
||||||
.onscreen_x11_get_window_xid =
|
.onscreen_x11_get_window_xid =
|
||||||
_cogl_winsys_onscreen_glx_get_window_xid,
|
_cogl_winsys_onscreen_glx_get_window_xid,
|
||||||
.onscreen_set_resizable =
|
|
||||||
_cogl_winsys_onscreen_glx_set_resizable,
|
|
||||||
|
|
||||||
/* X11 tfp support... */
|
/* X11 tfp support... */
|
||||||
/* XXX: instead of having a rather monolithic winsys vtable we could
|
/* XXX: instead of having a rather monolithic winsys vtable we could
|
||||||
|
|
|
@ -109,9 +109,6 @@ typedef struct _CoglWinsysVtable
|
||||||
int64_t
|
int64_t
|
||||||
(*context_get_clock_time) (CoglContext *context);
|
(*context_get_clock_time) (CoglContext *context);
|
||||||
|
|
||||||
void
|
|
||||||
(*onscreen_set_resizable) (CoglOnscreen *onscreen, gboolean resizable);
|
|
||||||
|
|
||||||
int
|
int
|
||||||
(*onscreen_get_buffer_age) (CoglOnscreen *onscreen);
|
(*onscreen_get_buffer_age) (CoglOnscreen *onscreen);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue