[gtk+/wip/ebassi/gsk: 9/11] gsk: Integrate GskLayoutManager with GskLayer
- From: Emmanuele Bassi <ebassi src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/wip/ebassi/gsk: 9/11] gsk: Integrate GskLayoutManager with GskLayer
- Date: Sun, 9 Aug 2015 15:51:20 +0000 (UTC)
commit 4385cbe6cb3890d03e1c9b806138a54605623ef0
Author: Emmanuele Bassi <ebassi gnome org>
Date: Wed Mar 18 11:08:01 2015 +0000
gsk: Integrate GskLayoutManager with GskLayer
Since GskLayoutManager is the interface for delegate objects responsible
for the layout management of layers, GskLayer should use it to delegate
the implementation of various virtual functions.
gsk/gsklayer.c | 47 ++++++++++++++++++++++++++++++++++++++++++++---
gsk/gsklayer.h | 16 ++++++++++++----
2 files changed, 56 insertions(+), 7 deletions(-)
---
diff --git a/gsk/gsklayer.c b/gsk/gsklayer.c
index 570bba1..6f4d81a 100644
--- a/gsk/gsklayer.c
+++ b/gsk/gsklayer.c
@@ -26,6 +26,7 @@
#include "config.h"
#include "gsklayerprivate.h"
+#include "gsklayoutmanager.h"
#include "gskdebug.h"
/**
@@ -58,6 +59,8 @@ typedef struct {
GdkFrameClock *frame_clock;
+ GskLayoutManager *layout_manager;
+
/* Bitfields: keep at the end */
guint hidden : 1;
guint needs_redraw : 1;
@@ -179,6 +182,11 @@ static gboolean
gsk_layer_real_queue_relayout (GskLayer *self,
GskLayer *origin)
{
+ GskLayerPrivate *priv = gsk_layer_get_instance_private (self);
+
+ if (priv->layout_manager != NULL)
+ return gsk_layout_manager_queue_relayout (priv->layout_manager, self, origin);
+
return TRUE;
}
@@ -186,11 +194,17 @@ static void
gsk_layer_real_get_preferred_size (GskLayer *self,
graphene_size_t *size)
{
- const GeometryInfo *info;
+ GskLayerPrivate *priv = gsk_layer_get_instance_private (self);
- info = gsk_layer_state_peek_geometry_info (gsk_layer_get_state (self));
+ if (priv->layout_manager == NULL)
+ {
+ const GeometryInfo *info;
- graphene_size_init_from_size (size, &info->bounds.size);
+ info = gsk_layer_state_peek_geometry_info (gsk_layer_get_state (self));
+ graphene_size_init_from_size (size, &info->bounds.size);
+ }
+ else
+ gsk_layout_manager_get_preferred_size (priv->layout_manager, self, size);
}
static gboolean
@@ -222,6 +236,10 @@ gsk_layer_real_draw (GskLayer *self,
static void
gsk_layer_real_layout_children (GskLayer *layer)
{
+ GskLayerPrivate *priv = gsk_layer_get_instance_private (layer);
+
+ if (priv->layout_manager != NULL)
+ gsk_layout_manager_layout_children (priv->layout_manager, layer);
}
static void
@@ -1800,3 +1818,26 @@ gsk_layer_set_frame_clock (GskLayer *self,
}
}
}
+
+void
+gsk_layer_set_layout_manager (GskLayer *self,
+ GskLayoutManager *manager)
+{
+ GskLayerPrivate *priv = gsk_layer_get_instance_private (self);
+
+ g_return_if_fail (GSK_IS_LAYER (self));
+ g_return_if_fail (manager == NULL || GSK_IS_LAYOUT_MANAGER (manager));
+
+ if (g_set_object (&priv->layout_manager, manager))
+ {
+ gsk_layer_queue_relayout (self);
+ }
+}
+
+GskLayoutManager *
+gsk_layer_get_layout_manager (GskLayer *self)
+{
+ g_return_val_if_fail (GSK_IS_LAYER (self), NULL);
+
+ return GSK_LAYER_PRIV (self)->layout_manager;
+}
diff --git a/gsk/gsklayer.h b/gsk/gsklayer.h
index ff582fb..288780d 100644
--- a/gsk/gsklayer.h
+++ b/gsk/gsklayer.h
@@ -175,10 +175,6 @@ GDK_AVAILABLE_IN_3_18
void gsk_layer_get_position (GskLayer *self,
graphene_point_t *position);
-GDK_AVAILABLE_IN_3_18
-void gsk_layer_get_preferred_size (GskLayer *self,
- graphene_size_t *size);
-
/* Transformations */
GDK_AVAILABLE_IN_3_18
@@ -218,6 +214,18 @@ GDK_AVAILABLE_IN_3_18
void gsk_layer_set_frame_clock (GskLayer *self,
GdkFrameClock *frame_clock);
+/* Layout */
+
+GDK_AVAILABLE_IN_3_18
+void gsk_layer_get_preferred_size (GskLayer *self,
+ graphene_size_t *size);
+
+GDK_AVAILABLE_IN_3_18
+void gsk_layer_set_layout_manager (GskLayer *self,
+ GskLayoutManager *manager);
+GDK_AVAILABLE_IN_3_18
+GskLayoutManager * gsk_layer_get_layout_manager (GskLayer *self);
+
G_END_DECLS
#endif /* __GSK_LAYER_H__ */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]