gnome-edu r13 - in trunk/garfunkel: . pixmaps/default src



Author: brunobol
Date: Mon Apr 28 12:00:38 2008
New Revision: 13
URL: http://svn.gnome.org/viewvc/gnome-edu?rev=13&view=rev

Log:
Garfunkel - starting to work on the game's logic

Modified:
   trunk/garfunkel/configure.ac
   trunk/garfunkel/pixmaps/default/garfunkel.svg
   trunk/garfunkel/src/Makefile.am
   trunk/garfunkel/src/garfunkel.c
   trunk/garfunkel/src/garfunkel.h
   trunk/garfunkel/src/main.c

Modified: trunk/garfunkel/configure.ac
==============================================================================
--- trunk/garfunkel/configure.ac	(original)
+++ trunk/garfunkel/configure.ac	Mon Apr 28 12:00:38 2008
@@ -24,7 +24,6 @@
         Makefile
         pixmaps/Makefile
         pixmaps/default/Makefile
-        pixmaps/simple/Makefile
         pixmaps/gnome-foot/Makefile
         src/Makefile
 ])

Modified: trunk/garfunkel/pixmaps/default/garfunkel.svg
==============================================================================
--- trunk/garfunkel/pixmaps/default/garfunkel.svg	(original)
+++ trunk/garfunkel/pixmaps/default/garfunkel.svg	Mon Apr 28 12:00:38 2008
@@ -1744,7 +1744,7 @@
          style="fill:url(#linearGradient5674);fill-opacity:1.0;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" />
     </g>
     <g
-       id="grenn"
+       id="green"
        inkscape:label="#green">
       <path
          id="path5648"
@@ -1756,6 +1756,18 @@
          style="fill:url(#linearGradient5666);fill-opacity:1.0;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" />
     </g>
     <g
+       inkscape:label="#green-on"
+       id="green-on">
+      <path
+         style="fill:#8ae234;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1"
+         d="M 47.484375,862.62779 C 27.791015,864.0471 11.997172,879.90067 10.578125,899.78404 L 30.765625,899.78404 C 32.033485,891.11644 38.894675,884.24294 47.484375,882.97154 L 47.484375,862.62779 z "
+         id="path2414" />
+      <path
+         style="fill:url(#linearGradient5666);fill-opacity:1.0;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1"
+         d="M 46.234375,864.11216 C 28.283255,866.06733 14.025712,880.38377 12.078125,898.51841 L 29.765625,898.51841 C 31.434825,890.19127 37.971885,883.63493 46.234375,881.95591 L 46.234375,864.11216 z "
+         id="path2416" />
+    </g>
+    <g
        id="yellow">
       <path
          id="path5646"
@@ -1777,5 +1789,38 @@
          d="M 70.234375,906.26841 C 68.568725,914.57467 62.046035,921.14743 53.765625,922.83091 L 53.765625,940.70591 C 71.779075,938.74737 85.983905,924.35331 87.921875,906.26841 L 70.234375,906.26841 z "
          style="fill:url(#linearGradient5690);fill-opacity:1.0;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" />
     </g>
+    <g
+       id="red-on">
+      <path
+         style="fill:#ef2929;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1"
+         d="M 52.515625,862.53404 L 52.515625,882.87779 C 61.128655,884.15353 67.971015,891.01516 69.234375,899.65904 L 89.421875,899.65904 C 88.011535,879.83975 72.272635,863.96207 52.515625,862.53404 z "
+         id="path2408" />
+      <path
+         style="fill:url(#linearGradient5674);fill-opacity:1.0;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1"
+         d="M 53.765625,864.01841 L 53.765625,881.86216 C 62.043045,883.54332 68.568575,890.08944 70.234375,898.39341 L 87.921875,898.39341 C 85.984315,880.31337 71.775635,865.97973 53.765625,864.01841 z "
+         id="path2410" />
+    </g>
+    <g
+       id="yellow-on">
+      <path
+         style="fill:#fce94f;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1"
+         d="M 10.578125,904.94029 C 11.997172,924.82362 27.791015,940.67723 47.484375,942.09654 L 47.484375,921.75279 C 38.894675,920.48139 32.033485,913.60788 30.765625,904.94029 L 10.578125,904.94029 z "
+         id="path2420" />
+      <path
+         style="fill:url(#linearGradient5682);fill-opacity:1.0;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1"
+         d="M 12.078125,906.17466 C 14.025712,924.3093 28.283255,938.62576 46.234375,940.58091 L 46.234375,922.73716 C 37.971875,921.05815 31.434825,914.50179 29.765625,906.17466 L 12.078125,906.17466 z "
+         id="path2422" />
+    </g>
+    <g
+       id="blue-on">
+      <path
+         style="fill:#729fcf;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1"
+         d="M 69.234375,905.03404 C 67.971015,913.67803 61.128775,920.57061 52.515625,921.84654 L 52.515625,942.19029 C 72.272585,940.76217 88.011535,924.85339 89.421875,905.03404 L 69.234375,905.03404 z "
+         id="path2426" />
+      <path
+         style="fill:url(#linearGradient5690);fill-opacity:1.0;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1"
+         d="M 70.234375,906.26841 C 68.568725,914.57467 62.046035,921.14743 53.765625,922.83091 L 53.765625,940.70591 C 71.779075,938.74737 85.983905,924.35331 87.921875,906.26841 L 70.234375,906.26841 z "
+         id="path2428" />
+    </g>
   </g>
 </svg>

Modified: trunk/garfunkel/src/Makefile.am
==============================================================================
--- trunk/garfunkel/src/Makefile.am	(original)
+++ trunk/garfunkel/src/Makefile.am	Mon Apr 28 12:00:38 2008
@@ -8,7 +8,6 @@
 	$(LIBS) \
 	$(WARN_FLAGS) \
 	-DDEFAULT_THEME_DIR=\""$(datadir)/garfunkel/pixmaps/default"\"	\
-	-DSIMPLE_THEME_DIR=\""$(datadir)/garfunkel/pixmaps/simple"\"	\
 	-DGNOMEFOOT_THEME_DIR=\""$(datadir)/garfunkel/pixmaps/gnome-foot"\"	\
 	-DDATADIR=\"$(pkgdatadir)\" \
 	-I$(top_srcdir)

Modified: trunk/garfunkel/src/garfunkel.c
==============================================================================
--- trunk/garfunkel/src/garfunkel.c	(original)
+++ trunk/garfunkel/src/garfunkel.c	Mon Apr 28 12:00:38 2008
@@ -28,30 +28,51 @@
 
 #include <math.h>
 #include <gtk/gtk.h>
+#include <gdk/gdkkeysyms.h>
 #include <librsvg/rsvg.h>
 
 #include "garfunkel.h"
 
 G_DEFINE_TYPE (Garfunkel, garfunkel, GTK_TYPE_DRAWING_AREA);
 
-
+typedef enum
+{
+  GARFUNKEL_GREEN  = 1 << 0,
+  GARFUNKEL_RED    = 1 << 1,
+  GARFUNKEL_BLUE   = 1 << 2,
+  GARFUNKEL_YELLOW = 1 << 3
+} GarfunkelLights;
+  
 
 struct _GarfunkelPrivate {
   RsvgHandle *svg_handle;
+
+  GarfunkelLights lights;
+  
+  gboolean block_events;
+  
+  gboolean animate;
 };
 
-static gboolean garfunkel_expose (GtkWidget *widget, GdkEventExpose *event);
+static          gboolean garfunkel_expose (GtkWidget *widget, GdkEventExpose *event);
+static void     garfunkel_redraw (Garfunkel *garfunkel);
+void            garfunkel_blink (Garfunkel *garfunkel, GarfunkelLights light);
+static gpointer garfunkel_blink_thread (gpointer data);
+static gboolean garfunkel_key_press (GtkWidget *widget, GdkEventKey *event);
+static gboolean garfunkel_button_press (GtkWidget *widget, GdkEventButton *event);
 
 
 static void
 garfunkel_init (Garfunkel* garfunkel)
 {
+  gtk_widget_add_events (GTK_WIDGET (garfunkel), GDK_KEY_PRESS_MASK);
+  gtk_widget_add_events (GTK_WIDGET (garfunkel), GDK_BUTTON_PRESS_MASK);
+  
 	garfunkel->priv = g_new0 (GarfunkelPrivate, 1);
 	
-//	garfunkel->priv->green  = FALSE;
-//	garfunkel->priv->red    = FALSE;
-//	garfunkel->priv->blue   = FALSE;
-//	garfunkel->priv->yellow = FALSE;
+	garfunkel->priv->lights = 0;
+	garfunkel->priv->block_events = FALSE;
+	garfunkel->priv->animate = FALSE;
 }
 
 static void garfunkel_finalize(GObject* object) {
@@ -74,6 +95,8 @@
   
   /* GtkWidget signals */
   widget_class->expose_event = garfunkel_expose;
+  widget_class->key_press_event = garfunkel_key_press;
+  widget_class->button_press_event = garfunkel_button_press;
 }
 
 
@@ -88,7 +111,7 @@
 
   gp = garfunkel->priv;
 		       
-  filename = g_build_filename (SIMPLE_THEME_DIR, "garfunkel.svg");
+  filename = g_build_filename (DEFAULT_THEME_DIR, "garfunkel.svg");
   
   gp->svg_handle = rsvg_handle_new_from_file (filename, NULL);
 
@@ -126,10 +149,26 @@
   cairo_scale (cr, factor / 100.0, factor / 100.0); 
 
   rsvg_handle_render_cairo_sub (gp->svg_handle, cr, "#background");
-  rsvg_handle_render_cairo_sub (gp->svg_handle, cr, "#green");
-  rsvg_handle_render_cairo_sub (gp->svg_handle, cr, "#red");
-  rsvg_handle_render_cairo_sub (gp->svg_handle, cr, "#blue");
-  rsvg_handle_render_cairo_sub (gp->svg_handle, cr, "#yellow");
+
+  if (gp->lights & GARFUNKEL_GREEN)
+    rsvg_handle_render_cairo_sub (gp->svg_handle, cr, "#green-on");
+  else
+    rsvg_handle_render_cairo_sub (gp->svg_handle, cr, "#green");
+  
+  if (gp->lights & GARFUNKEL_RED)
+    rsvg_handle_render_cairo_sub (gp->svg_handle, cr, "#red-on");
+  else
+    rsvg_handle_render_cairo_sub (gp->svg_handle, cr, "#red");
+
+  if (gp->lights & GARFUNKEL_BLUE)
+    rsvg_handle_render_cairo_sub (gp->svg_handle, cr, "#blue-on");
+  else
+    rsvg_handle_render_cairo_sub (gp->svg_handle, cr, "#blue");
+
+  if (gp->lights & GARFUNKEL_YELLOW)
+    rsvg_handle_render_cairo_sub (gp->svg_handle, cr, "#yellow-on");
+  else
+    rsvg_handle_render_cairo_sub (gp->svg_handle, cr, "#yellow");
 }
 
 static gboolean
@@ -151,4 +190,70 @@
   return FALSE;
 }
 
+static void
+garfunkel_redraw (Garfunkel *garfunkel)
+{
+        GtkWidget *widget;
+        GdkRegion *region;
+
+        widget = GTK_WIDGET (garfunkel);
+
+        if (!widget->window) return;
+
+        region = gdk_drawable_get_clip_region (widget->window);
+        /* redraw the cairo canvas completely by exposing it */
+        gdk_window_invalidate_region (widget->window, region, TRUE);
+        gdk_window_process_updates (widget->window, TRUE);
+
+        gdk_region_destroy (region);
+}
+
+
+void
+garfunkel_blink (Garfunkel *garfunkel, GarfunkelLights light)
+{
+  garfunkel->priv->lights = garfunkel->priv->lights | light;
+
+  garfunkel_redraw (garfunkel);
+
+  g_thread_join (g_thread_create (garfunkel_blink_thread, (gpointer) garfunkel, TRUE, NULL));
+}
+
+
+static gpointer
+garfunkel_blink_thread (gpointer data)
+{
+  Garfunkel *garfunkel = (Garfunkel *) data;
+
+  garfunkel->priv->lights = 0;
+
+  garfunkel_redraw (garfunkel);
+  
+  g_usleep (GARFUNKEL_BLINK_TIME);
+}
+
+
+static gboolean
+garfunkel_key_press (GtkWidget *widget, GdkEventKey *event)
+{
+  garfunkel_blink ((Garfunkel *) widget, GARFUNKEL_GREEN);
+
+  return FALSE;   
+}
+
+
+static gboolean
+garfunkel_button_press (GtkWidget *widget, GdkEventButton *event)
+{
+  Garfunkel *garfunkel;
+
+  garfunkel = (Garfunkel *) widget;
+
+  garfunkel_blink (garfunkel, GARFUNKEL_GREEN);
+  garfunkel_blink (garfunkel, GARFUNKEL_RED);
+  garfunkel_blink (garfunkel, GARFUNKEL_BLUE);
+  garfunkel_blink (garfunkel, GARFUNKEL_YELLOW);
+
+  return FALSE;
+}
 

Modified: trunk/garfunkel/src/garfunkel.h
==============================================================================
--- trunk/garfunkel/src/garfunkel.h	(original)
+++ trunk/garfunkel/src/garfunkel.h	Mon Apr 28 12:00:38 2008
@@ -27,6 +27,9 @@
 
 #include <gtk/gtk.h>
 
+/* lights' blink time */
+#define GARFUNKEL_BLINK_TIME 300000
+
 G_BEGIN_DECLS
 
 #define GARFUNKEL_TYPE            (garfunkel_get_type ())

Modified: trunk/garfunkel/src/main.c
==============================================================================
--- trunk/garfunkel/src/main.c	(original)
+++ trunk/garfunkel/src/main.c	Mon Apr 28 12:00:38 2008
@@ -34,6 +34,9 @@
   GtkWidget *window;
   GtkWidget *garfunkel;
 
+  g_thread_init(NULL);
+  gdk_threads_init();
+
   gtk_set_locale ();
   gtk_init (&argc, &argv);
 
@@ -53,7 +56,9 @@
 
   gtk_widget_show_all (window);
   
+  gdk_threads_enter();
   gtk_main();
+  gdk_threads_leave();
 
   return 0;
 }



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]