Back to index

gcompris  8.2.2
Functions | Variables
gtans_support.c File Reference
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <string.h>
#include "gcompris/gcompris.h"
#include "gtans_support.h"

Go to the source code of this file.

Functions

static gchar * check_file_exists (const gchar *directory, const gchar *filename)
static GtkWidget * create_dummy_pixmap (GtkWidget *widget)
GtkWidget * lookup_widget (GtkWidget *widget, const gchar *widget_name)
void add_pixmap_directory (const gchar *directory)
GtkWidget * create_pixmap (GtkWidget *widget, const gchar *filename)

Variables

static char * dummy_pixmap_xpm []
static GList * pixmaps_directories = NULL

Function Documentation

void add_pixmap_directory ( const gchar *  directory)

Definition at line 82 of file gtans_support.c.

{
  pixmaps_directories = g_list_prepend (pixmaps_directories,
                                        g_strdup (directory));
}
gchar * check_file_exists ( const gchar *  directory,
const gchar *  filename 
) [static]

Definition at line 140 of file gtans_support.c.

{
  gchar *full_filename;
  struct stat s;
  gint status;

  full_filename = (gchar*) g_malloc (strlen (directory) + 1
                                     + strlen (filename) + 1);
  strcpy (full_filename, directory);
  strcat (full_filename, G_DIR_SEPARATOR_S);
  strcat (full_filename, filename);

  status = stat (full_filename, &s);
  if (status == 0 && S_ISREG (s.st_mode))
    return full_filename;
  g_free (full_filename);
  return NULL;
}

Here is the caller graph for this function:

static GtkWidget * create_dummy_pixmap ( GtkWidget *  widget) [static]

Definition at line 60 of file gtans_support.c.

{
  GdkColormap *colormap;
  GdkPixmap *gdkpixmap;
  GdkBitmap *mask;
  GtkWidget *pixmap;

  colormap = gtk_widget_get_colormap (widget);
  gdkpixmap = gdk_pixmap_colormap_create_from_xpm_d (NULL, colormap, &mask,
                                                     NULL, dummy_pixmap_xpm);
  if (gdkpixmap == NULL)
    g_error ("Couldn't create replacement pixmap.");
  pixmap = gtk_pixmap_new (gdkpixmap, mask);
  gdk_pixmap_unref (gdkpixmap);
  gdk_bitmap_unref (mask);
  return pixmap;
}

Here is the caller graph for this function:

GtkWidget* create_pixmap ( GtkWidget *  widget,
const gchar *  filename 
)

Definition at line 90 of file gtans_support.c.

{
  gchar *found_filename = NULL;
  GdkColormap *colormap;
  GdkPixmap *gdkpixmap;
  GdkBitmap *mask;
  GtkWidget *pixmap;
  GList *elem;

  /* We first try any pixmaps directories set by the application. */
  elem = pixmaps_directories;
  while (elem)
    {
      found_filename = check_file_exists ((gchar*)elem->data, filename);
      if (found_filename)
        break;
      elem = elem->next;
    }

  /* If we haven't found the pixmap, try the source directory. */
  if (!found_filename)
    {
      found_filename = check_file_exists ("../pixmaps", filename);
    }

  if (!found_filename)
    {
      g_warning ("Couldn't find pixmap file: %s", filename);
      return create_dummy_pixmap (widget);
    }

  colormap = gtk_widget_get_colormap (widget);
  gdkpixmap = gdk_pixmap_colormap_create_from_xpm (NULL, colormap, &mask,
                                                   NULL, found_filename);
  if (gdkpixmap == NULL)
    {
      g_warning ("Error loading pixmap file: %s", found_filename);
      g_free (found_filename);
      return create_dummy_pixmap (widget);
    }
  g_free (found_filename);
  pixmap = gtk_pixmap_new (gdkpixmap, mask);
  gdk_pixmap_unref (gdkpixmap);
  gdk_bitmap_unref (mask);
  return pixmap;
}

Here is the call graph for this function:

GtkWidget* lookup_widget ( GtkWidget *  widget,
const gchar *  widget_name 
)

Definition at line 26 of file gtans_support.c.

{
  GtkWidget *parent, *found_widget;

  for (;;)
    {
      if (GTK_IS_MENU (widget))
        parent = gtk_menu_get_attach_widget (GTK_MENU (widget));
      else
        parent = widget->parent;
      if (parent == NULL)
        break;
      widget = parent;
    }

  found_widget = (GtkWidget*) gtk_object_get_data (GTK_OBJECT (widget),
                                                   widget_name);
  if (!found_widget)
    g_warning ("Widget not found: %s", widget_name);
  return found_widget;
}

Variable Documentation

char* dummy_pixmap_xpm[] [static]
Initial value:
 {

"1 1 1 1",
"  c None",

" "
}

Definition at line 50 of file gtans_support.c.

GList* pixmaps_directories = NULL [static]

Definition at line 78 of file gtans_support.c.