Back to index

gcompris  8.2.2
Defines | Functions | Variables
timer.c File Reference
#include "gcompris_config.h"
#include "timer.h"

Go to the source code of this file.

Defines

#define SOUNDLISTFILE   PACKAGE

Functions

static gint timer_increment (GtkWidget *widget, gpointer data)
static gint subtimer_increment (GtkWidget *widget, gpointer data)
static void start_animation ()
void gc_timer_display (int ax, int ay, TimerList atype, int second, GcomprisTimerEnd agcomprisTimerEnd)
void gc_timer_add (int second)
void gc_timer_end ()
void gc_timer_pause (gboolean pause)
guint gc_timer_get_remaining ()
static void display_time_ellapsed ()

Variables

static gboolean paused
static double x
static double y
static double ystep
static int timer
static double subratio
static TimerList type
static GnomeCanvasGroup * boardRootItem = NULL
static gint animate_id = 0
static gint subanimate_id = 0
static GcomprisTimerEnd gcomprisTimerEnd
GnomeCanvasItem * gc_timer_item

Define Documentation

#define SOUNDLISTFILE   PACKAGE

Definition at line 25 of file timer.c.


Function Documentation

static void display_time_ellapsed ( ) [static]

Definition at line 242 of file timer.c.

{
  switch(type)
    {
    case GCOMPRIS_TIMER_TEXT:
      /* Display the value for this timer */
      if(gc_timer_item)
       gnome_canvas_item_set(gc_timer_item,
                           "text", _("Time Elapsed"),
                           NULL);
      break;
    default:
      break;
    }

}

Here is the caller graph for this function:

void gc_timer_add ( int  second)

Definition at line 159 of file timer.c.

{
  timer +=second;
}

Here is the caller graph for this function:

void gc_timer_display ( int  ax,
int  ay,
TimerList  atype,
int  second,
GcomprisTimerEnd  agcomprisTimerEnd 
)

Definition at line 45 of file timer.c.

{
  GdkFont *gdk_font;
  GdkPixbuf *pixmap = NULL;
  GcomprisProperties *properties = gc_prop_get();

  /* Timer is not requested */
  if(properties->timer==0)
    return;

  gdk_font = gdk_font_load (FONT_BOARD_MEDIUM);

  gc_timer_end();

  paused = FALSE;

  boardRootItem = GNOME_CANVAS_GROUP(
                                 gnome_canvas_item_new (gnome_canvas_root(gc_get_canvas()),
                                                     gnome_canvas_group_get_type (),
                                                     "x", (double) 0,
                                                     "y", (double) 0,
                                                     NULL));

  x = ax;
  y = ay;
  second = second / properties->timer;
  timer = second;

  type = atype;
  gcomprisTimerEnd = agcomprisTimerEnd;

  switch(type)
    {
    case GCOMPRIS_TIMER_SAND:
    case GCOMPRIS_TIMER_CLOCK:
      {
       gchar         *filefull = NULL;
       gchar         *filename = NULL;
       gint          fileid;
       
       fileid = (gint)timer;
       if(type==GCOMPRIS_TIMER_SAND)
         filename = g_strdup_printf("gcompris/timers/sablier%d.png", fileid);
       else
         filename = g_strdup_printf("gcompris/timers/clock%d.png", fileid);
       
       filefull = g_strdup_printf("%s/%s", properties->package_data_dir, filename);
       if (g_file_test ((filefull), G_FILE_TEST_EXISTS))
         {
           pixmap = gc_pixmap_load(filename);

           gc_timer_item = gnome_canvas_item_new (boardRootItem,
                                             gnome_canvas_pixbuf_get_type (),
                                             "pixbuf", pixmap, 
                                             "x", x,
                                             "y", y,
                                             NULL);
           
           gdk_pixbuf_unref(pixmap);
         }
       g_free(filename);
       g_free(filefull);
      }
      break;
    case GCOMPRIS_TIMER_TEXT:
      {
       gchar *tmpstr = g_strdup_printf("Remaining Time = %d", timer);
       /* Display the value for this timer */
       gc_timer_item = gnome_canvas_item_new (boardRootItem,
                                          gnome_canvas_text_get_type (),
                                          "text", tmpstr,
                                          "font_gdk", gdk_font,
                                          "x", x,
                                          "y", y,
                                          "anchor", GTK_ANCHOR_CENTER,
                                          "fill_color", "white",
                                          NULL);
       g_free(tmpstr);
      }
      break;
    case GCOMPRIS_TIMER_BALLOON:
      pixmap = gc_pixmap_load("gcompris/misc/tuxballoon.png");
      gc_timer_item = gnome_canvas_item_new (boardRootItem,
                                        gnome_canvas_pixbuf_get_type (),
                                        "pixbuf", pixmap, 
                                        "x", x,
                                        "y", y,
                                        NULL);

      /* Calc the number of step needed to reach the sea based on user y and second */
      ystep = (BOARDHEIGHT-y-gdk_pixbuf_get_height(pixmap))/second;

      gdk_pixbuf_unref(pixmap);

      pixmap = gc_pixmap_load("gcompris/misc/sea.png");
      gnome_canvas_item_new (boardRootItem,
                          gnome_canvas_pixbuf_get_type (),
                          "pixbuf", pixmap, 
                          "x", (double) 0,
                          "y", (double) BOARDHEIGHT - gdk_pixbuf_get_height(pixmap),
                          "width", (double) gdk_pixbuf_get_width(pixmap),
                          "height", (double) gdk_pixbuf_get_height(pixmap),
                          NULL);
      gdk_pixbuf_unref(pixmap);

      break;
    default:
      break;
    }

  start_animation();
}

Here is the call graph for this function:

Here is the caller graph for this function:

void gc_timer_end ( void  )

Definition at line 165 of file timer.c.

{
  if(boardRootItem!=NULL)
    gtk_object_destroy (GTK_OBJECT(boardRootItem));
  boardRootItem = NULL;

  paused = TRUE;

  if (animate_id)
    gtk_timeout_remove (animate_id);
  animate_id = 0;

  if (subanimate_id)
    gtk_timeout_remove (subanimate_id);
  subanimate_id = 0;
}

Here is the caller graph for this function:

Definition at line 208 of file timer.c.

{
  return(timer);
}

Here is the caller graph for this function:

void gc_timer_pause ( gboolean  pause)

Definition at line 183 of file timer.c.

{
  if(boardRootItem==NULL)
    return;

  paused = pause;

  if(pause)
    {
      if (animate_id)
       gtk_timeout_remove (animate_id);
      animate_id = 0;
      
      if (subanimate_id)
       gtk_timeout_remove (subanimate_id);
      subanimate_id = 0;
    }
  else
    {
      start_animation();
    }

}

Here is the call graph for this function:

Here is the caller graph for this function:

static void start_animation ( ) [static]

Definition at line 218 of file timer.c.

{

  switch(type)
    {
    case GCOMPRIS_TIMER_SAND:
    case GCOMPRIS_TIMER_CLOCK:
      /* No subanimation */
      break;
    case GCOMPRIS_TIMER_TEXT:
      /* No subanimation */
      break;
    case GCOMPRIS_TIMER_BALLOON:
      /* Perform under second animation */
      subratio = 5;
      subanimate_id = gtk_timeout_add (1000/subratio, (GtkFunction) subtimer_increment, NULL);
      break;
    }

  animate_id = gtk_timeout_add (1000, (GtkFunction) timer_increment, NULL);
}

Here is the call graph for this function:

Here is the caller graph for this function:

static gint subtimer_increment ( GtkWidget *  widget,
gpointer  data 
) [static]

Definition at line 261 of file timer.c.

{
  if(paused)
    return(FALSE);

  switch(type)
    {
    case GCOMPRIS_TIMER_BALLOON:
      /* Display the value for this timer */
      y+=ystep/subratio;
      if(gc_timer_item)
       gnome_canvas_item_set(gc_timer_item,
                           "y", y,
                           NULL);
      //      gnome_canvas_update_now(gc_get_canvas());
      break;
    default:
      break;
    }
  return (TRUE);
}

Here is the caller graph for this function:

static gint timer_increment ( GtkWidget *  widget,
gpointer  data 
) [static]

Definition at line 284 of file timer.c.

{
  if(paused)
    return(FALSE);

  timer--;

  if(timer==-1)
    {
      display_time_ellapsed();
      if(gcomprisTimerEnd!=NULL)
       {
         /* Call the callback */
         gcomprisTimerEnd();

       }
      return (FALSE);
    }

  switch(type)
    {
    case GCOMPRIS_TIMER_SAND:
    case GCOMPRIS_TIMER_CLOCK:
      if(gc_timer_item)
       {
         GcomprisProperties *properties = gc_prop_get();
         GdkPixbuf   *pixmap = NULL;
         gchar              *filefull = NULL;
         gchar              *filename = NULL;
         gint        fileid;

         fileid = (gint)timer;
         if(type==GCOMPRIS_TIMER_SAND)
           filename = g_strdup_printf("gcompris/timers/sablier%d.png", fileid);
         else
           filename = g_strdup_printf("gcompris/timers/clock%d.png", fileid);

         filefull = g_strdup_printf("%s/%s", properties->package_data_dir, filename);
         g_debug("timer: filefull = %s\n", filefull);
         if (g_file_test ((filefull), G_FILE_TEST_EXISTS))
           {
             pixmap = gc_pixmap_load(filename);
             gnome_canvas_item_set(gc_timer_item,
                                "pixbuf", pixmap,
                                NULL);
             gdk_pixbuf_unref(pixmap);
           }
         g_free(filename);
         g_free(filefull);
       }
      break;
    case GCOMPRIS_TIMER_TEXT:
      /* Display the value for this timer */
      if(gc_timer_item)
       {
         char *tmpstr = g_strdup_printf(_("Remaining Time = %d"), timer);
         gnome_canvas_item_set(gc_timer_item,
                            "text", tmpstr,
                            NULL);
         g_free(tmpstr);
       }
      break;
    case GCOMPRIS_TIMER_BALLOON:
      break;
    default:
      break;
    }

  return (TRUE);
}

Here is the call graph for this function:

Here is the caller graph for this function:


Variable Documentation

gint animate_id = 0 [static]

Definition at line 38 of file timer.c.

GnomeCanvasGroup* boardRootItem = NULL [static]

Definition at line 37 of file timer.c.

GnomeCanvasItem* gc_timer_item

Definition at line 42 of file timer.c.

Definition at line 40 of file timer.c.

gboolean paused [static]

Definition at line 27 of file timer.c.

gint subanimate_id = 0 [static]

Definition at line 39 of file timer.c.

double subratio [static]

Definition at line 32 of file timer.c.

int timer [static]

Definition at line 31 of file timer.c.

TimerList type [static]

Definition at line 33 of file timer.c.

double x [static]

Definition at line 28 of file timer.c.

double y [static]

Definition at line 29 of file timer.c.

double ystep [static]

Definition at line 30 of file timer.c.