1 /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */
4 * Copyright (C) Nikita Zlobin 2011 <nick87720z@gmail.com>
6 * gtkgraph is free software: you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the
8 * Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
11 * gtkgraph is distributed in the hope that it will be useful, but
12 * WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
14 * See the GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License along
17 * with this program. If not, see <http://www.gnu.org/licenses/>.
20 #include <goocanvas.h>
22 static gboolean
on_wire_buttonPress_event (GooCanvasItem
* item
, GooCanvasItem
* target
, GdkEventButton
* event
, gpointer data
);
23 static gboolean
on_wire_buttonRelease_event (GooCanvasItem
* item
, GooCanvasItem
* target
, GdkEventButton
* event
, gpointer data
);
25 static gboolean
wire_entered (GooCanvasItem
* item
, GooCanvasItem
* target
, GdkEventCrossing
* event
, gpointer data
);
26 static gboolean
wire_left (GooCanvasItem
* item
, GooCanvasItem
* target
, GdkEventCrossing
* event
, gpointer data
);
29 GtkWidget
* root_menu
, obj_menu
, port_menu
;
34 GtkOrientation
* orientation
;
36 GooCanvasItem
* caption
;
42 GtkOrientation
* orientation
;
49 int main( int argc
, char ** argv
)
54 gtk_init (& argc
, & argv
);
55 win
= gtk_window_new (GTK_WINDOW_TOPLEVEL
);
57 scroller
= gtk_scrolled_window_new (NULL
, NULL
);
58 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scroller
), GTK_SHADOW_IN
);
59 gtk_container_add (GTK_CONTAINER (win
), scroller
);
61 /* Create canvas widget */
62 canvas
= goo_canvas_new ();
63 gtk_widget_set_size_request (canvas
, 600, 450);
64 goo_canvas_set_bounds (GOO_CANVAS (canvas
), 0, 0, 1000, 1000);
65 gtk_widget_show (canvas
);
66 gtk_container_add (GTK_CONTAINER (scroller
), canvas
);
69 /* Create canvas menu */
70 canvas_menu
= gtk_menu_new ();
72 /* Add canvas menu to owner */
75 item
= goo_canvas_get_root_item (canvas
);
76 g_signal_connect (G_OBJECT (item
), "button-press-event", on_root_buttonPress_event
);
77 g_signal_connect (G_OBJECT (item
), "button-release-event", on_root_buttonRelease_event
);
82 GooCanvasItem
* root_item
;
83 GooCanvasItem
* item1
, * item2
;
84 GooCanvasItem
* item_tmp
;
85 double rounding
= 3.0;
87 root_item
= goo_canvas_get_root_item (GOO_CANVAS (canvas
));
91 item1
= goo_canvas_rect_new (root_item
,
96 "stroke-color", "gray75",
97 "fill-color", "gray50",
100 item2
= goo_canvas_rect_new (root_item
,
102 "radius-x", rounding
,
103 "radius-y", rounding
,
104 "stroke-color", "gray75",
105 "fill-color", "gray50",
110 wire
= goo_canvas_path_new (root_item
,
111 "M20,100 C50,100 100,50 100,100",
112 "stroke-color", "violet", NULL
);
113 g_signal_connect (G_OBJECT (wire
), "enter-notify-event", G_CALLBACK (wire_entered
), NULL
);
114 g_signal_connect (G_OBJECT (wire
), "leave-notify-event", G_CALLBACK (wire_left
), NULL
);
116 gtk_widget_set_has_tooltip (canvas
, TRUE
);
117 g_object_set (wire
, "tooltip", "Wire Test", NULL
);
119 gtk_widget_show_all (win
);
126 void show_root_menu (GooCanvasItem
* item
)
128 // gtk_menu_popup ();
134 gboolean
wire_entered (GooCanvasItem
*item
,
135 GooCanvasItem
*target
,
136 GdkEventCrossing
*event
,
139 g_object_set (item
, "stroke-color", "white", NULL
);
144 gboolean
wire_left (GooCanvasItem
*item
,
145 GooCanvasItem
*target
,
146 GdkEventCrossing
*event
,
149 g_object_set (item
, "stroke-color", "violet", NULL
);
153 static gboolean
on_root_buttonPress_event (GooCanvasItem
* item
, GooCanvasItem
* target
, GdkEventButton
* event
, gpointer data
)
155 show_root_menu (item
);
159 static gboolean
on_root_buttonRelease_event (GooCanvasItem
* item
, GooCanvasItem
* target
, GdkEventButton
* event
, gpointer data
)