[mutter] clutter/stage: Add private API to get max view scale for rect
- From: Jonas Ådahl <jadahl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] clutter/stage: Add private API to get max view scale for rect
- Date: Fri, 1 Mar 2019 18:07:41 +0000 (UTC)
commit c69547147547471e50df28aee20c5320570f6099
Author: Marco Trevisan (Treviño) <mail 3v1n0 net>
Date: Sat Dec 23 04:17:03 2017 +0100
clutter/stage: Add private API to get max view scale for rect
Move the same code from ClutterActor as this is something we can
reuse elsewhere.
https://bugzilla.gnome.org/show_bug.cgi?id=765011
https://gitlab.gnome.org/GNOME/mutter/merge_requests/3
clutter/clutter/clutter-actor.c | 20 +++-----------------
clutter/clutter/clutter-stage-private.h | 3 +++
clutter/clutter/clutter-stage.c | 29 +++++++++++++++++++++++++++++
3 files changed, 35 insertions(+), 17 deletions(-)
---
diff --git a/clutter/clutter/clutter-actor.c b/clutter/clutter/clutter-actor.c
index d0f7434ef..fd38338c7 100644
--- a/clutter/clutter/clutter-actor.c
+++ b/clutter/clutter/clutter-actor.c
@@ -17785,29 +17785,15 @@ _clutter_actor_get_resource_scale_for_rect (ClutterActor *self,
float *resource_scale)
{
ClutterActor *stage;
- GList *views;
- GList *l;
float max_scale = 0;
stage = _clutter_actor_get_stage_internal (self);
if (!stage)
return FALSE;
- views = _clutter_stage_peek_stage_views (CLUTTER_STAGE (stage));
- for (l = views; l; l = l->next)
- {
- ClutterStageView *view = l->data;
- cairo_rectangle_int_t view_layout;
- ClutterRect view_rect;
-
- clutter_stage_view_get_layout (view, &view_layout);
- _clutter_util_rect_from_rectangle (&view_layout, &view_rect);
-
- if (clutter_rect_intersection (&view_rect, bounding_rect, NULL))
- max_scale = MAX (clutter_stage_view_get_scale (view), max_scale);
- }
-
- if (max_scale == 0)
+ if (!_clutter_stage_get_max_view_scale_factor_for_rect (CLUTTER_STAGE (stage),
+ bounding_rect,
+ &max_scale))
return FALSE;
*resource_scale = max_scale;
diff --git a/clutter/clutter/clutter-stage-private.h b/clutter/clutter/clutter-stage-private.h
index 688768bac..4799c29e1 100644
--- a/clutter/clutter/clutter-stage-private.h
+++ b/clutter/clutter/clutter-stage-private.h
@@ -124,6 +124,9 @@ gboolean _clutter_stage_update_state (ClutterStage *stag
void _clutter_stage_set_scale_factor (ClutterStage *stage,
int factor);
+gboolean _clutter_stage_get_max_view_scale_factor_for_rect (ClutterStage *stage,
+ ClutterRect *rect,
+ float *view_scale);
void _clutter_stage_presented (ClutterStage *stage,
CoglFrameEvent frame_event,
diff --git a/clutter/clutter/clutter-stage.c b/clutter/clutter/clutter-stage.c
index d284692c0..7ed83184a 100644
--- a/clutter/clutter/clutter-stage.c
+++ b/clutter/clutter/clutter-stage.c
@@ -5018,3 +5018,32 @@ clutter_stage_update_resource_scales (ClutterStage *stage)
{
_clutter_actor_queue_update_resource_scale_recursive (CLUTTER_ACTOR (stage));
}
+
+gboolean
+_clutter_stage_get_max_view_scale_factor_for_rect (ClutterStage *stage,
+ ClutterRect *rect,
+ float *view_scale)
+{
+ ClutterStagePrivate *priv = stage->priv;
+ float scale = 0.0f;
+ GList *l;
+
+ for (l = _clutter_stage_window_get_views (priv->impl); l; l = l->next)
+ {
+ ClutterStageView *view = l->data;
+ cairo_rectangle_int_t view_layout;
+ ClutterRect view_rect;
+
+ clutter_stage_view_get_layout (view, &view_layout);
+ _clutter_util_rect_from_rectangle (&view_layout, &view_rect);
+
+ if (clutter_rect_intersection (&view_rect, rect, NULL))
+ scale = MAX (clutter_stage_view_get_scale (view), scale);
+ }
+
+ if (scale == 0.0)
+ return FALSE;
+
+ *view_scale = scale;
+ return TRUE;
+}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]