texture: Expose subclasses as subclasses
authorBenjamin Otte <otte@redhat.com>
Sun, 18 Mar 2018 04:14:52 +0000 (05:14 +0100)
committerBenjamin Otte <otte@redhat.com>
Sun, 18 Mar 2018 04:57:07 +0000 (05:57 +0100)
This is necessary so that bidnings work properly and don't make
gdk_gl_texture_release() a function on GdkTexture.
It also allows code to identify what type of texture they are dealing
with.

Finally, we can now decide to add getters later without screwing
anything up, if we want to allow people to access GL textures directly.

docs/reference/gdk/gdk4-sections.txt
gdk/gdkgltexture.c
gdk/gdkgltexture.h
gdk/gdkgltextureprivate.h
gdk/gdkmemorytexture.h
gdk/gdkmemorytextureprivate.h
gtk/gtkglarea.c

index 989c0feae1d5a8cbef3e63afa008135ae0c70401..c63a17056099aa9a35a0af5ad7c98e0c440773a3 100644 (file)
@@ -751,6 +751,16 @@ gdk_texture_get_type
 GDK_TYPE_TEXTURE
 GDK_IS_TEXTURE
 GDK_TEXTURE
+GdkGLTextureClass
+gdk_gl_texture_get_type
+GDK_TYPE_GL_TEXTURE
+GDK_IS_GL_TEXTURE
+GDK_GL_TEXTURE
+GdkMemoryTextureClass
+gdk_memory_texture_get_type
+GDK_TYPE_MEMORY_TEXTURE
+GDK_IS_MEMORY_TEXTURE
+GDK_MEMORY_TEXTURE
 </SECTION>
 
 <SECTION>
index 8f93dcb879eb4b9f77eb57884973a4189ee990a6..8d97c316a68db2ac4ccb01c407e35f9141ed6079 100644 (file)
@@ -133,28 +133,26 @@ gdk_gl_texture_get_id (GdkGLTexture *self)
 
 /**
  * gdk_gl_texture_release:
- * @texture: a #GdkTexture wrapping a GL texture
+ * @self: a #GdkTexture wrapping a GL texture
  *
- * Releases the GL resources held by a #GdkTexture that
- * was created with gdk_texture_new_for_gl().
+ * Releases the GL resources held by a #GdkGLTexture that
+ * was created with gdk_gl_texture_new().
  *
  * The texture contents are still available via the
  * gdk_texture_download() function, after this function
  * has been called.
  */
 void
-gdk_gl_texture_release (GdkTexture *texture)
+gdk_gl_texture_release (GdkGLTexture *self)
 {
-  GdkGLTexture *self;
   GdkWindow *window;
+  GdkTexture *texture;
   cairo_t *cr;
 
-  g_return_if_fail (GDK_IS_GL_TEXTURE (texture));
-
-  self = GDK_GL_TEXTURE (texture);
-
+  g_return_if_fail (GDK_IS_GL_TEXTURE (self));
   g_return_if_fail (self->saved == NULL);
 
+  texture = GDK_TEXTURE (self);
   self->saved = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
                                             texture->width, texture->height);
 
@@ -178,7 +176,7 @@ gdk_gl_texture_release (GdkTexture *texture)
 }
 
 /**
- * gdk_gl_texture_new: (constructor)
+ * gdk_gl_texture_new:
  * @context: a #GdkGLContext
  * @id: the ID of a texture that was created with @context
  * @width: the nominal width of the texture
index e5d24bd60555b9dc3ba987e6bcccbe3ba58f47d7..82dae098e1195395b295bf78bad6bce60f2e6a1e 100644 (file)
 #error "Only <gdk/gdk.h> can be included directly."
 #endif
 
-#include <gdk/gdktypes.h>
 #include <gdk/gdkglcontext.h>
+#include <gdk/gdktexture.h>
 
 G_BEGIN_DECLS
 
+#define GDK_TYPE_GL_TEXTURE (gdk_gl_texture_get_type ())
+
+#define GDK_GL_TEXTURE(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDK_TYPE_GL_TEXTURE, GdkGLTexture))
+#define GDK_IS_GL_TEXTURE(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GDK_TYPE_GL_TEXTURE))
+
+typedef struct _GdkGLTexture            GdkGLTexture;
+typedef struct _GdkGLTextureClass       GdkGLTextureClass;
+
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GdkGLTexture, g_object_unref)
+
+GDK_AVAILABLE_IN_ALL
+GType                   gdk_gl_texture_get_type                (void) G_GNUC_CONST;
 
 GDK_AVAILABLE_IN_ALL
 GdkTexture *            gdk_gl_texture_new                     (GdkGLContext    *context,
@@ -38,7 +50,7 @@ GdkTexture *            gdk_gl_texture_new                     (GdkGLContext
                                                                 gpointer         data);
 
 GDK_AVAILABLE_IN_ALL
-void                    gdk_gl_texture_release                 (GdkTexture      *texture);
+void                    gdk_gl_texture_release                 (GdkGLTexture    *texture);
 
 
 G_END_DECLS
index 180a99d064908b04a93f667092e850de61d7e8a0..06035eea07bab15731c02eb8c74bddc19170b4c1 100644 (file)
@@ -7,10 +7,6 @@
 
 G_BEGIN_DECLS
 
-#define GDK_TYPE_GL_TEXTURE (gdk_gl_texture_get_type ())
-
-G_DECLARE_FINAL_TYPE (GdkGLTexture, gdk_gl_texture, GDK, GL_TEXTURE, GdkTexture)
-
 GdkGLContext *          gdk_gl_texture_get_context      (GdkGLTexture           *self);
 guint                   gdk_gl_texture_get_id           (GdkGLTexture           *self);
 
index 31d30fbd7fb7fd370bc21dcd9be61445d43a0a03..c02fc784d42098c41e387c8b408581c000d236ff 100644 (file)
@@ -86,6 +86,20 @@ typedef enum {
 #error "Unknown byte order for GDK_MEMORY_DEFAULT"
 #endif
 
+#define GDK_TYPE_MEMORY_TEXTURE (gdk_memory_texture_get_type ())
+
+#define GDK_MEMORY_TEXTURE(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDK_TYPE_MEMORY_TEXTURE, GdkMemoryTexture))
+#define GDK_IS_MEMORY_TEXTURE(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GDK_TYPE_MEMORY_TEXTURE))
+
+typedef struct _GdkMemoryTexture        GdkMemoryTexture;
+typedef struct _GdkMemoryTextureClass   GdkMemoryTextureClass;
+
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GdkMemoryTexture, g_object_unref)
+
+
+GDK_AVAILABLE_IN_ALL
+GType                   gdk_memory_texture_get_type         (void) G_GNUC_CONST;
+
 GDK_AVAILABLE_IN_ALL
 GdkTexture *            gdk_memory_texture_new              (int                width,
                                                              int                height,
index 9634b1ccf39853c1aef13f13977a1b3019a2fb32..caa4b2014c4dcb14ad96061fcb9ca7176adcceed 100644 (file)
@@ -31,10 +31,6 @@ G_BEGIN_DECLS
 
 #define GDK_MEMORY_CAIRO_FORMAT_ARGB32 GDK_MEMORY_DEFAULT
 
-#define GDK_TYPE_MEMORY_TEXTURE (gdk_memory_texture_get_type ())
-
-G_DECLARE_FINAL_TYPE (GdkMemoryTexture, gdk_memory_texture, GDK, MEMORY_TEXTURE, GdkTexture)
-
 GdkMemoryFormat         gdk_memory_texture_get_format       (GdkMemoryTexture  *self);
 const guchar *          gdk_memory_texture_get_data         (GdkMemoryTexture  *self);
 gsize                   gdk_memory_texture_get_stride       (GdkMemoryTexture  *self);
index e44c68ef6650a1c0f4267cc399c0452174810f5d..85b3cb9906485a020be38196ffeacd3204a1fda1 100644 (file)
@@ -386,7 +386,7 @@ delete_one_texture (gpointer data)
   Texture *texture = data;
 
   if (texture->holder)
-    gdk_gl_texture_release (texture->holder);
+    gdk_gl_texture_release (GDK_GL_TEXTURE (texture->holder));
 
   if (texture->id != 0)
     {