]> Pileus Git - ~andy/gtk/commitdiff
Make sure you can compile out the implementation/wrapper assert macros.
authorAlexander Larsson <alexl@redhat.com>
Thu, 10 May 2001 22:44:27 +0000 (22:44 +0000)
committerAlexander Larsson <alexl@src.gnome.org>
Thu, 10 May 2001 22:44:27 +0000 (22:44 +0000)
2001-05-10  Alexander Larsson  <alexl@redhat.com>

* gdk/linux-fb/gdkprivate-fb.h:
Make sure you can compile out the implementation/wrapper assert
macros.

* gdk/linux-fb/gdkdrawable-fb2.c:
Check implementation/wrappers, initialize type for pixmap dummys.

* gdk/linux-fb/gdkimage-fb.c (_gdk_fb_get_image):
Hide the cursor if reading from the screen.

* gdk/linux-fb/gdkrender-fb.c (gdk_fb_fill_span_generic):
Fix sign bug in tiling code.

* gdk/linux-fb/gdkwindow-fb.c (_gdk_windowing_window_clear_area):
Handle background pixmaps.

12 files changed:
ChangeLog
ChangeLog.pre-2-0
ChangeLog.pre-2-10
ChangeLog.pre-2-2
ChangeLog.pre-2-4
ChangeLog.pre-2-6
ChangeLog.pre-2-8
gdk/linux-fb/gdkdrawable-fb2.c
gdk/linux-fb/gdkimage-fb.c
gdk/linux-fb/gdkprivate-fb.h
gdk/linux-fb/gdkrender-fb.c
gdk/linux-fb/gdkwindow-fb.c

index 53a24030e91e35edf7a06ef2710cf206244e5f3d..3cb89eae7af3a5713749888fba07816de0a82e2a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,21 @@
+2001-05-10  Alexander Larsson  <alexl@redhat.com>
+
+       * gdk/linux-fb/gdkprivate-fb.h:
+       Make sure you can compile out the implementation/wrapper assert
+       macros.
+
+       * gdk/linux-fb/gdkdrawable-fb2.c:
+       Check implementation/wrappers, initialize type for pixmap dummys.
+
+       * gdk/linux-fb/gdkimage-fb.c (_gdk_fb_get_image):
+       Hide the cursor if reading from the screen.
+
+       * gdk/linux-fb/gdkrender-fb.c (gdk_fb_fill_span_generic):
+       Fix sign bug in tiling code.
+
+       * gdk/linux-fb/gdkwindow-fb.c (_gdk_windowing_window_clear_area):
+       Handle background pixmaps.
+
 Wed May  9 15:27:22 2001  Jonathan Blandford  <jrb@redhat.com>
 
        * gtk/gtktreeview.c (gtk_tree_view_set_column_drag_function): New
index 53a24030e91e35edf7a06ef2710cf206244e5f3d..3cb89eae7af3a5713749888fba07816de0a82e2a 100644 (file)
@@ -1,3 +1,21 @@
+2001-05-10  Alexander Larsson  <alexl@redhat.com>
+
+       * gdk/linux-fb/gdkprivate-fb.h:
+       Make sure you can compile out the implementation/wrapper assert
+       macros.
+
+       * gdk/linux-fb/gdkdrawable-fb2.c:
+       Check implementation/wrappers, initialize type for pixmap dummys.
+
+       * gdk/linux-fb/gdkimage-fb.c (_gdk_fb_get_image):
+       Hide the cursor if reading from the screen.
+
+       * gdk/linux-fb/gdkrender-fb.c (gdk_fb_fill_span_generic):
+       Fix sign bug in tiling code.
+
+       * gdk/linux-fb/gdkwindow-fb.c (_gdk_windowing_window_clear_area):
+       Handle background pixmaps.
+
 Wed May  9 15:27:22 2001  Jonathan Blandford  <jrb@redhat.com>
 
        * gtk/gtktreeview.c (gtk_tree_view_set_column_drag_function): New
index 53a24030e91e35edf7a06ef2710cf206244e5f3d..3cb89eae7af3a5713749888fba07816de0a82e2a 100644 (file)
@@ -1,3 +1,21 @@
+2001-05-10  Alexander Larsson  <alexl@redhat.com>
+
+       * gdk/linux-fb/gdkprivate-fb.h:
+       Make sure you can compile out the implementation/wrapper assert
+       macros.
+
+       * gdk/linux-fb/gdkdrawable-fb2.c:
+       Check implementation/wrappers, initialize type for pixmap dummys.
+
+       * gdk/linux-fb/gdkimage-fb.c (_gdk_fb_get_image):
+       Hide the cursor if reading from the screen.
+
+       * gdk/linux-fb/gdkrender-fb.c (gdk_fb_fill_span_generic):
+       Fix sign bug in tiling code.
+
+       * gdk/linux-fb/gdkwindow-fb.c (_gdk_windowing_window_clear_area):
+       Handle background pixmaps.
+
 Wed May  9 15:27:22 2001  Jonathan Blandford  <jrb@redhat.com>
 
        * gtk/gtktreeview.c (gtk_tree_view_set_column_drag_function): New
index 53a24030e91e35edf7a06ef2710cf206244e5f3d..3cb89eae7af3a5713749888fba07816de0a82e2a 100644 (file)
@@ -1,3 +1,21 @@
+2001-05-10  Alexander Larsson  <alexl@redhat.com>
+
+       * gdk/linux-fb/gdkprivate-fb.h:
+       Make sure you can compile out the implementation/wrapper assert
+       macros.
+
+       * gdk/linux-fb/gdkdrawable-fb2.c:
+       Check implementation/wrappers, initialize type for pixmap dummys.
+
+       * gdk/linux-fb/gdkimage-fb.c (_gdk_fb_get_image):
+       Hide the cursor if reading from the screen.
+
+       * gdk/linux-fb/gdkrender-fb.c (gdk_fb_fill_span_generic):
+       Fix sign bug in tiling code.
+
+       * gdk/linux-fb/gdkwindow-fb.c (_gdk_windowing_window_clear_area):
+       Handle background pixmaps.
+
 Wed May  9 15:27:22 2001  Jonathan Blandford  <jrb@redhat.com>
 
        * gtk/gtktreeview.c (gtk_tree_view_set_column_drag_function): New
index 53a24030e91e35edf7a06ef2710cf206244e5f3d..3cb89eae7af3a5713749888fba07816de0a82e2a 100644 (file)
@@ -1,3 +1,21 @@
+2001-05-10  Alexander Larsson  <alexl@redhat.com>
+
+       * gdk/linux-fb/gdkprivate-fb.h:
+       Make sure you can compile out the implementation/wrapper assert
+       macros.
+
+       * gdk/linux-fb/gdkdrawable-fb2.c:
+       Check implementation/wrappers, initialize type for pixmap dummys.
+
+       * gdk/linux-fb/gdkimage-fb.c (_gdk_fb_get_image):
+       Hide the cursor if reading from the screen.
+
+       * gdk/linux-fb/gdkrender-fb.c (gdk_fb_fill_span_generic):
+       Fix sign bug in tiling code.
+
+       * gdk/linux-fb/gdkwindow-fb.c (_gdk_windowing_window_clear_area):
+       Handle background pixmaps.
+
 Wed May  9 15:27:22 2001  Jonathan Blandford  <jrb@redhat.com>
 
        * gtk/gtktreeview.c (gtk_tree_view_set_column_drag_function): New
index 53a24030e91e35edf7a06ef2710cf206244e5f3d..3cb89eae7af3a5713749888fba07816de0a82e2a 100644 (file)
@@ -1,3 +1,21 @@
+2001-05-10  Alexander Larsson  <alexl@redhat.com>
+
+       * gdk/linux-fb/gdkprivate-fb.h:
+       Make sure you can compile out the implementation/wrapper assert
+       macros.
+
+       * gdk/linux-fb/gdkdrawable-fb2.c:
+       Check implementation/wrappers, initialize type for pixmap dummys.
+
+       * gdk/linux-fb/gdkimage-fb.c (_gdk_fb_get_image):
+       Hide the cursor if reading from the screen.
+
+       * gdk/linux-fb/gdkrender-fb.c (gdk_fb_fill_span_generic):
+       Fix sign bug in tiling code.
+
+       * gdk/linux-fb/gdkwindow-fb.c (_gdk_windowing_window_clear_area):
+       Handle background pixmaps.
+
 Wed May  9 15:27:22 2001  Jonathan Blandford  <jrb@redhat.com>
 
        * gtk/gtktreeview.c (gtk_tree_view_set_column_drag_function): New
index 53a24030e91e35edf7a06ef2710cf206244e5f3d..3cb89eae7af3a5713749888fba07816de0a82e2a 100644 (file)
@@ -1,3 +1,21 @@
+2001-05-10  Alexander Larsson  <alexl@redhat.com>
+
+       * gdk/linux-fb/gdkprivate-fb.h:
+       Make sure you can compile out the implementation/wrapper assert
+       macros.
+
+       * gdk/linux-fb/gdkdrawable-fb2.c:
+       Check implementation/wrappers, initialize type for pixmap dummys.
+
+       * gdk/linux-fb/gdkimage-fb.c (_gdk_fb_get_image):
+       Hide the cursor if reading from the screen.
+
+       * gdk/linux-fb/gdkrender-fb.c (gdk_fb_fill_span_generic):
+       Fix sign bug in tiling code.
+
+       * gdk/linux-fb/gdkwindow-fb.c (_gdk_windowing_window_clear_area):
+       Handle background pixmaps.
+
 Wed May  9 15:27:22 2001  Jonathan Blandford  <jrb@redhat.com>
 
        * gtk/gtktreeview.c (gtk_tree_view_set_column_drag_function): New
index a006401a1b879faa485c47252d312d84e1bc6307..5df25c3be6331234abd7a8499f8187c3bf809335 100644 (file)
@@ -311,6 +311,8 @@ gdk_fb_clip_region (GdkDrawable *drawable,
   GdkDrawableFBData *private;
   GdkWindowObject *parent;
 
+  GDK_CHECK_IMPL (drawable);
+  
   private = GDK_DRAWABLE_FBDATA (drawable);
   
   g_assert(!GDK_IS_WINDOW (private->wrapper) ||
@@ -588,6 +590,8 @@ gdk_fb_drawing_context_init (GdkFBDrawingContext *dc,
   dc->bg_relto = private->wrapper;
   dc->draw_bg = draw_bg;
 
+  GDK_CHECK_IMPL (drawable);
+
   if (GDK_IS_WINDOW (private->wrapper))
     {
       dc->bgpm = GDK_WINDOW_P (private->wrapper)->bg_pixmap;
@@ -651,6 +655,9 @@ gdk_fb_draw_drawable_2 (GdkDrawable *drawable,
   GdkFBDrawingContext *dc, dc_data;
   dc = &dc_data;
 
+  GDK_CHECK_IMPL (src);
+  GDK_CHECK_IMPL (drawable);
+  
   gdk_fb_drawing_context_init (dc, drawable, gc, draw_bg, do_clipping);
   gdk_fb_draw_drawable_3 (drawable, gc, src, dc, xsrc, ysrc, xdest, ydest, width, height);
   gdk_fb_drawing_context_finalize (dc);
@@ -680,6 +687,9 @@ gdk_fb_draw_drawable_3 (GdkDrawable *drawable,
 
   g_assert (gc);
 
+  GDK_CHECK_IMPL (src);
+  GDK_CHECK_IMPL (drawable);
+
   if (GDK_IS_WINDOW (private->wrapper))
     {
       if (!GDK_WINDOW_IS_MAPPED (private->wrapper))
@@ -797,6 +807,7 @@ gdk_fb_draw_drawable (GdkDrawable *drawable,
   else
     src_impl = GDK_DRAWABLE_IMPL (src);
 
+  GDK_CHECK_IMPL (drawable);
   
   gdk_fb_draw_drawable_2 (drawable, gc, src_impl , xsrc, ysrc, xdest, ydest, width, height, TRUE, TRUE);
 }
@@ -1188,6 +1199,7 @@ _gdk_fb_draw_glyphs (GdkDrawable      *drawable,
 
   /* Fake its existence as a pixmap */
 
+  ((GTypeInstance *)&pixmap)->g_class = g_type_class_peek (_gdk_pixmap_impl_get_type ());
   pixmap.drawable_data.abs_x = 0;
   pixmap.drawable_data.abs_y = 0;
   pixmap.drawable_data.depth = 78;
@@ -1275,6 +1287,9 @@ gdk_fb_draw_image (GdkDrawable *drawable,
 
   /* Fake its existence as a pixmap */
   memset (&fbd, 0, sizeof(fbd));
+
+  ((GTypeInstance *)&fbd)->g_class = g_type_class_peek (_gdk_pixmap_impl_get_type ());
+  
   fbd.drawable_data.mem = image->mem;
   fbd.drawable_data.rowstride = image->bpl;
   fbd.drawable_data.width = fbd.drawable_data.lim_x = image->width;
index 851c8bbd373e9cdf007cc3329e359b65e58e821e..a698f11a4b40d1e8d6e5dd663902f198f1a9b3fe 100644 (file)
@@ -172,6 +172,8 @@ _gdk_fb_get_image (GdkDrawable *drawable,
   GdkImage *image;
   GdkImagePrivateFB *private;
   GdkPixmapFBData fbd;
+  GdkRegion *region = NULL;
+  gboolean handle_cursor = FALSE;
 
   g_return_val_if_fail (drawable != NULL, NULL);
 
@@ -200,6 +202,7 @@ _gdk_fb_get_image (GdkDrawable *drawable,
   
   /* Fake its existence as a pixmap */
   memset (&fbd, 0, sizeof(fbd));
+  ((GTypeInstance *)&fbd)->g_class = g_type_class_peek (_gdk_pixmap_impl_get_type ());
   fbd.drawable_data.mem = image->mem;
   fbd.drawable_data.rowstride = image->bpl;
   fbd.drawable_data.width = fbd.drawable_data.lim_x = image->width;
@@ -207,6 +210,17 @@ _gdk_fb_get_image (GdkDrawable *drawable,
   fbd.drawable_data.depth = image->depth;
   fbd.drawable_data.window_type = GDK_DRAWABLE_PIXMAP;
 
+  if (GDK_DRAWABLE_FBDATA (drawable)->mem == GDK_DRAWABLE_IMPL_FBDATA (gdk_parent_root)->mem)
+    {
+      region = gdk_fb_clip_region (drawable, _gdk_fb_screen_gc, TRUE, FALSE, FALSE);
+
+      if (gdk_fb_cursor_region_need_hide (region))
+       {
+         handle_cursor = TRUE;
+         gdk_fb_cursor_hide ();
+       }
+    }
+
   gdk_fb_draw_drawable_2 ((GdkPixmap *)&fbd,
                          _gdk_fb_screen_gc,
                          drawable,
@@ -215,6 +229,12 @@ _gdk_fb_get_image (GdkDrawable *drawable,
                          width, height,
                          TRUE, TRUE);
 
+  if (region)
+    gdk_region_destroy (region);
+  
+  if (handle_cursor)
+    gdk_fb_cursor_unhide ();
+
   return image;
 }
 
index 3fdbeed94f7cc8abb1be755214287f89f3a7a072..672ba605304e4ac6060f1a995c394e3752570d04 100644 (file)
 #define GDK_FONT_FB(f)                ((GdkFontPrivateFB *)(f))
 #define GDK_CURSOR_FB(c)              ((GdkCursorPrivateFB *)(c))
 
+#define CHECK_IMPL_AND_INTF
+
+#ifdef CHECK_IMPL_AND_INTF
 #define GDK_CHECK_IMPL(drawable) \
  g_assert(G_OBJECT_TYPE(drawable) == _gdk_window_impl_get_type() || G_OBJECT_TYPE(drawable) == _gdk_pixmap_impl_get_type())
 #define GDK_CHECK_INTF(drawable) \
  g_assert(G_OBJECT_TYPE(drawable) == gdk_window_object_get_type() || G_OBJECT_TYPE(drawable) == gdk_pixmap_get_type())
-
+#else
+#define GDK_CHECK_IMPL(drawable) 
+#define GDK_CHECK_INTF(drawable)
+#endif
 typedef struct _GdkDrawableFBData GdkDrawableFBData;
 typedef struct _GdkWindowFBData GdkWindowFBData;
 typedef struct _GdkPixmapFBData GdkPixmapFBData;
index 20a4844f2deec9b7ed124bd514f60be931961ea9..8db3e53d964ee00ee3e16563fb8b8f595f2170d5 100644 (file)
@@ -379,7 +379,7 @@ gdk_fb_fill_span_generic (GdkDrawable *drawable,
       gint relx, rely;
       int drawh;
       GdkFBDrawingContext *dc, dc_data;
-      
+
       dc = &dc_data;
       
       gdk_fb_drawing_context_init (dc, drawable, gc, FALSE, TRUE);
@@ -388,9 +388,9 @@ gdk_fb_fill_span_generic (GdkDrawable *drawable,
       ts_private = GDK_DRAWABLE_IMPL_FBDATA (ts);
       
       rely = y - private->abs_y;
-      drawh = (rely + gc_private->values.ts_y_origin) % ts_private->height;
+      drawh = (rely - gc_private->values.ts_y_origin) % ts_private->height;
       if (drawh < 0)
-       drawh += GDK_DRAWABLE_FBDATA (ts)->height;
+       drawh += ts_private->height;
       
       for (curx = left; curx < right; curx += xstep)
        {
@@ -398,7 +398,7 @@ gdk_fb_fill_span_generic (GdkDrawable *drawable,
          
          relx = curx - private->abs_x;
          
-         draww = (relx + gc_private->values.ts_x_origin) % ts_private->width;
+         draww = (relx - gc_private->values.ts_x_origin) % ts_private->width;
          if (draww < 0)
            draww += ts_private->width;
          
index cd13b88d8abc45f26f2f03a92951723b55770a4f..894165030ba3655d4006a3587506de878a9ada91 100644 (file)
@@ -1243,42 +1243,44 @@ _gdk_windowing_window_clear_area (GdkWindow *window,
   if (height == 0)
     height = GDK_DRAWABLE_IMPL_FBDATA (window)->height - y;
   
-#if 0  
-  for (relto = window; bgpm == GDK_PARENT_RELATIVE_BG && relto; relto = (GdkWindow *)GDK_WINDOW_P(relto)->parent)
-    bgpm = GDK_WINDOW_P (relto)->bg_pixmap;
-#endif
-
+  relto = window;
+  while ((bgpm == GDK_PARENT_RELATIVE_BG) && relto)
+    {
+      relto = (GdkWindow *)GDK_WINDOW_P(relto)->parent;
+      bgpm = GDK_WINDOW_P (relto)->bg_pixmap;
+    }
+  
   if (bgpm && bgpm != GDK_NO_BG)
     {
       int curx, cury;
-      int xtrans, ytrans;
       int xstep, ystep;
+      int xtrans, ytrans;
       GdkFBDrawingContext fbdc;
 
-      return; /* Don't bother doing this - gtk+ will do it itself using GC tiles. If removing this line,
-                then also remove the #if 0 stuff */
-
-      gdk_fb_drawing_context_init (&fbdc, window, NULL, FALSE, TRUE);
+      gdk_fb_drawing_context_init (&fbdc, GDK_DRAWABLE_IMPL (window), NULL, FALSE, TRUE);
 
-      xtrans = GDK_DRAWABLE_IMPL_FBDATA (relto)->abs_x - GDK_DRAWABLE_IMPL_FBDATA (window)->abs_x;
-      ytrans = GDK_DRAWABLE_IMPL_FBDATA (relto)->abs_y - GDK_DRAWABLE_IMPL_FBDATA (window)->abs_y;
+      xtrans = GDK_DRAWABLE_IMPL_FBDATA (window)->abs_x - GDK_DRAWABLE_IMPL_FBDATA (relto)->abs_x;
+      ytrans = GDK_DRAWABLE_IMPL_FBDATA (window)->abs_y - GDK_DRAWABLE_IMPL_FBDATA (relto)->abs_y;
 
-      for (cury = y - ytrans; cury < (y - ytrans + height); cury += ystep)
+      for (cury = y; cury < (y + height); cury += ystep)
        {
-         int drawh = cury % GDK_DRAWABLE_FBDATA (bgpm)->height;
-         ystep = GDK_DRAWABLE_FBDATA (bgpm)->height - drawh;
+         int drawh = (cury + ytrans) % GDK_DRAWABLE_IMPL_FBDATA (bgpm)->height;
+         ystep = GDK_DRAWABLE_IMPL_FBDATA (bgpm)->height - drawh;
 
-         for(curx = x - xtrans; curx < (x - xtrans + width); curx += xstep)
+         ystep = MIN (ystep, y + height - cury);
+
+         for (curx = x; curx < (x + width); curx += xstep)
            {
-             int draww = curx % GDK_DRAWABLE_IMPL_FBDATA (bgpm)->width;
+             int draww = (curx + xtrans) % GDK_DRAWABLE_IMPL_FBDATA (bgpm)->width;
              xstep = GDK_DRAWABLE_IMPL_FBDATA (bgpm)->width - draww;
 
+             xstep = MIN (xstep, x + width - curx);
              gdk_fb_draw_drawable_3 (GDK_DRAWABLE_IMPL (window),
                                      _gdk_fb_screen_gc,
                                      GDK_DRAWABLE_IMPL (bgpm),
                                      &fbdc,
                                      draww, drawh,
-                                     curx + xtrans, cury + ytrans,
+                                     curx, cury,
                                      xstep, ystep);
            }
        }
@@ -1286,7 +1288,20 @@ _gdk_windowing_window_clear_area (GdkWindow *window,
       gdk_fb_drawing_context_finalize (&fbdc);
     }
   else if (!bgpm)
-    gdk_draw_rectangle (window, _gdk_fb_screen_gc, TRUE, x, y, width, height);
+    {
+      if (relto == window)
+       gdk_draw_rectangle (window, _gdk_fb_screen_gc, TRUE, x, y, width, height);
+      else
+       {
+         /* GDK_PARENT_RELATIVE_BG, but no pixmap, get the color from the parent window. */
+         GdkGC *gc;
+         GdkGCValues values;
+         values.foreground = GDK_WINDOW_P (relto)->bg_color;
+         gc = gdk_gc_new_with_values (window, &values, GDK_GC_FOREGROUND);
+         gdk_draw_rectangle (window, gc, TRUE, x, y, width, height);
+         gdk_gc_unref (gc);
+       }
+    }
 }
 
 /* What's the diff? */