2 #include <gdk/gdkkeysyms.h>
8 #include "diag_level.h"
9 #include "../src/mark.h"
10 #include "../src/yuv.h"
14 static GtkWidget *level_window = NULL;
15 static GtkObject *black_level_adj;
16 static GtkObject *white_level_adj;
17 static GtkWidget *scale_levels_button;
18 static GtkObject *fade_level_adj;
19 static GtkWidget *yuv_mod_button;
21 static void level_destroy(GtkWidget *widget, gpointer priv)
23 gtk_widget_destroy(level_window);
27 static gboolean level_key_press(GtkWidget *widget, GdkEventKey *event, gpointer priv)
29 switch (event->keyval) {
32 if (event->state & GDK_CONTROL_MASK) {
33 gtk_widget_destroy(widget);
37 ;//printf("%x\n", event->keyval);
43 static void close_event(gpointer *priv)
45 gtk_widget_destroy(level_window);
49 static void reset_event(gpointer *priv)
53 anything_modified = 1;
59 for (i = 0; i < 255; i++)
62 draw_image(0, 0, -1, -1);
65 static void apply_event(gpointer *priv)
69 anything_modified = 1;
71 black_level = GTK_ADJUSTMENT(black_level_adj)->value / 255.0;
72 white_level = GTK_ADJUSTMENT(white_level_adj)->value / 255.0;
73 scale_levels = GTK_TOGGLE_BUTTON(scale_levels_button)->active;
74 fade_level = GTK_ADJUSTMENT(fade_level_adj)->value / 100.0;
75 yuv_mod = GTK_TOGGLE_BUTTON(yuv_mod_button)->active;
76 update_color(mark_selected);
77 for (i = 0; i < 255; i++)
80 draw_image(0, 0, -1, -1);
83 static GtkWidget *xpm_label_box( const gchar *stock_id,
90 /* Create box for image and label */
91 box = gtk_hbox_new (FALSE, 0);
92 gtk_container_set_border_width (GTK_CONTAINER (box), 4);
94 /* Now on to the image stuff */
95 image = gtk_image_new_from_stock(stock_id, -1);
97 /* Create a label for the button */
98 label = gtk_label_new (label_text);
100 /* Pack the image and label into the box */
101 gtk_box_pack_start (GTK_BOX (box), image, FALSE, FALSE, 3);
102 gtk_box_pack_start (GTK_BOX (box), label, FALSE, FALSE, 3);
104 gtk_widget_show (image);
105 gtk_widget_show (label);
110 void level_event(gpointer priv)
112 GtkWidget *vbox, *hbox;
114 GtkWidget *root_menu;
116 GtkWidget *menu_item;
117 GtkWidget *black_level_label;
118 GtkWidget *white_level_label;
119 GtkWidget *fade_level_label;
120 GtkWidget *black_level_scroll;
121 GtkWidget *white_level_scroll;
122 GtkWidget *scale_levels_label;
123 GtkWidget *fade_level_scroll;
124 GtkWidget *yuv_mod_label;
125 GtkWidget *button_apply;
126 GtkWidget *button_reset;
130 gtk_widget_destroy(level_window);
136 level_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
137 gtk_window_set_default_size(GTK_WINDOW(level_window), 500, 0);
138 gtk_window_set_title(GTK_WINDOW(level_window), "Black Level");
139 g_signal_connect(level_window, "destroy", G_CALLBACK(level_destroy), level_window);
140 g_signal_connect(level_window, "key_press_event", G_CALLBACK(level_key_press), level_window);
143 menu_bar = gtk_menu_bar_new();
144 gtk_widget_show(menu_bar);
145 menu = gtk_menu_new();
146 root_menu = gtk_menu_item_new_with_mnemonic("_File");
147 gtk_widget_show(root_menu);
149 menu_item = gtk_image_menu_item_new_from_stock(GTK_STOCK_CLOSE, NULL);
150 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item);
151 g_signal_connect_swapped(menu_item, "activate", G_CALLBACK(close_event), level_window);
152 gtk_widget_show(menu_item);
153 gtk_menu_item_set_submenu(GTK_MENU_ITEM(root_menu), menu);
154 gtk_menu_shell_append(GTK_MENU_SHELL(menu_bar), root_menu);
156 /* create scale widgets */
157 black_level_label = gtk_label_new("Black Level:");
158 gtk_widget_show(GTK_WIDGET(black_level_label));
159 black_level_adj = gtk_adjustment_new(black_level * 255, 0, 256, 1, 1, 1);
160 black_level_scroll = gtk_hscale_new(GTK_ADJUSTMENT(black_level_adj));
161 gtk_widget_show(black_level_scroll);
163 white_level_label = gtk_label_new("White Level:");
164 gtk_widget_show(GTK_WIDGET(white_level_label));
165 white_level_adj = gtk_adjustment_new(white_level * 255, 0, 256, 1, 1, 1);
166 white_level_scroll = gtk_hscale_new(GTK_ADJUSTMENT(white_level_adj));
167 gtk_widget_show(white_level_scroll);
169 scale_levels_label = gtk_label_new("Scale levels:");
170 gtk_widget_show(GTK_WIDGET(scale_levels_label));
171 scale_levels_button = gtk_check_button_new();
172 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(scale_levels_button), scale_levels ? TRUE : FALSE);
173 // g_signal_connect(scale_levels_button, "toggled", G_CALLBACK(scale_levels_event), NULL);
174 gtk_widget_show(scale_levels_button);
176 fade_level_label = gtk_label_new("Fade Level (%):");
177 gtk_widget_show(GTK_WIDGET(fade_level_label));
178 fade_level_adj = gtk_adjustment_new(fade_level * 100, 0, 101, 1, 1, 1);
179 fade_level_scroll = gtk_hscale_new(GTK_ADJUSTMENT(fade_level_adj));
180 gtk_widget_show(fade_level_scroll);
182 yuv_mod_label = gtk_label_new("Use modified YUV:");
183 gtk_widget_show(GTK_WIDGET(yuv_mod_label));
184 yuv_mod_button = gtk_check_button_new();
185 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(yuv_mod_button), yuv_mod ? TRUE : FALSE);
186 // g_signal_connect(yuv_mod_button, "toggled", G_CALLBACK(yuv_mod_event), NULL);
187 gtk_widget_show(yuv_mod_button);
190 button_reset = gtk_button_new();
191 g_signal_connect(button_reset, "clicked", G_CALLBACK(reset_event), NULL);
192 box = xpm_label_box (GTK_STOCK_REMOVE, "Reset");
193 gtk_widget_show (box);
194 gtk_container_add (GTK_CONTAINER (button_reset), box);
195 gtk_widget_show(button_reset);
197 button_apply = gtk_button_new();
198 g_signal_connect(button_apply, "clicked", G_CALLBACK(apply_event), NULL);
199 box = xpm_label_box (GTK_STOCK_APPLY, "Apply");
200 gtk_widget_show (box);
201 gtk_container_add (GTK_CONTAINER (button_apply), box);
202 gtk_widget_show(button_apply);
204 hbox = gtk_hbox_new(FALSE, 0);
205 gtk_box_pack_end(GTK_BOX(hbox), button_apply, FALSE, FALSE, 2);
206 gtk_box_pack_end(GTK_BOX(hbox), button_reset, FALSE, FALSE, 2);
207 gtk_widget_show(hbox);
209 /* create vbox (complete window) */
210 vbox = gtk_vbox_new(FALSE, 0);
211 gtk_box_pack_start(GTK_BOX(vbox), menu_bar, FALSE, FALSE, 2);
212 gtk_box_pack_start(GTK_BOX(vbox), black_level_label, FALSE, FALSE, 2);
213 gtk_box_pack_start(GTK_BOX(vbox), black_level_scroll, FALSE, FALSE, 2);
214 gtk_box_pack_start(GTK_BOX(vbox), white_level_label, FALSE, FALSE, 2);
215 gtk_box_pack_start(GTK_BOX(vbox), white_level_scroll, FALSE, FALSE, 2);
216 gtk_box_pack_start(GTK_BOX(vbox), scale_levels_label, FALSE, FALSE, 2);
217 gtk_box_pack_start(GTK_BOX(vbox), scale_levels_button, FALSE, FALSE, 2);
218 gtk_box_pack_start(GTK_BOX(vbox), fade_level_label, FALSE, FALSE, 2);
219 gtk_box_pack_start(GTK_BOX(vbox), fade_level_scroll, FALSE, FALSE, 2);
220 gtk_box_pack_start(GTK_BOX(vbox), yuv_mod_label, FALSE, FALSE, 2);
221 gtk_box_pack_start(GTK_BOX(vbox), yuv_mod_button, FALSE, FALSE, 2);
222 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 20);
223 gtk_widget_show(vbox);
225 gtk_container_add(GTK_CONTAINER(level_window), vbox);
226 gtk_widget_show(level_window);
229 void level_set_current(void)
234 gtk_adjustment_set_value(GTK_ADJUSTMENT(black_level_adj), black_level * 255);
235 gtk_adjustment_set_value(GTK_ADJUSTMENT(white_level_adj), white_level * 255);
236 gtk_adjustment_set_value(GTK_ADJUSTMENT(fade_level_adj), fade_level * 100);