Enlightenment CVS committal Author : codewarrior Project : e17 Module : proto
Dir : e17/proto/exhibit/src/bin Modified Files: exhibit.h exhibit_image.c exhibit_image.h exhibit_main.c exhibit_menus.c exhibit_menus.h Log Message: Brightness / Contrast - implement brighten function - add stubs for others =================================================================== RCS file: /cvsroot/enlightenment/e17/proto/exhibit/src/bin/exhibit.h,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- exhibit.h 14 Dec 2005 15:02:33 -0000 1.2 +++ exhibit.h 14 Dec 2005 23:27:12 -0000 1.3 @@ -65,6 +65,8 @@ char cur_path[PATH_MAX]; int zoom; + int brightness; + int contrast; struct { int down; @@ -89,6 +91,13 @@ #define ZOOM_MAX 16 #define ZOOM_MIN -16 +#ifndef DATA64 +#define DATA64 unsigned long long +#define DATA32 unsigned int +#define DATA16 unsigned short +#define DATA8 unsigned char +#endif + #include "exhibit_menus.h" #include "exhibit_file.h" #include "exhibit.h" =================================================================== RCS file: /cvsroot/enlightenment/e17/proto/exhibit/src/bin/exhibit_image.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- exhibit_image.c 14 Dec 2005 21:30:46 -0000 1.4 +++ exhibit_image.c 14 Dec 2005 23:27:12 -0000 1.5 @@ -1,5 +1,20 @@ #include "exhibit.h" +#define R_CMOD(r) \ + red_mapping[(int)(r)] +#define G_CMOD(g) \ + green_mapping[(int)(g)] +#define B_CMOD(b) \ + blue_mapping[(int)(b)] +#define A_CMOD(a) \ + alpha_mapping[(int)(a)] + +#define A_VAL(p) ((DATA8 *)(p))[3] +#define R_VAL(p) ((DATA8 *)(p))[2] +#define G_VAL(p) ((DATA8 *)(p))[1] +#define B_VAL(p) ((DATA8 *)(p))[0] + + void _ex_image_mouse_down(Etk_Object *object, void *event, void *data) { @@ -39,6 +54,8 @@ _ex_menu_item_new(EX_MENU_ITEM_SEPERATOR, NULL, -99, ETK_MENU_SHELL(e->menu), NULL, NULL); _ex_menu_item_new(EX_MENU_ITEM_NORMAL, _("Blur"), ETK_STOCK_NO_STOCK, ETK_MENU_SHELL(e->menu), ETK_CALLBACK(_ex_menu_blur_cb), e); _ex_menu_item_new(EX_MENU_ITEM_NORMAL, _("Sharpen"), ETK_STOCK_NO_STOCK, ETK_MENU_SHELL(e->menu), ETK_CALLBACK(_ex_menu_sharpen_cb), e); + _ex_menu_item_new(EX_MENU_ITEM_NORMAL, _("Brighten"), ETK_STOCK_NO_STOCK, ETK_MENU_SHELL(e->menu), ETK_CALLBACK(_ex_menu_brighten_cb), e); + //_ex_menu_item_new(EX_MENU_ITEM_NORMAL, _("Darken"), ETK_STOCK_NO_STOCK, ETK_MENU_SHELL(e->menu), ETK_CALLBACK(_ex_menu_darken_cb), e); _ex_menu_item_new(EX_MENU_ITEM_SEPERATOR, NULL, -99, ETK_MENU_SHELL(e->menu), NULL, NULL); _ex_menu_item_new(EX_MENU_ITEM_NORMAL, _("Set as wallpaper"), ETK_STOCK_NO_STOCK, ETK_MENU_SHELL(e->menu), ETK_CALLBACK(_ex_menu_set_wallpaper_cb), e); etk_menu_popup(e->menu); @@ -437,3 +454,129 @@ etk_widget_size_request_set(im, w, h); etk_widget_redraw_queue(im); } + +void +_ex_image_brightness(Etk_Image *im, int brightness) +{ + DATA32 *data, *p; + int w, h; + int i, j, x, y; + int val2; + DATA8 a, r, g, b; + DATA8 red_mapping[256]; + DATA8 green_mapping[256]; + DATA8 blue_mapping[256]; + DATA8 alpha_mapping[256]; + + if(im->use_edje) + return; + + for (i = 0; i < 256; i++) + { + red_mapping[i] = (DATA8) i; + green_mapping[i] = (DATA8) i; + blue_mapping[i] = (DATA8) i; + alpha_mapping[i] = (DATA8) i; + } + + etk_image_size_get(im, &w, &h); + data = evas_object_image_data_get(im->image_object, TRUE); + + for (i = 0; i < 256; i++) + { + val2 = (int)red_mapping[i] + brightness; + if (val2 < 0) + val2 = 0; + if (val2 > 255) + val2 = 255; + red_mapping[i] = (DATA8) val2; + + val2 = (int)green_mapping[i] + brightness; + if (val2 < 0) + val2 = 0; + if (val2 > 255) + val2 = 255; + green_mapping[i] = (DATA8) val2; + + val2 = (int)blue_mapping[i] + brightness; + if (val2 < 0) + val2 = 0; + if (val2 > 255) + val2 = 255; + blue_mapping[i] = (DATA8) val2; + + val2 = (int)alpha_mapping[i] + brightness; + if (val2 < 0) + val2 = 0; + if (val2 > 255) + val2 = 255; + alpha_mapping[i] = (DATA8) val2; + } + + for(i = 0; i < w - 1; i++) + { + for(j = 0; j < h - 1; j++) + { + p = &data[i + (w * j)]; + + R_VAL(p) = R_CMOD(R_VAL(p)); + G_VAL(p) = G_CMOD(G_VAL(p)); + B_VAL(p) = B_CMOD(B_VAL(p)); + A_VAL(p) = A_CMOD(A_VAL(p)); + } + } + + evas_object_image_data_set(im->image_object, data); + evas_object_image_data_update_add(im->image_object, 0, 0, w, h); +} + +void +_ex_image_brightness2(Etk_Image *im, int brightness) +{ + DATA32 *data, *data2, *pixel; + int w, h; + int i, j; + DATA8 a, r, g, b; + int light_transform[256]; + + if(im->use_edje) + return; + + printf("brightness = %d\n", brightness); + for(i=0; i<256; i++){ + light_transform[i] = i + brightness; + if(light_transform[i] > 255) + light_transform[i] = 255; + if(light_transform[i] < 0) + light_transform[i] = 0; + } + + etk_image_size_get(im, &w, &h); + data = evas_object_image_data_get(im->image_object, TRUE); + data2 = malloc(w * h * sizeof(DATA32)); + memcpy(data2, data, w * h * sizeof(DATA32)); + + for(i = 0; i < w - 1; i++) { + for(j = 0; j < h - 1; j++) { + pixel = &data[i + (w * j)]; + a = (*pixel >> 24) &0xff; + r = (*pixel >> 16) &0xff; + g = (*pixel >> 8) &0xff; + b = (*pixel) & 0xff; + + pixel = &data2[i + (w * j)]; + *pixel |= (light_transform[r] << 16); + *pixel |= (light_transform[g] << 8); + *pixel |= (light_transform[b]); + } + } + + evas_object_image_data_set(im->image_object, data2); + evas_object_image_data_update_add(im->image_object, 0, 0, w, h); +} + +void +_ex_image_contrast(Etk_Image *im, int contrast) +{ + +} =================================================================== RCS file: /cvsroot/enlightenment/e17/proto/exhibit/src/bin/exhibit_image.h,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- exhibit_image.h 14 Dec 2005 15:02:33 -0000 1.2 +++ exhibit_image.h 14 Dec 2005 23:27:12 -0000 1.3 @@ -10,6 +10,7 @@ void _ex_image_blur(Etk_Image *im); void _ex_image_sharpen(Etk_Image *im); void _ex_image_save(Etk_Image *im); -void _ex_image_zoom(Etk_Image *im, int zoom); +void _ex_image_zoom(Etk_Image *im, int zoom); +void _ex_image_brightness(Etk_Image *im, int brightness); #endif =================================================================== RCS file: /cvsroot/enlightenment/e17/proto/exhibit/src/bin/exhibit_main.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -3 -r1.6 -r1.7 --- exhibit_main.c 14 Dec 2005 22:05:17 -0000 1.6 +++ exhibit_main.c 14 Dec 2005 23:27:12 -0000 1.7 @@ -94,6 +94,8 @@ if(!r) return; e->zoom = 0; + e->brightness = 128; + e->contrast = 0; _ex_image_zoom(ETK_IMAGE(e->image), e->zoom); _ex_main_statusbar_zoom_update(e); @@ -472,6 +474,7 @@ _ex_menu_item_new(EX_MENU_ITEM_SEPERATOR, NULL, -99, ETK_MENU_SHELL(menu), NULL, NULL); _ex_menu_item_new(EX_MENU_ITEM_NORMAL, _("Blur"), ETK_STOCK_NO_STOCK, ETK_MENU_SHELL(menu), ETK_CALLBACK(_ex_menu_blur_cb), e); _ex_menu_item_new(EX_MENU_ITEM_NORMAL, _("Sharpen"), ETK_STOCK_NO_STOCK, ETK_MENU_SHELL(menu), ETK_CALLBACK(_ex_menu_sharpen_cb), e); + _ex_menu_item_new(EX_MENU_ITEM_NORMAL, _("Brighten"), ETK_STOCK_NO_STOCK, ETK_MENU_SHELL(menu), ETK_CALLBACK(_ex_menu_brighten_cb), e); _ex_menu_item_new(EX_MENU_ITEM_SEPERATOR, NULL, -99, ETK_MENU_SHELL(menu), NULL, NULL); _ex_menu_item_new(EX_MENU_ITEM_NORMAL, _("Set as wallpaper"), ETK_STOCK_NO_STOCK, ETK_MENU_SHELL(menu), ETK_CALLBACK(_ex_menu_set_wallpaper_cb), e); =================================================================== RCS file: /cvsroot/enlightenment/e17/proto/exhibit/src/bin/exhibit_menus.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- exhibit_menus.c 14 Dec 2005 15:34:28 -0000 1.4 +++ exhibit_menus.c 14 Dec 2005 23:27:12 -0000 1.5 @@ -221,6 +221,40 @@ } void +_ex_menu_brighten_cb(Etk_Object *obj, void *data) +{ + Exhibit *e; + Etk_Tree_Row *r; + EX_MENU_ITEM_GET_RETURN(obj); + + e = data; + r = etk_tree_selected_row_get(ETK_TREE(e->itree)); + if(!r) return; + + e->brightness += 10; + if(e->brightness > 255) + e->brightness = 255; + _ex_image_brightness(ETK_IMAGE(e->image), e->brightness); +} + +void +_ex_menu_darken_cb(Etk_Object *obj, void *data) +{ + Exhibit *e; + Etk_Tree_Row *r; + EX_MENU_ITEM_GET_RETURN(obj); + + e = data; + r = etk_tree_selected_row_get(ETK_TREE(e->itree)); + if(!r) return; + + e->brightness -= 10; + if(e->brightness < 0) + e->brightness = 0; + _ex_image_brightness(ETK_IMAGE(e->image), e->brightness); +} + +void _ex_menu_set_wallpaper_cb(Etk_Object *obj, void *data) { EX_MENU_ITEM_GET_RETURN(obj); =================================================================== RCS file: /cvsroot/enlightenment/e17/proto/exhibit/src/bin/exhibit_menus.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- exhibit_menus.h 14 Dec 2005 11:33:30 -0000 1.1 +++ exhibit_menus.h 14 Dec 2005 23:27:12 -0000 1.2 @@ -23,6 +23,8 @@ void _ex_menu_flip_vertical_cb(Etk_Object *obj, void *data); void _ex_menu_blur_cb(Etk_Object *obj, void *data); void _ex_menu_sharpen_cb(Etk_Object *obj, void *data); +void _ex_menu_brighten_cb(Etk_Object *obj, void *data); +void _ex_menu_darken_cb(Etk_Object *obj, void *data); void _ex_menu_set_wallpaper_cb(Etk_Object *obj, void *data); void _ex_menu_zoom_in_cb(Etk_Object *obj, void *data); void _ex_menu_zoom_out_cb(Etk_Object *obj, void *data); ------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Do you grep through log files for problems? Stop! Download the new AJAX search engine that makes searching your log files as easy as surfing the web. DOWNLOAD SPLUNK! http://ads.osdn.com/?ad_id=7637&alloc_id=16865&op=click _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs