56#define MAX_IMAGE_INFO_LEN 128
61 for (
bNode *node : ntree->all_nodes()) {
64 return static_cast<ImageUser *
>(node->storage);
88 if (slot->name[0] !=
'\0') {
95 int icon = ICON_BLANK1;
97 if (has_active_render) {
98 icon = ICON_RENDER_RESULT;
101 else if (slot->render !=
nullptr) {
105 block,
ButType::ButMenu,
B_NOP, icon,
str, 0, 0,
UI_UNIT_X * 5,
UI_UNIT_X,
nullptr,
"");
143 return IFACE_(
"Composite");
146 return IFACE_(
"Sequence");
162 memcpy(rnd_pt_dst, rnd_pt_src,
sizeof(*rnd_pt_src));
200 int nr = fake_name ? 1 : 0;
259 nr = (rl ==
nullptr) ? 1 : 0;
267 rpass = rpass->
next, nr++)
347 rview = rview->
prev, nr--)
427 bool changed =
false;
435 if (direction == -1) {
436 if (iuser->
layer > 0) {
441 else if (direction == 1) {
448 if (iuser->
layer < tot - 1) {
474 bool changed =
false;
475 int layer = iuser->
layer;
496 if (rpass ==
nullptr) {
501 if (direction == 1) {
503 int rp_index = iuser->
pass + 1;
505 for (rp = rpass->
next; rp; rp = rp->
next, rp_index++) {
507 iuser->
pass = rp_index;
513 else if (direction == -1) {
517 if (iuser->
pass == 0) {
524 iuser->
pass = rp_index - 1;
560 const short *render_slot)
566 int wmenu1, wmenu2, wmenu3, wmenu4;
567 const char *fake_name;
568 const char *display_name =
"";
571 if (iuser->
scene ==
nullptr) {
578 wmenu1 = (2 *
w) / 5;
579 wmenu2 = (3 *
w) / 5;
580 wmenu3 = (3 *
w) / 6;
581 wmenu4 = (3 *
w) / 6;
583 rnd_pt_local.
image = image;
584 rnd_pt_local.
iuser = iuser;
591 if (slot && slot->
name[0] !=
'\0') {
614 rpass_index = iuser->
layer - (fake_name ? 1 : 0);
619 display_name = rl ? rl->
name : (fake_name ? fake_name :
"");
629 TIP_(
"Select Layer"));
640 display_name = rpass ? rpass->
name :
"";
650 TIP_(
"Select Pass"));
662 display_name = rview ? rview->
name :
"";
673 TIP_(
"Select View"));
687 if (nr++ == iuser->
view) {
688 display_name = iv->name;
702 TIP_(
"Select View"));
743 printf(
"%s: property not found: %s.%s\n",
751 printf(
"%s: expected pointer property for %s.%s\n",
771 if (!compact && (space_image ==
nullptr || iuser != &space_image->
iuser)) {
773 layout,
C,
ptr, propname, ima ?
nullptr :
"IMAGE_OT_new",
"IMAGE_OT_open",
nullptr);
775 if (ima !=
nullptr) {
780 if (ima ==
nullptr) {
794 const int menus_width = 230 * dpi_fac;
821 row->
op(
"image.save",
IFACE_(
"Save"), ICON_NONE);
822 row->
op(
"image.reload",
IFACE_(
"Discard"), ICON_NONE);
826 layout = &layout->
column(
false);
833 col->use_property_split_set(
true);
846 row->
op(
"image.unpack",
"", ICON_PACKAGE);
849 row->
op(
"image.pack",
"", ICON_UGLYPACKAGE);
852 row = &row->
row(
true);
857 row->
op(
"image.file_browse",
"", ICON_FILEBROWSER);
858 row->
op(
"image.reload",
"", ICON_FILE_REFRESH);
867 col->use_property_split_set(
true);
873 col->prop(&imaptr,
"use_generated_float",
UI_ITEM_NONE, std::nullopt, ICON_NONE);
880 col->prop(&imaptr,
"generated_color",
UI_ITEM_NONE, std::nullopt, ICON_NONE);
883 else if (compact == 0) {
898 col->use_property_split_set(
true);
903 row->
op(
"IMAGE_OT_match_movie_length",
"", ICON_FILE_REFRESH);
908 col->prop(userptr,
"use_cyclic",
UI_ITEM_NONE, std::nullopt, ICON_NONE);
909 col->prop(userptr,
"use_auto_refresh",
UI_ITEM_NONE, std::nullopt, ICON_NONE);
917 if (multiview && compact == 0) {
922 col->use_property_split_set(
true);
923 col->prop(&imaptr,
"use_multiview",
UI_ITEM_NONE, std::nullopt, ICON_NONE);
936 col->use_property_split_set(
true);
954 col->prop(&imaptr,
"use_half_precision",
UI_ITEM_NONE, std::nullopt, ICON_NONE);
960 col->prop(&imaptr,
"use_view_as_render",
UI_ITEM_NONE, std::nullopt, ICON_NONE);
961 col->prop(&imaptr,
"seam_margin",
UI_ITEM_NONE, std::nullopt, ICON_NONE);
971 bool color_management,
972 const char *panel_idname)
981 const bool is_render_out = (
id &&
GS(id->
name) ==
ID_SCE);
987 col->use_property_split_set(
true);
988 col->use_property_decorate_set(
false);
991 const bool is_file_output = (
id &&
GS(id->
name) ==
ID_NT);
992 if (!is_file_output) {
993 col->prop(imfptr,
"media_type",
UI_ITEM_NONE, std::nullopt, ICON_NONE);
999 col->prop(imfptr,
"file_format",
UI_ITEM_NONE, std::nullopt, ICON_NONE);
1025 col->prop(imfptr,
"compression",
UI_ITEM_NONE, std::nullopt, ICON_NONE);
1029 col->prop(imfptr,
"exr_codec",
UI_ITEM_NONE, std::nullopt, ICON_NONE);
1035 col->prop(imfptr,
"use_exr_interleave",
UI_ITEM_NONE, std::nullopt, ICON_NONE);
1039 col->prop(imfptr,
"use_preview",
UI_ITEM_NONE, std::nullopt, ICON_NONE);
1043 col->prop(imfptr,
"jpeg2k_codec",
UI_ITEM_NONE, std::nullopt, ICON_NONE);
1045 col->prop(imfptr,
"use_jpeg2k_cinema_preset",
UI_ITEM_NONE, std::nullopt, ICON_NONE);
1046 col->prop(imfptr,
"use_jpeg2k_cinema_48",
UI_ITEM_NONE, std::nullopt, ICON_NONE);
1048 col->prop(imfptr,
"use_jpeg2k_ycc",
UI_ITEM_NONE, std::nullopt, ICON_NONE);
1052 col->prop(imfptr,
"use_cineon_log",
UI_ITEM_NONE, std::nullopt, ICON_NONE);
1057 col->label(
RPT_(
"Hard coded Non-Linear, Gamma:1.7"), ICON_NONE);
1059 col->prop(imfptr,
"use_cineon_log",
UI_ITEM_NONE, std::nullopt, ICON_NONE);
1060 col->prop(imfptr,
"cineon_black",
UI_ITEM_NONE, std::nullopt, ICON_NONE);
1061 col->prop(imfptr,
"cineon_white",
UI_ITEM_NONE, std::nullopt, ICON_NONE);
1062 col->prop(imfptr,
"cineon_gamma",
UI_ITEM_NONE, std::nullopt, ICON_NONE);
1067 col->prop(imfptr,
"tiff_codec",
UI_ITEM_NONE, std::nullopt, ICON_NONE);
1071 if (color_management) {
1073 panel_idname ? panel_idname :
"settings_color_management",
1075 IFACE_(
"Color Management")))
1078 panel->row(
true).prop(imfptr,
"color_management",
UI_ITEM_R_EXPAND,
" ", ICON_NONE);
1084 color_settings->
prop(
1090 color_settings->
prop(
1091 &display_settings_ptr,
"display_device",
UI_ITEM_NONE, std::nullopt, ICON_NONE);
1105 col->prop(stereo3d_format_ptr,
"display_mode",
UI_ITEM_NONE, std::nullopt, ICON_NONE);
1109 col->prop(stereo3d_format_ptr,
"anaglyph_type",
UI_ITEM_NONE, std::nullopt, ICON_NONE);
1113 col->prop(stereo3d_format_ptr,
"interlace_type",
UI_ITEM_NONE, std::nullopt, ICON_NONE);
1114 col->prop(stereo3d_format_ptr,
"use_interlace_swap",
UI_ITEM_NONE, std::nullopt, ICON_NONE);
1119 stereo3d_format_ptr,
"use_sidebyside_crosseyed",
UI_ITEM_NONE, std::nullopt, ICON_NONE);
1123 col->prop(stereo3d_format_ptr,
"use_squeezed_frame",
UI_ITEM_NONE, std::nullopt, ICON_NONE);
1137 col->use_property_split_set(
true);
1138 col->use_property_decorate_set(
false);
1169 if (
ptr !=
nullptr) {
1198 const int menus_width = 160 * dpi_fac;
1204 layout, ima, rr, iuser, menus_width, is_render_result ? &ima->
render_slot :
nullptr);
1211 if (ima ==
nullptr || iuser ==
nullptr) {
1222 if (ibuf ==
nullptr) {
1223 col->label(
RPT_(
"Cannot Load Image"), ICON_NONE);
1264 col->label(
str, ICON_NONE);
1296 col->label(
str, ICON_NONE);
1302#undef MAX_IMAGE_INFO_LEN
1307 return space_image !=
nullptr && space_image->
image !=
nullptr;
1316 if (ibuf !=
nullptr) {
SpaceImage * CTX_wm_space_image(const bContext *C)
Scene * CTX_data_scene(const bContext *C)
RenderSlot * BKE_image_get_renderslot(Image *ima, int index)
ImBuf * BKE_image_acquire_ibuf(Image *ima, ImageUser *iuser, void **r_lock)
bool BKE_image_has_alpha(Image *image)
void BKE_image_user_frame_calc(Image *ima, ImageUser *iuser, int cfra)
bool BKE_image_has_filepath(const Image *ima)
RenderPass * BKE_image_multilayer_index(RenderResult *rr, ImageUser *iuser)
void BKE_image_release_ibuf(Image *ima, ImBuf *ibuf, void *lock)
bool BKE_image_is_dirty(Image *image)
void BKE_image_release_renderresult(Scene *scene, Image *ima, RenderResult *render_result)
int BKE_image_user_frame_get(const ImageUser *iuser, int cfra, bool *r_is_in_range)
bool BKE_image_has_anim(Image *image)
bool BKE_image_is_stereo(const Image *ima)
bool BKE_image_is_multiview(const Image *ima)
bool BKE_image_has_packedfile(const Image *image)
bool BKE_image_is_animated(Image *image)
RenderResult * BKE_image_acquire_renderresult(Scene *scene, Image *ima)
void BKE_image_multiview_index(const Image *ima, ImageUser *iuser)
@ PANEL_TYPE_DEFAULT_CLOSED
void * BLI_findlink(const ListBase *listbase, int number) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
LinkData * BLI_genericNodeN(void *data)
#define LISTBASE_FOREACH(type, var, list)
BLI_INLINE void BLI_listbase_clear(ListBase *lb)
void void BLI_freelistN(ListBase *listbase) ATTR_NONNULL(1)
void BLI_addtail(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
#define LISTBASE_FOREACH_INDEX(type, var, list, index_var)
int BLI_listbase_count_at_most(const ListBase *listbase, int count_max) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void * BLI_findstring_ptr(const ListBase *listbase, const char *id, int offset) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
int BLI_listbase_count(const ListBase *listbase) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void void void const char * BLI_path_basename(const char *path) ATTR_NONNULL(1) ATTR_WARN_UNUSED_RESULT
#define SNPRINTF_UTF8(dst, format,...)
char size_t BLI_strncpy_utf8_rlen(char *__restrict dst, const char *__restrict src, size_t dst_maxncpy) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1
size_t BLI_snprintf_utf8_rlen(char *__restrict dst, size_t dst_maxncpy, const char *__restrict format,...) ATTR_NONNULL(1
#define STRNCPY_UTF8(dst, src)
#define BLT_I18NCONTEXT_DEFAULT_BPYRNA
struct ImageUser ImageUser
@ R_IMF_COLOR_MANAGEMENT_OVERRIDE
@ R_IMF_IMTYPE_MULTILAYER
bool ED_image_slot_cycle(Image *image, int direction)
void ED_region_image_metadata_panel_draw(ImBuf *ibuf, uiLayout *layout)
const char * GPU_texture_format_name(blender::gpu::TextureFormat format)
bool IMB_colormanagement_space_name_is_data(const char *name)
blender::gpu::TextureFormat IMB_gpu_get_texture_format(const ImBuf *ibuf, bool high_bitdepth, bool use_grayscale)
bool IMB_gpu_get_compressed_format(const ImBuf *ibuf, blender::gpu::TextureFormat *r_texture_format)
#define OPENEXR_CODEC_MASK
Read Guarded memory(de)allocation.
void UI_but_func_set(uiBut *but, std::function< void(bContext &)> func)
void * but_func_argN_copy(const void *argN)
void but_func_argN_free(void *argN)
uiBut * uiDefIconTextBut(uiBlock *block, uiButTypeWithPointerType but_and_ptr_type, int retval, int icon, blender::StringRef str, int x, int y, short width, short height, void *poin, std::optional< blender::StringRef > tip)
uiBut * uiDefMenuBut(uiBlock *block, uiMenuCreateFunc func, void *arg, blender::StringRef str, int x, int y, short width, short height, std::optional< blender::StringRef > tip)
void UI_but_func_menu_step_set(uiBut *but, uiMenuStepFunc func)
void uiTemplateColormanagedViewSettings(uiLayout *layout, bContext *C, PointerRNA *ptr, blender::StringRefNull propname)
uiBut * uiDefButS(uiBlock *block, ButType type, int retval, blender::StringRef str, int x, int y, short width, short height, short *poin, float min, float max, std::optional< blender::StringRef > tip)
uiBut * uiDefAutoButR(uiBlock *block, PointerRNA *ptr, PropertyRNA *prop, int index, std::optional< blender::StringRef > name, int icon, int x, int y, int width, int height)
void UI_but_type_set_menu_from_pulldown(uiBut *but)
void uiTemplateID(uiLayout *layout, const bContext *C, PointerRNA *ptr, blender::StringRefNull propname, const char *newop, const char *openop, const char *unlinkop, int filter=UI_TEMPLATE_ID_FILTER_ALL, bool live_icon=false, std::optional< blender::StringRef > text=std::nullopt)
void UI_block_funcN_set(uiBlock *block, uiButHandleNFunc funcN, void *argN, void *arg2, uiButArgNFree func_argN_free_fn=MEM_freeN, uiButArgNCopy func_argN_copy_fn=MEM_dupallocN)
void uiTemplateColorspaceSettings(uiLayout *layout, PointerRNA *ptr, blender::StringRefNull propname)
void UI_but_funcN_set(uiBut *but, uiButHandleNFunc funcN, void *argN, void *arg2, uiButArgNFree func_argN_free_fn=MEM_freeN, uiButArgNCopy func_argN_copy_fn=MEM_dupallocN)
uiBut * uiDefBut(uiBlock *block, uiButTypeWithPointerType but_and_ptr_type, int retval, blender::StringRef str, int x, int y, short width, short height, void *poin, float min, float max, std::optional< blender::StringRef > tip)
BMesh const char void * data
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
constexpr const char * c_str() const
static void rna_update_cb(bContext &C, const RNAUpdateCb &cb)
void * MEM_mallocN(size_t len, const char *str)
void * MEM_callocN(size_t len, const char *str)
int MOV_get_duration_frames(MovieReader *anim, IMB_Timecode_Type tc)
void block_layout_set_current(uiBlock *block, uiLayout *layout)
bool RE_HasCombinedLayer(const RenderResult *result)
RenderView * RE_RenderViewGetById(RenderResult *rr, const int view_id)
bool RE_RenderResult_is_stereo(const RenderResult *result)
PointerRNA RNA_pointer_get(PointerRNA *ptr, const char *name)
PropertyRNA * RNA_struct_find_property(PointerRNA *ptr, const char *identifier)
PropertyType RNA_property_type(PropertyRNA *prop)
PointerRNA RNA_property_pointer_get(PointerRNA *ptr, PropertyRNA *prop)
void RNA_property_update(bContext *C, PointerRNA *ptr, PropertyRNA *prop)
const char * RNA_struct_identifier(const StructRNA *type)
bool RNA_boolean_get(PointerRNA *ptr, const char *name)
int RNA_enum_get(PointerRNA *ptr, const char *name)
bool RE_passes_have_name(RenderLayer *rl)
bool RE_layers_have_name(RenderResult *result)
Render * RE_GetSceneRender(const Scene *scene)
char filepath[IMB_FILEPATH_SIZE]
ImBufFloatBuffer float_buffer
ImbFormatOptions foptions
ImBufByteBuffer byte_buffer
ColorManagedColorspaceSettings colorspace_settings
void(* draw)(const bContext *C, Panel *panel)
char idname[BKE_ST_MAXNAME]
bool(* poll)(const bContext *C, PanelType *pt)
char translation_context[BKE_ST_MAXNAME]
char category[BKE_ST_MAXNAME]
char label[BKE_ST_MAXNAME]
struct RenderLayer * next
void use_property_decorate_set(bool is_sep)
uiLayout & column(bool align)
void active_set(bool active)
void separator(float factor=1.0f, LayoutSeparatorType type=LayoutSeparatorType::Auto)
void enabled_set(bool enabled)
void context_ptr_set(blender::StringRef name, const PointerRNA *ptr)
uiLayout & row(bool align)
PointerRNA op(wmOperatorType *ot, std::optional< blender::StringRef > name, int icon, blender::wm::OpCallContext context, eUI_Item_Flag flag)
void prop(PointerRNA *ptr, PropertyRNA *prop, int index, int value, eUI_Item_Flag flag, std::optional< blender::StringRef > name_opt, int icon, std::optional< blender::StringRef > placeholder=std::nullopt)
void * BKE_image_get_tile
void WM_event_add_notifier(const bContext *C, uint type, void *reference)