static int paintcurve_cursor_invoke(bContext *C, wmOperator *UNUSED(op), const wmEvent *event) { ePaintMode mode = BKE_paintmode_get_active_from_context(C); switch (mode) { case PAINT_MODE_TEXTURE_2D: { ARegion *ar = CTX_wm_region(C); SpaceImage *sima = CTX_wm_space_image(C); float location[2]; if (!sima) { return OPERATOR_CANCELLED; } UI_view2d_region_to_view( &ar->v2d, event->mval[0], event->mval[1], &location[0], &location[1]); copy_v2_v2(sima->cursor, location); WM_event_add_notifier(C, NC_SPACE | ND_SPACE_IMAGE, NULL); break; } default: ED_view3d_cursor3d_update(C, event->mval, true, V3D_CURSOR_ORIENT_VIEW); break; } return OPERATOR_FINISHED; }
bool paint_curve_poll(bContext *C) { Object *ob = CTX_data_active_object(C); Paint *p; RegionView3D *rv3d = CTX_wm_region_view3d(C); SpaceImage *sima; if (rv3d && !(ob && ((ob->mode & OB_MODE_ALL_PAINT) != 0))) { return false; } sima = CTX_wm_space_image(C); if (sima && sima->mode != SI_MODE_PAINT) { return false; } p = BKE_paint_get_active_from_context(C); if (p && p->brush && (p->brush->flag & BRUSH_CURVE)) { return true; } return false; }
int ED_space_image_maskedit_mask_poll(bContext *C) { if (ED_space_image_maskedit_poll(C)) { SpaceImage *sima = CTX_wm_space_image(C); return sima->mask_info.mask != NULL; } return false; }
int ED_space_image_maskedit_poll(bContext *C) { SpaceImage *sima = CTX_wm_space_image(C); if (sima) { Scene *scene = CTX_data_scene(C); return ED_space_image_check_show_maskedit(scene, sima); } return false; }
static int ui_id_brush_get_icon(const bContext *C, ID *id) { Brush *br = (Brush *)id; if (br->flag & BRUSH_CUSTOM_ICON) { BKE_icon_id_ensure(id); ui_id_brush_render(C, id); } else { Object *ob = CTX_data_active_object(C); SpaceImage *sima; EnumPropertyItem *items = NULL; int tool, mode = 0; /* XXX: this is not nice, should probably make brushes * be strictly in one paint mode only to avoid * checking various context stuff here */ if (CTX_wm_view3d(C) && ob) { if (ob->mode & OB_MODE_SCULPT) mode = OB_MODE_SCULPT; else if (ob->mode & (OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT)) mode = OB_MODE_VERTEX_PAINT; else if (ob->mode & OB_MODE_TEXTURE_PAINT) mode = OB_MODE_TEXTURE_PAINT; } else if ((sima = CTX_wm_space_image(C)) && (sima->mode == SI_MODE_PAINT)) { mode = OB_MODE_TEXTURE_PAINT; } /* reset the icon */ if (mode == OB_MODE_SCULPT) { items = brush_sculpt_tool_items; tool = br->sculpt_tool; } else if (mode == OB_MODE_VERTEX_PAINT) { items = brush_vertex_tool_items; tool = br->vertexpaint_tool; } else if (mode == OB_MODE_TEXTURE_PAINT) { items = brush_image_tool_items; tool = br->imagepaint_tool; } if (!items || !RNA_enum_icon_from_value(items, tool, &id->icon_id)) id->icon_id = 0; } return id->icon_id; }
bool ED_space_image_paint_curve(const bContext *C) { SpaceImage *sima = CTX_wm_space_image(C); if (sima && sima->mode == SI_MODE_PAINT) { Brush *br = CTX_data_tool_settings(C)->imapaint.paint.brush; if (br && (br->flag & BRUSH_CURVE)) return true; } return false; }
static int image_panel_poll(const bContext *C, PanelType *UNUSED(pt)) { SpaceImage *sima = CTX_wm_space_image(C); ImBuf *ibuf; void *lock; int result; ibuf = ED_space_image_acquire_buffer(sima, &lock); result = ibuf && ibuf->rect_float; ED_space_image_release_buffer(sima, lock); return result; }
PaintMode BKE_paintmode_get_active_from_context(const bContext *C) { Scene *sce = CTX_data_scene(C); SpaceImage *sima; if (sce) { ToolSettings *ts = sce->toolsettings; Object *obact = NULL; if (sce->basact && sce->basact->object) obact = sce->basact->object; if ((sima = CTX_wm_space_image(C)) != NULL) { if (obact && obact->mode == OB_MODE_EDIT) { if (sima->mode == SI_MODE_PAINT) return PAINT_TEXTURE_2D; else if (ts->use_uv_sculpt) return PAINT_SCULPT_UV; } else { return PAINT_TEXTURE_2D; } } else if (obact) { switch (obact->mode) { case OB_MODE_SCULPT: return PAINT_SCULPT; case OB_MODE_VERTEX_PAINT: return PAINT_VERTEX; case OB_MODE_WEIGHT_PAINT: return PAINT_WEIGHT; case OB_MODE_TEXTURE_PAINT: return PAINT_TEXTURE_PROJECTIVE; case OB_MODE_EDIT: if (ts->use_uv_sculpt) return PAINT_SCULPT_UV; else return PAINT_TEXTURE_2D; } } else { /* default to image paint */ return PAINT_TEXTURE_2D; } } return PAINT_INVALID; }
Paint *BKE_paint_get_active_from_context(const bContext *C) { Scene *sce = CTX_data_scene(C); SpaceImage *sima; if (sce) { ToolSettings *ts = sce->toolsettings; Object *obact = NULL; if (sce->basact && sce->basact->object) obact = sce->basact->object; if ((sima = CTX_wm_space_image(C)) != NULL) { if (obact && obact->mode == OB_MODE_EDIT) { if (sima->mode == SI_MODE_PAINT) return &ts->imapaint.paint; else if (ts->use_uv_sculpt) return &ts->uvsculpt->paint; } else { return &ts->imapaint.paint; } } else if (obact) { switch (obact->mode) { case OB_MODE_SCULPT: return &ts->sculpt->paint; case OB_MODE_VERTEX_PAINT: return &ts->vpaint->paint; case OB_MODE_WEIGHT_PAINT: return &ts->wpaint->paint; case OB_MODE_TEXTURE_PAINT: return &ts->imapaint.paint; case OB_MODE_EDIT: if (ts->use_uv_sculpt) return &ts->uvsculpt->paint; else return &ts->imapaint.paint; } } else { /* default to image paint */ return &ts->imapaint.paint; } } return NULL; }
void draw_image_cache(const bContext *C, ARegion *ar) { SpaceImage *sima = CTX_wm_space_image(C); Scene *scene = CTX_data_scene(C); Image *image = ED_space_image(sima); float x, cfra = CFRA, sfra = SFRA, efra = EFRA, framelen = ar->winx / (efra - sfra + 1); Mask *mask = NULL; if (!ED_space_image_show_cache(sima)) { return; } if (sima->mode == SI_MODE_MASK) { mask = ED_space_image_get_mask(sima); } glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); /* Draw cache background. */ ED_region_cache_draw_background(ar); /* Draw cached segments. */ if (image != NULL && image->cache != NULL && ELEM(image->source, IMA_SRC_SEQUENCE, IMA_SRC_MOVIE)) { int num_segments = 0; int *points = NULL; IMB_moviecache_get_cache_segments(image->cache, IMB_PROXY_NONE, 0, &num_segments, &points); ED_region_cache_draw_cached_segments(ar, num_segments, points, sfra + sima->iuser.offset, efra + sima->iuser.offset); } glDisable(GL_BLEND); /* Draw current frame. */ x = (cfra - sfra) / (efra - sfra + 1) * ar->winx; UI_ThemeColor(TH_CFRAME); glRecti(x, 0, x + ceilf(framelen), 8 * UI_DPI_FAC); ED_region_cache_draw_curfra_label(cfra, x, 8.0f * UI_DPI_FAC); if (mask != NULL) { ED_mask_draw_frames(mask, ar, cfra, sfra, efra); } }
int UI_drop_color_poll(struct bContext *C, wmDrag *drag, const wmEvent *UNUSED(event)) { /* should only return true for regions that include buttons, for now * return true always */ if (drag->type == WM_DRAG_COLOR) { SpaceImage *sima = CTX_wm_space_image(C); ARegion *ar = CTX_wm_region(C); if (UI_but_active_drop_color(C)) return 1; if (sima && (sima->mode == SI_MODE_PAINT) && sima->image && (ar && ar->regiontype == RGN_TYPE_WINDOW)) { return 1; } } return 0; }
void *paint_2d_new_stroke(bContext *C, wmOperator *op, int mode) { Scene *scene = CTX_data_scene(C); ToolSettings *settings = scene->toolsettings; Brush *brush = BKE_paint_brush(&settings->imapaint.paint); ImagePaintState *s = MEM_callocN(sizeof(ImagePaintState), "ImagePaintState"); s->sima = CTX_wm_space_image(C); s->v2d = &CTX_wm_region(C)->v2d; s->scene = scene; s->screen = CTX_wm_screen(C); s->brush = brush; s->tool = brush->imagepaint_tool; s->blend = brush->blend; s->image = s->sima->image; s->symmetry = settings->imapaint.paint.symmetry_flags; if (!paint_2d_canvas_set(s, s->image)) { if (s->warnmultifile) BKE_report(op->reports, RPT_WARNING, "Image requires 4 color channels to paint"); if (s->warnpackedfile) BKE_report(op->reports, RPT_WARNING, "Packed MultiLayer files cannot be painted"); MEM_freeN(s); return NULL; } if (brush->imagepaint_tool == PAINT_TOOL_SOFTEN) { s->blurkernel = paint_new_blur_kernel(brush, false); } paint_brush_init_tex(s->brush); /* create painter */ s->painter = brush_painter_2d_new(scene, s->brush, mode == BRUSH_STROKE_INVERT); return s; }
static void image_panel_curves(const bContext *C, Panel *pa) { bScreen *sc = CTX_wm_screen(C); SpaceImage *sima = CTX_wm_space_image(C); ImBuf *ibuf; PointerRNA simaptr; int levels; void *lock; ibuf = ED_space_image_acquire_buffer(sima, &lock); if (ibuf) { if (sima->cumap == NULL) sima->cumap = curvemapping_add(4, 0.0f, 0.0f, 1.0f, 1.0f); /* curvemap black/white levels only works for RGBA */ levels = (ibuf->channels == 4); RNA_pointer_create(&sc->id, &RNA_SpaceImageEditor, sima, &simaptr); uiTemplateCurveMapping(pa->layout, &simaptr, "curve", 'c', levels, 0); } ED_space_image_release_buffer(sima, lock); }
void draw_image_main(const bContext *C, ARegion *ar) { SpaceImage *sima = CTX_wm_space_image(C); Scene *scene = CTX_data_scene(C); Image *ima; ImBuf *ibuf; float zoomx, zoomy; bool show_viewer, show_render, show_paint, show_stereo3d, show_multilayer; void *lock; /* XXX can we do this in refresh? */ #if 0 what_image(sima); if (sima->image) { ED_image_get_aspect(sima->image, &xuser_asp, &yuser_asp); /* UGLY hack? until now iusers worked fine... but for flipbook viewer we need this */ if (sima->image->type == IMA_TYPE_COMPOSITE) { ImageUser *iuser = ntree_get_active_iuser(scene->nodetree); if (iuser) { BKE_image_user_calc_imanr(iuser, scene->r.cfra, 0); sima->iuser = *iuser; } } /* and we check for spare */ ibuf = ED_space_image_buffer(sima); } #endif /* retrieve the image and information about it */ ima = ED_space_image(sima); ED_space_image_get_zoom(sima, ar, &zoomx, &zoomy); show_viewer = (ima && ima->source == IMA_SRC_VIEWER) != 0; show_render = (show_viewer && ima->type == IMA_TYPE_R_RESULT) != 0; show_paint = (ima && (sima->mode == SI_MODE_PAINT) && (show_viewer == false) && (show_render == false)); show_stereo3d = (ima && (ima->flag & IMA_IS_STEREO) && (sima->iuser.flag & IMA_SHOW_STEREO)); show_multilayer = ima && BKE_image_is_multilayer(ima); if (show_viewer) { /* use locked draw for drawing viewer image buffer since the compositor * is running in separated thread and compositor could free this buffers. * other images are not modifying in such a way so they does not require * lock (sergey) */ BLI_lock_thread(LOCK_DRAW_IMAGE); } if (show_stereo3d) { if (show_multilayer) /* update multiindex and pass for the current eye */ BKE_image_multilayer_index(ima->rr, &sima->iuser); else BKE_image_multiview_index(ima, &sima->iuser); } ibuf = ED_space_image_acquire_buffer(sima, &lock); /* draw the image or grid */ if (ibuf == NULL) ED_region_grid_draw(ar, zoomx, zoomy); else if (sima->flag & SI_DRAW_TILE) draw_image_buffer_repeated(C, sima, ar, scene, ima, ibuf, zoomx, zoomy); else if (ima && (ima->tpageflag & IMA_TILES)) draw_image_buffer_tiled(sima, ar, scene, ima, ibuf, 0.0f, 0.0, zoomx, zoomy); else draw_image_buffer(C, sima, ar, scene, ibuf, 0.0f, 0.0f, zoomx, zoomy); /* paint helpers */ if (show_paint) draw_image_paint_helpers(C, ar, scene, zoomx, zoomy); /* XXX integrate this code */ #if 0 if (ibuf) { float xoffs = 0.0f, yoffs = 0.0f; if (image_preview_active(sa, &xim, &yim)) { xoffs = scene->r.disprect.xmin; yoffs = scene->r.disprect.ymin; glColor3ub(0, 0, 0); calc_image_view(sima, 'f'); myortho2(G.v2d->cur.xmin, G.v2d->cur.xmax, G.v2d->cur.ymin, G.v2d->cur.ymax); glRectf(0.0f, 0.0f, 1.0f, 1.0f); glLoadIdentity(); } } #endif ED_space_image_release_buffer(sima, ibuf, lock); if (show_viewer) { BLI_unlock_thread(LOCK_DRAW_IMAGE); } /* render info */ if (ima && show_render) draw_render_info(C, sima->iuser.scene, ima, ar, zoomx, zoomy); }