backends: Update stage views and stage dimension from MetaStage

This reduces the amount of code duplication between the native and
nested backend.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4331>
This commit is contained in:
Jonas Ådahl 2025-03-12 11:35:17 +08:00 committed by Marge Bot
parent 8b5c757bea
commit dcd89a62e1
8 changed files with 35 additions and 27 deletions

View File

@ -65,4 +65,6 @@ MetaBackend * meta_stage_impl_get_backend (MetaStageImpl *stage_impl);
void meta_stage_impl_add_onscreen_frame_info (MetaStageImpl *stage_impl,
ClutterStageView *view);
void meta_stage_impl_rebuild_views (MetaStageImpl *stage_impl);
G_END_DECLS

View File

@ -34,6 +34,7 @@
#include <stdlib.h>
#include <math.h>
#include "backends/meta-renderer.h"
#include "backends/meta-stage-view-private.h"
#include "clutter/clutter-mutter.h"
#include "cogl/cogl.h"
@ -900,3 +901,14 @@ meta_stage_impl_get_backend (MetaStageImpl *stage_impl)
return priv->backend;
}
void
meta_stage_impl_rebuild_views (MetaStageImpl *stage_impl)
{
MetaBackend *backend = meta_stage_impl_get_backend (stage_impl);
MetaRenderer *renderer = meta_backend_get_renderer (backend);
ClutterActor *stage = meta_backend_get_stage (backend);
meta_renderer_rebuild_views (renderer);
clutter_stage_clear_stage_views (CLUTTER_STAGE (stage));
}

View File

@ -70,4 +70,6 @@ META_EXPORT_TEST
void meta_stage_remove_watch (MetaStage *stage,
MetaStageWatch *watch);
void meta_stage_rebuild_views (MetaStage *stage);
G_END_DECLS

View File

@ -498,3 +498,19 @@ meta_stage_remove_watch (MetaStage *stage,
g_assert (removed);
}
void
meta_stage_rebuild_views (MetaStage *stage)
{
ClutterStageWindow *stage_window =
_clutter_stage_get_window (CLUTTER_STAGE (stage));
MetaStageImpl *stage_impl = META_STAGE_IMPL (stage_window);
MetaMonitorManager *monitor_manager =
meta_backend_get_monitor_manager (stage->backend);
int width, height;
meta_stage_impl_rebuild_views (stage_impl);
meta_monitor_manager_get_screen_size (monitor_manager, &width, &height);
clutter_actor_set_size (CLUTTER_ACTOR (stage), width, height);
}

View File

@ -400,14 +400,11 @@ static void
meta_backend_native_update_stage (MetaBackend *backend)
{
ClutterActor *stage = meta_backend_get_stage (backend);
ClutterStageWindow *stage_window =
_clutter_stage_get_window (CLUTTER_STAGE (stage));
MetaStageNative *stage_native = META_STAGE_NATIVE (stage_window);
MetaMonitorManager *monitor_manager =
meta_backend_get_monitor_manager (backend);
int width, height;
meta_stage_native_rebuild_views (stage_native);
meta_stage_rebuild_views (META_STAGE (stage));
meta_monitor_manager_get_screen_size (monitor_manager, &width, &height);
clutter_actor_set_size (stage, width, height);

View File

@ -46,18 +46,6 @@ struct _MetaStageNative
G_DEFINE_FINAL_TYPE (MetaStageNative, meta_stage_native, META_TYPE_STAGE_IMPL)
void
meta_stage_native_rebuild_views (MetaStageNative *stage_native)
{
MetaStageImpl *stage_impl = META_STAGE_IMPL (stage_native);
MetaBackend *backend = meta_stage_impl_get_backend (stage_impl);
MetaRenderer *renderer = meta_backend_get_renderer (backend);
ClutterActor *stage = meta_backend_get_stage (backend);
meta_renderer_rebuild_views (renderer);
clutter_stage_clear_stage_views (CLUTTER_STAGE (stage));
}
static gboolean
meta_stage_native_can_clip_redraws (ClutterStageWindow *stage_window)
{

View File

@ -28,5 +28,3 @@
#define META_TYPE_STAGE_NATIVE (meta_stage_native_get_type ())
G_DECLARE_FINAL_TYPE (MetaStageNative, meta_stage_native,
META, STAGE_NATIVE, MetaStageImpl)
void meta_stage_native_rebuild_views (MetaStageNative *stage_native);

View File

@ -21,6 +21,7 @@
#include "backends/meta-input-settings-dummy.h"
#include "backends/meta-monitor-manager-dummy.h"
#include "backends/meta-stage-private.h"
#include "backends/x11/nested/meta-backend-x11-nested.h"
#include "backends/x11/nested/meta-cursor-renderer-x11-nested.h"
#include "backends/x11/nested/meta-renderer-x11-nested.h"
@ -98,16 +99,8 @@ static void
meta_backend_x11_nested_update_stage (MetaBackend *backend)
{
ClutterActor *stage = meta_backend_get_stage (backend);
MetaRenderer *renderer = meta_backend_get_renderer (backend);
MetaMonitorManager *monitor_manager =
meta_backend_get_monitor_manager (backend);
int width, height;
meta_renderer_rebuild_views (renderer);
clutter_stage_clear_stage_views (CLUTTER_STAGE (stage));
meta_monitor_manager_get_screen_size (monitor_manager, &width, &height);
clutter_actor_set_size (stage, width, height);
meta_stage_rebuild_views (META_STAGE (stage));
}
static void