Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2012-08-04 00:56:04 +0400
committerCampbell Barton <ideasman42@gmail.com>2012-08-04 00:56:04 +0400
commit84df85164d4d869d0830ea23467bcd0e1f127d48 (patch)
tree98ba7108ae538532dec5700171e857e1d5078a1e /source/blender/editors/space_image/space_image.c
parent1d5b2ea253b3e8a60a33e071d4da42508b492c9b (diff)
fullscreen mask editing now works in the image space over a viewer node.
Diffstat (limited to 'source/blender/editors/space_image/space_image.c')
-rw-r--r--source/blender/editors/space_image/space_image.c39
1 files changed, 32 insertions, 7 deletions
diff --git a/source/blender/editors/space_image/space_image.c b/source/blender/editors/space_image/space_image.c
index f97813d3dd3..0007ef2ef77 100644
--- a/source/blender/editors/space_image/space_image.c
+++ b/source/blender/editors/space_image/space_image.c
@@ -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 @@ static void image_dropboxes(void)
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 @@ static void image_refresh(const bContext *C, ScrArea *UNUSED(sa))
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_refresh(const bContext *C, ScrArea *UNUSED(sa))
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 @@ static void image_listener(ScrArea *sa, wmNotifier *wmn)
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 @@ static void image_listener(ScrArea *sa, wmNotifier *wmn)
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 @@ static void image_listener(ScrArea *sa, wmNotifier *wmn)
ED_area_tag_redraw(sa);
break;
case NA_EDITED:
+ /* causes node-recalc */
ED_area_tag_redraw(sa);
+ ED_area_tag_refresh(sa);
break;
}
}