Blender V4.5
space_image.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2008 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
8
9#include "DNA_defaults.h"
11#include "DNA_image_types.h"
12#include "DNA_mask_types.h"
13#include "DNA_object_types.h"
14#include "DNA_scene_types.h"
15
16#include "MEM_guardedalloc.h"
17
18#include "BLI_listbase.h"
19#include "BLI_string.h"
20#include "BLI_threads.h"
21
22#include "BKE_colortools.hh"
23#include "BKE_context.hh"
24#include "BKE_image.hh"
25#include "BKE_layer.hh"
26#include "BKE_lib_query.hh"
27#include "BKE_lib_remap.hh"
28#include "BKE_scene.hh"
29#include "BKE_screen.hh"
30
31#include "RNA_access.hh"
32#include "RNA_define.hh"
33#include "RNA_enum_types.hh"
34
35#include "IMB_imbuf_types.hh"
36
37#include "ED_asset_shelf.hh"
38#include "ED_image.hh"
39#include "ED_mask.hh"
40#include "ED_node.hh"
41#include "ED_render.hh"
42#include "ED_screen.hh"
43#include "ED_space_api.hh"
44#include "ED_transform.hh"
45#include "ED_util.hh"
46#include "ED_uvedit.hh"
47
48#include "WM_api.hh"
49#include "WM_types.hh"
50
51#include "UI_interface.hh"
52#include "UI_view2d.hh"
53
54#include "BLO_read_write.hh"
55
56#include "DRW_engine.hh"
57
58#include "image_intern.hh"
59
60/**************************** common state *****************************/
61
63{
64 SpaceImage *sima = (SpaceImage *)area->spacedata.first;
65
66 /* only while histogram is visible */
67 LISTBASE_FOREACH (ARegion *, region, &area->regionbase) {
68 if (region->regiontype == RGN_TYPE_TOOL_PROPS && region->flag & RGN_FLAG_HIDDEN) {
69 return;
70 }
71 }
72
73 sima->scopes.ok = 0;
74}
75
77{
78 /* Update scene image user for acquiring render results. */
79 sima->iuser.scene = CTX_data_scene(C);
80
81 if (sima->image && sima->image->type == IMA_TYPE_R_RESULT) {
82 /* While rendering, prefer scene that is being rendered. */
84 if (render_scene) {
85 sima->iuser.scene = render_scene;
86 }
87 }
88
89 /* Auto switch image to show in UV editor when selection changes. */
91}
92
93/* ******************** default callbacks for image space ***************** */
94
95static SpaceLink *image_create(const ScrArea * /*area*/, const Scene * /*scene*/)
96{
97 ARegion *region;
98 SpaceImage *simage;
99
100 simage = MEM_callocN<SpaceImage>("initimage");
101 simage->spacetype = SPACE_IMAGE;
102 simage->zoom = 1.0f;
103 simage->lock = true;
105 simage->uv_opacity = 1.0f;
106 simage->uv_face_opacity = 1.0f;
107 simage->stretch_opacity = 1.0f;
109 simage->overlay.passepartout_alpha = 0.5f;
110
113
114 BKE_scopes_new(&simage->scopes);
115 simage->sample_line_hist.height = 100;
116
117 simage->tile_grid_shape[0] = 1;
118 simage->tile_grid_shape[1] = 1;
119
120 simage->custom_grid_subdiv[0] = 10;
121 simage->custom_grid_subdiv[1] = 10;
122
124
125 /* header */
126 region = BKE_area_region_new();
127
128 BLI_addtail(&simage->regionbase, region);
129 region->regiontype = RGN_TYPE_HEADER;
131
132 /* asset shelf */
133 region = BKE_area_region_new();
134 BLI_addtail(&simage->regionbase, region);
136 region->alignment = RGN_ALIGN_BOTTOM;
137 region->flag |= RGN_FLAG_HIDDEN;
138
139 /* asset shelf header */
140 region = BKE_area_region_new();
141 BLI_addtail(&simage->regionbase, region);
144
145 /* tool header */
146 region = BKE_area_region_new();
147
148 BLI_addtail(&simage->regionbase, region);
152
153 /* buttons/list view */
154 region = BKE_area_region_new();
155
156 BLI_addtail(&simage->regionbase, region);
157 region->regiontype = RGN_TYPE_UI;
158 region->alignment = RGN_ALIGN_RIGHT;
159 region->flag = RGN_FLAG_HIDDEN;
160
161 /* scopes/uv sculpt/paint */
162 region = BKE_area_region_new();
163
164 BLI_addtail(&simage->regionbase, region);
165 region->regiontype = RGN_TYPE_TOOLS;
166 region->alignment = RGN_ALIGN_LEFT;
167 region->flag = RGN_FLAG_HIDDEN;
168
169 /* main area */
170 region = BKE_area_region_new();
171
172 BLI_addtail(&simage->regionbase, region);
173 region->regiontype = RGN_TYPE_WINDOW;
174
175 return (SpaceLink *)simage;
176}
177
178/* Doesn't free the space-link itself. */
179static void image_free(SpaceLink *sl)
180{
181 SpaceImage *simage = (SpaceImage *)sl;
182
183 BKE_scopes_free(&simage->scopes);
184}
185
186/* spacetype; init callback, add handlers */
187static void image_init(wmWindowManager * /*wm*/, ScrArea *area)
188{
190
191 /* add drop boxes */
193}
194
196{
197 SpaceImage *simagen = static_cast<SpaceImage *>(MEM_dupallocN(sl));
198
199 /* clear or remove stuff from old */
200
201 BKE_scopes_new(&simagen->scopes);
202
203 return (SpaceLink *)simagen;
204}
205
207{
218#ifdef WITH_INPUT_NDOF
219 WM_operatortype_append(IMAGE_OT_view_ndof);
220#endif
221
236
241
246
250
252
256
260}
261
262static void image_keymap(wmKeyConfig *keyconf)
263{
264 WM_keymap_ensure(keyconf, "Image Generic", SPACE_IMAGE, RGN_TYPE_WINDOW);
265 WM_keymap_ensure(keyconf, "Image", SPACE_IMAGE, RGN_TYPE_WINDOW);
266}
267
268/* area+region dropbox definition */
269static void image_dropboxes() {}
270
275static void image_refresh(const bContext *C, ScrArea *area)
276{
277 Scene *scene = CTX_data_scene(C);
278 SpaceImage *sima = static_cast<SpaceImage *>(area->spacedata.first);
279 Image *ima;
280
281 ima = ED_space_image(sima);
282 BKE_image_user_frame_calc(ima, &sima->iuser, scene->r.cfra);
283
284 /* Check if we have to set the image from the edit-mesh. */
285 if (ima && (ima->source == IMA_SRC_VIEWER && sima->mode == SI_MODE_MASK)) {
286 if (scene->nodetree) {
288 if (mask) {
289 ED_node_composite_job(C, scene->nodetree, scene);
290 }
291 }
292 }
293}
294
296{
297 wmWindow *win = params->window;
298 ScrArea *area = params->area;
299 const wmNotifier *wmn = params->notifier;
300 SpaceImage *sima = (SpaceImage *)area->spacedata.first;
301
302 /* context changes */
303 switch (wmn->category) {
304 case NC_WINDOW:
305 /* notifier comes from editing color space */
307 ED_area_tag_redraw(area);
308 break;
309 case NC_SCENE:
310 switch (wmn->data) {
311 case ND_FRAME:
314 ED_area_tag_redraw(area);
315 break;
316 case ND_OB_ACTIVE:
317 case ND_OB_SELECT:
318 ED_area_tag_redraw(area);
319 break;
320 case ND_MODE:
321 ED_paint_cursor_start(&params->scene->toolsettings->imapaint.paint,
323
324 if (wmn->subtype == NS_EDITMODE_MESH) {
326 }
327 ED_area_tag_redraw(area);
328 break;
329 case ND_RENDER_RESULT:
331 case ND_COMPO_RESULT:
332 if (ED_space_image_show_render(sima)) {
335 }
336 ED_area_tag_redraw(area);
337 break;
338 }
339 break;
340 case NC_IMAGE:
341 if (wmn->reference == sima->image || !wmn->reference) {
342 if (wmn->action != NA_PAINTING) {
345 ED_area_tag_redraw(area);
346 }
347 }
348 break;
349 case NC_SPACE:
350 if (wmn->data == ND_SPACE_IMAGE) {
352 ED_area_tag_redraw(area);
353 }
354 break;
355 case NC_MASK: {
356 Scene *scene = WM_window_get_active_scene(win);
358 BKE_view_layer_synced_ensure(scene, view_layer);
359 Object *obedit = BKE_view_layer_edit_object_get(view_layer);
360 if (ED_space_image_check_show_maskedit(sima, obedit)) {
361 switch (wmn->data) {
362 case ND_SELECT:
363 ED_area_tag_redraw(area);
364 break;
365 case ND_DATA:
366 case ND_DRAW:
367 /* causes node-recalc */
368 ED_area_tag_redraw(area);
370 break;
371 }
372 switch (wmn->action) {
373 case NA_SELECTED:
374 ED_area_tag_redraw(area);
375 break;
376 case NA_EDITED:
377 /* causes node-recalc */
378 ED_area_tag_redraw(area);
380 break;
381 }
382 }
383 break;
384 }
385 case NC_GEOM: {
386 switch (wmn->data) {
387 case ND_DATA:
388 case ND_SELECT:
391 ED_area_tag_redraw(area);
392 break;
393 }
394 break;
395 }
396 case NC_OBJECT: {
397 switch (wmn->data) {
398 case ND_TRANSFORM:
399 case ND_MODIFIER: {
400 const Scene *scene = WM_window_get_active_scene(win);
402 BKE_view_layer_synced_ensure(scene, view_layer);
404 /* \note With a geometry nodes modifier, the UVs on `ob` can change in response to
405 * any change on `wmn->reference`. If we could track the upstream dependencies,
406 * unnecessary redraws could be reduced. Until then, just redraw. See #98594. */
407 if (ob && (ob->mode & OB_MODE_EDIT) && sima->mode == SI_MODE_UV) {
408 if (sima->lock && (sima->flag & SI_DRAWSHADOW)) {
410 ED_area_tag_redraw(area);
411 }
412 }
413 else if (ob) {
414 if (sima->lock && !(sima->flag & SI_NO_DRAW_UV_GUIDE) &&
416 {
418 ED_area_tag_redraw(area);
419 }
420 }
421 break;
422 }
423 }
424
425 break;
426 }
427 case NC_ID: {
428 if (wmn->action == NA_RENAME) {
429 ED_area_tag_redraw(area);
430 }
431 break;
432 }
433 case NC_WM:
434 if (wmn->data == ND_UNDO) {
435 ED_area_tag_redraw(area);
437 }
438 break;
439 }
440}
441
442const char *image_context_dir[] = {"edit_image", "edit_mask", nullptr};
443
444static int /*eContextResult*/ image_context(const bContext *C,
445 const char *member,
447{
449
450 if (CTX_data_dir(member)) {
452 // return CTX_RESULT_OK; /* TODO(@sybren). */
453 }
454 else if (CTX_data_equals(member, "edit_image")) {
456 return CTX_RESULT_OK;
457 }
458 else if (CTX_data_equals(member, "edit_mask")) {
460 if (mask) {
462 }
463 return CTX_RESULT_OK;
464 }
466}
467
481
495
509
523
525{
526 VIEW2D_GGT_navigate_impl(gzgt, "IMAGE_GGT_navigate");
527}
528
541
542/************************** main region ***************************/
543
544/* sets up the fields of the View2D from zoom and offset */
546{
547 Image *ima = ED_space_image(sima);
548
549 int width, height;
550 ED_space_image_get_size(sima, &width, &height);
551
552 float w = width;
553 float h = height;
554
555 if (ima) {
556 h *= ima->aspy / ima->aspx;
557 }
558
559 int winx = BLI_rcti_size_x(&region->winrct) + 1;
560 int winy = BLI_rcti_size_y(&region->winrct) + 1;
561
562 /* For region overlap, move center so image doesn't overlap header. */
563 const rcti *visible_rect = ED_region_visible_rect(region);
564 const int visible_winy = BLI_rcti_size_y(visible_rect) + 1;
565 int visible_centerx = 0;
566 int visible_centery = visible_rect->ymin + (visible_winy - winy) / 2;
567
568 region->v2d.tot.xmin = 0;
569 region->v2d.tot.ymin = 0;
570 region->v2d.tot.xmax = w;
571 region->v2d.tot.ymax = h;
572
573 region->v2d.mask.xmin = region->v2d.mask.ymin = 0;
574 region->v2d.mask.xmax = winx;
575 region->v2d.mask.ymax = winy;
576
577 /* which part of the image space do we see? */
578 float x1 = region->winrct.xmin + visible_centerx + (winx - sima->zoom * w) / 2.0f;
579 float y1 = region->winrct.ymin + visible_centery + (winy - sima->zoom * h) / 2.0f;
580
581 x1 -= sima->zoom * sima->xof;
582 y1 -= sima->zoom * sima->yof;
583
584 /* relative display right */
585 region->v2d.cur.xmin = ((region->winrct.xmin - x1) / sima->zoom);
586 region->v2d.cur.xmax = region->v2d.cur.xmin + (float(winx) / sima->zoom);
587
588 /* relative display left */
589 region->v2d.cur.ymin = ((region->winrct.ymin - y1) / sima->zoom);
590 region->v2d.cur.ymax = region->v2d.cur.ymin + (float(winy) / sima->zoom);
591
592 /* normalize 0.0..1.0 */
593 region->v2d.cur.xmin /= w;
594 region->v2d.cur.xmax /= w;
595 region->v2d.cur.ymin /= h;
596 region->v2d.cur.ymax /= h;
597}
598
599/* add handlers, stuff you only do once or on area/region changes */
601{
602 wmKeyMap *keymap;
603
604 /* NOTE: don't use `UI_view2d_region_reinit(&region->v2d, ...)`
605 * since the space clip manages own v2d in #image_main_region_set_view2d */
606
607 /* mask polls mode */
608 keymap = WM_keymap_ensure(wm->defaultconf, "Mask Editing", SPACE_EMPTY, RGN_TYPE_WINDOW);
609 WM_event_add_keymap_handler_v2d_mask(&region->runtime->handlers, keymap);
610
611 /* image paint polls for mode */
613 WM_event_add_keymap_handler_v2d_mask(&region->runtime->handlers, keymap);
614
615 keymap = WM_keymap_ensure(wm->defaultconf, "Paint Curve", SPACE_EMPTY, RGN_TYPE_WINDOW);
616 WM_event_add_keymap_handler(&region->runtime->handlers, keymap);
617
618 keymap = WM_keymap_ensure(wm->defaultconf, "Image Paint", SPACE_EMPTY, RGN_TYPE_WINDOW);
619 WM_event_add_keymap_handler_v2d_mask(&region->runtime->handlers, keymap);
620
621 keymap = WM_keymap_ensure(wm->defaultconf, "UV Editor", SPACE_EMPTY, RGN_TYPE_WINDOW);
622 WM_event_add_keymap_handler(&region->runtime->handlers, keymap);
623
624 /* own keymaps */
625 keymap = WM_keymap_ensure(wm->defaultconf, "Image Generic", SPACE_IMAGE, RGN_TYPE_WINDOW);
626 WM_event_add_keymap_handler(&region->runtime->handlers, keymap);
628 WM_event_add_keymap_handler_v2d_mask(&region->runtime->handlers, keymap);
629}
630
631static void image_main_region_draw(const bContext *C, ARegion *region)
632{
633 /* draw entirely, view changes should be handled here */
635 Object *obedit = CTX_data_edit_object(C);
637 Mask *mask = nullptr;
638 Scene *scene = CTX_data_scene(C);
639 View2D *v2d = &region->v2d;
640 Image *image = ED_space_image(sima);
641 /* Typically a render result or viewer image from the compositor. */
642 const bool show_viewer = (image && image->source == IMA_SRC_VIEWER);
643 const bool show_compositor_viewer = show_viewer && image->type == IMA_TYPE_COMPOSITE;
644
645 /* Text info and render region are only relevant for the compositor. */
646 const bool show_text_info = show_compositor_viewer &&
650 const bool show_render_region = show_compositor_viewer &&
654
655 /* XXX not supported yet, disabling for now */
656 scene->r.scemode &= ~R_COMP_CROP;
657
659
660 /* we set view2d from own zoom and offset each time */
661 image_main_region_set_view2d(sima, region);
662
663 /* check for mask (delay draw) */
664 if (!ED_space_image_show_uvedit(sima, obedit) && sima->mode == SI_MODE_MASK) {
666 }
667
668 if (show_viewer) {
670 }
672 if (show_viewer) {
674 }
675
676 if (show_render_region) {
677 int render_size_x, render_size_y;
678
679 BKE_render_resolution(&scene->r, true, &render_size_x, &render_size_y);
680
681 float zoomx, zoomy;
682 ED_space_image_get_zoom(sima, region, &zoomx, &zoomy);
683 int width, height;
684 ED_space_image_get_size(sima, &width, &height);
685 int center_x = width / 2;
686 int center_y = height / 2;
687
688 int x, y;
689 rcti render_region;
691 &render_region, center_x, render_size_x + center_x, center_y, render_size_y + center_y);
692 UI_view2d_view_to_region(&region->v2d, 0.0f, 0.0f, &x, &y);
693
695 x, y, &render_region, zoomx, zoomy, sima->overlay.passepartout_alpha);
696 }
697
698 draw_image_main_helpers(C, region);
699
700 /* Draw Meta data of the image isn't added to the DrawManager as it is
701 * used in other areas as well. */
703 void *lock;
704 /* `ED_space_image_get_zoom` temporarily locks the image, so this needs to be done before
705 * the image is locked when calling `ED_space_image_acquire_buffer`. */
706 float zoomx, zoomy;
707 ED_space_image_get_zoom(sima, region, &zoomx, &zoomy);
708 ImBuf *ibuf = ED_space_image_acquire_buffer(sima, &lock, 0);
709 if (ibuf) {
710 int x, y;
711 rctf frame;
712 BLI_rctf_init(&frame, 0.0f, ibuf->x, 0.0f, ibuf->y);
713 UI_view2d_view_to_region(&region->v2d, 0.0f, 0.0f, &x, &y);
714 ED_region_image_metadata_draw(x, y, ibuf, &frame, zoomx, zoomy);
715 }
717 }
718
719 if (show_text_info) {
720
721 int render_size_x, render_size_y;
722 BKE_render_resolution(&scene->r, true, &render_size_x, &render_size_y);
723
724 /* Use same positioning convention as in 3D View. */
725 const rcti *rect = ED_region_visible_rect(region);
726 int xoffset = rect->xmin + (0.5f * U.widget_unit);
727 int yoffset = rect->ymax - (0.1f * U.widget_unit);
728
729 int viewer_size_x, viewer_size_y;
730 ED_space_image_get_size(sima, &viewer_size_x, &viewer_size_y);
731
733 render_size_x, render_size_y, viewer_size_x, viewer_size_y, xoffset, yoffset);
734 }
735
736 /* sample line */
740
741 if (mask) {
742 int width, height;
743 float aspx, aspy;
744
745 if (show_viewer) {
746 /* ED_space_image_get* will acquire image buffer which requires
747 * lock here by the same reason why lock is needed in draw_image_main
748 */
750 }
751
752 ED_space_image_get_size(sima, &width, &height);
753 ED_space_image_get_aspect(sima, &aspx, &aspy);
754
755 if (show_viewer) {
757 }
758
760 mask,
761 region, /* Mask overlay is drawn by image/overlay engine. */
763 sima->mask_info.draw_type,
766 width,
767 height,
768 aspx,
769 aspy,
770 true,
771 false,
772 nullptr,
773 C);
774 }
775 if ((sima->gizmo_flag & SI_GIZMO_HIDE) == 0) {
777 }
778 draw_image_cache(C, region);
779}
780
782{
783 ScrArea *area = params->area;
784 ARegion *region = params->region;
785 const wmNotifier *wmn = params->notifier;
786
787 /* context changes */
788 switch (wmn->category) {
789 case NC_GEOM:
790 if (ELEM(wmn->data, ND_DATA, ND_SELECT)) {
791 WM_gizmomap_tag_refresh(region->runtime->gizmo_map);
792 }
793 break;
794 case NC_GPENCIL:
795 if (ELEM(wmn->action, NA_EDITED, NA_SELECTED)) {
796 ED_region_tag_redraw(region);
797 }
798 else if (wmn->data & ND_GPENCIL_EDITMODE) {
799 ED_region_tag_redraw(region);
800 }
801 break;
802 case NC_IMAGE:
803 if (wmn->action == NA_PAINTING) {
804 ED_region_tag_redraw(region);
805 }
806 WM_gizmomap_tag_refresh(region->runtime->gizmo_map);
807 break;
808 case NC_MATERIAL:
809 if (wmn->data == ND_SHADING_LINKS) {
810 SpaceImage *sima = static_cast<SpaceImage *>(area->spacedata.first);
811
812 if (sima->iuser.scene && (sima->iuser.scene->toolsettings->uv_flag & UV_SHOW_SAME_IMAGE)) {
813 ED_region_tag_redraw(region);
814 }
815 }
816 break;
817 case NC_SCREEN:
818 if (ELEM(wmn->data, ND_LAYER)) {
819 ED_region_tag_redraw(region);
820 }
821 break;
822 }
823}
824
825/* *********************** buttons region ************************ */
826
827/* add handlers, stuff you only do once or on area/region changes */
829{
830 wmKeyMap *keymap;
831
833 ED_region_panels_init(wm, region);
834
835 keymap = WM_keymap_ensure(wm->defaultconf, "Image Generic", SPACE_IMAGE, RGN_TYPE_WINDOW);
836 WM_event_add_keymap_handler(&region->runtime->handlers, keymap);
837}
838
839static void image_buttons_region_layout(const bContext *C, ARegion *region)
840{
841 const enum eContextObjectMode mode = CTX_data_mode_enum(C);
842 const char *contexts_base[3] = {nullptr};
843
844 const char **contexts = contexts_base;
845
847 switch (sima->mode) {
848 case SI_MODE_VIEW:
849 break;
850 case SI_MODE_PAINT:
851 ARRAY_SET_ITEMS(contexts, ".paint_common_2d", ".imagepaint_2d");
852 break;
853 case SI_MODE_MASK:
854 break;
855 case SI_MODE_UV:
856 if (mode == CTX_MODE_EDIT_MESH) {
857 ARRAY_SET_ITEMS(contexts, ".uv_sculpt");
858 }
859 break;
860 }
861
863 region,
864 &region->runtime->type->paneltypes,
866 contexts_base,
867 nullptr);
868}
869
870static void image_buttons_region_draw(const bContext *C, ARegion *region)
871{
873 Scene *scene = CTX_data_scene(C);
874 void *lock;
875 /* TODO(lukas): Support tiles in scopes? */
876 ImBuf *ibuf = ED_space_image_acquire_buffer(sima, &lock, 0);
877 /* XXX performance regression if name of scopes category changes! */
878 PanelCategoryStack *category = UI_panel_category_active_find(region, "Scopes");
879
880 /* only update scopes if scope category is active */
881 if (category) {
882 if (ibuf) {
883 if (!sima->scopes.ok) {
885 &sima->sample_line_hist, ibuf, &scene->view_settings, &scene->display_settings);
886 }
887 if (sima->image->flag & IMA_VIEW_AS_RENDER) {
888 ED_space_image_scopes_update(C, sima, ibuf, true);
889 }
890 else {
891 ED_space_image_scopes_update(C, sima, ibuf, false);
892 }
893 }
894 }
896
897 /* Layout handles details. */
898 ED_region_panels_draw(C, region);
899}
900
902{
903 ARegion *region = params->region;
904 const wmNotifier *wmn = params->notifier;
905
906 /* context changes */
907 switch (wmn->category) {
908 case NC_TEXTURE:
909 case NC_MATERIAL:
910 /* sending by texture render job and needed to properly update displaying
911 * brush texture icon */
912 ED_region_tag_redraw(region);
913 break;
914 case NC_SCENE:
915 switch (wmn->data) {
916 case ND_MODE:
917 case ND_RENDER_RESULT:
918 case ND_COMPO_RESULT:
919 ED_region_tag_redraw(region);
920 break;
921 }
922 break;
923 case NC_IMAGE:
924 if (wmn->action != NA_PAINTING) {
925 ED_region_tag_redraw(region);
926 }
927 break;
928 case NC_NODE:
929 ED_region_tag_redraw(region);
930 break;
931 case NC_GPENCIL:
932 if (ELEM(wmn->action, NA_EDITED, NA_SELECTED)) {
933 ED_region_tag_redraw(region);
934 }
935 break;
936 case NC_BRUSH:
937 if (wmn->action == NA_EDITED) {
938 ED_region_tag_redraw(region);
939 }
940 break;
941 }
942}
943
944/* *********************** scopes region ************************ */
945
946/* add handlers, stuff you only do once or on area/region changes */
948{
949 wmKeyMap *keymap;
950
952 ED_region_panels_init(wm, region);
953
954 keymap = WM_keymap_ensure(wm->defaultconf, "Image Generic", SPACE_IMAGE, RGN_TYPE_WINDOW);
955 WM_event_add_keymap_handler(&region->runtime->handlers, keymap);
956}
957
958static void image_tools_region_draw(const bContext *C, ARegion *region)
959{
960 ED_region_panels(C, region);
961}
962
964{
965 ARegion *region = params->region;
966 const wmNotifier *wmn = params->notifier;
967
968 /* context changes */
969 switch (wmn->category) {
970 case NC_GPENCIL:
971 if (wmn->data == ND_DATA || ELEM(wmn->action, NA_EDITED, NA_SELECTED)) {
972 ED_region_tag_redraw(region);
973 }
974 break;
975 case NC_BRUSH:
976 /* NA_SELECTED is used on brush changes */
977 if (ELEM(wmn->action, NA_EDITED, NA_SELECTED)) {
978 ED_region_tag_redraw(region);
979 }
980 break;
981 case NC_SCENE:
982 switch (wmn->data) {
983 case ND_MODE:
984 case ND_RENDER_RESULT:
985 case ND_COMPO_RESULT:
986 ED_region_tag_redraw(region);
987 break;
988 }
989 break;
990 case NC_IMAGE:
991 if (wmn->action != NA_PAINTING) {
992 ED_region_tag_redraw(region);
993 }
994 break;
995 case NC_NODE:
996 ED_region_tag_redraw(region);
997 break;
998 }
999}
1000
1001/************************* Tool header region **************************/
1002
1004{
1005 ScrArea *area = CTX_wm_area(C);
1006 SpaceImage *sima = static_cast<SpaceImage *>(area->spacedata.first);
1007
1009
1011 C,
1012 region,
1016}
1017
1018/************************* header region **************************/
1019
1020/* add handlers, stuff you only do once or on area/region changes */
1022{
1023 ED_region_header_init(region);
1024}
1025
1026static void image_header_region_draw(const bContext *C, ARegion *region)
1027{
1028 ScrArea *area = CTX_wm_area(C);
1029 SpaceImage *sima = static_cast<SpaceImage *>(area->spacedata.first);
1030
1032
1033 ED_region_header(C, region);
1034}
1035
1037{
1038 ARegion *region = params->region;
1039 const wmNotifier *wmn = params->notifier;
1040
1041 /* context changes */
1042 switch (wmn->category) {
1043 case NC_SCENE:
1044 switch (wmn->data) {
1045 case ND_MODE:
1046 case ND_TOOLSETTINGS:
1047 ED_region_tag_redraw(region);
1048 break;
1049 }
1050 break;
1051 case NC_GEOM:
1052 switch (wmn->data) {
1053 case ND_DATA:
1054 case ND_SELECT:
1055 ED_region_tag_redraw(region);
1056 break;
1057 }
1058 break;
1059 case NC_BRUSH:
1060 if (wmn->action == NA_EDITED) {
1061 ED_region_tag_redraw(region);
1062 }
1063 break;
1064 case NC_GPENCIL:
1065 if (wmn->data & ND_GPENCIL_EDITMODE) {
1066 ED_region_tag_redraw(region);
1067 }
1068 else if (wmn->action == NA_EDITED) {
1069 ED_region_tag_redraw(region);
1070 }
1071 break;
1072 }
1073}
1074
1075/* add handlers, stuff you only do once or on area/region changes */
1077{
1078 using namespace blender::ed;
1079 wmKeyMap *keymap = WM_keymap_ensure(
1080 wm->defaultconf, "Image Generic", SPACE_IMAGE, RGN_TYPE_WINDOW);
1081 WM_event_add_keymap_handler(&region->runtime->handlers, keymap);
1082
1084}
1085
1086static void image_id_remap(ScrArea * /*area*/,
1087 SpaceLink *slink,
1088 const blender::bke::id::IDRemapper &mappings)
1089{
1090 SpaceImage *simg = (SpaceImage *)slink;
1091
1093 return;
1094 }
1095
1096 mappings.apply(reinterpret_cast<ID **>(&simg->image), ID_REMAP_APPLY_ENSURE_REAL);
1097 mappings.apply(reinterpret_cast<ID **>(&simg->gpd), ID_REMAP_APPLY_UPDATE_REFCOUNT);
1098 mappings.apply(reinterpret_cast<ID **>(&simg->mask_info.mask), ID_REMAP_APPLY_ENSURE_REAL);
1099}
1100
1102{
1103 SpaceImage *simg = reinterpret_cast<SpaceImage *>(space_link);
1104 const int data_flags = BKE_lib_query_foreachid_process_flags_get(data);
1105 const bool is_readonly = (data_flags & IDWALK_READONLY) != 0;
1106
1113 if (!is_readonly) {
1114 simg->scopes.ok = 0;
1115 }
1116}
1117
1124{
1125 SpaceImage *sima = static_cast<SpaceImage *>(area->spacedata.first);
1126 return sima->mode == SI_MODE_UV ? SI_MODE_UV : SI_MODE_VIEW;
1127}
1128
1129static void image_space_subtype_set(ScrArea *area, int value)
1130{
1131 SpaceImage *sima = static_cast<SpaceImage *>(area->spacedata.first);
1132 if (value == SI_MODE_UV) {
1133 if (sima->mode != SI_MODE_UV) {
1134 sima->mode_prev = sima->mode;
1135 }
1136 sima->mode = value;
1137 }
1138 else {
1139 sima->mode = sima->mode_prev;
1140 }
1141}
1142
1144 EnumPropertyItem **item,
1145 int *totitem)
1146{
1148}
1149
1151{
1152 SpaceImage *sima = static_cast<SpaceImage *>(area->spacedata.first);
1154 if (index < 0) {
1155 index = SI_MODE_VIEW;
1156 }
1158 return item.name;
1159}
1160
1161static int image_space_icon_get(const ScrArea *area)
1162{
1163 SpaceImage *sima = static_cast<SpaceImage *>(area->spacedata.first);
1165 if (index < 0) {
1166 index = SI_MODE_VIEW;
1167 }
1169 return item.icon;
1170}
1171
1173{
1174 SpaceImage *sima = (SpaceImage *)sl;
1175
1176 sima->iuser.scene = nullptr;
1177 sima->scopes.waveform_1 = nullptr;
1178 sima->scopes.waveform_2 = nullptr;
1179 sima->scopes.waveform_3 = nullptr;
1180 sima->scopes.vecscope = nullptr;
1181 sima->scopes.vecscope_rgb = nullptr;
1182 sima->scopes.ok = 0;
1183
1184/* WARNING: gpencil data is no longer stored directly in sima after 2.5
1185 * so sacrifice a few old files for now to avoid crashes with new files!
1186 * committed: r28002 */
1187#if 0
1188 sima->gpd = newdataadr(fd, sima->gpd);
1189 if (sima->gpd) {
1191 }
1192#endif
1193}
1194
1196{
1197 BLO_write_struct(writer, SpaceImage, sl);
1198}
1199
1200/**************************** spacetype *****************************/
1201
1203{
1204 using namespace blender::ed;
1205 std::unique_ptr<SpaceType> st = std::make_unique<SpaceType>();
1206 ARegionType *art;
1207
1208 st->spaceid = SPACE_IMAGE;
1209 STRNCPY(st->name, "Image");
1210
1211 st->create = image_create;
1212 st->free = image_free;
1213 st->init = image_init;
1214 st->duplicate = image_duplicate;
1215 st->operatortypes = image_operatortypes;
1216 st->keymap = image_keymap;
1217 st->dropboxes = image_dropboxes;
1218 st->refresh = image_refresh;
1219 st->listener = image_listener;
1220 st->context = image_context;
1221 st->gizmos = image_widgets;
1222 st->id_remap = image_id_remap;
1223 st->foreach_id = image_foreach_id;
1224 st->space_subtype_item_extend = image_space_subtype_item_extend;
1225 st->space_subtype_get = image_space_subtype_get;
1226 st->space_subtype_set = image_space_subtype_set;
1227 st->space_name_get = image_space_name_get;
1228 st->space_icon_get = image_space_icon_get;
1229 st->blend_read_data = image_space_blend_read_data;
1230 st->blend_read_after_liblink = nullptr;
1231 st->blend_write = image_space_blend_write;
1232
1233 /* regions: main window */
1234 art = MEM_callocN<ARegionType>("spacetype image region");
1241 BLI_addhead(&st->regiontypes, art);
1242
1243 /* regions: list-view/buttons/scopes */
1244 art = MEM_callocN<ARegionType>("spacetype image region");
1245 art->regionid = RGN_TYPE_UI;
1253 BLI_addhead(&st->regiontypes, art);
1254
1257
1258 /* regions: tool(bar) */
1259 art = MEM_callocN<ARegionType>("spacetype image region");
1260 art->regionid = RGN_TYPE_TOOLS;
1261 art->prefsizex = int(UI_TOOLBAR_WIDTH);
1262 art->prefsizey = 50; /* XXX */
1269 BLI_addhead(&st->regiontypes, art);
1270
1271 /* regions: tool header */
1272 art = MEM_callocN<ARegionType>("spacetype image tool header region");
1274 art->prefsizey = HEADERY;
1280 BLI_addhead(&st->regiontypes, art);
1281
1282 /* regions: header */
1283 art = MEM_callocN<ARegionType>("spacetype image region");
1285 art->prefsizey = HEADERY;
1290
1291 BLI_addhead(&st->regiontypes, art);
1292
1293 /* regions: asset shelf */
1294 art = MEM_callocN<ARegionType>("spacetype image asset shelf region");
1309 BLI_addhead(&st->regiontypes, art);
1310
1311 /* regions: asset shelf header */
1312 art = MEM_callocN<ARegionType>("spacetype image asset shelf header region");
1320 BLI_addhead(&st->regiontypes, art);
1322
1323 /* regions: hud */
1324 art = ED_area_type_hud(st->spaceid);
1325 BLI_addhead(&st->regiontypes, art);
1326
1327 BKE_spacetype_register(std::move(st));
1328}
void BKE_histogram_update_sample_line(Histogram *hist, ImBuf *ibuf, const ColorManagedViewSettings *view_settings, const ColorManagedDisplaySettings *display_settings)
void BKE_scopes_new(Scopes *scopes)
void BKE_scopes_free(Scopes *scopes)
Depsgraph * CTX_data_expect_evaluated_depsgraph(const bContext *C)
void CTX_data_dir_set(bContextDataResult *result, const char **dir)
SpaceImage * CTX_wm_space_image(const bContext *C)
bool CTX_data_equals(const char *member, const char *str)
bool CTX_data_dir(const char *member)
void CTX_data_id_pointer_set(bContextDataResult *result, ID *id)
eContextObjectMode
@ CTX_MODE_EDIT_MESH
ScrArea * CTX_wm_area(const bContext *C)
@ CTX_RESULT_MEMBER_NOT_FOUND
@ CTX_RESULT_OK
Scene * CTX_data_scene(const bContext *C)
Object * CTX_data_edit_object(const bContext *C)
enum eContextObjectMode CTX_data_mode_enum(const bContext *C)
void BKE_gpencil_blend_read_data(struct BlendDataReader *reader, struct bGPdata *gpd)
void BKE_image_user_frame_calc(Image *ima, ImageUser *iuser, int cfra)
void BKE_imageuser_default(ImageUser *iuser)
void BKE_image_partial_update_mark_full_update(Image *image)
Mark the whole image to be updated.
void BKE_view_layer_synced_ensure(const Scene *scene, ViewLayer *view_layer)
Object * BKE_view_layer_active_object_get(const ViewLayer *view_layer)
Object * BKE_view_layer_edit_object_get(const ViewLayer *view_layer)
#define BKE_LIB_FOREACHID_PROCESS_IDSUPER(data_, id_super_, cb_flag_)
@ IDWALK_CB_USER_ONE
@ IDWALK_CB_USER
@ IDWALK_CB_DIRECT_WEAK_LINK
LibraryForeachIDFlag BKE_lib_query_foreachid_process_flags_get(const LibraryForeachIDData *data)
Definition lib_query.cc:129
@ IDWALK_READONLY
@ ID_REMAP_APPLY_UPDATE_REFCOUNT
@ ID_REMAP_APPLY_ENSURE_REAL
void BKE_render_resolution(const RenderData *r, const bool use_crop, int *r_width, int *r_height)
Definition scene.cc:2927
void BKE_spacetype_register(std::unique_ptr< SpaceType > st)
Definition screen.cc:276
ARegion * BKE_area_region_new()
Definition screen.cc:381
@ REGION_DRAW_LOCK_BAKING
#define LISTBASE_FOREACH(type, var, list)
void BLI_addtail(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
Definition listbase.cc:111
void BLI_addhead(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
Definition listbase.cc:91
BLI_INLINE int BLI_rcti_size_y(const struct rcti *rct)
Definition BLI_rect.h:198
void BLI_rcti_init(struct rcti *rect, int xmin, int xmax, int ymin, int ymax)
Definition rct.cc:414
void BLI_rctf_init(struct rctf *rect, float xmin, float xmax, float ymin, float ymax)
Definition rct.cc:404
BLI_INLINE int BLI_rcti_size_x(const struct rcti *rct)
Definition BLI_rect.h:194
char * STRNCPY(char(&dst)[N], const char *src)
Definition BLI_string.h:688
void BLI_thread_unlock(int type)
Definition threads.cc:333
void BLI_thread_lock(int type)
Definition threads.cc:328
@ LOCK_DRAW_IMAGE
Definition BLI_threads.h:64
#define ARRAY_SET_ITEMS(...)
#define ELEM(...)
#define BLO_write_struct(writer, struct_name, data_ptr)
#define DNA_struct_default_get(struct_name)
@ IMA_ANIM_ALWAYS
@ IMA_SHOW_STEREO
@ IMA_SRC_VIEWER
@ IMA_VIEW_AS_RENDER
@ IMA_TYPE_R_RESULT
@ IMA_TYPE_COMPOSITE
eMaskOverlayMode
@ MASK_DRAWFLAG_OVERLAY
@ OB_MODE_EDIT
Object is a sort of wrapper for general info.
@ UV_SHOW_SAME_IMAGE
@ R_COMP_CROP
#define HEADERY
#define RGN_ALIGN_ENUM_FROM_MASK(align)
@ RGN_TYPE_TOOL_HEADER
@ RGN_TYPE_UI
@ RGN_TYPE_ASSET_SHELF_HEADER
@ RGN_TYPE_WINDOW
@ RGN_TYPE_ASSET_SHELF
@ RGN_TYPE_HEADER
@ RGN_TYPE_TOOLS
@ RGN_TYPE_TOOL_PROPS
@ RGN_FLAG_HIDDEN
@ RGN_FLAG_HIDDEN_BY_USER
@ RGN_ALIGN_HIDE_WITH_PREV
@ RGN_ALIGN_BOTTOM
@ RGN_ALIGN_LEFT
@ RGN_ALIGN_TOP
@ RGN_ALIGN_RIGHT
@ SI_NO_DRAW_UV_GUIDE
@ SI_SHOW_GPENCIL
@ SI_DRAW_METADATA
@ SI_USE_ALPHA
@ SI_COORDFLOATS
@ SI_DRAWSHADOW
@ SI_OVERLAY_SHOW_OVERLAYS
@ SI_OVERLAY_DRAW_TEXT_INFO
@ SI_OVERLAY_SHOW_GRID_BACKGROUND
@ SI_OVERLAY_DRAW_RENDER_REGION
@ SPACE_EMPTY
@ SPACE_IMAGE
@ SI_GIZMO_HIDE
@ SI_MODE_PAINT
@ SI_MODE_VIEW
@ SI_MODE_MASK
@ SI_MODE_UV
@ USER_HEADER_BOTTOM
@ V2D_SCROLL_VERTICAL_HIDE
@ V2D_SCROLL_RIGHT
void DRW_draw_view(const bContext *C)
void ED_space_image_release_buffer(SpaceImage *sima, ImBuf *ibuf, void *lock)
void ED_space_image_auto_set(const bContext *C, SpaceImage *sima)
Definition image_edit.cc:95
void ED_space_image_get_size(SpaceImage *sima, int *r_width, int *r_height)
bool ED_image_tools_paint_poll(bContext *C)
ImBuf * ED_space_image_acquire_buffer(SpaceImage *sima, void **r_lock, int tile)
bool ED_space_image_check_show_maskedit(SpaceImage *sima, Object *obedit)
bool ED_space_image_show_render(const SpaceImage *sima)
bool ED_space_image_show_uvedit(const SpaceImage *sima, Object *obedit)
void ED_space_image_get_aspect(SpaceImage *sima, float *r_aspx, float *r_aspy)
void ED_space_image_scopes_update(const bContext *C, SpaceImage *sima, ImBuf *ibuf, bool use_view_settings)
void ED_space_image_get_zoom(SpaceImage *sima, const ARegion *region, float *r_zoomx, float *r_zoomy)
Image * ED_space_image(const SpaceImage *sima)
Definition image_edit.cc:40
void ED_paint_cursor_start(Paint *paint, bool(*poll)(bContext *C))
Mask * ED_space_image_get_mask(const SpaceImage *sima)
void ED_mask_draw_region(Depsgraph *depsgraph, Mask *mask, ARegion *region, char draw_flag, char draw_type, eMaskOverlayMode overlay_mode, float blend_factor, int width_i, int height_i, float aspx, float aspy, bool do_scale_applied, bool do_draw_cb, float stabmat[4][4], const bContext *C)
Definition mask_draw.cc:641
void ED_node_composite_job(const bContext *C, bNodeTree *nodetree, Scene *scene_owner)
Definition node_edit.cc:441
Scene * ED_render_job_get_current_scene(const bContext *C)
void ED_area_do_mgs_subscribe_for_tool_header(const wmRegionMessageSubscribeParams *params)
Definition area.cc:417
void ED_area_tag_redraw(ScrArea *area)
Definition area.cc:714
ARegionType * ED_area_type_hud(int space_type)
void ED_area_do_mgs_subscribe_for_tool_ui(const wmRegionMessageSubscribeParams *params)
Definition area.cc:432
@ ED_KEYMAP_ASSET_SHELF
Definition ED_screen.hh:750
@ ED_KEYMAP_UI
Definition ED_screen.hh:740
@ ED_KEYMAP_HEADER
Definition ED_screen.hh:746
@ ED_KEYMAP_TOOL
Definition ED_screen.hh:742
@ ED_KEYMAP_GPENCIL
Definition ED_screen.hh:748
@ ED_KEYMAP_GIZMO
Definition ED_screen.hh:741
@ ED_KEYMAP_VIEW2D
Definition ED_screen.hh:743
@ ED_KEYMAP_FRAMES
Definition ED_screen.hh:745
@ ED_KEYMAP_FOOTER
Definition ED_screen.hh:747
void ED_region_panels(const bContext *C, ARegion *region)
Definition area.cc:3466
void ED_region_header(const bContext *C, ARegion *region)
Definition area.cc:3754
const rcti * ED_region_visible_rect(ARegion *region)
Definition area.cc:4118
void ED_region_header_init(ARegion *region)
Definition area.cc:3769
void ED_region_panels_layout_ex(const bContext *C, ARegion *region, ListBase *paneltypes, wmOperatorCallContext op_context, const char *contexts[], const char *category_override)
Definition area.cc:3219
void ED_region_header_with_button_sections(const bContext *C, ARegion *region, uiButtonSectionsAlign align)
Definition area.cc:3761
int ED_region_generic_tools_region_snap_size(const ARegion *region, int size, int axis)
Definition area_utils.cc:38
void ED_area_tag_refresh(ScrArea *area)
Definition area.cc:743
void ED_region_generic_tools_region_message_subscribe(const wmRegionMessageSubscribeParams *params)
Definition area_utils.cc:26
void ED_region_panels_init(wmWindowManager *wm, ARegion *region)
Definition area.cc:3473
void ED_region_tag_redraw(ARegion *region)
Definition area.cc:639
void ED_region_panels_draw(const bContext *C, ARegion *region)
Definition area.cc:3409
void ED_region_image_metadata_draw(int x, int y, const ImBuf *ibuf, const rctf *frame, float zoomx, float zoomy)
Definition ed_draw.cc:1036
void ED_region_image_render_region_draw(int x, int y, const rcti *frame, float zoomx, float zoomy, float passepartout_alpha)
Definition ed_draw.cc:988
void ED_region_image_overlay_info_text_draw(const int render_size_x, const int render_size_y, const int viewer_size_x, const int viewer_size_y, const int draw_offset_x, const int draw_offset_y)
Definition ed_draw.cc:948
void ED_uvedit_buttons_register(ARegionType *art)
Read Guarded memory(de)allocation.
#define C
Definition RandGen.cpp:29
#define UI_SIDEBAR_PANEL_WIDTH
#define UI_TOOLBAR_WIDTH
PanelCategoryStack * UI_panel_category_active_find(ARegion *region, const char *idname)
void UI_view2d_view_restore(const bContext *C)
Definition view2d.cc:1162
void VIEW2D_GGT_navigate_impl(wmGizmoGroupType *gzgt, const char *idname)
void UI_view2d_view_ortho(const View2D *v2d)
Definition view2d.cc:1095
void UI_view2d_view_to_region(const View2D *v2d, float x, float y, int *r_region_x, int *r_region_y) ATTR_NONNULL()
Definition view2d.cc:1722
@ WM_GIZMOMAP_DRAWSTEP_2D
@ WM_GIZMOGROUPTYPE_DRAW_MODAL_EXCLUDE
@ WM_GIZMOGROUPTYPE_TOOL_FALLBACK_KEYMAP
@ WM_GIZMOGROUPTYPE_DELAY_REFRESH_FOR_TWEAK
#define NS_EDITMODE_MESH
Definition WM_types.hh:559
#define NC_WINDOW
Definition WM_types.hh:372
#define NC_ID
Definition WM_types.hh:392
#define NC_NODE
Definition WM_types.hh:391
#define NC_GEOM
Definition WM_types.hh:390
#define ND_DRAW
Definition WM_types.hh:458
#define NC_BRUSH
Definition WM_types.hh:382
#define ND_OB_ACTIVE
Definition WM_types.hh:437
#define ND_RENDER_RESULT
Definition WM_types.hh:443
#define NC_WM
Definition WM_types.hh:371
#define ND_DATA
Definition WM_types.hh:506
#define ND_GPENCIL_EDITMODE
Definition WM_types.hh:501
#define ND_RENDER_OPTIONS
Definition WM_types.hh:432
#define ND_COMPO_RESULT
Definition WM_types.hh:444
#define NC_SCREEN
Definition WM_types.hh:374
#define ND_MODE
Definition WM_types.hh:442
#define ND_OB_SELECT
Definition WM_types.hh:439
#define NC_SCENE
Definition WM_types.hh:375
#define ND_TOOLSETTINGS
Definition WM_types.hh:446
#define ND_MODIFIER
Definition WM_types.hh:459
#define ND_SPACE_IMAGE
Definition WM_types.hh:519
#define NA_EDITED
Definition WM_types.hh:581
#define NC_MATERIAL
Definition WM_types.hh:377
#define NC_IMAGE
Definition WM_types.hh:381
#define ND_UNDO
Definition WM_types.hh:414
#define ND_FRAME
Definition WM_types.hh:431
#define ND_SELECT
Definition WM_types.hh:505
#define NC_GPENCIL
Definition WM_types.hh:396
#define NC_TEXTURE
Definition WM_types.hh:378
#define ND_TRANSFORM
Definition WM_types.hh:453
#define ND_LAYER
Definition WM_types.hh:447
@ WM_OP_INVOKE_REGION_WIN
Definition WM_types.hh:239
#define NC_MASK
Definition WM_types.hh:395
#define NA_RENAME
Definition WM_types.hh:585
#define NA_PAINTING
Definition WM_types.hh:588
#define NC_OBJECT
Definition WM_types.hh:376
#define ND_SHADING_LINKS
Definition WM_types.hh:476
#define NC_SPACE
Definition WM_types.hh:389
#define NA_SELECTED
Definition WM_types.hh:586
volatile int lock
#define U
BMesh const char void * data
BPy_StructRNA * depsgraph
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
Definition btQuadWord.h:119
IDRemapperApplyResult apply(ID **r_id_ptr, IDRemapperApplyOptions options, ID *id_self=nullptr) const
bool contains_mappings_for_any(IDTypeFilter filter) const
#define FILTER_ID_GD_LEGACY
#define FILTER_ID_MSK
#define FILTER_ID_IM
void image_buttons_register(ARegionType *art)
void draw_image_main_helpers(const bContext *C, ARegion *region)
void draw_image_cache(const bContext *C, ARegion *region)
void draw_image_sample_line(SpaceImage *sima)
void IMAGE_OT_view_cursor_center(wmOperatorType *ot)
Definition image_ops.cc:899
void IMAGE_OT_change_frame(wmOperatorType *ot)
void IMAGE_OT_save_sequence(wmOperatorType *ot)
void IMAGE_OT_view_zoom(wmOperatorType *ot)
Definition image_ops.cc:735
void IMAGE_OT_cycle_render_slot(wmOperatorType *ot)
void IMAGE_OT_match_movie_length(wmOperatorType *ot)
void IMAGE_OT_save_all_modified(wmOperatorType *ot)
void IMAGE_OT_save_as(wmOperatorType *ot)
void IMAGE_OT_sample(wmOperatorType *ot)
void IMAGE_OT_tile_fill(wmOperatorType *ot)
void IMAGE_OT_remove_render_slot(wmOperatorType *ot)
void IMAGE_OT_view_zoom_border(wmOperatorType *ot)
void IMAGE_OT_reload(wmOperatorType *ot)
void IMAGE_OT_unpack(wmOperatorType *ot)
void IMAGE_OT_view_selected(wmOperatorType *ot)
void IMAGE_OT_tile_add(wmOperatorType *ot)
void IMAGE_OT_pack(wmOperatorType *ot)
void IMAGE_OT_open(wmOperatorType *ot)
void IMAGE_OT_read_viewlayers(wmOperatorType *ot)
void IMAGE_OT_invert(wmOperatorType *ot)
void IMAGE_OT_resize(wmOperatorType *ot)
void IMAGE_OT_clear_render_slot(wmOperatorType *ot)
void IMAGE_OT_view_zoom_in(wmOperatorType *ot)
void IMAGE_OT_view_zoom_out(wmOperatorType *ot)
void IMAGE_OT_rotate_orthogonal(wmOperatorType *ot)
void IMAGE_OT_view_all(wmOperatorType *ot)
Definition image_ops.cc:853
void IMAGE_OT_render_border(wmOperatorType *ot)
void IMAGE_OT_view_pan(wmOperatorType *ot)
Definition image_ops.cc:474
void IMAGE_OT_clipboard_copy(wmOperatorType *ot)
const char * image_context_dir[]
void IMAGE_OT_save(wmOperatorType *ot)
void IMAGE_OT_file_browse(wmOperatorType *ot)
void IMAGE_OT_clipboard_paste(wmOperatorType *ot)
void IMAGE_OT_add_render_slot(wmOperatorType *ot)
void IMAGE_OT_tile_remove(wmOperatorType *ot)
void IMAGE_OT_flip(wmOperatorType *ot)
void IMAGE_OT_sample_line(wmOperatorType *ot)
void IMAGE_OT_replace(wmOperatorType *ot)
void IMAGE_OT_view_center_cursor(wmOperatorType *ot)
Definition image_ops.cc:935
void IMAGE_OT_view_zoom_ratio(wmOperatorType *ot)
void IMAGE_OT_new(wmOperatorType *ot)
void IMAGE_OT_clear_render_border(wmOperatorType *ot)
void IMAGE_OT_curves_point_set(wmOperatorType *ot)
uiWidgetBaseParameters params[MAX_WIDGET_BASE_BATCH]
void * MEM_callocN(size_t len, const char *str)
Definition mallocn.cc:118
void * MEM_dupallocN(const void *vmemh)
Definition mallocn.cc:143
ccl_device_inline float2 mask(const MaskType mask, const float2 a)
void header_region(const bContext *C, ARegion *region)
void region_init(wmWindowManager *wm, ARegion *region)
void types_register(ARegionType *region_type, const int space_type)
void region_listen(const wmRegionListenerParams *params)
void region_on_poll_success(const bContext *C, ARegion *region)
void header_region_listen(const wmRegionListenerParams *params)
void region_on_user_resize(const ARegion *region)
int context(const bContext *C, const char *member, bContextDataResult *result)
int region_snap(const ARegion *region, int size, int axis)
void * region_duplicate(void *regiondata)
bool regions_poll(const RegionPollParams *params)
void header_region_init(wmWindowManager *wm, ARegion *region)
void region_draw(const bContext *C, ARegion *region)
void region_message_subscribe(const wmRegionMessageSubscribeParams *params)
void region_layout(const bContext *C, ARegion *region)
void region_free(ARegion *region)
void ED_widgetgroup_gizmo2d_resize_callbacks_set(wmGizmoGroupType *gzgt)
void ED_widgetgroup_gizmo2d_xform_callbacks_set(wmGizmoGroupType *gzgt)
void ED_widgetgroup_gizmo2d_xform_no_cage_callbacks_set(wmGizmoGroupType *gzgt)
void ED_widgetgroup_gizmo2d_rotate_callbacks_set(wmGizmoGroupType *gzgt)
static void * newdataadr(FileData *fd, const void *adr)
Definition readfile.cc:1512
int RNA_enum_from_value(const EnumPropertyItem *item, const int value)
void RNA_enum_items_add(EnumPropertyItem **items, int *totitem, const EnumPropertyItem *item)
const EnumPropertyItem rna_enum_space_image_mode_items[]
Definition rna_space.cc:300
static void image_init(Image *ima, short source, short type)
static void image_buttons_region_init(wmWindowManager *wm, ARegion *region)
static int image_context(const bContext *C, const char *member, bContextDataResult *result)
static void image_space_blend_write(BlendWriter *writer, SpaceLink *sl)
static void image_header_region_listener(const wmRegionListenerParams *params)
static void IMAGE_GGT_gizmo2d(wmGizmoGroupType *gzgt)
static void image_operatortypes()
static void IMAGE_GGT_gizmo2d_translate(wmGizmoGroupType *gzgt)
static void IMAGE_GGT_navigate(wmGizmoGroupType *gzgt)
static void image_widgets()
static void image_main_region_listener(const wmRegionListenerParams *params)
static void image_dropboxes()
static void image_space_blend_read_data(BlendDataReader *, SpaceLink *sl)
static void image_asset_shelf_region_init(wmWindowManager *wm, ARegion *region)
static void image_init(wmWindowManager *, ScrArea *area)
static void image_main_region_set_view2d(SpaceImage *sima, ARegion *region)
static void image_listener(const wmSpaceTypeListenerParams *params)
static void image_tools_region_draw(const bContext *C, ARegion *region)
static void image_space_subtype_set(ScrArea *area, int value)
static void image_foreach_id(SpaceLink *space_link, LibraryForeachIDData *data)
void ED_spacetype_image()
static void IMAGE_GGT_gizmo2d_rotate(wmGizmoGroupType *gzgt)
static void image_tools_header_region_draw(const bContext *C, ARegion *region)
static SpaceLink * image_create(const ScrArea *, const Scene *)
static void image_tools_region_listener(const wmRegionListenerParams *params)
static void image_user_refresh_scene(const bContext *C, SpaceImage *sima)
static void image_keymap(wmKeyConfig *keyconf)
static void image_tools_region_init(wmWindowManager *wm, ARegion *region)
static void image_free(SpaceLink *sl)
static int image_space_subtype_get(ScrArea *area)
static void image_header_region_draw(const bContext *C, ARegion *region)
static SpaceLink * image_duplicate(SpaceLink *sl)
static void image_main_region_init(wmWindowManager *wm, ARegion *region)
static void image_refresh(const bContext *C, ScrArea *area)
static void image_buttons_region_listener(const wmRegionListenerParams *params)
static void image_buttons_region_layout(const bContext *C, ARegion *region)
static void IMAGE_GGT_gizmo2d_resize(wmGizmoGroupType *gzgt)
static blender::StringRefNull image_space_name_get(const ScrArea *area)
static void image_id_remap(ScrArea *, SpaceLink *slink, const blender::bke::id::IDRemapper &mappings)
static void image_scopes_tag_refresh(ScrArea *area)
static void image_main_region_draw(const bContext *C, ARegion *region)
static void image_buttons_region_draw(const bContext *C, ARegion *region)
static void image_header_region_init(wmWindowManager *, ARegion *region)
static int image_space_icon_get(const ScrArea *area)
static void image_space_subtype_item_extend(bContext *, EnumPropertyItem **item, int *totitem)
bool(* poll)(const RegionPollParams *params)
void(* free)(ARegion *)
void(* on_poll_success)(const bContext *C, ARegion *region)
void(* message_subscribe)(const wmRegionMessageSubscribeParams *params)
void(* listener)(const wmRegionListenerParams *params)
void *(* duplicate)(void *poin)
bContextDataCallback context
void(* draw)(const bContext *C, ARegion *region)
void(* layout)(const bContext *C, ARegion *region)
void(* on_user_resize)(const ARegion *region)
int(* snap_size)(const ARegion *region, int size, int axis)
void(* init)(wmWindowManager *wm, ARegion *region)
ARegionRuntimeHandle * runtime
const char * name
Definition RNA_types.hh:627
Definition DNA_ID.h:404
struct Scene * scene
short source
void * first
struct Mask * mask
struct bNodeTree * nodetree
struct ToolSettings * toolsettings
ColorManagedViewSettings view_settings
struct RenderData r
ColorManagedDisplaySettings display_settings
float * waveform_3
float * waveform_2
float * vecscope_rgb
float * waveform_1
float * vecscope
ListBase handlers
ListBase spacedata
ListBase regionbase
struct Scopes scopes
float uv_face_opacity
int tile_grid_shape[2]
SpaceImageOverlay overlay
MaskSpaceInfo mask_info
struct Histogram sample_line_hist
int custom_grid_subdiv[2]
struct ImageUser iuser
struct bGPdata * gpd
struct Image * image
ListBase regionbase
float stretch_opacity
float xmax
float xmin
float ymax
float ymin
int ymin
int ymax
int xmin
int xmax
const char * idname
wmGizmoMapType_Params gzmap_params
eWM_GizmoFlagGroupTypeFlag flag
unsigned int data
Definition WM_types.hh:355
unsigned int action
Definition WM_types.hh:355
unsigned int category
Definition WM_types.hh:355
unsigned int subtype
Definition WM_types.hh:355
void * reference
Definition WM_types.hh:357
struct wmKeyConfig * defaultconf
ListBase * WM_dropboxmap_find(const char *idname, int spaceid, int regionid)
wmEventHandler_Dropbox * WM_event_add_dropbox_handler(ListBase *handlers, ListBase *dropboxes)
wmEventHandler_Keymap * WM_event_add_keymap_handler(ListBase *handlers, wmKeyMap *keymap)
wmEventHandler_Keymap * WM_event_add_keymap_handler_v2d_mask(ListBase *handlers, wmKeyMap *keymap)
wmGizmoGroupType * WM_gizmogrouptype_append(void(*wtfunc)(wmGizmoGroupType *))
wmGizmoGroupTypeRef * WM_gizmogrouptype_append_and_link(wmGizmoMapType *gzmap_type, void(*wtfunc)(wmGizmoGroupType *))
void WM_gizmomap_tag_refresh(wmGizmoMap *gzmap)
void WM_gizmomap_draw(wmGizmoMap *gzmap, const bContext *C, const eWM_GizmoFlagMapDrawStep drawstep)
wmGizmoMapType * WM_gizmomaptype_ensure(const wmGizmoMapType_Params *gzmap_params)
wmKeyMap * WM_keymap_ensure(wmKeyConfig *keyconf, const char *idname, int spaceid, int regionid)
Definition wm_keymap.cc:893
void WM_operatortype_append(void(*opfunc)(wmOperatorType *))
ViewLayer * WM_window_get_active_view_layer(const wmWindow *win)
Scene * WM_window_get_active_scene(const wmWindow *win)