Undo revision 23130 which was a merge with 2.5, a messy one because I did something...
[blender.git] / source / blender / editors / space_image / space_image.c
index 0b42fb0..1506df8 100644 (file)
@@ -47,6 +47,7 @@
 #include "BKE_colortools.h"
 #include "BKE_context.h"
 #include "BKE_image.h"
+#include "BKE_mesh.h"
 #include "BKE_screen.h"
 #include "BKE_utildefines.h"
 
 
 #include "image_intern.h"
 
+/* ******************** manage regions ********************* */
+
+ARegion *image_has_buttons_region(ScrArea *sa)
+{
+       ARegion *ar, *arnew;
+       
+       for(ar= sa->regionbase.first; ar; ar= ar->next)
+               if(ar->regiontype==RGN_TYPE_UI)
+                       return ar;
+       
+       /* add subdiv level; after header */
+       for(ar= sa->regionbase.first; ar; ar= ar->next)
+               if(ar->regiontype==RGN_TYPE_HEADER)
+                       break;
+       
+       /* is error! */
+       if(ar==NULL) return NULL;
+       
+       arnew= MEM_callocN(sizeof(ARegion), "buttons for image");
+       
+       BLI_insertlinkafter(&sa->regionbase, ar, arnew);
+       arnew->regiontype= RGN_TYPE_UI;
+       arnew->alignment= RGN_ALIGN_LEFT;
+       
+       arnew->flag = RGN_FLAG_HIDDEN;
+       
+       return arnew;
+}
+
 /* ******************** default callbacks for image space ***************** */
 
 static SpaceLink *image_new(const bContext *C)
@@ -95,15 +125,20 @@ static SpaceLink *image_new(const bContext *C)
        ar->regiontype= RGN_TYPE_HEADER;
        ar->alignment= RGN_ALIGN_BOTTOM;
        
+       /* buttons/list view */
+       ar= MEM_callocN(sizeof(ARegion), "buttons for image");
+       
+       BLI_addtail(&simage->regionbase, ar);
+       ar->regiontype= RGN_TYPE_UI;
+       ar->alignment= RGN_ALIGN_LEFT;
+       ar->flag = RGN_FLAG_HIDDEN;
+       
        /* main area */
        ar= MEM_callocN(sizeof(ARegion), "main area for image");
        
        BLI_addtail(&simage->regionbase, ar);
        ar->regiontype= RGN_TYPE_WINDOW;
        
-       /* channel list region XXX */
-
-       
        return (SpaceLink *)simage;
 }
 
@@ -147,12 +182,36 @@ void image_operatortypes(void)
        WM_operatortype_append(IMAGE_OT_view_zoom_out);
        WM_operatortype_append(IMAGE_OT_view_zoom_ratio);
 
+       WM_operatortype_append(IMAGE_OT_new);
+       WM_operatortype_append(IMAGE_OT_open);
+       WM_operatortype_append(IMAGE_OT_replace);
+       WM_operatortype_append(IMAGE_OT_reload);
+       WM_operatortype_append(IMAGE_OT_save);
+       WM_operatortype_append(IMAGE_OT_save_as);
+       WM_operatortype_append(IMAGE_OT_save_sequence);
+       WM_operatortype_append(IMAGE_OT_pack);
+       WM_operatortype_append(IMAGE_OT_unpack);
+
+       WM_operatortype_append(IMAGE_OT_sample);
+       WM_operatortype_append(IMAGE_OT_curves_point_set);
+
+       WM_operatortype_append(IMAGE_OT_record_composite);
+
        WM_operatortype_append(IMAGE_OT_toolbox);
+       WM_operatortype_append(IMAGE_OT_properties);
 }
 
 void image_keymap(struct wmWindowManager *wm)
 {
-       ListBase *keymap= WM_keymap_listbase(wm, "Image", SPACE_IMAGE, 0);
+       ListBase *keymap= WM_keymap_listbase(wm, "Image Generic", SPACE_IMAGE, 0);
+       
+       WM_keymap_add_item(keymap, "IMAGE_OT_new", NKEY, KM_PRESS, KM_ALT, 0);
+       WM_keymap_add_item(keymap, "IMAGE_OT_open", OKEY, KM_PRESS, KM_ALT, 0);
+       WM_keymap_add_item(keymap, "IMAGE_OT_reload", RKEY, KM_PRESS, KM_ALT, 0);
+       WM_keymap_add_item(keymap, "IMAGE_OT_save", SKEY, KM_PRESS, KM_ALT, 0);
+       WM_keymap_add_item(keymap, "IMAGE_OT_properties", NKEY, KM_PRESS, 0, 0);
+       
+       keymap= WM_keymap_listbase(wm, "Image", SPACE_IMAGE, 0);
        
        WM_keymap_add_item(keymap, "IMAGE_OT_view_all", HOMEKEY, KM_PRESS, 0, 0);
        WM_keymap_add_item(keymap, "IMAGE_OT_view_selected", PADPERIOD, KM_PRESS, 0, 0);
@@ -172,25 +231,35 @@ void image_keymap(struct wmWindowManager *wm)
        RNA_float_set(WM_keymap_add_item(keymap, "IMAGE_OT_view_zoom_ratio", PAD4, KM_PRESS, 0, 0)->ptr, "ratio", 0.25f);
        RNA_float_set(WM_keymap_add_item(keymap, "IMAGE_OT_view_zoom_ratio", PAD8, KM_PRESS, 0, 0)->ptr, "ratio", 0.125f);
 
+       WM_keymap_add_item(keymap, "PAINT_OT_image_paint", ACTIONMOUSE, KM_PRESS, 0, 0);
+       WM_keymap_add_item(keymap, "PAINT_OT_grab_clone", SELECTMOUSE, KM_PRESS, 0, 0);
+       WM_keymap_add_item(keymap, "PAINT_OT_sample_color", SELECTMOUSE, KM_PRESS, 0, 0);
+       RNA_enum_set(WM_keymap_add_item(keymap, "PAINT_OT_image_paint_radial_control", FKEY, KM_PRESS, 0, 0)->ptr, "mode", WM_RADIALCONTROL_SIZE);
+       RNA_enum_set(WM_keymap_add_item(keymap, "PAINT_OT_image_paint_radial_control", FKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "mode", WM_RADIALCONTROL_STRENGTH);
+
+       WM_keymap_add_item(keymap, "IMAGE_OT_sample", ACTIONMOUSE, KM_PRESS, 0, 0);
+       RNA_enum_set(WM_keymap_add_item(keymap, "IMAGE_OT_curves_point_set", ACTIONMOUSE, KM_PRESS, KM_CTRL, 0)->ptr, "point", 0);
+       RNA_enum_set(WM_keymap_add_item(keymap, "IMAGE_OT_curves_point_set", ACTIONMOUSE, KM_PRESS, KM_SHIFT, 0)->ptr, "point", 1);
+
        WM_keymap_add_item(keymap, "IMAGE_OT_toolbox", SPACEKEY, KM_PRESS, 0, 0);
 }
 
 static void image_refresh(const bContext *C, ScrArea *sa)
 {
-       SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C);
+       SpaceImage *sima= CTX_wm_space_image(C);
        Object *obedit= CTX_data_edit_object(C);
        Image *ima;
 
-       ima= get_space_image(sima);
+       ima= ED_space_image(sima);
 
        /* check if we have to set the image from the editmesh */
        if(ima && (ima->source==IMA_SRC_VIEWER || sima->pin));
        else if(obedit && obedit->type == OB_MESH) {
                Mesh *me= (Mesh*)obedit->data;
-               EditMesh *em= me->edit_mesh;
+               EditMesh *em= BKE_mesh_get_editmesh(me);
                MTFace *tf;
                
-               if(EM_texFaceCheck(em)) {
+               if(em && EM_texFaceCheck(em)) {
                        sima->image= ima= NULL;
                        
                        tf = EM_get_active_mtface(em, NULL, NULL, 1); /* partially selected face is ok */
@@ -201,15 +270,10 @@ static void image_refresh(const bContext *C, ScrArea *sa)
                                
                                if(sima->flag & SI_EDITTILE);
                                else sima->curtile= tf->tile;
-                               
-                               if(ima) {
-                                       if(tf->mode & TF_TILES)
-                                               ima->tpageflag |= IMA_TILES;
-                                       else
-                                               ima->tpageflag &= ~IMA_TILES;
-                               }
                        }
                }
+
+               BKE_mesh_end_editmesh(obedit->data, em);
        }
 }
 
@@ -227,19 +291,29 @@ static void image_listener(ScrArea *sa, wmNotifier *wmn)
                                        break;
                        }
                        break;
+               case NC_IMAGE:  
+                       ED_area_tag_redraw(sa);
+                       break;
+               case NC_OBJECT:
+                       switch(wmn->data) {
+                               case ND_GEOM_SELECT:
+                               case ND_GEOM_DATA:
+                                       ED_area_tag_redraw(sa);
+                                       break;
+                       }
        }
 }
 
-static int image_context(const bContext *C, bContextDataMember member, bContextDataResult *result)
+static int image_context(const bContext *C, const char *member, bContextDataResult *result)
 {
-       SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C);
+       SpaceImage *sima= CTX_wm_space_image(C);
 
-       if(member == CTX_DATA_EDIT_IMAGE) {
-               CTX_data_pointer_set(result, get_space_image(sima));
-               return 1;
+       if(CTX_data_dir(member)) {
+               static const char *dir[] = {"edit_image", NULL};
+               CTX_data_dir_set(result, dir);
        }
-       else if(member == CTX_DATA_EDIT_IMAGE_BUFFER) {
-               CTX_data_pointer_set(result, get_space_image_buffer(sima));
+       else if(CTX_data_equals(member, "edit_image")) {
+               CTX_data_id_pointer_set(result, (ID*)ED_space_image(sima));
                return 1;
        }
 
@@ -249,32 +323,32 @@ static int image_context(const bContext *C, bContextDataMember member, bContextD
 /************************** main region ***************************/
 
 /* sets up the fields of the View2D from zoom and offset */
-static void image_main_area_set_view2d(SpaceImage *sima, ARegion *ar)
+static void image_main_area_set_view2d(SpaceImage *sima, ARegion *ar, Scene *scene)
 {
-       Image *ima= get_space_image(sima);
+       Image *ima= ED_space_image(sima);
        float x1, y1, w, h;
        int width, height, winx, winy;
        
 #if 0
-       if(image_preview_active(curarea, &xim, &yim));
-       else if(sima->image) {
-               ImBuf *ibuf= imagewindow_get_ibuf(sima);
-               float xuser_asp, yuser_asp;
+       if(image_preview_active(curarea, &width, &height));
+#endif
+       if(sima->image) {
+               ImBuf *ibuf= ED_space_image_buffer(sima);
                
-               image_pixel_aspect(sima->image, &xuser_asp, &yuser_asp);
                if(ibuf) {
-                       xim= ibuf->x * xuser_asp;
-                       yim= ibuf->y * yuser_asp;
+                       width= ibuf->x;
+                       height= ibuf->y;
                }
-               else if( sima->image->type==IMA_TYPE_R_RESULT ) {
+               else if(sima->image->type==IMA_TYPE_R_RESULT) {
                        /* not very important, just nice */
-                       xim= (G.scene->r.xsch*G.scene->r.size)/100;
-                       yim= (G.scene->r.ysch*G.scene->r.size)/100;
+                       width= (scene->r.xsch*scene->r.size)/100;
+                       height= (scene->r.ysch*scene->r.size)/100;
                }
+               else
+                       ED_space_image_size(sima, &width, &height);
        }
-#endif
-
-       get_space_image_size(sima, &width, &height);
+       else
+               ED_space_image_size(sima, &width, &height);
 
        w= width;
        h= height;
@@ -295,7 +369,6 @@ static void image_main_area_set_view2d(SpaceImage *sima, ARegion *ar)
        ar->v2d.mask.ymax= winy;
 
        /* which part of the image space do we see? */
-       /* same calculation as in lrectwrite: area left and down*/
        x1= ar->winrct.xmin+(winx-sima->zoom*w)/2;
        y1= ar->winrct.ymin+(winy-sima->zoom*h)/2;
 
@@ -324,8 +397,18 @@ static void image_main_area_init(wmWindowManager *wm, ARegion *ar)
        
        // image space manages own v2d
        // UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_STANDARD, ar->winx, ar->winy);
+
+       /* image paint polls for mode */
+       keymap= WM_keymap_listbase(wm, "ImagePaint", SPACE_IMAGE, 0);
+       WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct);
+
+       /* XXX need context here?
+       keymap= WM_keymap_listbase(wm, "UVEdit", 0, 0);
+       WM_event_add_keymap_handler(&ar->handlers, keymap);*/
        
-       /* own keymap */
+       /* own keymaps */
+       keymap= WM_keymap_listbase(wm, "Image Generic", SPACE_IMAGE, 0);
+       WM_event_add_keymap_handler(&ar->handlers, keymap);
        keymap= WM_keymap_listbase(wm, "Image", SPACE_IMAGE, 0);
        WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct);
 }
@@ -333,7 +416,7 @@ static void image_main_area_init(wmWindowManager *wm, ARegion *ar)
 static void image_main_area_draw(const bContext *C, ARegion *ar)
 {
        /* draw entirely, view changes should be handled here */
-       SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C);
+       SpaceImage *sima= CTX_wm_space_image(C);
        Object *obedit= CTX_data_edit_object(C);
        Scene *scene= CTX_data_scene(C);
        View2D *v2d= &ar->v2d;
@@ -346,7 +429,7 @@ static void image_main_area_draw(const bContext *C, ARegion *ar)
        glClear(GL_COLOR_BUFFER_BIT);
        
        /* we set view2d from own zoom and offset each time */
-       image_main_area_set_view2d(sima, ar);
+       image_main_area_set_view2d(sima, ar, scene);
                
        /* we draw image in pixelspace */
        draw_image_main(sima, ar, scene);
@@ -354,6 +437,7 @@ static void image_main_area_draw(const bContext *C, ARegion *ar)
        /* and uvs in 0.0-1.0 space */
        UI_view2d_view_ortho(C, v2d);
        draw_uvedit_main(sima, ar, scene, obedit);
+       ED_region_draw_cb_draw(C, ar, REGION_DRAW_POST);
        UI_view2d_view_restore(C);
        
        /* scrollers? */
@@ -367,6 +451,7 @@ static void image_modal_keymaps(wmWindowManager *wm, ARegion *ar, int stype)
        ListBase *keymap;
        
        keymap= WM_keymap_listbase(wm, "UVEdit", 0, 0);
+
        if(stype==NS_EDITMODE_MESH)
                WM_event_add_keymap_handler(&ar->handlers, keymap);
        else
@@ -384,12 +469,32 @@ static void image_main_area_listener(ARegion *ar, wmNotifier *wmn)
                                        break;
                        }
                        break;
-               case NC_OBJECT:
-                       switch(wmn->data) {
-                               case ND_GEOM_SELECT:
-                                       ED_region_tag_redraw(ar);
-                                       break;
-                       }
+       }
+}
+
+/* *********************** buttons region ************************ */
+
+/* add handlers, stuff you only do once or on area/region changes */
+static void image_buttons_area_init(wmWindowManager *wm, ARegion *ar)
+{
+       ListBase *keymap;
+
+       ED_region_panels_init(wm, ar);
+       
+       keymap= WM_keymap_listbase(wm, "Image Generic", SPACE_IMAGE, 0);
+       WM_event_add_keymap_handler(&ar->handlers, keymap);
+}
+
+static void image_buttons_area_draw(const bContext *C, ARegion *ar)
+{
+       ED_region_panels(C, ar, 1, NULL, -1);
+}
+
+static void image_buttons_area_listener(ARegion *ar, wmNotifier *wmn)
+{
+       /* context changes */
+       switch(wmn->category) {
+               
        }
 }
 
@@ -398,11 +503,17 @@ static void image_main_area_listener(ARegion *ar, wmNotifier *wmn)
 /* add handlers, stuff you only do once or on area/region changes */
 static void image_header_area_init(wmWindowManager *wm, ARegion *ar)
 {
+#if 0
        UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_HEADER, ar->winx, ar->winy);
+#else
+       ED_region_header_init(ar);
+#endif
 }
 
 static void image_header_area_draw(const bContext *C, ARegion *ar)
 {
+       ED_region_header(C, ar);
+#if 0
        float col[3];
        
        /* clear */
@@ -421,6 +532,7 @@ static void image_header_area_draw(const bContext *C, ARegion *ar)
        
        /* restore view matrix? */
        UI_view2d_view_restore(C);
+#endif
 }
 
 /**************************** spacetype *****************************/
@@ -454,30 +566,41 @@ void ED_spacetype_image(void)
 
        BLI_addhead(&st->regiontypes, art);
        
+       /* regions: listview/buttons */
+       art= MEM_callocN(sizeof(ARegionType), "spacetype image region");
+       art->regionid = RGN_TYPE_UI;
+       art->minsizex= 220; // XXX
+       art->keymapflag= ED_KEYMAP_UI|ED_KEYMAP_FRAMES;
+       art->listener= image_buttons_area_listener;
+       art->init= image_buttons_area_init;
+       art->draw= image_buttons_area_draw;
+       BLI_addhead(&st->regiontypes, art);
+
+       image_buttons_register(art);
+
        /* regions: header */
        art= MEM_callocN(sizeof(ARegionType), "spacetype image region");
        art->regionid = RGN_TYPE_HEADER;
        art->minsizey= HEADERY;
        art->keymapflag= ED_KEYMAP_UI|ED_KEYMAP_VIEW2D|ED_KEYMAP_FRAMES;
-       
        art->init= image_header_area_init;
        art->draw= image_header_area_draw;
        
        BLI_addhead(&st->regiontypes, art);
        
-       
        BKE_spacetype_register(st);
 }
 
 /**************************** common state *****************************/
 
-Image *get_space_image(SpaceImage *sima)
+/* note; image_panel_properties() uses pointer to sima->image directly */
+Image *ED_space_image(SpaceImage *sima)
 {
        return sima->image;
 }
 
 /* called to assign images to UV faces */
-void set_space_image(SpaceImage *sima, Scene *scene, Object *obedit, Image *ima)
+void ED_space_image_set(bContext *C, SpaceImage *sima, Scene *scene, Object *obedit, Image *ima)
 {
        ED_uvedit_assign_image(scene, obedit, ima, sima->image);
 
@@ -490,9 +613,19 @@ void set_space_image(SpaceImage *sima, Scene *scene, Object *obedit, Image *ima)
 
        if(sima->image)
                BKE_image_signal(sima->image, &sima->iuser, IMA_SIGNAL_USER_NEW_IMAGE);
+
+       if(sima->image && sima->image->id.us==0)
+               sima->image->id.us= 1;
+
+       if(C) {
+               if(obedit)
+                       WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_DATA, obedit);
+
+               ED_area_tag_redraw(CTX_wm_area(C));
+       }
 }
 
-ImBuf *get_space_image_buffer(SpaceImage *sima)
+ImBuf *ED_space_image_buffer(SpaceImage *sima)
 {
        ImBuf *ibuf;
 
@@ -511,114 +644,138 @@ ImBuf *get_space_image_buffer(SpaceImage *sima)
        return NULL;
 }
 
-void get_space_image_size(SpaceImage *sima, int *width, int *height)
+void ED_image_size(Image *ima, int *width, int *height)
 {
        ImBuf *ibuf;
 
-       ibuf= get_space_image_buffer(sima);
+       ibuf= (ima)? BKE_image_get_ibuf(ima, NULL): NULL;
 
        if(ibuf && ibuf->x > 0 && ibuf->y > 0) {
                *width= ibuf->x;
                *height= ibuf->y;
        }
-       /* I know a bit weak... but preview uses not actual image size */
-       // XXX else if(image_preview_active(sima, width, height));
        else {
                *width= 256;
                *height= 256;
        }
 }
 
-void get_space_image_aspect(SpaceImage *sima, float *aspx, float *aspy)
+void ED_space_image_size(SpaceImage *sima, int *width, int *height)
 {
-       Image *ima;
+       ImBuf *ibuf;
 
-       ima= get_space_image(sima);
+       ibuf= ED_space_image_buffer(sima);
 
+       if(ibuf && ibuf->x > 0 && ibuf->y > 0) {
+               *width= ibuf->x;
+               *height= ibuf->y;
+       }
+       /* I know a bit weak... but preview uses not actual image size */
+       // XXX else if(image_preview_active(sima, width, height));
+       else {
+               *width= 256;
+               *height= 256;
+       }
+}
+
+void ED_image_aspect(Image *ima, float *aspx, float *aspy)
+{
        *aspx= *aspy= 1.0;
 
        if((ima == NULL) || (ima->type == IMA_TYPE_R_RESULT) || (ima->type == IMA_TYPE_COMPOSITE) ||
-          (ima->tpageflag & IMA_TILES) || (ima->aspx==0.0 || ima->aspy==0.0))
+          (ima->aspx==0.0 || ima->aspy==0.0))
                return;
 
        /* x is always 1 */
        *aspy = ima->aspy/ima->aspx;
 }
 
-void get_space_image_zoom(SpaceImage *sima, ARegion *ar, float *zoomx, float *zoomy)
+void ED_space_image_aspect(SpaceImage *sima, float *aspx, float *aspy)
+{
+       ED_image_aspect(ED_space_image(sima), aspx, aspy);
+}
+
+void ED_space_image_zoom(SpaceImage *sima, ARegion *ar, float *zoomx, float *zoomy)
 {
        int width, height;
 
-       get_space_image_size(sima, &width, &height);
+       ED_space_image_size(sima, &width, &height);
 
        *zoomx= (float)(ar->winrct.xmax - ar->winrct.xmin)/(float)((ar->v2d.cur.xmax - ar->v2d.cur.xmin)*width);
        *zoomy= (float)(ar->winrct.ymax - ar->winrct.ymin)/(float)((ar->v2d.cur.ymax - ar->v2d.cur.ymin)*height);
 }
 
-void get_space_image_uv_aspect(SpaceImage *sima, float *aspx, float *aspy)
+void ED_space_image_uv_aspect(SpaceImage *sima, float *aspx, float *aspy)
+{
+       int w, h;
+
+       ED_space_image_aspect(sima, aspx, aspy);
+       ED_space_image_size(sima, &w, &h);
+
+       *aspx *= (float)w/256.0f;
+       *aspy *= (float)h/256.0f;
+}
+
+void ED_image_uv_aspect(Image *ima, float *aspx, float *aspy)
 {
        int w, h;
 
-       get_space_image_aspect(sima, aspx, aspy);
-       get_space_image_size(sima, &w, &h);
+       ED_image_aspect(ima, aspx, aspy);
+       ED_image_size(ima, &w, &h);
 
        *aspx *= (float)w;
        *aspy *= (float)h;
 }
 
-int get_space_image_show_render(SpaceImage *sima)
+int ED_space_image_show_render(SpaceImage *sima)
 {
        return (sima->image && ELEM(sima->image->type, IMA_TYPE_R_RESULT, IMA_TYPE_COMPOSITE));
 }
 
-int get_space_image_show_paint(SpaceImage *sima)
+int ED_space_image_show_paint(SpaceImage *sima)
 {
-       if(get_space_image_show_render(sima))
+       if(ED_space_image_show_render(sima))
                return 0;
 
        return (sima->flag & SI_DRAWTOOL);
 }
 
-int get_space_image_show_uvedit(SpaceImage *sima, Object *obedit)
+int ED_space_image_show_uvedit(SpaceImage *sima, Object *obedit)
 {
-       if(get_space_image_show_render(sima))
+       if(ED_space_image_show_render(sima))
                return 0;
-       if(get_space_image_show_paint(sima))
+       if(ED_space_image_show_paint(sima))
                return 0;
 
-       if(obedit && obedit->type == OB_MESH)
-               return EM_texFaceCheck(((Mesh*)obedit->data)->edit_mesh);
+       if(obedit && obedit->type == OB_MESH) {
+               EditMesh *em = BKE_mesh_get_editmesh(obedit->data);
+               int ret;
+       
+               ret = EM_texFaceCheck(em);
+
+               BKE_mesh_end_editmesh(obedit->data, em);
+               return ret;
+       }
 
        return 0;
 }
 
-int get_space_image_show_uvshadow(SpaceImage *sima, Object *obedit)
+int ED_space_image_show_uvshadow(SpaceImage *sima, Object *obedit)
 {
-       if(get_space_image_show_render(sima))
+       if(ED_space_image_show_render(sima))
                return 0;
 
-       if(get_space_image_show_paint(sima))
-               if(obedit && obedit->type == OB_MESH)
-                       return EM_texFaceCheck(((Mesh*)obedit->data)->edit_mesh);
-
-       return 0;
-}
-
-/* Exported Functions */
+       if(ED_space_image_show_paint(sima))
+               if(obedit && obedit->type == OB_MESH) {
+                       EditMesh *em = BKE_mesh_get_editmesh(obedit->data);
+                       int ret;
 
-Image *ED_space_image(SpaceImage *sima)
-{
-       return get_space_image(sima);
-}
+                       ret = EM_texFaceCheck(em);
 
-void ED_space_image_size(SpaceImage *sima, int *width, int *height)
-{
-       get_space_image_size(sima, width, height);
-}
+                       BKE_mesh_end_editmesh(obedit->data, em);
+                       return ret;
+               }
 
-void ED_space_image_uv_aspect(SpaceImage *sima, float *aspx, float *aspy)
-{
-       get_space_image_uv_aspect(sima, aspx, aspy);
+       return 0;
 }
 
-