gnome-edu r13 - in trunk/garfunkel: . pixmaps/default src
- From: brunobol svn gnome org
- To: svn-commits-list gnome org
- Subject: gnome-edu r13 - in trunk/garfunkel: . pixmaps/default src
- Date: Mon, 28 Apr 2008 13:00:39 +0100 (BST)
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]