[PATCH] [GDK] Rendering strike-through



Hi,

can I get some reviewing action with the attached patch? It implements
rendering of the strikethrough attribute of Pango

-- 
   .--= ULLA! =---------------------.   `We are not here to give users what
   \     http://cactus.rulez.org     \   they want'  -- RMS, at GUADEC 2001
    `---= cactus cactus rulez org =---'
Don't anthropomorphize computers. They hate that.

Index: ChangeLog
===================================================================
RCS file: /cvs/gnome/gtk+/ChangeLog,v
retrieving revision 1.1939
diff -u -u -r1.1939 ChangeLog
--- ChangeLog	2001/05/05 14:07:42	1.1939
+++ ChangeLog	2001/05/05 18:14:15
@@ -1,3 +1,9 @@
+2001-05-05  ERDI Gergo  <cactus cactus rulez org>
+
+	* gdk/gdkpango.c (gdk_pango_get_item_properties): Peek
+	strike-through setting
+	(gdk_draw_layout_line_with_colors): Render strike-through
+
 Sat May  5 10:06:24 2001  Owen Taylor  <otaylor redhat com>
 
 	* Release 1.3.5
Index: gdk/gdkpango.c
===================================================================
RCS file: /cvs/gnome/gtk+/gdk/gdkpango.c,v
retrieving revision 1.14
diff -u -u -r1.14 gdkpango.c
--- gdk/gdkpango.c	2001/02/17 00:11:02	1.14
+++ gdk/gdkpango.c	2001/05/05 18:14:21
@@ -37,6 +37,7 @@
 
 static void gdk_pango_get_item_properties (PangoItem      *item,
 					   PangoUnderline *uline,
+					   gboolean       *strikethrough,
                                            gint           *rise,
 					   PangoColor     *fg_color,
 					   gboolean       *fg_set,
@@ -193,13 +194,14 @@
       PangoUnderline uline = PANGO_UNDERLINE_NONE;
       PangoLayoutRun *run = tmp_list->data;
       PangoColor fg_color, bg_color;
-      gboolean fg_set, bg_set, shape_set;
+      gboolean strike, fg_set, bg_set, shape_set;
       GdkGC *fg_gc;
       gint risen_y;
       
       tmp_list = tmp_list->next;
       
       gdk_pango_get_item_properties (run->item, &uline,
+				     &strike,
                                      &rise,
                                      &fg_color, &fg_set,
                                      &bg_color, &bg_set,
@@ -314,6 +316,17 @@
                          risen_y + (ink_rect.y + ink_rect.height) / PANGO_SCALE + 1);
 	  break;
 	}
+
+      if (strike)
+      {
+	  int centerline = logical_rect.y + logical_rect.height / 2;
+	  
+	  gdk_draw_line (drawable, fg_gc,
+			 x + (x_off + logical_rect.x) / PANGO_SCALE - 1,
+			 risen_y + centerline / PANGO_SCALE,
+			 x + (x_off + logical_rect.x + logical_rect.width) / PANGO_SCALE + 1,
+			 risen_y + centerline / PANGO_SCALE);
+      }
       
       if (fg_gc != gc)
 	gdk_pango_free_gc (context, fg_gc);
@@ -427,6 +440,7 @@
 static void
 gdk_pango_get_item_properties (PangoItem      *item,
 			       PangoUnderline *uline,
+			       gboolean       *strikethrough,
                                gint           *rise,
 			       PangoColor     *fg_color,
 			       gboolean       *fg_set,
@@ -440,6 +454,9 @@
 {
   GSList *tmp_list = item->extra_attrs;
 
+  if (strikethrough)
+      *strikethrough = FALSE;
+  
   if (fg_set)
     *fg_set = FALSE;
   
@@ -468,7 +485,12 @@
 	  if (uline)
 	    *uline = ((PangoAttrInt *)attr)->value;
 	  break;
-	  
+
+	case PANGO_ATTR_STRIKETHROUGH:
+	    if (strikethrough)
+		*strikethrough = ((PangoAttrInt *)attr)->value;
+	    break;
+	    
 	case PANGO_ATTR_FOREGROUND:
 	  if (fg_color)
 	    *fg_color = ((PangoAttrColor *)attr)->color;


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