screen capture by clientmessage, replace imagelist icon to evas obj
authorHyoyoung Chang <hyoyoung.chang@samsung.com>
Tue, 23 Nov 2010 12:08:19 +0000 (21:08 +0900)
committerHyoyoung Chang <hyoyoung.chang@samsung.com>
Tue, 23 Nov 2010 12:08:19 +0000 (21:08 +0900)
data/themes/cbhmdrawer.edc
src/clipdrawer.c
src/scrcapture.c
src/scrcapture.h
src/xcnphandler.c

index e932729..6426fb1 100644 (file)
@@ -113,8 +113,10 @@ collections
                                description
                                {
                                        state: "default" 0.0;
-                                       rel1 { relative: 0.0916666666 0.0656716418; to: background; }
-                                       rel2 { relative: 1.0 .3771493537; to: background; }
+                                       //rel1 { relative: 0.0916666666 0.0656716418; to: background; }
+                                       //rel2 { relative: 1.0 .3771493537; to: background; }
+                                       rel1 { relative: 0.0916666666 0.1056716418; to: background; }
+                                       rel2 { relative: 1.0 0.4171493537; to: background; }
                                        color: 0 0 0 0;
                                }
                        }
index da41395..dfa9b6a 100644 (file)
@@ -148,10 +148,66 @@ Evas_Object* _grid_icon_get(const void *data, Evas_Object *obj, const char *part
        gridimgitem_t *ti = (gridimgitem_t *)data;
        if (!strcmp(part, "elm.swallow.icon"))
        {
+/*
                Evas_Object *icon = elm_icon_add(obj);
                elm_icon_file_set(icon, ti->path, NULL);
                evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
                evas_object_show(icon);
+*/
+               Ecore_Evas *my_ee;
+               Evas *my_e;
+               Evas_Object *fgimg;
+               Evas_Object *bgrect;
+               Evas_Object *delbtn;
+               Evas_Object *icon;
+               my_ee = ecore_evas_buffer_new(GRID_ITEM_SIZE, GRID_ITEM_SIZE);
+               my_e = ecore_evas_get(my_ee);
+
+               bgrect = evas_object_rectangle_add(my_e);
+               evas_object_color_set(bgrect, 119, 116, 100, 255);
+               evas_object_resize(bgrect, GRID_ITEM_SIZE, GRID_ITEM_SIZE);
+               evas_object_move(bgrect, 0, 0);
+               evas_object_show(bgrect);
+
+               #define BORDER_SIZE 10
+               fgimg = evas_object_image_add(my_e);
+               evas_object_image_load_size_set(fgimg, GRID_ITEM_SIZE-BORDER_SIZE*2, GRID_ITEM_SIZE-BORDER_SIZE*2);
+               evas_object_image_file_set(fgimg, ti->path, NULL);
+               evas_object_image_fill_set(fgimg, 0, 0, GRID_ITEM_SIZE-BORDER_SIZE*2, GRID_ITEM_SIZE-BORDER_SIZE*2);
+               evas_object_image_filled_set(fgimg, 1);
+               evas_object_resize(fgimg, GRID_ITEM_SIZE-BORDER_SIZE*2, GRID_ITEM_SIZE-BORDER_SIZE*2);
+               evas_object_move(fgimg, BORDER_SIZE, BORDER_SIZE);
+               evas_object_show(fgimg);
+
+/*
+               if (delete_mode)
+               {
+                       delbtn = evas_object_image_add(my_e);
+                       evas_object_image_load_size_set(delbtn, 33, 33);
+                       evas_object_image_file_set(delbtn, DELETE_ICON_PATH, NULL);
+                       evas_object_image_fill_set(delbtn, 0, 0, 33, 33);
+                       evas_object_image_filled_set(delbtn, 1);
+                       evas_object_resize(delbtn, 33, 33);
+                       evas_object_move(delbtn, 55, 38);
+                       evas_object_show(delbtn);
+               }
+*/
+       
+               icon = evas_object_image_add(evas_object_evas_get(obj));
+
+               evas_object_image_data_set(icon, NULL);
+               evas_object_image_size_set(icon, GRID_ITEM_SIZE, GRID_ITEM_SIZE);
+               evas_object_image_fill_set(icon, 0, 0, GRID_ITEM_SIZE, GRID_ITEM_SIZE);
+               evas_object_image_filled_set(icon, EINA_TRUE);
+               evas_object_image_data_copy_set(icon, (int *)ecore_evas_buffer_pixels_get(my_ee));
+               evas_object_image_data_update_add(icon, 0, 0, GRID_ITEM_SIZE, GRID_ITEM_SIZE);
+
+               evas_object_del(bgrect);
+               evas_object_del(fgimg);
+               if (delete_mode)
+                       evas_object_del(delbtn);
+               ecore_evas_free(my_ee);
+
                return icon;
        }
        else if (!strcmp(part, "elm.swallow.end") && delete_mode)
@@ -377,6 +433,21 @@ int clipdrawer_add_image_item(char *imagepath)
 
        igl = elm_gengrid_items_get(ad->imggrid);
        igl_counter = eina_list_count(igl);
+
+       Eina_List *l;
+       Elm_Gengrid_Item *item;
+       gridimgitem_t *ti = NULL;
+
+       EINA_LIST_FOREACH(igl, l, item)
+       {
+               ti = elm_gengrid_item_data_get(item);
+               if (!strcmp(ti->path, imagepath))
+               {
+                       DTRACE("Error : duplicated file path = %s\n", imagepath);
+                       return -1;
+               }
+       }
+
        if (igl_counter >= HISTORY_QUEUE_MAX_IMG_ITEMS)
        {
                elm_gengrid_item_del(eina_list_data_get(eina_list_last(igl)));
@@ -484,7 +555,7 @@ int clipdrawer_create_view(void *data)
 
        // for debug
        // at starting, showing app view
-       //clipdrawer_activate_view(ad);
+       // clipdrawer_activate_view(ad);
 
        return 0;
 }
index 7f65dc4..0cc68d3 100644 (file)
@@ -66,7 +66,7 @@ static Eina_Bool _scrcapture_capture_postprocess(void* data)
        return EINA_FALSE;
 }
 
-static Eina_Bool capture_current_screen(void *data)
+Eina_Bool capture_current_screen(void *data)
 {
        struct appdata *ad = data;
 
index 4ec527d..e271654 100644 (file)
@@ -12,6 +12,7 @@ const char* createScreenShot(int width, int height);
 void releaseScreenShot(const char *ss);
 // XV extension API - end
 
+Eina_Bool capture_current_screen(void *data);
 char *scrcapture_capture_screen_by_x11(Window xid, int *size);
 char *scrcapture_capture_screen_by_xv_ext(int width, int height);
 void scrcapture_release_screen_by_xv_ext(const char *s);
index 7ab5a82..34ffca7 100755 (executable)
@@ -211,6 +211,7 @@ int get_selection_content(void *data)
                                           AnyPropertyType, &cbtype, &cbformat, &cbitems, &cbsize, &cbbuf);
        XDeleteProperty(g_disp, g_evtwin, atomCBOut);
 
+/*
        unesc = clipdrawer_get_plain_string_from_escaped(cbbuf);
        if (unesc != NULL)
        {
@@ -232,13 +233,48 @@ int get_selection_content(void *data)
        }
        else
                unesc_len = 0;
+*/
 
 //     add_to_storage_buffer(ad, cbbuf, cbitems);
 //     DTRACE("len = %ld, data = %s\n", cbitems, cbbuf);
 
+       if (cbbuf != NULL)
+       {
+               unesc_len = strlen(cbbuf);
+               // FIXME: invent more clever way to right trim the string
+               for (i = unesc_len-1; i > 0; i--)
+               {
+                       // avoid control characters
+                       if (cbbuf[i] >= 0x01 && cbbuf[i] <= 0x1F)
+                               continue;
+                       else
+                       {
+                               DTRACE("before right trim len = %d\n", unesc_len);
+                               unesc_len = i+1;
+                               DTRACE("after right trim len = %d\n", unesc_len);
+                               break;
+                       }
+               }
+       }
+       else
+               unesc_len = 0;
+
+       if (!strncmp(cbbuf, "file://", 7) && 
+               (strcasestr(cbbuf,".png") || strcasestr(cbbuf,".jpg") || strcasestr(cbbuf,".bmp")) &&
+               check_regular_file(cbbuf+7))
+       {
+               DTRACE("clipdrawer add path = %s\n", cbbuf+7);
+               clipdrawer_add_image_item(cbbuf+7);
+       }
+       else
+               add_to_storage_buffer(ad, cbbuf, unesc_len);
+       DTRACE("len = %ld, data = %s\n", unesc_len, cbbuf);
+
+
        /* FIXME : it needs two verification. 
                1. does the file exist?
                2. dose the file wanted type? */
+/*
        if (!strncmp(unesc, "file://", 7) && 
                (strcasestr(unesc,".png") || strcasestr(unesc,".jpg") || strcasestr(unesc,".bmp")) &&
                check_regular_file(unesc+7))
@@ -250,6 +286,7 @@ int get_selection_content(void *data)
                add_to_storage_buffer(ad, unesc, unesc_len);
        DTRACE("len = %ld, data = %s\n", unesc_len, unesc);
        free(unesc);
+*/
 
        DTRACE("\n");
        print_storage_buffer();
@@ -365,6 +402,7 @@ static int _cbhm_init(void *data)
        ecore_x_netwm_name_set(g_evtwin, CLIPBOARD_MANAGER_WINDOW_TITLE_STRING);
 
        XSelectInput(g_disp, g_evtwin, PropertyChangeMask);
+       XSelectInput(g_disp, g_rootwin, StructureNotifyMask);
 //     ecore_x_window_show(g_evtwin);
        ecore_x_flush();
 
@@ -454,11 +492,21 @@ static int _xclient_msg_cb(void *data, int ev_type, void *event)
 
        Atom atomCBHM_MSG = XInternAtom(g_disp, "CBHM_MSG", False);
        Atom atomCBHM_cRAW = XInternAtom(g_disp, "CBHM_cRAW", False);
+       Atom atomXKey_MSG = XInternAtom(g_disp, "_XKEY_COMPOSITION", False);
        char atomname[10];
        Atom cbhm_atoms[HISTORY_QUEUE_MAX_TXT_ITEMS];
        Ecore_X_Window reqwin = ev->win;
        int i, pos;
 
+       if (ev->message_type == atomXKey_MSG)
+       {
+               DTRACE("XE:ClientMessage for Screen capture\n");
+
+               capture_current_screen(ad);
+
+               return TRUE;
+       }
+
        if (ev->message_type != atomCBHM_MSG)
                return -1;