/*
Posted by someone who may or may not want their name on this
gcc -Wall -o parent-test parent-test.c \
`pkg-config --cflags --libs gtk+-2.0 hildon-1`
*/
#include <cairo.h>
#include <gtk/gtk.h>
#include <glib.h>
#include <math.h>
#include <stdlib.h>
#include <hildon/hildon.h>
static gint X_SIZE = 320;
static gint Y_SIZE = 240;
static gint X_POS = 0;
static gint Y_POS = 56;
static gint X_FULL = 800;
static gint Y_FULL = 424;
static gdouble X_SCALE = 2.5; /* X_FULL / X_SIZE */
static gdouble Y_SCALE = 1.77; /* Y_FULL / Y_SIZE */
/** Simple drawing widget **/
static void
drawing_button_event (GtkWidget *drawing,
GdkEventButton *event,
cairo_t *context)
{
cairo_new_path (context);
cairo_move_to (context, event->x + 5, event->y);
cairo_arc (context, event->x, event->y, 5, 0, 2 * M_PI);
if (event->type == GDK_BUTTON_PRESS)
cairo_set_source_rgb (context, 1.0, 0.0, 0.0);
else
cairo_set_source_rgb (context, 0.0, 0.0, 1.0);
cairo_fill (context);
}
static void
drawing_realize (GtkWidget *drawing,
gpointer user_data)
{
cairo_t *context;
context = gdk_cairo_create (GDK_DRAWABLE (drawing->window));
gtk_widget_add_events (drawing,
GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK);
g_signal_connect (drawing, "button-press-event",
G_CALLBACK (drawing_button_event), context);
g_signal_connect (drawing, "button-release-event",
G_CALLBACK (drawing_button_event), context);
}
static GtkWidget *
get_drawing_widget (void)
{
GtkWidget *drawing = gtk_drawing_area_new ();
GtkRequisition *req;
g_signal_connect (drawing, "realize",
G_CALLBACK (drawing_realize), NULL);
return drawing;
}
/** Test application **/
static void
window_button_proxy (GtkWidget *widget,
GdkEventButton *event,
GtkWidget *proxy)
{
GdkEventButton *newev = (GdkEventButton *) gdk_event_copy ((GdkEvent *) event);
newev->window = proxy->window;
newev->x = (gint) (newev->x / X_SCALE);
newev->y = (gint) (newev->y / Y_SCALE);
gdk_event_put ((GdkEvent *) newev);
}
static void
button_clicked (GtkWidget *widget, HildonAnimationActor *actor)
{
static gboolean fullscreen = FALSE;
if (fullscreen) {
hildon_animation_actor_set_scale (actor, 1.0, 1.0);
fullscreen = FALSE;
}
else {
hildon_animation_actor_set_scale (actor, X_SCALE, Y_SCALE);
fullscreen = TRUE;
}
}
int
main (int argc,
char *argv[])
{
HildonAnimationActor *actor;
GtkWidget *window, *drawing;
HildonProgram *program;
GdkColor pink = { .red = 0xffff, .green = 0x9999, .blue = 0x9999 };
gtk_init (&argc, &argv);
window = hildon_stackable_window_new ();
gtk_widget_modify_bg (GTK_WIDGET (window), GTK_STATE_NORMAL, &pink);
g_signal_connect (G_OBJECT (window), "delete_event",
G_CALLBACK (gtk_main_quit), NULL);
gtk_widget_add_events (window,
GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK);
actor = HILDON_ANIMATION_ACTOR (hildon_animation_actor_new());
gtk_widget_add_events (GTK_WIDGET (actor),
GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK);
gtk_window_resize (GTK_WINDOW (actor), X_SIZE, Y_SIZE);
hildon_animation_actor_set_position (actor, X_POS, Y_POS);
hildon_animation_actor_set_parent (actor, GTK_WINDOW (window));
hildon_animation_actor_set_scale (actor, X_SCALE, Y_SCALE);
drawing = get_drawing_widget ();
gtk_container_add (GTK_CONTAINER (actor), drawing);
g_signal_connect (window, "button-press-event",
G_CALLBACK (window_button_proxy), drawing);
g_signal_connect (window, "button-release-event",
G_CALLBACK (window_button_proxy), drawing);
gtk_widget_show_all (GTK_WIDGET (actor));
gtk_widget_show_all (GTK_WIDGET (window));
gtk_main ();
return 0;
}


| The Following User Says Thank You to Bundyo For This Useful Post: | ||
| The Following 3 Users Say Thank You to konttori For This Useful Post: | ||