r439 - trunk/src/target/OM-2007/applications/openmoko-mainmenu/src

tongsong_li at gta01.hmw-consulting.de tongsong_li at gta01.hmw-consulting.de
Wed Dec 20 11:40:42 CET 2006


Author: tongsong_li
Date: 2006-12-20 11:40:31 +0100 (Wed, 20 Dec 2006)
New Revision: 439

Modified:
   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/support.c
Log:
update mokoiconview.c

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:36:51 UTC (rev 438)
+++ trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/mainmenu.c	2006-12-20 10:40:31 UTC (rev 439)
@@ -137,15 +137,23 @@
     //gtk_widget_set_name (bg_item, "gtkeventbox-black");
     //gtk_container_add (bg_item, mm->item_total);
 
-    //mm->icon_view = gtk_icon_view_new ();
     mm->icon_view = MOKO_ICON_VIEW(moko_icon_view_new());
-    gtk_widget_show (mm->icon_view);
-    //moko_icon_view_set_item_width(mm->icon_view, ITEM_WIDTH);
-    //moko_icon_view_set_columns (mm->icon_view, COLUMN_NUM);
+    //gtk_widget_set_direction (GTK_WIDGET (mm->icon_view), GTK_TEXT_DIR_RTL); 
+    moko_icon_view_set_item_width(mm->icon_view, ITEM_WIDTH);
+    moko_icon_view_set_columns (mm->icon_view, COLUMN_NUM);
     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_column_spacing (mm->icon_view, COLUMN_SPACING);
+
+    //mm->icon_view = gtk_icon_view_new ();
+    //gtk_icon_view_set_item_width(mm->icon_view, ITEM_WIDTH);
+    //gtk_icon_view_set_columns (mm->icon_view, COLUMN_NUM);
+    //gtk_icon_view_set_margin (mm->icon_view, ITEM_MARGIN);
+    //gtk_icon_view_set_row_spacing (mm->icon_view, ROW_SPACING);
+    //gtk_icon_view_set_column_spacing (mm->icon_view, COLUMN_SPACING);
+
     //moko_icon_view_set_selection_mode (mm->icon_view, GTK_SELECTION_SINGLE);
+    gtk_widget_show (mm->icon_view);
 
     mm->list_store = gtk_list_store_new (3, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_POINTER);
 
@@ -168,7 +176,7 @@
     mm->hbox = gtk_hbox_new (FALSE, FALSE);
     gtk_widget_show (mm->hbox);
     
-    //gtk_box_pack_start (mm, bg_main, FALSE, FALSE, 0);
+    gtk_box_pack_start (mm, bg_main, FALSE, FALSE, 0);
     gtk_container_add (bg_main, mm->hbox); 
     gtk_box_pack_start (mm->hbox, mm->section_name, TRUE, TRUE, 10);
     gtk_box_pack_end (mm->hbox, mm->item_total, FALSE, FALSE, 10);

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:36:51 UTC (rev 438)
+++ trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/mainmenu.h	2006-12-20 10:40:31 UTC (rev 439)
@@ -39,14 +39,13 @@
 /*widgets property(s)*/
 #define COLUMN_NUM 		3
 #define ITEM_WIDTH 			140
-#define ITEM_HEIGHT 		120
 #define ITEM_MARGIN 		0
-#define ROW_SPACING 		20
+#define ROW_SPACING 		40
 #define COLUMN_SPACING 	0
 #define ITME_TOTAL_WIDTH 	7
 
-#define PIXBUF_WIDTH		100
-#define PIXBUF_HEIGHT		100
+#define PIXBUF_WIDTH		120 //? useless
+#define PIXBUF_HEIGHT		120//? useless
 
 #define SECTION_ALG_X 		0.6
 #define SECTION_ALG_Y 		0.5
@@ -74,8 +73,8 @@
     //GtkWidget widget;
 
     //GtkIconView *icon_view;
-    //GtkWidget *icon_view;
-    MokoIconView *icon_view;
+    GtkWidget *icon_view;
+    //MokoIconView *icon_view;
     GtkListStore *list_store;
     GtkWidget *scrolled;
     GtkHBox *hbox;

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:36:51 UTC (rev 438)
+++ trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/mokoiconview.c	2006-12-20 10:40:31 UTC (rev 439)
@@ -33,6 +33,7 @@
   /* Bounding boxes */
   gint x, y;
   gint width, height;
+  gint colspan;
 
   gint pixbuf_x, pixbuf_y;
   gint pixbuf_offset_x, pixbuf_offset_y;
@@ -146,8 +147,6 @@
   PROP_MARGIN
 };
 
-//GdkPixbuf *frame;
-
 /* GObject signals */
 static void 
 moko_icon_view_finalize     (GObject      *object);
@@ -790,10 +789,12 @@
   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 = 10;
+  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);
+
   pango_layout_set_wrap (icon_view->priv->layout, PANGO_WRAP_WORD_CHAR);
 
   GTK_WIDGET_SET_FLAGS (icon_view, GTK_CAN_FOCUS);
@@ -982,13 +983,19 @@
 
   dest_x = 0;
   dest_y = 0;
-  width = gdk_pixbuf_get_width (src);
-  height = gdk_pixbuf_get_height (src);
-  offset_x = 0;
-  offset_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);
@@ -997,7 +1004,7 @@
                                      dest, 0, 0);
  */
   g_debug ("test2---------------------");
-  gdk_pixbuf_composite (decoration, src,
+  gdk_pixbuf_composite (src, decoration,
                                    dest_x, dest_y, 
                                    width, height,
                                    offset_x, offset_y,
@@ -1014,16 +1021,14 @@
 			  GdkRectangle    *area)
 {
   gint focus_width, focus_pad;
-  GdkPixbuf *pixbuf, *tmp;
+  GdkPixbuf *pixbuf, *tmp, *scaled;
   GtkStateType state;
   gboolean rtl = gtk_widget_get_direction (GTK_WIDGET (icon_view)) == GTK_TEXT_DIR_RTL;
 
+  
   if (!icon_view->priv->decoration)
   {
-    GdkPixbuf *tmp = gdk_pixbuf_new_from_file (PKGDATADIR"/main_menu_sel_icon.png", NULL);
-    icon_view->priv->decoration = gdk_pixbuf_scale_simple (tmp, 
-    	(item->width+2*FRAME_OFFSET), (item->height+2*FRAME_OFFSET), GDK_INTERP_NEAREST);
-    g_object_unref (tmp);
+      g_debug ("Error: can't get decoration image");
   }
 g_debug (":)  begin-----------------");
 
@@ -1042,34 +1047,57 @@
 
   if (icon_view->priv->pixbuf_column != -1)
     {
-      tmp = moko_icon_view_get_item_icon (icon_view, item);
-      if (item->selected)
+      pixbuf = moko_icon_view_get_item_icon (icon_view, item);
+
+
+      
+    if (item->selected)
 	{
-	  //pixbuf = create_colorized_pixbuf (tmp,
-		//			    &GTK_WIDGET (icon_view)->style->base[state]);
-	  //pixbuf = moko_composite_selected_pixbuf (tmp, frame);
-	  //g_object_unref (tmp);
-	  //g_debug ("pixbuf_width = %d, pixbufheight = %d", item->pixbuf_width, item->pixbuf_height);
-	  //g_debug ("pixbuf_x = %d, pixbuf_y = %d", item->pixbuf_x, item->pixbuf_y);
-	  gdk_draw_pixbuf (icon_view->priv->bin_window, NULL, icon_view->priv->decoration,
-		       0, 0,
-		       (item->x-FRAME_OFFSET), (item->y-FRAME_OFFSET),
-		       (item->width+2*FRAME_OFFSET), (item->height+2*FRAME_OFFSET),
-		       GDK_RGB_DITHER_NORMAL,
-		       (item->width+2*FRAME_OFFSET), (item->height+2*FRAME_OFFSET));
+	    gint decr_width = 10;
+  	    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 = 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,
+	  					GDK_INTERP_NEAREST);
+
+	  gdk_draw_pixbuf (icon_view->priv->bin_window, NULL, 
+	  					tmp,
+		       			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_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);
+
 	}
       else
-	pixbuf = tmp;
-      
-      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);
-
+      	{
+          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_debug (":) 1 -----------------");
+g_debug (":) 4 -----------------");
 
   if (icon_view->priv->text_column != -1 ||
       icon_view->priv->markup_column != -1)
@@ -1891,6 +1919,7 @@
       g_debug ("Vlayout_width = %d, padding = %d, spacing = %d, pixbuf_width = %d",
       	  			item->layout_width, padding, spacing, item->pixbuf_width);
     }
+  
 }
 
 static void
@@ -1934,10 +1963,11 @@
     {
       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);
     }
   else
     maximum_layout_width = MOKO_MAX (item_width, item->pixbuf_width);
-    //maximum_layout_width = item_width;
+        g_debug ("maximum_layout_width = %d", maximum_layout_width);
 
     
   if (icon_view->priv->markup_column != -1 ||
@@ -1946,10 +1976,8 @@
       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, icon_view->priv->width* PANGO_SCALE);//maximum_layout_width * PANGO_SCALE);
-      //pango_layout_iter_set_line_yrange (icon_view->priv->layout, 0, 1);
-      //pango_layout_set_ellipsize (icon_view->priv->layout, PANGO_ELLIPSIZE_END);
-
+      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;
@@ -1968,16 +1996,16 @@
     {
       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);
     }
+  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);
 }
 
 
@@ -2000,7 +2028,7 @@
 }
 
 static GList *
-gtk_icon_view_layout_single_row (MokoIconView *icon_view, 
+moko_icon_view_layout_single_row (MokoIconView *icon_view, 
 				 GList       *first_item, 
 				 gint         item_width,
 				 gint         row,
@@ -2014,7 +2042,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;
@@ -2025,6 +2053,7 @@
 			"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;
@@ -2032,17 +2061,16 @@
 
   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);
-      //current_width += colspan * (item_width + icon_view->priv->column_spacing);
-     current_width += item_width + icon_view->priv->column_spacing;
-      
-g_debug ("draw signal row: ");
-g_debug ("colspan:%d, current:%d, item->width:%d, item_width:%d", colspan, current_width, item->width, item_width);
-sleep (1);
+      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) ||
@@ -2050,9 +2078,9 @@
 	    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 - MOKO_MAX (item_width, item->width) - x : x;
-      item->x = x;
+      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;
+
       if (icon_view->priv->orientation == GTK_ORIENTATION_HORIZONTAL)
 	{
 	  if (rtl)
@@ -2094,6 +2122,12 @@
       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;
     }
 
@@ -2101,6 +2135,7 @@
 
   *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)
     {
@@ -2128,13 +2163,16 @@
 
       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 *
-moko_icon_view_layout_single_row (MokoIconView *icon_view, 
+gtk_icon_view_layout_single_row (MokoIconView *icon_view, 
 				 GList       *first_item, 
 				 gint         item_width,
 				 gint         row,
@@ -2170,11 +2208,11 @@
 
       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);
+      //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);
-sleep (1);
       if (items != first_item)
       	{
 	  if ((icon_view->priv->columns <= 0 && current_width > GTK_WIDGET (icon_view)->allocation.width) ||
@@ -2183,7 +2221,7 @@
 	}
 
       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 - MOKO_MAX (item_width, item->width) - x : x;
+      item->x = rtl ? GTK_WIDGET (icon_view)->allocation.width - icon_view->priv->width-x : x;
 
       if (icon_view->priv->orientation == GTK_ORIENTATION_HORIZONTAL)
 	{
@@ -2225,7 +2263,7 @@
       item->row = row;
       item->col = col;
 
-      col += colspan;
+      col ++;//= colspan;
       items = items->next;
     }
 
@@ -2252,10 +2290,10 @@
 	    item->layout_y = item->y + ICON_TEXT_PADDING + focus_width + focus_pad;
       }
       /* Update the bounding box */
-      item->y = item->pixbuf_y;
+     // item->y = item->pixbuf_y;
 
       /* We may want to readjust the new y coordinate. */
-      if (item->y + item->height > *y)
+      if ((item->y + item->height) > *y)
 	*y = item->y + item->height;
 
       if (rtl)

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:36:51 UTC (rev 438)
+++ trunk/src/target/OM-2007/applications/openmoko-mainmenu/src/support.c	2006-12-20 10:40:31 UTC (rev 439)
@@ -39,7 +39,7 @@
 
     gtk_list_store_append (store, &iter);
     pixbuf = gdk_pixbuf_new_from_file_at_size (icon_path, PIXBUF_WIDTH, PIXBUF_HEIGHT, NULL);// ADD Gerro handle later
-
+    //pixbuf = gdk_pixbuf_new_from_file (icon_path, NULL);// ADD Gerro handle later
     gtk_list_store_set (store, &iter, PIXBUF_COLUMN, pixbuf, TEXT_COLUMN, icon_name, -1);
     g_object_unref (pixbuf);
 
@@ -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