Ben NanoNote 3D scans
Sign in or create your account | Project List | Help
Ben NanoNote 3D scans Commit Details
Date: | 2010-09-24 04:18:46 (13 years 6 months ago) |
---|---|
Author: | Werner Almesberger |
Commit: | b8bba1d3abe4db362c457a9eeb849fdaaaad1cc5 |
Message: | The GUI can now switch among operations. - solidify/level.c (key_press_event, make_screen), solidify/solidify.c (key_press_event): moved "q" handler to solidify.c - solidify/level.h (level), solidify/level.c (make_screen, level): removed root window initialization and merged remainder into "level" - solidify/overlap.h (overlap), solidify/overlap.c (make_screen, overlap): removed root window initialization and merged remainder into "overlap" - solidify/solidify.c (gui): initialize the root window - solidify/solidify.c (gui, gui_buttons, clicked): added buttons to select operation |
Files: |
solidify/level.c (1 diff) solidify/level.h (1 diff) solidify/overlap.c (1 diff) solidify/overlap.h (1 diff) solidify/solidify.c (3 diffs) |
Change Details
solidify/level.c | ||
---|---|---|
131 | 131 | } |
132 | 132 | |
133 | 133 | |
134 | static gboolean key_press_event(GtkWidget *widget, GdkEventKey *event, | |
135 | gpointer data) | |
136 | { | |
137 | if (event->keyval == 'q') | |
138 | gtk_main_quit(); | |
139 | return TRUE; | |
140 | } | |
141 | ||
142 | ||
143 | static void make_screen(GtkWidget *root, struct face *f) | |
134 | void level(GtkWidget *canvas, struct face *f) | |
144 | 135 | { |
145 | 136 | GtkWidget *evbox, *da; |
146 | 137 | |
138 | evbox = gtk_event_box_new(); | |
147 | 139 | da = gtk_drawing_area_new(); |
148 | 140 | gtk_widget_set_size_request(da, f->sx, f->sy); |
149 | evbox = gtk_event_box_new(); | |
141 | gtk_container_add(GTK_CONTAINER(canvas), evbox); | |
150 | 142 | gtk_container_add(GTK_CONTAINER(evbox), da); |
151 | gtk_container_add(GTK_CONTAINER(root), evbox); | |
152 | gtk_widget_show_all(root); | |
143 | ||
153 | 144 | draw_image(da, f); |
154 | 145 | |
155 | 146 | g_signal_connect(G_OBJECT(evbox), "scroll-event", |
156 | 147 | G_CALLBACK(scroll_event), f); |
157 | 148 | g_signal_connect(G_OBJECT(da), "expose-event", |
158 | 149 | G_CALLBACK(expose_event), f); |
159 | g_signal_connect(G_OBJECT(root), "key-press-event", | |
160 | G_CALLBACK(key_press_event), NULL); | |
161 | } | |
162 | ||
163 | ||
164 | void level(struct face *f) | |
165 | { | |
166 | GtkWidget *root; | |
167 | ||
168 | root = gtk_window_new(GTK_WINDOW_TOPLEVEL); | |
169 | gtk_window_set_position(GTK_WINDOW(root), GTK_WIN_POS_CENTER); | |
170 | ||
171 | g_signal_connect(G_OBJECT(root), "destroy", | |
172 | G_CALLBACK(gtk_main_quit), NULL); | |
173 | make_screen(root, f); | |
174 | gtk_main(); | |
175 | 150 | } |
solidify/level.h | ||
---|---|---|
13 | 13 | #ifndef LEVEL_H |
14 | 14 | #define LEVEL_H |
15 | 15 | |
16 | #include <gtk/gtk.h> | |
17 | ||
16 | 18 | #include "face.h" |
17 | 19 | |
18 | 20 | |
19 | void level(struct face *f); | |
21 | void level(GtkWidget *canvas, struct face *f); | |
20 | 22 | |
21 | 23 | #endif /* LEVEL_H */ |
solidify/overlap.c | ||
---|---|---|
156 | 156 | |
157 | 157 | |
158 | 158 | |
159 | static void make_screen(GtkWidget *root, struct face *f) | |
159 | void overlap(GtkWidget *canvas, struct face *f) | |
160 | 160 | { |
161 | 161 | GtkWidget *evbox, *da; |
162 | 162 | |
163 | evbox = gtk_event_box_new(); | |
163 | 164 | da = gtk_drawing_area_new(); |
164 | 165 | gtk_widget_set_size_request(da, f->sx, f->sy); |
165 | evbox = gtk_event_box_new(); | |
166 | gtk_container_add(GTK_CONTAINER(canvas), evbox); | |
166 | 167 | gtk_container_add(GTK_CONTAINER(evbox), da); |
167 | gtk_container_add(GTK_CONTAINER(root), evbox); | |
168 | gtk_widget_show_all(root); | |
168 | ||
169 | 169 | draw_image(da, f); |
170 | 170 | |
171 | 171 | g_signal_connect(G_OBJECT(evbox), "scroll-event", |
172 | 172 | G_CALLBACK(scroll_event), f); |
173 | 173 | g_signal_connect(G_OBJECT(da), "expose-event", |
174 | 174 | G_CALLBACK(expose_event), f); |
175 | } | |
176 | ||
177 | void overlap(struct face *face) | |
178 | { | |
179 | GtkWidget *root; | |
180 | ||
181 | root = gtk_window_new(GTK_WINDOW_TOPLEVEL); | |
182 | gtk_window_set_position(GTK_WINDOW(root), GTK_WIN_POS_CENTER); | |
183 | 175 | |
184 | g_signal_connect(G_OBJECT(root), "destroy", | |
185 | G_CALLBACK(gtk_main_quit), NULL); | |
186 | make_screen(root, face); | |
187 | gtk_main(); | |
176 | return evbox; | |
188 | 177 | } |
solidify/overlap.h | ||
---|---|---|
10 | 10 | * (at your option) any later version. |
11 | 11 | */ |
12 | 12 | |
13 | ||
14 | 13 | #ifndef OVERLAP_H |
15 | 14 | #define OVERLAP_H |
16 | 15 | |
16 | #include <gtk/gtk.h> | |
17 | 17 | |
18 | void overlap(struct face *face); | |
19 | 18 | |
19 | void overlap(GtkWidget *canvas, struct face *face); | |
20 | 20 | |
21 | 21 | #endif /* !OVERLAP_H */ |
solidify/solidify.c | ||
---|---|---|
18 | 18 | |
19 | 19 | #include "face.h" |
20 | 20 | #include "level.h" |
21 | #include "overlap.h" | |
22 | ||
23 | ||
24 | static struct face *face_a, *face_b; | |
25 | static const struct face *active; | |
26 | static GtkWidget *canvas; | |
27 | ||
28 | ||
29 | static void clicked(GtkButton *button, gpointer user_data) | |
30 | { | |
31 | struct face *face = user_data; | |
32 | ||
33 | if (active == face) | |
34 | return; | |
35 | ||
36 | gtk_widget_destroy(gtk_bin_get_child(GTK_BIN(canvas))); | |
37 | ||
38 | if (face) | |
39 | level(canvas, face); | |
40 | else | |
41 | overlap(canvas, face_a); | |
42 | active = face; | |
43 | ||
44 | gtk_widget_show_all(canvas); | |
45 | } | |
46 | ||
47 | ||
48 | static GtkWidget *gui_buttons(void) | |
49 | { | |
50 | GtkWidget *vbox, *but; | |
51 | ||
52 | vbox = gtk_vbox_new(FALSE, 0); | |
53 | ||
54 | but = gtk_button_new_with_label("A"); | |
55 | gtk_box_pack_start(GTK_BOX(vbox), but, FALSE, FALSE, 0); | |
56 | g_signal_connect(G_OBJECT(but), "clicked", | |
57 | G_CALLBACK(clicked), face_a); | |
58 | ||
59 | but = gtk_button_new_with_label("B"); | |
60 | gtk_box_pack_start(GTK_BOX(vbox), but, FALSE, FALSE, 0); | |
61 | g_signal_connect(G_OBJECT(but), "clicked", | |
62 | G_CALLBACK(clicked), face_b); | |
63 | ||
64 | but = gtk_button_new_with_label("A+B"); | |
65 | gtk_box_pack_start(GTK_BOX(vbox), but, FALSE, FALSE, 0); | |
66 | g_signal_connect(G_OBJECT(but), "clicked", | |
67 | G_CALLBACK(clicked), NULL); | |
68 | ||
69 | return vbox; | |
70 | } | |
71 | ||
72 | ||
73 | static gboolean key_press_event(GtkWidget *widget, GdkEventKey *event, | |
74 | gpointer data) | |
75 | { | |
76 | if (event->keyval == 'q') | |
77 | gtk_main_quit(); | |
78 | return TRUE; | |
79 | } | |
80 | ||
81 | ||
82 | static void gui(void) | |
83 | { | |
84 | GtkWidget *root, *hbox, *buttons; | |
85 | ||
86 | root = gtk_window_new(GTK_WINDOW_TOPLEVEL); | |
87 | gtk_window_set_position(GTK_WINDOW(root), GTK_WIN_POS_CENTER); | |
88 | ||
89 | hbox = gtk_hbox_new(FALSE, 0); | |
90 | gtk_container_add(GTK_CONTAINER(root), hbox); | |
91 | ||
92 | canvas = gtk_event_box_new(); | |
93 | gtk_box_pack_start(GTK_BOX(hbox), canvas, FALSE, FALSE, 0); | |
94 | ||
95 | /* initialize root->window */ | |
96 | gtk_widget_show_all(root); | |
97 | ||
98 | buttons = gui_buttons(); | |
99 | gtk_box_pack_start(GTK_BOX(hbox), buttons, FALSE, FALSE, 0); | |
100 | ||
101 | level(canvas, face_a); | |
102 | active = face_a; | |
103 | ||
104 | gtk_widget_show_all(root); | |
105 | ||
106 | g_signal_connect(G_OBJECT(root), "key-press-event", | |
107 | G_CALLBACK(key_press_event), NULL); | |
108 | g_signal_connect(G_OBJECT(root), "destroy", | |
109 | G_CALLBACK(gtk_main_quit), NULL); | |
110 | ||
111 | gtk_main(); | |
112 | } | |
21 | 113 | |
22 | 114 | |
23 | 115 | static void usage(const char *name) |
... | ... | |
29 | 121 | |
30 | 122 | int main(int argc, char **argv) |
31 | 123 | { |
32 | struct face *top; | |
33 | ||
34 | 124 | gtk_init(&argc, &argv); |
35 | 125 | switch (argc) { |
36 | 126 | case 2: |
... | ... | |
39 | 129 | usage(*argv); |
40 | 130 | } |
41 | 131 | setlocale(LC_ALL, "C"); /* damage control */ |
42 | top = read_face(argv[1]); | |
43 | level(top); | |
132 | face_a = read_face(argv[1]); | |
133 | face_b = face_a; | |
134 | gui(); | |
44 | 135 | |
45 | 136 | return 0; |
46 | 137 | } |
Branches:
master