5 #include "../src/mark.h"
6 #include "../src/yuv.h"
10 int mark_selected = 0;
12 #define COLOR_WIDTH 100
13 #define COLOR_HEIGHT 20
28 static GdkPixbuf *draw_pixpuf(int i)
34 float bright, contrast;
35 double r, g, b, y, u, v;
37 cr = mark_palette[i].r;
38 cg = mark_palette[i].g;
39 cb = mark_palette[i].b;
40 bright = mark_palette[i].bright;
41 contrast = mark_palette[i].contrast;
45 rgb2yuv_pixle(r, g, b, &y, &u, &v);
47 pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, FALSE, 8, COLOR_WIDTH, COLOR_HEIGHT);
48 data = gdk_pixbuf_get_pixels(pixbuf);
49 rs = gdk_pixbuf_get_rowstride(pixbuf);
50 if (cr == 255 && cg == 255 && cb == 255) {
51 for (k = 0; k < COLOR_WIDTH; k++) {
52 for (j = 0; j < COLOR_HEIGHT; j++) {
53 data[j * rs + k * 3 + 0] = 255;
54 data[j * rs + k * 3 + 1] = 255;
55 data[j * rs + k * 3 + 2] = 255;
59 for (k = 0; k < COLOR_WIDTH; k++) {
60 /* we use height as horizontal size of original color area */
61 if (k >= COLOR_HEIGHT+3) {
62 y = (double)(k-COLOR_HEIGHT-3) / (double)((COLOR_WIDTH-COLOR_HEIGHT-3)-1);
63 y = (y - 0.5) * contrast + 0.5;
69 yuv2rgb_pixle(y, u, v, &r, &g, &b);
86 if (k >= COLOR_HEIGHT) {
91 for (j = 0; j < COLOR_HEIGHT; j++) {
92 data[j * rs + k * 3 + 0] = cr;
93 data[j * rs + k * 3 + 1] = cg;
94 data[j * rs + k * 3 + 2] = cb;
99 /* indicate a change in brightness + contrast */
100 if (bright != 0 || contrast != 1) {
101 for (k = 0; k < 11; k++) {
102 for (j = 0; j < 11; j++) {
103 if (bc_pic[j][k] == '*') {
104 data[j * rs + k * 3 + 0] = 255;
105 data[j * rs + k * 3 + 1] = 0;
106 data[j * rs + k * 3 + 2] = 0;
115 void create_palette(void)
117 GtkListStore *palette_store;
123 for (i = 0; i < 255; i++) {
124 strcpy(mark_palette[i].name, "");
125 mark_palette[i].r = 0;
126 mark_palette[i].g = 0;
127 mark_palette[i].b = 0;
128 mark_palette[i].bright = 0;
129 mark_palette[i].contrast = 1;
132 strcpy(mark_palette[0].name, "red");
133 mark_palette[0].r = 255;
134 mark_palette[0].g = 0;
135 mark_palette[0].b = 0;
136 strcpy(mark_palette[1].name, "green");
137 mark_palette[1].r = 0;
138 mark_palette[1].g = 255;
139 mark_palette[1].b = 0;
140 strcpy(mark_palette[2].name, "blue");
141 mark_palette[2].r = 0;
142 mark_palette[2].g = 0;
143 mark_palette[2].b = 255;
145 palette_store = gtk_list_store_new(3, G_TYPE_STRING, GDK_TYPE_PIXBUF, G_TYPE_STRING);
146 gtk_tree_view_set_model(GTK_TREE_VIEW(palette_treeview), GTK_TREE_MODEL(palette_store));
147 gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(palette_treeview), FALSE);
149 for (i = 0; i < 255; i++) {
150 gtk_list_store_append(palette_store, &iter);
151 sprintf(number, "%d", i+1);
152 color = draw_pixpuf(i);
153 gtk_list_store_set(palette_store, &iter, 0, number, 1, color, 2, mark_palette[i].name, -1);
154 g_object_unref(color);
157 g_object_unref(palette_store);
161 void update_color(int entry)
165 color = draw_pixpuf(entry);
171 sprintf(path, "%d", entry);
172 model = gtk_tree_view_get_model(GTK_TREE_VIEW(palette_treeview));
173 if (gtk_tree_model_get_iter_from_string(model, &iter, path)) {
174 gtk_list_store_set(GTK_LIST_STORE(model), &iter, 1, color, 2, mark_palette[entry].name, -1);