r440 - in trunk/src/target/OM-2007/applications/openmoko-mainmenu: data src

tongsong_li at gta01.hmw-consulting.de tongsong_li at gta01.hmw-consulting.de
Thu Dec 21 10:57:24 CET 2006


Author: tongsong_li
Date: 2006-12-21 10:57:14 +0100 (Thu, 21 Dec 2006)
New Revision: 440

Added:
   trunk/src/target/OM-2007/applications/openmoko-mainmenu/data/main_menu_sel_text.png
Modified:
   trunk/src/target/OM-2007/applications/openmoko-mainmenu/data/Makefile.am
   trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/mainmenu.c
   trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/mainmenu.h
   trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/mokoiconview.c
   trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/mokoiconview.h
   trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/support.c
Log:
update mokoiconview widget

Modified: trunk/src/target/OM-2007/applications/openmoko-mainmenu/data/Makefile.am
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-mainmenu/data/Makefile.am	2006-12-20 10:40:31 UTC (rev 439)
+++ trunk/src/target/OM-2007/applications/openmoko-mainmenu/data/Makefile.am	2006-12-21 09:57:14 UTC (rev 440)
@@ -1,5 +1,7 @@
-EXTRA_DIST = main_menu_sel_icon.png
+EXTRA_DIST = main_menu_sel_icon.png\
+		main_menu_sel_text.png
 
 resourcedir = $(pkgdatadir)
-resource_DATA = main_menu_sel_icon.png
+resource_DATA = main_menu_sel_icon.png\
+		main_menu_sel_text.png
 

Added: trunk/src/target/OM-2007/applications/openmoko-mainmenu/data/main_menu_sel_text.png
===================================================================
(Binary files differ)


Property changes on: trunk/src/target/OM-2007/applications/openmoko-mainmenu/data/main_menu_sel_text.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Modified: trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/mainmenu.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/mainmenu.c	2006-12-20 10:40:31 UTC (rev 439)
+++ trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/mainmenu.c	2006-12-21 09:57:14 UTC (rev 440)
@@ -144,6 +144,10 @@
     moko_icon_view_set_margin (mm->icon_view, ITEM_MARGIN);
     moko_icon_view_set_row_spacing (mm->icon_view, ROW_SPACING);
     moko_icon_view_set_column_spacing (mm->icon_view, COLUMN_SPACING);
+    moko_icon_view_set_decoration_width (mm->icon_view, 30);
+    moko_icon_view_set_decoration_bg (mm->icon_view, PKGDATADIR"/main_menu_sel_icon.png");
+    moko_icon_view_set_text_bg (mm->icon_view, PKGDATADIR"/main_menu_sel_text.png");
+    moko_icon_view_set_decorated (mm->icon_view, TRUE);
 
     //mm->icon_view = gtk_icon_view_new ();
     //gtk_icon_view_set_item_width(mm->icon_view, ITEM_WIDTH);
@@ -164,7 +168,7 @@
 
     mm->scrolled = gtk_scrolled_window_new (NULL, NULL);
     gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (mm->scrolled),
-				  GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
+				  GTK_POLICY_NEVER, GTK_POLICY_NEVER);
     gtk_widget_show (mm->scrolled);
    // gtk_scrolled_window_add_with_viewport (GTK_CONTAINER (mm->scrolled),
     //						mm->icon_view);

Modified: trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/mainmenu.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/mainmenu.h	2006-12-20 10:40:31 UTC (rev 439)
+++ trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/mainmenu.h	2006-12-21 09:57:14 UTC (rev 440)
@@ -44,8 +44,8 @@
 #define COLUMN_SPACING 	0
 #define ITME_TOTAL_WIDTH 	7
 
-#define PIXBUF_WIDTH		120 //? useless
-#define PIXBUF_HEIGHT		120//? useless
+#define PIXBUF_WIDTH		120 
+#define PIXBUF_HEIGHT		120
 
 #define SECTION_ALG_X 		0.6
 #define SECTION_ALG_Y 		0.5

Modified: trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/mokoiconview.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/mokoiconview.c	2006-12-20 10:40:31 UTC (rev 439)
+++ trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/mokoiconview.c	2006-12-21 09:57:14 UTC (rev 440)
@@ -3,15 +3,12 @@
 
 #define DEBUG(obj) 		g_debug ("***********************");\
 						g_debug ("%s",obj);
-						
-						
 
-#define MOKO_MAX(arg1,arg2)		arg1>arg2?arg1:arg2
+#define MOKO_MAX(arg1, arg2)	MAX(arg1, arg2)
+#define MOKO_MIN(arg1, arg2)		MIN(arg1, arg2)
+#define MOKO_ABS(arg1, arg2)		ABS(arg1, arg2)
+#define P_(obj)					(obj)
 
-#define MOKO_MIN(arg1,arg2)		arg1<arg2?arg1:arg2
-
-#define P_(obj)		(obj)
-
 #define MOKO_ICON_VIEW_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), MOKO_TYPE_ICON_VIEW, MokoIconViewPrivate))
 
 #define VALID_MODEL_AND_COLUMNS(obj) ((obj)->priv->model != NULL && \
@@ -33,14 +30,11 @@
   /* Bounding boxes */
   gint x, y;
   gint width, height;
-  gint colspan;
 
   gint pixbuf_x, pixbuf_y;
-  gint pixbuf_offset_x, pixbuf_offset_y;
   gint pixbuf_height, pixbuf_width;
 
   gint layout_x, layout_y;
-  gint layout_offset_x, layout_offset_y;
   gint layout_width, layout_height;
 
   guint selected : 1;
@@ -79,17 +73,12 @@
   MokoIconViewItem *anchor_item;
   MokoIconViewItem *cursor_item;
 
-  GdkPixbuf *decoration; //Item decorated image.
-
-  gint pixbuf_offset_x, pixbuf_offset_y;
-  gint pixbuf_height, pixbuf_width;
-
-  gint layout_offset_x, layout_offset_y;
-  gint layout_width, layout_height;
-
+  GdkPixbuf *bg_decoration; //Item decorated image.
+  GdkPixbuf *bg_layout;//text layout background image.
   gint max_text_len;
+  gint decr_width;
+  gboolean decorated;
 
-
   guint ctrl_pressed : 1;
   guint shift_pressed : 1;
   
@@ -144,7 +133,12 @@
   PROP_SPACING,
   PROP_ROW_SPACING,
   PROP_COLUMN_SPACING,
-  PROP_MARGIN
+  PROP_MARGIN,
+  PROP_BG_DECORATION,
+  PROP_BG_LAYOUT,
+  PROP_DECORATION_WIDTH,
+  PROP_DECORATED,
+  PROP_MAX_TEXT_LENGTH
 };
 
 /* GObject signals */
@@ -489,10 +483,10 @@
   widget_class->size_request = moko_icon_view_size_request;
   widget_class->size_allocate = moko_icon_view_size_allocate;
   widget_class->expose_event = moko_icon_view_expose;
-  widget_class->motion_notify_event = moko_icon_view_motion;
+  //widget_class->motion_notify_event = moko_icon_view_motion;
   widget_class->button_press_event = moko_icon_view_button_press;
   widget_class->button_release_event = moko_icon_view_button_release;
-  widget_class->get_accessible = moko_icon_view_get_accessible;
+  //widget_class->get_accessible = moko_icon_view_get_accessible;
 
 
   klass->set_scroll_adjustments = moko_icon_view_set_adjustments;
@@ -505,6 +499,90 @@
 
 
   /* Properties */
+/*New properties for MokoIconView*/
+   /**
+   * MokoIconView:::
+   *
+   * The decoration-width property specifies the decorated width to use for each item. 
+   * If it is set to -1, the icon view will automatically determine a 
+   * suitable item size.
+   *
+   * Since: 2.6
+   */
+    g_object_class_install_property (gobject_class,
+				   PROP_BG_DECORATION,
+				   g_param_spec_object ("bg_decoraton",
+                                                        P_("Decoration Background"),
+                                                        P_("Decoration background used to decorated selected icon(s)."),
+                                                        GDK_TYPE_PIXBUF,
+                                                        G_PARAM_READWRITE)); 
+ /**
+   * MokoIconView::decoration-width:
+   *
+   * The decoration-width property specifies the decorated width to use for each item. 
+   * If it is set to -1, the icon view will automatically determine a 
+   * suitable item size.
+   *
+   * Since: 2.6
+   */
+    g_object_class_install_property (gobject_class,
+				   PROP_BG_LAYOUT,
+				   g_param_spec_object ("bg_layout",
+                                                        P_("text Layout Background"),
+                                                        P_("Decoration background used to decorated selected text."),
+                                                        GDK_TYPE_PIXBUF,
+                                                        G_PARAM_READWRITE)); 
+
+   /**
+   * MokoIconView::decoration-width:
+   *
+   * The decoration-width property specifies the decorated width to use for each item. 
+   * If it is set to -1, the icon view will automatically determine a 
+   * suitable item size.
+   *
+   * Since: 2.6
+   */
+    g_object_class_install_property (gobject_class,
+				   PROP_DECORATION_WIDTH,
+				   g_param_spec_int ("decr_width",
+						     P_("Width for Decoration"),
+						     P_("The width used for scale icon and draw decoration"),
+						     -1, G_MAXINT, -1,
+						     G_PARAM_READWRITE)); 
+     /**
+   * MokoIconView::decoration-width:
+   *
+   * The decoration-width property specifies the decorated width to use for each item. 
+   * If it is set to -1, the icon view will automatically determine a 
+   * suitable item size.
+   *
+   * Since: 2.6
+   */
+    g_object_class_install_property (gobject_class,
+				   PROP_DECORATED,
+				  g_param_spec_boolean ("decorated",
+                                                         P_("Decorated"),
+                                                         P_("Whether decorated the icon and text with custom image when selected"),
+                                                         FALSE,
+                                                         G_PARAM_READWRITE));
+     /**
+   * MokoIconView::decoration-width:
+   *
+   * The decoration-width property specifies the decorated width to use for each item. 
+   * If it is set to -1, the icon view will automatically determine a 
+   * suitable item size.
+   *
+   * Since: 2.6
+   */
+    g_object_class_install_property (gobject_class,
+				   PROP_MAX_TEXT_LENGTH,
+				   g_param_spec_int ("max_text_len",
+						     P_("Maximum Text column Length"),
+						     P_("The width used for scale icon and draw decoration"),
+						     -1, G_MAXINT, -1,
+						     G_PARAM_READWRITE)); 
+     
+/*Old properties of GtkIconView*/
   /**
    * MokoIconView:selection-mode:
    * 
@@ -785,16 +863,12 @@
   icon_view->priv->markup_column = -1;  
   icon_view->priv->pixbuf_column = -1;
 
-  icon_view->priv->pixbuf_offset_x = 20;
-  icon_view->priv->pixbuf_offset_y = 20;
-  icon_view->priv->layout_offset_x = 0;
-  icon_view->priv->layout_offset_y = 0;
-  icon_view->priv->max_text_len = 30;
-  
   icon_view->priv->layout = gtk_widget_create_pango_layout (GTK_WIDGET (icon_view), NULL);
 
-  icon_view->priv->decoration = gdk_pixbuf_new_from_file (PKGDATADIR"/main_menu_sel_icon.png", NULL);
-
+  icon_view->priv->max_text_len = 30;
+  icon_view->priv->decr_width = 15;
+  icon_view->priv->decorated = FALSE;
+  
   pango_layout_set_wrap (icon_view->priv->layout, PANGO_WRAP_WORD_CHAR);
 
   GTK_WIDGET_SET_FLAGS (icon_view, GTK_CAN_FOCUS);
@@ -872,7 +946,7 @@
 			   GDK_KEY_PRESS_MASK |
 			   GDK_KEY_RELEASE_MASK) |
     gtk_widget_get_events (widget);
-  
+
   icon_view->priv->bin_window = gdk_window_new (widget->window,
 						&attributes, attributes_mask);
   gdk_window_set_user_data (icon_view->priv->bin_window, widget);
@@ -973,48 +1047,6 @@
 	return dest;
 }
 
-static GdkPixbuf *
-moko_composite_selected_pixbuf (GdkPixbuf *src, GdkPixbuf *decoration)
-{
-  int dest_x, dest_y, width, height;
-  double offset_x, offset_y, scale_x, scale_y;
-  gint alpha;
-  GdkPixbuf *dest;
-
-  dest_x = 0;
-  dest_y = 0;
-  offset_x = 10;
-  offset_y = 10;
-  width = gdk_pixbuf_get_width (src) + 2*offset_x;
-  height = gdk_pixbuf_get_height (src) + 2*offset_y;
-  scale_x = width;
-  scale_y = height;
-  alpha = gdk_pixbuf_get_has_alpha (src);
-
-  dest = gdk_pixbuf_new (gdk_pixbuf_get_colorspace (src),
-			       TRUE,
-			       gdk_pixbuf_get_bits_per_sample (src),
-			       width,
-			       height);
-  
-  g_debug ("test1---------------------");
-  g_debug ("width = %d, height = %d", width, height);
-  /*gdk_pixbuf_copy_area (src,
-                                     0, 0, width, height,
-                                     dest, 0, 0);
- */
-  g_debug ("test2---------------------");
-  gdk_pixbuf_composite (src, decoration,
-                                   dest_x, dest_y, 
-                                   width, height,
-                                   offset_x, offset_y,
-                                   scale_x, scale_y,
-                                   GDK_INTERP_NEAREST,
-                                   alpha);
-    g_debug ("test3---------------------");
-  return src;
-}
-
 static void
 moko_icon_view_paint_item (MokoIconView     *icon_view,
 			  MokoIconViewItem *item,
@@ -1025,12 +1057,6 @@
   GtkStateType state;
   gboolean rtl = gtk_widget_get_direction (GTK_WIDGET (icon_view)) == GTK_TEXT_DIR_RTL;
 
-  
-  if (!icon_view->priv->decoration)
-  {
-      g_debug ("Error: can't get decoration image");
-  }
-g_debug (":)  begin-----------------");
 
   if (!VALID_MODEL_AND_COLUMNS (icon_view))
     return;
@@ -1048,24 +1074,22 @@
   if (icon_view->priv->pixbuf_column != -1)
     {
       pixbuf = moko_icon_view_get_item_icon (icon_view, item);
-
-
       
-    if (item->selected)
-	{
-	    gint decr_width = 10;
+      if (item->selected && icon_view->priv->decorated)
+      	 {
+	    gint decr_width = icon_view->priv->decr_width;
   	    gint scaled_w, scaled_h;
  	    gint scaled_x, scaled_y;
-      scaled_w =  item->pixbuf_width - 2*decr_width;
-      scaled_h = item->pixbuf_height - 2*decr_width;
-      scaled_x = item->pixbuf_x + decr_width;
-      scaled_y = item->pixbuf_y + decr_width;
+          scaled_w =  item->pixbuf_width - 2*decr_width;
+          scaled_h = item->pixbuf_height - 2*decr_width;
+          scaled_x = item->pixbuf_x + decr_width;
+          scaled_y = item->pixbuf_y + decr_width;
       
          scaled = gdk_pixbuf_scale_simple (pixbuf, 
       				scaled_w, scaled_h, GDK_INTERP_NEAREST);
 
-	  tmp = gdk_pixbuf_scale_simple (icon_view->priv->decoration, 
-	  					item->pixbuf_width, item->pixbuf_width,
+	  tmp = gdk_pixbuf_scale_simple (icon_view->priv->bg_decoration, 
+	  					item->pixbuf_width, item->pixbuf_height,
 	  					GDK_INTERP_NEAREST);
 
 	  gdk_draw_pixbuf (icon_view->priv->bin_window, NULL, 
@@ -1075,17 +1099,32 @@
 		       			item->pixbuf_width,  item->pixbuf_height,
 		       			GDK_RGB_DITHER_NORMAL,
 		       			item->pixbuf_width,  item->pixbuf_height);
-	  g_debug ("frame(%d,%d)", item->x, item->y);
+
 	  gdk_draw_pixbuf (icon_view->priv->bin_window, NULL, scaled,
 		      			0, 0,
 		      			scaled_x, scaled_y,
 		       		scaled_w, scaled_h,
 		       		GDK_RGB_DITHER_NORMAL,
 		       		scaled_w, scaled_h);
+	  
 	  g_object_unref (tmp);
 	  g_object_unref (scaled);
-
+	  g_object_unref (pixbuf);
 	}
+      else if (item->selected && !icon_view->priv->decorated)
+      	{ 
+      	  tmp = moko_icon_view_get_item_icon (icon_view, item);
+      	  pixbuf = create_colorized_pixbuf (tmp,
+					    &GTK_WIDGET (icon_view)->style->base[state]);
+      	  gdk_draw_pixbuf (icon_view->priv->bin_window, NULL, pixbuf,
+		      			0, 0,
+		      			item->pixbuf_x, item->pixbuf_y,
+		       		item->pixbuf_width, item->pixbuf_height,
+		       		GDK_RGB_DITHER_NORMAL,
+		       		item->pixbuf_width, item->pixbuf_height);
+         g_object_unref (pixbuf);
+	  g_object_unref (tmp);
+      	}
       else
       	{
           gdk_draw_pixbuf (icon_view->priv->bin_window, NULL, pixbuf,
@@ -1094,26 +1133,43 @@
 		       		item->pixbuf_width, item->pixbuf_height,
 		       		GDK_RGB_DITHER_NORMAL,
 		       		item->pixbuf_width, item->pixbuf_height);
+          g_object_unref (pixbuf);
       	}
               
     }
-g_debug (":) 4 -----------------");
 
   if (icon_view->priv->text_column != -1 ||
       icon_view->priv->markup_column != -1)
     {
-      if (item->selected)
+      if (item->selected && icon_view->priv->decorated)
 	{
-	 /* gdk_draw_rectangle (icon_view->priv->bin_window,
+	    tmp = gdk_pixbuf_scale_simple (icon_view->priv->bg_layout, 
+	  					 item->layout_width + 2 * ICON_TEXT_PADDING,
+	  					  item->layout_height + 2 * ICON_TEXT_PADDING,
+	  					GDK_INTERP_NEAREST);
+
+	    gdk_draw_pixbuf (icon_view->priv->bin_window, NULL, 
+	  					tmp,
+		       			0, 0,
+		       			item->layout_x - ICON_TEXT_PADDING,
+		       			item->layout_y - ICON_TEXT_PADDING,
+		       			item->layout_width + 2 * ICON_TEXT_PADDING,
+		       			item->layout_height + 2 * ICON_TEXT_PADDING,
+		       			GDK_RGB_DITHER_NORMAL,
+		       			item->layout_width + 2 * ICON_TEXT_PADDING,
+		       			item->layout_height + 2 * ICON_TEXT_PADDING);
+	 g_object_unref (tmp);
+	}
+      else if (item->selected && !icon_view->priv->decorated) 
+      	{
+      	    gdk_draw_rectangle (icon_view->priv->bin_window,
 			      GTK_WIDGET (icon_view)->style->base_gc[state],
 			      TRUE,
 			      item->layout_x - ICON_TEXT_PADDING,
 			      item->layout_y - ICON_TEXT_PADDING,
 			      item->layout_width + 2 * ICON_TEXT_PADDING,
 			      item->layout_height + 2 * ICON_TEXT_PADDING);
-			      */
-	g_debug ("draw pango layout");
-	}
+      	}
 
       moko_icon_view_update_item_text (icon_view, item);
       pango_layout_set_alignment (icon_view->priv->layout, rtl ? PANGO_ALIGN_RIGHT: PANGO_ALIGN_LEFT);
@@ -1165,8 +1221,8 @@
   guint fill_color;
   guchar fill_color_alpha;
 
-  rubber_rect.x = MOKO_MAX (icon_view->priv->rubberband_x1, icon_view->priv->rubberband_x2);
-  rubber_rect.y = MOKO_MAX (icon_view->priv->rubberband_y1, icon_view->priv->rubberband_y2);
+  rubber_rect.x = MOKO_MIN (icon_view->priv->rubberband_x1, icon_view->priv->rubberband_x2);
+  rubber_rect.y = MOKO_MIN (icon_view->priv->rubberband_y1, icon_view->priv->rubberband_y2);
   rubber_rect.width = ABS (icon_view->priv->rubberband_x1 - icon_view->priv->rubberband_x2) + 1;
   rubber_rect.height = ABS (icon_view->priv->rubberband_y1 - icon_view->priv->rubberband_y2) + 1;
 
@@ -1218,7 +1274,6 @@
 {
   MokoIconView *icon_view;
   GList *icons;
-g_debug ("Call moko icon view expose event callback :)  -----------------");
   icon_view = MOKO_ICON_VIEW (widget);
 
   if (expose->window != icon_view->priv->bin_window)
@@ -1284,7 +1339,7 @@
   
   icon_view = data;
 
-  value = MIN (icon_view->priv->vadjustment->value +
+  value = MOKO_MIN (icon_view->priv->vadjustment->value +
 	       icon_view->priv->scroll_value_diff,
 	       icon_view->priv->vadjustment->upper -
 	       icon_view->priv->vadjustment->page_size);
@@ -1839,90 +1894,6 @@
 }
 
 static void
-gtk_icon_view_calculate_item_size (MokoIconView     *icon_view,
-				   MokoIconViewItem *item,
-				   gint             item_width)
-{
-  gint focus_width, focus_pad;
-  gint layout_width, layout_height;
-  gint maximum_layout_width;
-  gint spacing, padding;
-  gint colspan;
-  GdkPixbuf *pixbuf;
-  
-  if (item->width != -1 && item->height != -1) 
-    return;
-
-  gtk_widget_style_get (GTK_WIDGET (icon_view),
-			"focus-line-width", &focus_width,
-			"focus-padding", &focus_pad,
-			NULL);
-
-  spacing = icon_view->priv->spacing;
-
-  if (icon_view->priv->pixbuf_column != -1)
-    {
-      pixbuf = moko_icon_view_get_item_icon (icon_view, item);
-      item->pixbuf_width = gdk_pixbuf_get_width (pixbuf);
-      item->pixbuf_height = gdk_pixbuf_get_height (pixbuf);
-      g_object_unref (pixbuf);
-    }
-  else
-    {
-      item->pixbuf_width = 0;
-      item->pixbuf_height = 0;
-      spacing = 0;
-    }
-  
-  if (icon_view->priv->orientation == GTK_ORIENTATION_HORIZONTAL &&
-      item_width > 0)
-    {
-      colspan = item->pixbuf_width / item_width + 1;
-      maximum_layout_width = MOKO_MAX (colspan * item_width - item->pixbuf_width - icon_view->priv->spacing - 2 * (ICON_TEXT_PADDING + focus_width + focus_pad), 50);
-    }
-  else
-    maximum_layout_width = MOKO_MAX (item_width, item->pixbuf_width);
-    
-  if (icon_view->priv->markup_column != -1 ||
-      icon_view->priv->text_column != -1)
-    {
-      moko_icon_view_update_item_text (icon_view, item);
-
-      pango_layout_set_alignment (icon_view->priv->layout, PANGO_ALIGN_CENTER);
-      pango_layout_set_width (icon_view->priv->layout, maximum_layout_width * PANGO_SCALE);
-      
-      pango_layout_get_pixel_size (icon_view->priv->layout, &layout_width, &layout_height);
-      
-      item->layout_width = layout_width;
-      item->layout_height = layout_height;
-      padding = 2 * (ICON_TEXT_PADDING + focus_width + focus_pad);
-    }
-  else
-    {
-      item->layout_width = 0;
-      item->layout_height = 0;
-      spacing = 0;
-      padding = 0;
-    }
-
-  if (icon_view->priv->orientation == GTK_ORIENTATION_HORIZONTAL)
-    {
-      item->width = item->layout_width + padding + spacing + item->pixbuf_width;
-      item->height = MOKO_MAX (item->layout_height + padding, item->pixbuf_height);
-      g_debug ("Hlayout_width = %d, padding = %d, spacing = %d, pixbuf_width = %d",
-      	  			item->layout_width, padding, spacing, item->pixbuf_width);
-    }
-  else
-    {
-      item->width = MOKO_MAX (item->layout_width + padding, item->pixbuf_width);
-      item->height = item->layout_height + padding + spacing + item->pixbuf_height;
-      g_debug ("Vlayout_width = %d, padding = %d, spacing = %d, pixbuf_width = %d",
-      	  			item->layout_width, padding, spacing, item->pixbuf_width);
-    }
-  
-}
-
-static void
 moko_icon_view_calculate_item_size (MokoIconView     *icon_view,
 				   MokoIconViewItem *item,
 				   gint             item_width)
@@ -1962,13 +1933,10 @@
       item_width > 0)
     {
       colspan = item->pixbuf_width / item_width + 1;
-      maximum_layout_width = MOKO_MAX (colspan * item_width - item->pixbuf_width - icon_view->priv->spacing - 2 * (ICON_TEXT_PADDING + focus_width + focus_pad), 50);
-      g_debug ("maximum_layout_width = %d", maximum_layout_width);
+      maximum_layout_width = MAX (colspan * item_width - item->pixbuf_width - icon_view->priv->spacing - 2 * (ICON_TEXT_PADDING + focus_width + focus_pad), 50);
     }
   else
-    maximum_layout_width = MOKO_MAX (item_width, item->pixbuf_width);
-        g_debug ("maximum_layout_width = %d", maximum_layout_width);
-
+    maximum_layout_width = MAX (item_width, item->pixbuf_width);
     
   if (icon_view->priv->markup_column != -1 ||
       icon_view->priv->text_column != -1)
@@ -1995,20 +1963,15 @@
   if (icon_view->priv->orientation == GTK_ORIENTATION_HORIZONTAL)
     {
       item->width = item->layout_width + padding + spacing + item->pixbuf_width;
-      item->height = MOKO_MAX (item->layout_height + padding, item->pixbuf_height);
+      item->height = MAX (item->layout_height + padding, item->pixbuf_height);
     }
   else
     {
-      item->width = MOKO_MAX (item->layout_width + padding, item->pixbuf_width);
+      item->width = MAX (item->layout_width + padding, item->pixbuf_width);
       item->height = item->layout_height + padding + spacing + item->pixbuf_height;
     }
-  g_debug ("WH: item(%d,%d) pixbuf(%d,%d) layout(%d,%d)", 
-  			item->width, item->height,
-  			item->pixbuf_width, item->pixbuf_height,
-  			item->layout_width, item->layout_height);
 }
 
-
 /* Internal functions */
 static void
 moko_icon_view_adjustment_changed (GtkAdjustment *adjustment,
@@ -2042,7 +2005,7 @@
   gint colspan;
   gboolean rtl = gtk_widget_get_direction (GTK_WIDGET (icon_view)) == GTK_TEXT_DIR_RTL;
 
-   x = 0;
+  x = 0;
   col = 0;
   max_height = 0;
   max_pixbuf_height = 0;
@@ -2053,7 +2016,6 @@
 			"focus-line-width", &focus_width,
 			"focus-padding", &focus_pad,
 			NULL);
-  g_debug ("focus_w = %d, focus_pad = %d", focus_width, focus_pad);
 
   x += icon_view->priv->margin;
   current_width += 2 * icon_view->priv->margin;
@@ -2061,16 +2023,13 @@
 
   while (items)
     {
-      gint last_width;
       MokoIconViewItem *item = items->data;
 
       moko_icon_view_calculate_item_size (icon_view, item, item_width);
 
       colspan = 1 + (item->width - 1) / (item_width + icon_view->priv->column_spacing);
-      last_width = current_width;
       current_width += colspan * (item_width + icon_view->priv->column_spacing);
-
-       
+	
       if (items != first_item)
 	{
 	  if ((icon_view->priv->columns <= 0 && current_width > GTK_WIDGET (icon_view)->allocation.width) ||
@@ -2078,8 +2037,8 @@
 	    break;
 	}
 
-      item->y = *y + icon_view->priv->row_spacing/2;//SUNZY
-      item->x = rtl ? GTK_WIDGET (icon_view)->allocation.width - MOKO_MAX (item_width, item->width) - x : x;
+      item->y = *y;
+      item->x = rtl ? GTK_WIDGET (icon_view)->allocation.width - MAX (item_width, item->width) - x : x;
 
       if (icon_view->priv->orientation == GTK_ORIENTATION_HORIZONTAL)
 	{
@@ -2112,8 +2071,8 @@
 
       x = current_width - icon_view->priv->margin; 
 
-      max_height = MOKO_MAX (max_height, item->height);
-      max_pixbuf_height = MOKO_MAX (max_pixbuf_height, item->pixbuf_height);
+      max_height = MAX (max_height, item->height);
+      max_pixbuf_height = MAX (max_pixbuf_height, item->pixbuf_height);
       
       if (current_width > *maximum_width)
 	*maximum_width = current_width;
@@ -2122,12 +2081,6 @@
       item->col = col;
 
       col += colspan;
-      item->x = last_width;
-      g_debug("item: (%d,%d) pixbuf (%d,%d) layout (%d,%d), current_width = %d",
-      				item->x, item->y, item->pixbuf_x, item->pixbuf_y,
-      				item->layout_x, item->layout_y, 
-      				current_width);
-
       items = items->next;
     }
 
@@ -2135,7 +2088,6 @@
 
   *y += max_height + icon_view->priv->row_spacing;
 
-
   /* Now go through the row again and align the icons */
   for (items = first_item; items != last_item; items = items->next)
     {
@@ -2163,146 +2115,11 @@
 
       if (rtl)
 	item->col = col - 1 - item->col;
-            g_debug("LAST TIME item: (%d,%d) pixbuf (%d,%d) layout (%d,%d)",
-      				item->x, item->y, item->pixbuf_x, item->pixbuf_y,
-      				item->layout_x, item->layout_y);
     }
   
   return last_item;
 }
 
-static GList *
-gtk_icon_view_layout_single_row (MokoIconView *icon_view, 
-				 GList       *first_item, 
-				 gint         item_width,
-				 gint         row,
-				 gint        *y, 
-				 gint        *maximum_width)
-{
-  gint focus_width, focus_pad;
-  gint x, current_width, max_height, max_pixbuf_height;
-  GList *items, *last_item;
-  gint col;
-  gint colspan;
-  gboolean rtl = gtk_widget_get_direction (GTK_WIDGET (icon_view)) == GTK_TEXT_DIR_RTL;
-
-  x = 0;
-  col = 0;
-  max_height = 0;
-  max_pixbuf_height = 0;
-  items = first_item;
-  current_width = 0;
-
-  gtk_widget_style_get (GTK_WIDGET (icon_view),
-			"focus-line-width", &focus_width,
-			"focus-padding", &focus_pad,
-			NULL);
-
-  x += icon_view->priv->margin;
-  current_width += 2 * icon_view->priv->margin;
-  items = first_item;
-
-  while (items)
-    {
-      MokoIconViewItem *item = items->data;
-
-      moko_icon_view_calculate_item_size (icon_view, item, item_width);
-
-      //colspan = 1 + (item->width - 1) / (item_width + icon_view->priv->column_spacing);
-      //current_width += colspan * (item_width + icon_view->priv->column_spacing);
-      current_width += icon_view->priv->width + icon_view->priv->column_spacing; 
-g_debug ("draw signal row: ");
-g_debug ("colspan:%d, current:%d, item->width:%d, item_width:%d, maximum_width:%d", colspan, current_width, item->width, item_width, *maximum_width);
-      if (items != first_item)
-      	{
-	  if ((icon_view->priv->columns <= 0 && current_width > GTK_WIDGET (icon_view)->allocation.width) ||
-	      (icon_view->priv->columns > 0 && col >= icon_view->priv->columns))
-	    break;
-	}
-
-      item->y = *y+(icon_view->priv->row_spacing/2);//SUNZY:modify item box y coordinate, originalty value is "y = *y".
-      item->x = rtl ? GTK_WIDGET (icon_view)->allocation.width - icon_view->priv->width-x : x;
-
-      if (icon_view->priv->orientation == GTK_ORIENTATION_HORIZONTAL)
-	{
-	  if (rtl)
-	    {
-	      item->layout_x = item->x + ICON_TEXT_PADDING + focus_width + focus_pad;
-	      if (icon_view->priv->text_column != -1 ||
-		  icon_view->priv->markup_column != -1)
-		item->pixbuf_x = item->x + 2 * (ICON_TEXT_PADDING + focus_width + focus_pad) + icon_view->priv->spacing + item->layout_width;
-	      else
-		item->pixbuf_x = item->x;
-	    }
-	  else 
-	    {
-	      item->pixbuf_x = item->x;
-	      if (icon_view->priv->pixbuf_column != -1)
-		item->layout_x = item->x + item->pixbuf_width + icon_view->priv->spacing + ICON_TEXT_PADDING + focus_width + focus_pad;
-	      else
-		item->layout_x = item->x + ICON_TEXT_PADDING + focus_width + focus_pad;
-	    }
-	}
-      else
-	{
-	  if (item->width < colspan * item_width + (colspan - 1) * icon_view->priv->column_spacing)
-	    item->x += (colspan * item_width + (colspan - 1) * icon_view->priv->column_spacing - item->width) / 2;
-
-	  item->pixbuf_x = item->x + (item->width - item->pixbuf_width) / 2;
-	  item->layout_x = item->x + (item->width - item->layout_width) / 2;
-	}
-
-      x = current_width - icon_view->priv->margin; 
-
-      max_height = MOKO_MAX (max_height, item->height);
-      max_pixbuf_height = MOKO_MAX (max_pixbuf_height, item->pixbuf_height);
-      
-      if (current_width > *maximum_width)
-	*maximum_width = current_width;
-
-      item->row = row;
-      item->col = col;
-
-      col ++;//= colspan;
-      items = items->next;
-    }
-
-  last_item = items;
-
-  *y += max_height + icon_view->priv->row_spacing;
-
-  /* Now go through the row again and align the icons */
-  for (items = first_item; items != last_item; items = items->next)
-    {
-      MokoIconViewItem *item = items->data;
-
-      if (icon_view->priv->orientation == GTK_ORIENTATION_HORIZONTAL)
-	{
-	  item->pixbuf_y = item->y;
-	  item->layout_y = item->y + ICON_TEXT_PADDING + focus_width + focus_pad;
-	}
-      else 
-	{
-	  item->pixbuf_y = item->y + (max_pixbuf_height - item->pixbuf_height);
-	  if (icon_view->priv->pixbuf_column != -1)
-	    item->layout_y = item->pixbuf_y + item->pixbuf_height + icon_view->priv->spacing + ICON_TEXT_PADDING + focus_width + focus_pad;
-	  else
-	    item->layout_y = item->y + ICON_TEXT_PADDING + focus_width + focus_pad;
-      }
-      /* Update the bounding box */
-     // item->y = item->pixbuf_y;
-
-      /* We may want to readjust the new y coordinate. */
-      if ((item->y + item->height) > *y)
-	*y = item->y + item->height;
-
-      if (rtl)
-	item->col = col - 1 - item->col;
-    }
-  
-  return last_item;
-}
-
 static void
 moko_icon_view_item_invalidate_size (MokoIconViewItem *item)
 {
@@ -2523,7 +2340,22 @@
     case PROP_MARGIN:
       moko_icon_view_set_margin (icon_view, g_value_get_int (value));
       break;
-      
+    case PROP_BG_DECORATION:
+      moko_icon_view_set_decoration_bg (icon_view, g_value_get_string (value));
+      break;
+    case PROP_BG_LAYOUT:
+      moko_icon_view_set_text_bg (icon_view, g_value_get_string (value));
+      break;
+    case PROP_DECORATION_WIDTH:
+      moko_icon_view_set_decoration_width (icon_view, g_value_get_int (value));
+      break;
+    case PROP_DECORATED:
+      moko_icon_view_set_decorated (icon_view, g_value_get_boolean (value));
+      break;
+    case PROP_MAX_TEXT_LENGTH:
+      moko_icon_view_set_max_text_length (icon_view, g_value_get_int (value));
+      break;
+    	
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -2580,6 +2412,15 @@
     case PROP_MARGIN:
       g_value_set_int (value, icon_view->priv->margin);
       break;
+    case PROP_DECORATION_WIDTH:
+      g_value_set_int (value, icon_view->priv->decr_width);
+      break;
+    case PROP_DECORATED:
+      g_value_set_boolean (value, icon_view->priv->decorated);
+      break;
+    case PROP_MAX_TEXT_LENGTH:
+      g_value_set_int (value, icon_view->priv->max_text_len);
+      break;
 
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -4311,7 +4152,112 @@
 
   return icon_view->priv->margin;
 }
+void
+moko_icon_view_set_decoration_bg (MokoIconView *icon_view, const gchar *bg_decoration)
+{
+  g_return_if_fail (MOKO_IS_ICON_VIEW (icon_view));
+  
+  if (bg_decoration)
+    {
+      icon_view->priv->bg_decoration = gdk_pixbuf_new_from_file (bg_decoration, NULL);
+          if (!icon_view->priv->bg_decoration)
+          	DEBUG("Load bg_decoration file failed");
+      moko_icon_view_invalidate_sizes (icon_view);
+      moko_icon_view_queue_layout (icon_view);
+      
+      g_object_notify (G_OBJECT (icon_view), "icon column background");
+    }  
+}
 
+void
+moko_icon_view_set_text_bg (MokoIconView *icon_view, const gchar *bg_layout)
+{
+  g_return_if_fail (MOKO_IS_ICON_VIEW (icon_view));
+  
+  if (bg_layout)
+    {
+      icon_view->priv->bg_layout = gdk_pixbuf_new_from_file (bg_layout, NULL);
+          if (!icon_view->priv->bg_layout)
+          	DEBUG("Load bg_layout file failed");
+          
+      moko_icon_view_invalidate_sizes (icon_view);
+      moko_icon_view_queue_layout (icon_view);
+      g_object_notify (G_OBJECT (icon_view), "text column background");
+    }  
+}
+
+void 
+moko_icon_view_set_decoration_width (MokoIconView *icon_view,
+				   gint         decr_width)
+{
+  g_return_if_fail (MOKO_IS_ICON_VIEW (icon_view));
+  
+  if (icon_view->priv->decr_width!= decr_width)
+    {
+      icon_view->priv->decr_width = decr_width;
+
+      moko_icon_view_invalidate_sizes (icon_view);
+      moko_icon_view_queue_layout (icon_view);
+      g_object_notify (G_OBJECT (icon_view), "decoration-width");
+    }  
+}
+
+gint 
+moko_icon_view_get_decoration_width (MokoIconView *icon_view)
+{
+   g_return_val_if_fail (MOKO_IS_ICON_VIEW (icon_view), -1);
+
+   return icon_view->priv->decr_width;
+}
+
+
+void
+moko_icon_view_set_decorated (MokoIconView *icon_view, gboolean decorated)
+{
+  g_return_if_fail (MOKO_IS_ICON_VIEW (icon_view));
+  
+  if (icon_view->priv->decorated!= decorated)
+    {
+      icon_view->priv->decorated = decorated;
+
+      moko_icon_view_queue_layout (icon_view);
+      
+      g_object_notify (G_OBJECT (icon_view), "decorated");
+    }  
+}
+
+gboolean
+moko_icon_view_get_decorated (MokoIconView *icon_view)
+{
+  g_return_val_if_fail (MOKO_IS_ICON_VIEW (icon_view), -1);
+
+    return icon_view->priv->decorated;
+}
+
+void
+moko_icon_view_set_max_text_length (MokoIconView *icon_view, gint *max_text_length)
+{
+  g_return_if_fail (MOKO_IS_ICON_VIEW (icon_view));
+  
+  if (icon_view->priv->max_text_len!= max_text_length)
+    {
+      icon_view->priv->max_text_len = max_text_length;
+
+      moko_icon_view_invalidate_sizes (icon_view);
+      moko_icon_view_queue_layout (icon_view);
+      g_object_notify (G_OBJECT (icon_view), "max text column width");
+    }  
+
+}
+
+gint
+moko_icon_view_get_max_text_length (MokoIconView *icon_view)
+{
+  g_return_val_if_fail (MOKO_IS_ICON_VIEW (icon_view), -1);
+
+    return icon_view->priv->max_text_len;
+}
+
 /* Accessibility Support */
 
 static gpointer accessible_parent_class;

Modified: trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/mokoiconview.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/mokoiconview.h	2006-12-20 10:40:31 UTC (rev 439)
+++ trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/mokoiconview.h	2006-12-21 09:57:14 UTC (rev 440)
@@ -145,6 +145,30 @@
 gint
 moko_icon_view_get_margin (MokoIconView *icon_view);
 
+void
+moko_icon_view_set_decoration_bg (MokoIconView *icon_view, const gchar *bg_decoration);
+
+void
+moko_icon_view_set_text_bg (MokoIconView *icon_view, const gchar *bg_layout);
+
+void 
+moko_icon_view_set_decoration_width (MokoIconView *icon_view, gint decr_width);
+
+gint 
+moko_icon_view_get_decoration_width (MokoIconView *icon_view);
+
+void
+moko_icon_view_set_decorated (MokoIconView *icon_view, gboolean decorated);
+
+gboolean
+moko_icon_view_get_decorated (MokoIconView *icon_view);
+
+void
+moko_icon_view_set_max_text_length (MokoIconView *icon_view, gint *max_text_length);
+
+gint
+moko_icon_view_get_max_text_length (MokoIconView *icon_view);
+
 GtkTreePath *
 moko_icon_view_get_path_at_pos (MokoIconView *icon_view, gint x, gint y);
 

Modified: trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/support.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/support.c	2006-12-20 10:40:31 UTC (rev 439)
+++ trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/support.c	2006-12-21 09:57:14 UTC (rev 440)
@@ -52,11 +52,11 @@
     moko_fill_model(store,"/usr/share/pixmaps/anjuta.xpm","anjuta");
     moko_fill_model(store,"/usr/share/pixmaps/anjuta.xpm","anjuta");
     moko_fill_model(store,"/usr/share/pixmaps/battstat.png","battstat");
-    //moko_fill_model(store,"/usr/share/pixmaps/gdm.png","gdm");
-    //moko_fill_model(store,"/usr/share/pixmaps/gdm-setup.png","gdm-setup");
-    //moko_fill_model(store,"/usr/share/pixmaps/gnome-eyes.png","gnome-eyes");
-    //moko_fill_model(store,"/usr/share/pixmaps/gnome-geg12.png","gnome-geg12");
-    //moko_fill_model(store,"/usr/share/pixmaps/gdm.xpm","gdm");
+    moko_fill_model(store,"/usr/share/pixmaps/gdm.png","gdm");
+    moko_fill_model(store,"/usr/share/pixmaps/gdm-setup.png","gdm-setup");
+    moko_fill_model(store,"/usr/share/pixmaps/gnome-eyes.png","gnome-eyes");
+    moko_fill_model(store,"/usr/share/pixmaps/gnome-geg12.png","gnome-geg12");
+    moko_fill_model(store,"/usr/share/pixmaps/gdm.xpm","gdm");
 }
 
 /*test code, delete later*/





More information about the commitlog mailing list