r1254 - trunk/src/target/OM-2007/applications/openmoko-keyboard/src

caowai_song at sita.openmoko.org caowai_song at sita.openmoko.org
Tue Mar 6 10:13:21 CET 2007


Author: caowai_song
Date: 2007-03-06 10:13:13 +0100 (Tue, 06 Mar 2007)
New Revision: 1254

Modified:
   trunk/src/target/OM-2007/applications/openmoko-keyboard/src/config-parser.c
   trunk/src/target/OM-2007/applications/openmoko-keyboard/src/matchbox-keyboard-image.c
   trunk/src/target/OM-2007/applications/openmoko-keyboard/src/matchbox-keyboard-key.c
   trunk/src/target/OM-2007/applications/openmoko-keyboard/src/matchbox-keyboard-layout.c
   trunk/src/target/OM-2007/applications/openmoko-keyboard/src/matchbox-keyboard-ui-xft-backend.c
   trunk/src/target/OM-2007/applications/openmoko-keyboard/src/matchbox-keyboard-ui.c
   trunk/src/target/OM-2007/applications/openmoko-keyboard/src/matchbox-keyboard.h
Log:
The background, changer ground and pictures of each keys only save
as file name in the memory. They will be created when need, and
will be free after using.


Modified: trunk/src/target/OM-2007/applications/openmoko-keyboard/src/config-parser.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-keyboard/src/config-parser.c	2007-03-06 07:32:58 UTC (rev 1253)
+++ trunk/src/target/OM-2007/applications/openmoko-keyboard/src/config-parser.c	2007-03-06 09:13:13 UTC (rev 1254)
@@ -341,7 +341,6 @@
                                  const char            *tag,
                                  const char           **attr)
 {
-  MBKeyboardImage *img;
   const char *val;
   char  buf[512];
   Bool  pushimage;
@@ -373,19 +372,16 @@
       if (!util_file_readable(buf))
         snprintf(buf, 512, "%s/.matchbox/%s", getenv("HOME"), val);
 
-      img = mb_kbd_image_new (state->keyboard, buf);
     }
   else
     {
-      img = mb_kbd_image_new (state->keyboard, val);
+      snprintf(buf, 512, "%s", val);
     }
-  if (img == NULL)
-    fprintf(stderr, "load img fail\n");
 
   if (pushimage)
-    mb_kbd_key_set_normal_image(state->current_key, img);
+    mb_kbd_key_set_normal_image(state->current_key, buf);
   else
-    mb_kbd_key_set_push_image(state->current_key, img);
+    mb_kbd_key_set_push_image(state->current_key, buf);
 }
 
 static void
@@ -684,7 +680,6 @@
 config_handle_layout_background(MBKeyboardConfigState *state,
                                 const char **attr)
 {
-  MBKeyboardImage *img;
   const char *val;
   char  buf[512];
 
@@ -701,18 +696,14 @@
       if (!util_file_readable(buf))
         snprintf(buf, 512, "%s/.matchbox/%s", getenv("HOME"), val);
 
-      img = mb_kbd_image_new (state->keyboard, buf);
+      mb_kbd_layout_set_background(state->current_layout, buf);
     }
   else
     {
-      img = mb_kbd_image_new (state->keyboard, val);
+      mb_kbd_layout_set_background(state->current_layout, val);
     }
 
-  if (img == NULL)
-    fprintf(stderr, "load img fail\n");
 
-  mb_kbd_layout_set_background(state->current_layout, img);
-
   if (mb_kbd_layout_realsize(state->current_layout))
     {
       if ((val = attr_get_val("width", attr)) != NULL)
@@ -732,7 +723,6 @@
 config_handle_layout_changerground(MBKeyboardConfigState *state,
                                    const char **attr)
 {
-  MBKeyboardImage *img;
   const char *val;
   char  buf[512];
 
@@ -753,18 +743,14 @@
       if (!util_file_readable(buf))
         snprintf(buf, 512, "%s/.matchbox/%s", getenv("HOME"), val);
 
-      img = mb_kbd_image_new (state->keyboard, buf);
+      mb_kbd_layout_set_changerground(state->current_layout, buf);
     }
   else
     {
-      img = mb_kbd_image_new (state->keyboard, val);
+      mb_kbd_layout_set_changerground(state->current_layout, val);
     }
 
-  if (img == NULL)
-    fprintf(stderr, "load img fail\n");
 
-  mb_kbd_layout_set_changerground(state->current_layout, img);
-
   if ((val = attr_get_val("width", attr)) != NULL)
     {
       if (atoi(val) > 0)

Modified: trunk/src/target/OM-2007/applications/openmoko-keyboard/src/matchbox-keyboard-image.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-keyboard/src/matchbox-keyboard-image.c	2007-03-06 07:32:58 UTC (rev 1253)
+++ trunk/src/target/OM-2007/applications/openmoko-keyboard/src/matchbox-keyboard-image.c	2007-03-06 09:13:13 UTC (rev 1254)
@@ -212,6 +212,8 @@
 
   free(data);
 
+  img->kbd = kbd;
+
   return img;
 }
 
@@ -236,7 +238,18 @@
 void
 mb_kbd_image_destroy (MBKeyboardImage *img)
 {
+  MBKeyboardUI            *ui;
   /* ... */
+  if (img == NULL)
+    return;
+
+  ui = img->kbd->ui;
+
+  XRenderFreePicture(mb_kbd_ui_x_display(ui), img->xpic);
+
+  XFreePixmap(mb_kbd_ui_x_display(ui), img->xdraw);
+
+  free(img);
 }
 
 

Modified: trunk/src/target/OM-2007/applications/openmoko-keyboard/src/matchbox-keyboard-key.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-keyboard/src/matchbox-keyboard-key.c	2007-03-06 07:32:58 UTC (rev 1253)
+++ trunk/src/target/OM-2007/applications/openmoko-keyboard/src/matchbox-keyboard-key.c	2007-03-06 09:13:13 UTC (rev 1254)
@@ -73,8 +73,8 @@
   boolean                is_blank;   /* 'blank' keys are spacers */
   boolean                extended;   /* only show in landscape */
 
-  MBKeyboardImage        *normal_image;   /* The normal image */
-  MBKeyboardImage        *push_image;   /* The push down image */
+  char                  *normal_image;   /* The normal image */
+  char                  *push_image;   /* The push down image */
 
   MBKeyboardStateType    sets_kbdstate; /* needed */
 };
@@ -102,24 +102,26 @@
 }
 
 void
-mb_kbd_key_set_normal_image(MBKeyboardKey *key, MBKeyboardImage *image)
+mb_kbd_key_set_normal_image(MBKeyboardKey *key,
+                            const char    *image)
 {
-  key->normal_image = image;
+  key->normal_image = strdup(image);
 }
 
-MBKeyboardImage *
+const char *
 mb_kbd_key_get_normal_image(MBKeyboardKey *key)
 {
   return key->normal_image;
 }
 
 void
-mb_kbd_key_set_push_image(MBKeyboardKey *key, MBKeyboardImage *image)
+mb_kbd_key_set_push_image(MBKeyboardKey *key,
+                          const char    *image)
 {
-  key->push_image = image;
+  key->push_image = strdup(image);
 }
 
-MBKeyboardImage *
+const char *
 mb_kbd_key_get_push_image(MBKeyboardKey *key)
 {
   return key->push_image;

Modified: trunk/src/target/OM-2007/applications/openmoko-keyboard/src/matchbox-keyboard-layout.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-keyboard/src/matchbox-keyboard-layout.c	2007-03-06 07:32:58 UTC (rev 1253)
+++ trunk/src/target/OM-2007/applications/openmoko-keyboard/src/matchbox-keyboard-layout.c	2007-03-06 09:13:13 UTC (rev 1254)
@@ -26,15 +26,15 @@
   List             *rows;
 
   /* background image and changer background */
-  MBKeyboardImage  *background;
+  char             *background;
 
-  MBKeyboardImage  *changerground;
-  int              changer_x, changer_y, changer_w, changer_h;
+  char             *changerground;
+  int               changer_x, changer_y, changer_w, changer_h;
 
   /* real size */
-  Bool             realsize;
-  int              width;
-  int              height;
+  Bool              realsize;
+  int               width;
+  int               height;
 
   /* layout type */
   MBKeyboardLayoutType type;
@@ -70,12 +70,12 @@
 /* background image */
 void
 mb_kbd_layout_set_background(MBKeyboardLayout *layout,
-                             MBKeyboardImage  *background)
+                             const char  *background)
 {
-  layout->background = background;
+  layout->background = strdup(background);
 }
 
-MBKeyboardImage *
+const char *
 mb_kbd_layout_get_background(MBKeyboardLayout *layout)
 {
   return layout->background;
@@ -84,12 +84,12 @@
 /* changer image */
 void
 mb_kbd_layout_set_changerground(MBKeyboardLayout *layout,
-                                MBKeyboardImage  *changerground)
+                                const char       *changerground)
 {
-  layout->changerground = changerground;
+  layout->changerground = strdup(changerground);
 }
 
-MBKeyboardImage *
+const char *
 mb_kbd_layout_get_changerground(MBKeyboardLayout *layout)
 {
   return layout->changerground;

Modified: trunk/src/target/OM-2007/applications/openmoko-keyboard/src/matchbox-keyboard-ui-xft-backend.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-keyboard/src/matchbox-keyboard-ui-xft-backend.c	2007-03-06 07:32:58 UTC (rev 1253)
+++ trunk/src/target/OM-2007/applications/openmoko-keyboard/src/matchbox-keyboard-ui-xft-backend.c	2007-03-06 09:13:13 UTC (rev 1254)
@@ -121,6 +121,7 @@
   MBKeyboard            *kbd;
 
   MBKeyboardImage       *image;
+  const char            *image_name;
 
   if (mb_kbd_key_is_blank(key)) /* spacer */
     return;
@@ -156,11 +157,13 @@
     }
 
   if (mb_kbd_key_is_held(kbd, key))
-    image = mb_kbd_key_get_push_image(key);
+    image_name = mb_kbd_key_get_push_image(key);
   else
-    image = mb_kbd_key_get_normal_image(key);
+    image_name = mb_kbd_key_get_normal_image(key);
 
-  if(image)
+  image = mb_kbd_image_new(kbd, image_name);
+
+  if(image != NULL)
     {
       XRenderComposite(xdpy,
                        PictOpOver,
@@ -168,6 +171,9 @@
                        None, 
                        XftDrawPicture (xft_backend->xft_backbuffer),
                        0, 0, 0, 0, rect.x, rect.y, rect.width, rect.height);
+
+      mb_kbd_image_destroy(image);
+      image = NULL;
     }
   else                   
     {
@@ -310,12 +316,16 @@
   MBKeyboardImage        *image;
   MBKeyboardLayout       *layout;
 
+  const char             *image_name;
+
   xft_backend = (MBKeyboardUIBackendXft*)mb_kbd_ui_backend(ui);
 
   layout = mb_kbd_get_selected_layout(mb_kbd_ui_kbd(ui));
 
-  image = mb_kbd_layout_get_background(layout);
+  image_name = mb_kbd_layout_get_background(layout);
 
+  image = mb_kbd_image_new(mb_kbd_ui_kbd(ui), image_name);
+
   /* Background */
   if (image == NULL)
     {
@@ -347,26 +357,33 @@
                        None,
                        XftDrawPicture(xft_backend->xft_backbuffer),
                        0, 0, 0, 0, 0, 0, w, h);
+
+      mb_kbd_image_destroy(image);
     }
 
   if (mb_kbd_layout_realsize(layout))
     {
-       if ((image = mb_kbd_layout_get_changerground(layout)) != NULL)
-         {
-           int x, y, w, h;
+      image_name = mb_kbd_layout_get_changerground(layout);
+      printf("changer background=%s\n", image_name);
+      if ((image = mb_kbd_image_new(mb_kbd_ui_kbd(ui), image_name)) != NULL)
+        {
+          int x, y, w, h;
 
-           x = mb_kbd_layout_get_changerground_x(layout);
-           y = mb_kbd_layout_get_changerground_y(layout);
-           w = mb_kbd_layout_get_changerground_w(layout);
-           h = mb_kbd_layout_get_changerground_h(layout);
+          x = mb_kbd_layout_get_changerground_x(layout);
+          y = mb_kbd_layout_get_changerground_y(layout);
+          w = mb_kbd_layout_get_changerground_w(layout);
+          h = mb_kbd_layout_get_changerground_h(layout);
 
-           XRenderComposite(mb_kbd_ui_x_display(ui),
-                            PictOpOver,
-                            mb_kbd_image_render_picture(image),
-                            None,
-                            XftDrawPicture(xft_backend->xft_backbuffer),
-                            0, 0, 0, 0, x, y, w, h);
-         }
+          XRenderComposite(mb_kbd_ui_x_display(ui),
+                           PictOpOver,
+                           mb_kbd_image_render_picture(image),
+                           None,
+                           XftDrawPicture(xft_backend->xft_backbuffer),
+                           0, 0, 0, 0, x, y, w, h);
+
+          mb_kbd_image_destroy(image);
+          fprintf(stderr, "print changer background\n");
+        }
     }
 
 }

Modified: trunk/src/target/OM-2007/applications/openmoko-keyboard/src/matchbox-keyboard-ui.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-keyboard/src/matchbox-keyboard-ui.c	2007-03-06 07:32:58 UTC (rev 1253)
+++ trunk/src/target/OM-2007/applications/openmoko-keyboard/src/matchbox-keyboard-ui.c	2007-03-06 09:13:13 UTC (rev 1254)
@@ -340,17 +340,7 @@
 	    max_h = mb_kbd_image_height (img);
 	}
     }
-  if (mb_kbd_key_get_normal_image(key))
-    {
-      MBKeyboardImage *img = mb_kbd_key_get_normal_image(key);
 
-      if (mb_kbd_image_width (img) > max_w)
-        max_w = mb_kbd_image_width (img);
-
-      if (mb_kbd_image_height (img) > max_h)
-        max_h = mb_kbd_image_height (img);
-    }
-
   *width = max_w;
   *height = max_h;
 }
@@ -530,23 +520,6 @@
     }
   
   *width = max_row_width;
-
-  if (mb_kbd_layout_get_background(layout) != NULL)
-    {
-      MBKeyboardImage *img;
-      int             img_wid;
-      int             img_hei;
-
-      img = mb_kbd_layout_get_background(layout);
-      img_wid = mb_kbd_image_width(img);
-      img_hei = mb_kbd_image_height(img);
-
-      if (img_wid > *width)
-        *width = img_wid;
-
-      if (img_hei > *height)
-        *height = img_hei;
-    }
 }
 
 void

Modified: trunk/src/target/OM-2007/applications/openmoko-keyboard/src/matchbox-keyboard.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-keyboard/src/matchbox-keyboard.h	2007-03-06 07:32:58 UTC (rev 1253)
+++ trunk/src/target/OM-2007/applications/openmoko-keyboard/src/matchbox-keyboard.h	2007-03-06 09:13:13 UTC (rev 1254)
@@ -357,9 +357,9 @@
 
 void
 mb_kbd_layout_set_background(MBKeyboardLayout *layout,
-                             MBKeyboardImage  *background);
+                             const char       *background);
 
-MBKeyboardImage *
+const char *
 mb_kbd_layout_get_background(MBKeyboardLayout *layout);
 
 void
@@ -399,9 +399,9 @@
 
 void
 mb_kbd_layout_set_changerground(MBKeyboardLayout *layout,
-                                MBKeyboardImage  *changerground);
+                                const char       *changerground);
 
-MBKeyboardImage *
+const char *
 mb_kbd_layout_get_changerground(MBKeyboardLayout *layout);
 
 void
@@ -476,15 +476,17 @@
 mb_kbd_key_new(MBKeyboard *kbd);
 
 void
-mb_kbd_key_set_normal_image(MBKeyboardKey *key, MBKeyboardImage *image);
+mb_kbd_key_set_normal_image(MBKeyboardKey *key,
+                            const char    *image);
 
-MBKeyboardImage *
+const char *
 mb_kbd_key_get_normal_image(MBKeyboardKey *key);
 
 void
-mb_kbd_key_set_push_image(MBKeyboardKey *key, MBKeyboardImage *image);
+mb_kbd_key_set_push_image(MBKeyboardKey *key,
+                          const char    *image);
 
-MBKeyboardImage *
+const char *
 mb_kbd_key_get_push_image(MBKeyboardKey *key);
 
 void





More information about the commitlog mailing list