Revision: 49539
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=49539
Author:   campbellbarton
Date:     2012-08-03 20:56:04 +0000 (Fri, 03 Aug 2012)
Log Message:
-----------
fullscreen mask editing now works in the image space over a viewer node.

Modified Paths:
--------------
    trunk/blender/release/scripts/startup/bl_ui/space_image.py
    trunk/blender/source/blender/editors/include/ED_node.h
    trunk/blender/source/blender/editors/space_image/space_image.c
    trunk/blender/source/blender/editors/space_node/node_edit.c
    trunk/blender/source/blender/editors/space_node/node_intern.h
    trunk/blender/source/blender/editors/space_node/space_node.c
    trunk/blender/source/blender/editors/transform/transform_conversions.c

Modified: trunk/blender/release/scripts/startup/bl_ui/space_image.py
===================================================================
--- trunk/blender/release/scripts/startup/bl_ui/space_image.py  2012-08-03 
20:12:49 UTC (rev 49538)
+++ trunk/blender/release/scripts/startup/bl_ui/space_image.py  2012-08-03 
20:56:04 UTC (rev 49539)
@@ -430,7 +430,7 @@
             if ima.type == 'COMPOSITE' and ima.source in {'MOVIE', 'SEQUENCE'}:
                 row.operator("image.play_composite", icon='PLAY')
 
-        if show_uvedit or mode == 'PAINT':
+        if show_uvedit or show_maskedit or mode == 'PAINT':
             layout.prop(sima, "use_realtime_update", text="", icon_only=True, 
icon='LOCKED')
 
 

Modified: trunk/blender/source/blender/editors/include/ED_node.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_node.h      2012-08-03 
20:12:49 UTC (rev 49538)
+++ trunk/blender/source/blender/editors/include/ED_node.h      2012-08-03 
20:56:04 UTC (rev 49539)
@@ -41,6 +41,7 @@
 struct bNode;
 struct bNodeTree;
 struct ScrArea;
+struct Scene;
 struct View2D;
 
 typedef enum {
@@ -73,6 +74,8 @@
 void ED_node_post_apply_transform(struct bContext *C, struct bNodeTree *ntree);
 void ED_node_set_active(struct Main *bmain, struct bNodeTree *ntree, struct 
bNode *node);
 
+void ED_node_composite_job(const bContext *C, struct bNodeTree *nodetree, 
struct Scene *scene_owner);
+
 /* node ops.c */
 void ED_operatormacros_node(void);
 

Modified: trunk/blender/source/blender/editors/space_image/space_image.c
===================================================================
--- trunk/blender/source/blender/editors/space_image/space_image.c      
2012-08-03 20:12:49 UTC (rev 49538)
+++ trunk/blender/source/blender/editors/space_image/space_image.c      
2012-08-03 20:56:04 UTC (rev 49539)
@@ -46,12 +46,14 @@
 #include "BKE_screen.h"
 #include "BKE_tessmesh.h"
 #include "BKE_sequencer.h"
+#include "BKE_node.h"
 
 #include "IMB_imbuf_types.h"
 
 #include "ED_image.h"
 #include "ED_mask.h"
 #include "ED_mesh.h"
+#include "ED_node.h"
 #include "ED_space_api.h"
 #include "ED_screen.h"
 #include "ED_uvedit.h"
@@ -341,11 +343,14 @@
        WM_dropbox_add(lb, "IMAGE_OT_open", image_drop_poll, image_drop_copy);
 }
 
-
-static void image_refresh(const bContext *C, ScrArea *UNUSED(sa))
+/**
+ * \note take care not to get into feedback loop here,
+ *       calling composite job causes viewer to refresh.
+ */
+static void image_refresh(const bContext *C, ScrArea *sa)
 {
        Scene *scene = CTX_data_scene(C);
-       SpaceImage *sima = CTX_wm_space_image(C);
+       SpaceImage *sima = sa->spacedata.first;
        Object *obedit = CTX_data_edit_object(C);
        Image *ima;
 
@@ -354,7 +359,17 @@
        BKE_image_user_check_frame_calc(&sima->iuser, scene->r.cfra, 0);
        
        /* check if we have to set the image from the editmesh */
-       if (ima && (ima->source == IMA_SRC_VIEWER || sima->pin)) ;
+       if (ima && (ima->source == IMA_SRC_VIEWER && sima->mode == 
SI_MODE_MASK)) {
+               if (sima->lock) {
+                       Mask *mask = ED_space_image_get_mask(sima);
+                       if (mask) {
+                               ED_node_composite_job(C, scene->nodetree, 
scene);
+                       }
+               }
+       }
+       else if (ima && (ima->source == IMA_SRC_VIEWER || sima->pin)) {
+               /* pass */
+       }
        else if (obedit && obedit->type == OB_MESH) {
                Mesh *me = (Mesh *)obedit->data;
                struct BMEditMesh *em = me->edit_btmesh;
@@ -396,6 +411,9 @@
 static void image_listener(ScrArea *sa, wmNotifier *wmn)
 {
        SpaceImage *sima = (SpaceImage *)sa->spacedata.first;
+
+       /* grr, prevent feedback loop */
+       const int show_mask = (sima->image && (sima->image->source == 
IMA_SRC_VIEWER && sima->mode == SI_MODE_MASK));
        
        /* context changes */
        switch (wmn->category) {
@@ -404,15 +422,16 @@
                                case ND_FRAME:
                                        image_scopes_tag_refresh(sa);
                                        ED_area_tag_refresh(sa);
-                                       ED_area_tag_redraw(sa);                 
                
+                                       ED_area_tag_redraw(sa);
                                        break;
                                case ND_MODE:
                                case ND_RENDER_RESULT:
                                case ND_COMPO_RESULT:
                                        if (ED_space_image_show_render(sima))
                                                image_scopes_tag_refresh(sa);
-                                       ED_area_tag_refresh(sa);
-                                       ED_area_tag_redraw(sa);                 
                
+                                       if (!show_mask)
+                                               ED_area_tag_refresh(sa);
+                                       ED_area_tag_redraw(sa);
                                        break;
                        }
                        break;
@@ -436,9 +455,13 @@
                        if (sima->mode == SI_MODE_MASK) {
                                switch (wmn->data) {
                                        case ND_SELECT:
+                                               ED_area_tag_redraw(sa);
+                                               break;
                                        case ND_DATA:
                                        case ND_DRAW:
+                                               /* causes node-recalc */
                                                ED_area_tag_redraw(sa);
+                                               ED_area_tag_refresh(sa);
                                                break;
                                }
                                switch (wmn->action) {
@@ -446,7 +469,9 @@
                                                ED_area_tag_redraw(sa);
                                                break;
                                        case NA_EDITED:
+                                               /* causes node-recalc */
                                                ED_area_tag_redraw(sa);
+                                               ED_area_tag_refresh(sa);
                                                break;
                                }
                        }

Modified: trunk/blender/source/blender/editors/space_node/node_edit.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/node_edit.c 2012-08-03 
20:12:49 UTC (rev 49538)
+++ trunk/blender/source/blender/editors/space_node/node_edit.c 2012-08-03 
20:56:04 UTC (rev 49539)
@@ -163,26 +163,31 @@
 
 }
 
-void snode_composite_job(const bContext *C, ScrArea *sa)
+/**
+ * \param sa_owner is the owner of the job,
+ * we don't use it for anything else currently so could also be a void pointer,
+ * but for now keep it an 'Scene' for consistency.
+ *
+ * \note only call from spaces `refresh` callbacks, not direct! - use with 
care.
+ */
+void ED_node_composite_job(const bContext *C, struct bNodeTree *nodetree, 
Scene *scene_owner)
 {
-       SpaceNode *snode = sa->spacedata.first;
        wmJob *steve;
        CompoJob *cj;
 
-       steve = WM_jobs_get(CTX_wm_manager(C), CTX_wm_window(C), sa, 
"Compositing", WM_JOB_EXCL_RENDER | WM_JOB_PROGRESS);
+       steve = WM_jobs_get(CTX_wm_manager(C), CTX_wm_window(C), scene_owner, 
"Compositing", WM_JOB_EXCL_RENDER | WM_JOB_PROGRESS);
        cj = MEM_callocN(sizeof(CompoJob), "compo job");
-       
+
        /* customdata for preview thread */
        cj->scene = CTX_data_scene(C);
-       cj->ntree = snode->nodetree;
-       
+       cj->ntree = nodetree;
+
        /* setup job */
        WM_jobs_customdata(steve, cj, compo_freejob);
        WM_jobs_timer(steve, 0.1, NC_SCENE, NC_SCENE | ND_COMPO_RESULT);
        WM_jobs_callbacks(steve, compo_startjob, compo_initjob, 
compo_updatejob, NULL);
-       
+
        WM_jobs_start(CTX_wm_manager(C), steve);
-       
 }
 
 /* ***************************************** */

Modified: trunk/blender/source/blender/editors/space_node/node_intern.h
===================================================================
--- trunk/blender/source/blender/editors/space_node/node_intern.h       
2012-08-03 20:12:49 UTC (rev 49538)
+++ trunk/blender/source/blender/editors/space_node/node_intern.h       
2012-08-03 20:56:04 UTC (rev 49539)
@@ -169,7 +169,7 @@
 void snode_dag_update(bContext *C, SpaceNode *snode);
 void snode_set_context(SpaceNode *snode, Scene *scene);
 void snode_make_group_editable(SpaceNode *snode, bNode *gnode);
-void snode_composite_job(const struct bContext *C, ScrArea *sa);
+
 bNode *node_tree_get_editgroup(bNodeTree *ntree);
 void snode_update(struct SpaceNode *snode, struct bNode *node);
 bNode *editnode_get_active(bNodeTree *ntree);

Modified: trunk/blender/source/blender/editors/space_node/space_node.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/space_node.c        
2012-08-03 20:12:49 UTC (rev 49538)
+++ trunk/blender/source/blender/editors/space_node/space_node.c        
2012-08-03 20:56:04 UTC (rev 49539)
@@ -46,8 +46,8 @@
 
 #include "ED_render.h"
 #include "ED_screen.h"
+#include "ED_node.h"
 
-
 #include "WM_api.h"
 #include "WM_types.h"
 
@@ -289,8 +289,9 @@
                                        snode->recalc = 0;
                                        node_render_changed_exec((struct 
bContext *)C, NULL);
                                }
-                               else
-                                       snode_composite_job(C, sa);
+                               else {
+                                       ED_node_composite_job(C, 
snode->nodetree, scene);
+                               }
                        }
                }
                else if (snode->treetype == NTREE_TEXTURE) {

Modified: trunk/blender/source/blender/editors/transform/transform_conversions.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform_conversions.c      
2012-08-03 20:12:49 UTC (rev 49538)
+++ trunk/blender/source/blender/editors/transform/transform_conversions.c      
2012-08-03 20:56:04 UTC (rev 49539)
@@ -4983,8 +4983,9 @@
        if (t->scene->nodetree) {
                /* tracks can be used for stabilization nodes,
                 * flush update for such nodes */
-               nodeUpdateID(t->scene->nodetree, &mask->id);
-               WM_event_add_notifier(C, NC_SCENE | ND_NODES, NULL);
+               //if (nodeUpdateID(t->scene->nodetree, &mask->id)) {
+                       WM_event_add_notifier(C, NC_MASK | ND_DATA, &mask->id);
+               //}
        }
 
        /* TODO - dont key all masks... */

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to