[gtk/texture-fixes: 1/2] Fixes for gdk_memory_texture_new_subtexture




commit f33c5218364377ac41a6bbaf36e1a8a98412a368
Author: Matthias Clasen <mclasen redhat com>
Date:   Sun May 8 13:53:04 2022 -0400

    Fixes for gdk_memory_texture_new_subtexture
    
    There were several mistakes here.
    
    The width of subtextures was set to the width of
    the main texture, the data size wasn't properly
    calculated, and the preconditions were inverted.
    Yay us!

 gdk/gdkmemorytexture.c | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)
---
diff --git a/gdk/gdkmemorytexture.c b/gdk/gdkmemorytexture.c
index c9aecd5cea..e241ebd0a3 100644
--- a/gdk/gdkmemorytexture.c
+++ b/gdk/gdkmemorytexture.c
@@ -178,19 +178,19 @@ gdk_memory_texture_new_subtexture (GdkMemoryTexture  *source,
   GBytes *bytes;
 
   g_return_val_if_fail (GDK_IS_MEMORY_TEXTURE (source), NULL);
-  g_return_val_if_fail (x < 0 || x >= GDK_TEXTURE (source)->width, NULL);
-  g_return_val_if_fail (y < 0 || y >= GDK_TEXTURE (source)->height, NULL);
-  g_return_val_if_fail (width <= 0 || x + width > GDK_TEXTURE (source)->width, NULL);
-  g_return_val_if_fail (height <= 0 || y + height > GDK_TEXTURE (source)->height, NULL);
+  g_return_val_if_fail (x >= 0 || x < GDK_TEXTURE (source)->width, NULL);
+  g_return_val_if_fail (y >= 0 || y < GDK_TEXTURE (source)->height, NULL);
+  g_return_val_if_fail (width > 0 || x + width <= GDK_TEXTURE (source)->width, NULL);
+  g_return_val_if_fail (height > 0 || y + height <= GDK_TEXTURE (source)->height, NULL);
 
   texture = GDK_TEXTURE (source);
   bpp = gdk_memory_format_bytes_per_pixel (texture->format);
   offset = y * source->stride + x * bpp;
-  size = source->stride * (height - 1) + x * bpp;
+  size = source->stride * (height - 1) + width * bpp;
   bytes = g_bytes_new_from_bytes (source->bytes, offset, size);
 
-  result = gdk_memory_texture_new (texture->width,
-                                   texture->height,
+  result = gdk_memory_texture_new (width,
+                                   height,
                                    texture->format,
                                    bytes,
                                    source->stride);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]