On Mon, Oct 29, 2012 at 08:42:34PM +0100, Olivier Fourdan wrote:
> 

> >From 1950bce008b1104bad774c053882e8a12e5994a3 Mon Sep 17 00:00:00 2001
> From: Olivier Fourdan <ofour...@redhat.com>
> Date: Thu, 25 Oct 2012 14:43:28 +0200
> Subject: [PATCH 2/4] lib: add SVG image to device properties
> 
> ---
>  libwacom/libwacom-database.c |   18 +++++++++++----
>  libwacom/libwacom.c          |   46 
> +++++++++++++++++++++++++++++++++++++++++-
>  libwacom/libwacom.h          |    7 ++++++
>  libwacom/libwacomint.h       |    2 +
>  4 files changed, 67 insertions(+), 6 deletions(-)

Reviewed-by: Peter Hutterer <peter.hutte...@who-t.net>

though see the comments re: "image" naming.

Cheers,
   Peter


> 
> diff --git a/libwacom/libwacom-database.c b/libwacom/libwacom-database.c
> index d39305d..cc95851 100644
> --- a/libwacom/libwacom-database.c
> +++ b/libwacom/libwacom-database.c
> @@ -319,12 +319,14 @@ libwacom_parse_buttons(WacomDevice *device,
>  }
>  
>  static WacomDevice*
> -libwacom_parse_tablet_keyfile(const char *path)
> +libwacom_parse_tablet_keyfile(const char *datadir, const char *filename)
>  {
>       WacomDevice *device = NULL;
>       GKeyFile *keyfile;
>       GError *error = NULL;
>       gboolean rc;
> +     char *path;
> +     char *image;
>       char *class;
>       char *match;
>       char **styli_list;
> @@ -332,6 +334,7 @@ libwacom_parse_tablet_keyfile(const char *path)
>  
>       keyfile = g_key_file_new();
>  
> +     path = g_build_filename (datadir, filename, NULL);
>       rc = g_key_file_load_from_file(keyfile, path, G_KEY_FILE_NONE, &error);
>  
>       if (!rc) {
> @@ -358,7 +361,12 @@ libwacom_parse_tablet_keyfile(const char *path)
>       device->name = g_key_file_get_string(keyfile, DEVICE_GROUP, "Name", 
> NULL);
>       device->width = g_key_file_get_integer(keyfile, DEVICE_GROUP, "Width", 
> NULL);
>       device->height = g_key_file_get_integer(keyfile, DEVICE_GROUP, 
> "Height", NULL);
> -
> +     image = g_key_file_get_string(keyfile, DEVICE_GROUP, "Image", NULL);
> +     if (image) {
> +             /* For the image, we store the full path to the SVG image */
> +             device->image = g_build_filename (datadir, "images", image, 
> NULL);
> +             g_free (image);
> +     }
>       class = g_key_file_get_string(keyfile, DEVICE_GROUP, "Class", NULL);
>       device->cls = libwacom_class_string_to_enum(class);
>       g_free(class);
> @@ -445,6 +453,8 @@ libwacom_parse_tablet_keyfile(const char *path)
>       }
>  
>  out:
> +     if (path)
> +             g_free(path);
>       if (keyfile)
>               g_key_file_free(keyfile);
>       if (error)
> @@ -515,9 +525,7 @@ libwacom_database_new_for_path (const char *datadir)
>           WacomDevice *d;
>           const WacomMatch **matches, **match;
>  
> -         path = g_build_filename (datadir, files[n]->d_name, NULL);
> -         d = libwacom_parse_tablet_keyfile(path);
> -         g_free(path);
> +         d = libwacom_parse_tablet_keyfile(datadir, files[n]->d_name);
>  
>           if (!d)
>                   continue;
> diff --git a/libwacom/libwacom.c b/libwacom/libwacom.c
> index 4f8c5f9..88b95c8 100644
> --- a/libwacom/libwacom.c
> +++ b/libwacom/libwacom.c
> @@ -290,6 +290,7 @@ libwacom_copy(const WacomDevice *device)
>       d->name = g_strdup (device->name);
>       d->width = device->width;
>       d->height = device->height;
> +     d->image = g_strdup(device->image);
>       d->nmatches = device->nmatches;
>       d->matches = g_malloc((d->nmatches + 1) * sizeof(WacomMatch*));
>       for (i = 0; i < d->nmatches; i++)
> @@ -333,6 +334,26 @@ compare_matches(WacomDevice *a, WacomDevice *b)
>       return 0;
>  }
>  
> +/* Compare images based on file name, stripping the full path */
> +static gboolean
> +libwacom_same_images (WacomDevice *a, WacomDevice *b)
> +{
> +     gchar *file1, *file2;
> +
> +     /* Conveniently handle the null case */
> +     if (a->image == b->image)
> +             return TRUE;
> +
> +     file1 = NULL;
> +     file2 = NULL;
> +     if (a->image != NULL)
> +             file1 = g_path_get_basename (a->image);
> +     if (b->image != NULL)
> +             file2 = g_path_get_basename (b->image);
> +
> +     return (g_strcmp0 (file1, file2) == 0);
> +}
> +
>  int
>  libwacom_compare(WacomDevice *a, WacomDevice *b, WacomCompareFlags flags)
>  {
> @@ -347,6 +368,9 @@ libwacom_compare(WacomDevice *a, WacomDevice *b, 
> WacomCompareFlags flags)
>       if (a->width != b->width || a->height != b->height)
>               return 1;
>  
> +     if (!libwacom_same_images (a, b))
> +             return 1;
> +
>       if (a->cls != b->cls)
>               return 1;
>  
> @@ -537,6 +561,19 @@ static void print_styli_for_device (int fd, WacomDevice 
> *device)
>       dprintf(fd, "\n");
>  }
>  
> +static void print_image_for_device (int fd, WacomDevice *device)
> +{
> +     const char *image_filename;
> +     gchar      *base_name;
> +
> +     image_filename = libwacom_get_image_filename(device);
> +     if (image_filename) {
> +             base_name = g_path_get_basename (image_filename);
> +             dprintf(fd, "Image=%s\n", base_name);
> +             g_free (base_name);
> +     }
> +}
> +
>  static void print_supported_leds (int fd, WacomDevice *device)
>  {
>       char *leds_name[] = {
> @@ -598,7 +635,7 @@ libwacom_print_device_description(int fd, WacomDevice 
> *device)
>  {
>       const WacomMatch **match;
>       WacomClass class;
> -     const char *bus_name, *class_name;
> +     const char *bus_name, *class_name, *image_filename;
>  
>       class  = libwacom_get_class(device);
>       switch(class) {
> @@ -638,6 +675,7 @@ libwacom_print_device_description(int fd, WacomDevice 
> *device)
>       dprintf(fd, "Class=%s\n",               class_name);
>       dprintf(fd, "Width=%d\n",               libwacom_get_width(device));
>       dprintf(fd, "Height=%d\n",              libwacom_get_height(device));
> +     print_image_for_device(fd, device);
>       print_styli_for_device(fd, device);
>       dprintf(fd, "\n");
>  
> @@ -666,6 +704,7 @@ libwacom_destroy(WacomDevice *device)
>               return;
>  
>       g_free (device->name);
> +     g_free (device->image);
>  
>       for (i = 0; i < device->nmatches; i++) {
>               g_free (device->matches[i]->match);
> @@ -724,6 +763,11 @@ const char* libwacom_get_name(WacomDevice *device)
>       return device->name;
>  }
>  
> +const char* libwacom_get_image_filename(WacomDevice *device)
> +{
> +     return device->image;
> +}
> +
>  int libwacom_get_product_id(WacomDevice *device)
>  {
>       g_return_val_if_fail(device->match >= 0, -1);
> diff --git a/libwacom/libwacom.h b/libwacom/libwacom.h
> index 8830db8..2dc38e4 100644
> --- a/libwacom/libwacom.h
> +++ b/libwacom/libwacom.h
> @@ -330,6 +330,13 @@ const char* libwacom_get_name(WacomDevice *device);
>  
>  /**
>   * @param device The tablet to query
> + * @return The full filename including path to the SVG image of the device
> + * if available, or NULL otherwise
> + */
> +const char* libwacom_get_image_filename(WacomDevice *device);
> +
> +/**
> + * @param device The tablet to query
>   * @return The numeric vendor ID for this device
>   */
>  int libwacom_get_vendor_id(WacomDevice *device);
> diff --git a/libwacom/libwacomint.h b/libwacom/libwacomint.h
> index 55436e9..b3dc36f 100644
> --- a/libwacom/libwacomint.h
> +++ b/libwacom/libwacomint.h
> @@ -93,6 +93,8 @@ struct _WacomDevice {
>       int num_leds;
>       WacomStatusLEDs *status_leds;
>  
> +     char *image;
> +
>       gint refcnt; /* for the db hashtable */
>  };
>  
> -- 
> 1.7.1
> 

> ------------------------------------------------------------------------------
> The Windows 8 Center - In partnership with Sourceforge
> Your idea - your app - 30 days.
> Get started!
> http://windows8center.sourceforge.net/
> what-html-developers-need-to-know-about-coding-windows-8-metro-style-apps/

> _______________________________________________
> Linuxwacom-devel mailing list
> Linuxwacom-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel


------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_sfd2d_oct
_______________________________________________
Linuxwacom-devel mailing list
Linuxwacom-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel

Reply via email to