diff options
author | Benjamin Otte <otte@redhat.com> | 2016-11-28 17:22:35 +0100 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2016-12-05 15:02:47 +0100 |
commit | db8e3065bde5e1c69a2642dbc88c462101535c1e (patch) | |
tree | 527990e36e88187204ea49cfc14c9b749316f910 /gdk/gdkdrawcontext.c | |
parent | e38bd27d583c81d2052d23a7722e3e3482c3cf4d (diff) | |
download | gtk+-db8e3065bde5e1c69a2642dbc88c462101535c1e.tar.gz |
gdk: Add GdkDrawContext
This will be the base class for GdkVulkanContext and GdkGLContext.
Diffstat (limited to 'gdk/gdkdrawcontext.c')
-rw-r--r-- | gdk/gdkdrawcontext.c | 201 |
1 files changed, 201 insertions, 0 deletions
diff --git a/gdk/gdkdrawcontext.c b/gdk/gdkdrawcontext.c new file mode 100644 index 0000000000..468de8cfaf --- /dev/null +++ b/gdk/gdkdrawcontext.c @@ -0,0 +1,201 @@ +/* GDK - The GIMP Drawing Kit + * + * gdkdrawcontext.c: base class for rendering system support + * + * Copyright © 2016 Benjamin Otte + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "config.h" + +#include "gdkdrawcontextprivate.h" + +#include "gdkinternals.h" +#include "gdkintl.h" + +/** + * SECTION:gdkdrawcontext + * @Title: GdkDrawContext + * @Short_description: Drawing context base class + * + * #GdkDrawContext is the base object used by contexts implementing different + * rendering methods, such as #GdkGLContext or #GdkVulkanContext. They provide + * shared functionality between those contexts. + * + * You will always interact with one of those subclasses. + */ +typedef struct _GdkDrawContextPrivate GdkDrawContextPrivate; + +struct _GdkDrawContextPrivate { + GdkWindow *window; +}; + +enum { + PROP_0, + + PROP_DISPLAY, + PROP_WINDOW, + + LAST_PROP +}; + +static GParamSpec *pspecs[LAST_PROP] = { NULL, }; + +G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (GdkDrawContext, gdk_draw_context, G_TYPE_OBJECT) + +static void +gdk_draw_context_dispose (GObject *gobject) +{ + GdkDrawContext *context = GDK_DRAW_CONTEXT (gobject); + GdkDrawContextPrivate *priv = gdk_draw_context_get_instance_private (context); + + g_clear_object (&priv->window); + + G_OBJECT_CLASS (gdk_draw_context_parent_class)->dispose (gobject); +} + +static void +gdk_draw_context_set_property (GObject *gobject, + guint prop_id, + const GValue *value, + GParamSpec *pspec) +{ + GdkDrawContext *context = GDK_DRAW_CONTEXT (gobject); + GdkDrawContextPrivate *priv = gdk_draw_context_get_instance_private (context); + + switch (prop_id) + { + case PROP_WINDOW: + priv->window = g_value_dup_object (value); + g_assert (priv->window != NULL); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec); + } +} + +static void +gdk_draw_context_get_property (GObject *gobject, + guint prop_id, + GValue *value, + GParamSpec *pspec) +{ + GdkDrawContext *context = GDK_DRAW_CONTEXT (gobject); + GdkDrawContextPrivate *priv = gdk_draw_context_get_instance_private (context); + + switch (prop_id) + { + case PROP_DISPLAY: + g_value_set_object (value, gdk_draw_context_get_display (context)); + break; + + case PROP_WINDOW: + g_value_set_object (value, priv->window); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec); + } +} + +static void +gdk_draw_context_class_init (GdkDrawContextClass *klass) +{ + GObjectClass *gobject_class = G_OBJECT_CLASS (klass); + + gobject_class->set_property = gdk_draw_context_set_property; + gobject_class->get_property = gdk_draw_context_get_property; + gobject_class->dispose = gdk_draw_context_dispose; + + /** + * GdkDrawContext:display: + * + * The #GdkDisplay used to create the #GdkDrawContext. + * + * Since: 3.90 + */ + pspecs[PROP_DISPLAY] = + g_param_spec_object ("display", + P_("Display"), + P_("The GDK display used to create the context"), + GDK_TYPE_DISPLAY, + G_PARAM_READABLE | + G_PARAM_STATIC_STRINGS); + + /** + * GdkDrawContext:window: + * + * The #GdkWindow the gl context is bound to. + * + * Since: 3.90 + */ + pspecs[PROP_WINDOW] = + g_param_spec_object ("window", + P_("Window"), + P_("The GDK window bound to the context"), + GDK_TYPE_WINDOW, + G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY | + G_PARAM_STATIC_STRINGS); + + g_object_class_install_properties (gobject_class, LAST_PROP, pspecs); +} + +static void +gdk_draw_context_init (GdkDrawContext *self) +{ +} + +/** + * gdk_draw_context_get_display: + * @context: a #GdkDrawContext + * + * Retrieves the #GdkDisplay the @context is created for + * + * Returns: (nullable) (transfer none): a #GdkDisplay or %NULL + * + * Since: 3.90 + */ +GdkDisplay * +gdk_draw_context_get_display (GdkDrawContext *context) +{ + GdkDrawContextPrivate *priv = gdk_draw_context_get_instance_private (context); + + g_return_val_if_fail (GDK_IS_DRAW_CONTEXT (context), NULL); + + return priv->window ? gdk_window_get_display (priv->window) : NULL; +} + +/** + * gdk_draw_context_get_window: + * @context: a #GdkDrawContext + * + * Retrieves the #GdkWindow used by the @context. + * + * Returns: (nullable) (transfer none): a #GdkWindow or %NULL + * + * Since: 3.90 + */ +GdkWindow * +gdk_draw_context_get_window (GdkDrawContext *context) +{ + GdkDrawContextPrivate *priv = gdk_draw_context_get_instance_private (context); + + g_return_val_if_fail (GDK_IS_DRAW_CONTEXT (context), NULL); + + return priv->window; +} + |