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:
-rw-r--r--release/scripts/startup/bl_ui/__init__.py1
-rw-r--r--release/scripts/startup/bl_ui/properties_grease_pencil_common.py43
-rw-r--r--release/scripts/startup/bl_ui/space_clip.py21
-rw-r--r--release/scripts/startup/bl_ui/space_image.py316
-rw-r--r--source/blender/blenkernel/BKE_blender.h2
-rw-r--r--source/blender/blenloader/intern/versioning_260.c35
-rw-r--r--source/blender/editors/space_image/image_buttons.c14
-rw-r--r--source/blender/editors/space_image/image_intern.h4
-rw-r--r--source/blender/editors/space_image/space_image.c56
9 files changed, 302 insertions, 190 deletions
diff --git a/release/scripts/startup/bl_ui/__init__.py b/release/scripts/startup/bl_ui/__init__.py
index b1b1d0a4d73..793cbf8ce80 100644
--- a/release/scripts/startup/bl_ui/__init__.py
+++ b/release/scripts/startup/bl_ui/__init__.py
@@ -43,6 +43,7 @@ _modules = [
"properties_material",
"properties_object",
"properties_paint_common",
+ "properties_grease_pencil_common",
"properties_particle",
"properties_physics_cloth",
"properties_physics_common",
diff --git a/release/scripts/startup/bl_ui/properties_grease_pencil_common.py b/release/scripts/startup/bl_ui/properties_grease_pencil_common.py
new file mode 100644
index 00000000000..08796eeec0e
--- /dev/null
+++ b/release/scripts/startup/bl_ui/properties_grease_pencil_common.py
@@ -0,0 +1,43 @@
+# ##### BEGIN GPL LICENSE BLOCK #####
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# ##### END GPL LICENSE BLOCK #####
+
+# <pep8 compliant>
+
+class GreasePencilPanel():
+ # subclass must set
+ # bl_space_type = 'IMAGE_EDITOR'
+ # bl_region_type = 'TOOLS'
+ bl_label = "Grease Pencil"
+
+ @staticmethod
+ def draw(self, context):
+ layout = self.layout
+
+ col = layout.column(align=True)
+
+ row = col.row(align=True)
+ row.operator("gpencil.draw", text="Draw").mode = 'DRAW'
+ row.operator("gpencil.draw", text="Line").mode = 'DRAW_STRAIGHT'
+
+ row = col.row(align=True)
+ row.operator("gpencil.draw", text="Poly").mode = 'DRAW_POLY'
+ row.operator("gpencil.draw", text="Erase").mode = 'ERASER'
+
+ row = col.row(align=True)
+ row.prop(context.tool_settings, "use_grease_pencil_sessions")
+
diff --git a/release/scripts/startup/bl_ui/space_clip.py b/release/scripts/startup/bl_ui/space_clip.py
index 00c2f7ae9e5..9114a31923f 100644
--- a/release/scripts/startup/bl_ui/space_clip.py
+++ b/release/scripts/startup/bl_ui/space_clip.py
@@ -21,7 +21,7 @@
import bpy
from bpy.types import Panel, Header, Menu, UIList
from bpy.app.translations import pgettext_iface as iface_
-
+from bl_ui.properties_grease_pencil_common import GreasePencilPanel
class CLIP_UL_tracking_objects(UIList):
def draw_item(self, context, layout, data, item, icon,
@@ -1043,28 +1043,11 @@ class CLIP_PT_tools_mask(MASK_PT_tools, Panel):
# --- end mask ---
-class CLIP_PT_tools_grease_pencil(Panel):
+class CLIP_PT_tools_grease_pencil(GreasePencilPanel, Panel):
bl_space_type = 'CLIP_EDITOR'
bl_region_type = 'TOOLS'
- bl_label = "Grease Pencil"
bl_category = "Grease Pencil"
- def draw(self, context):
- layout = self.layout
-
- col = layout.column(align=True)
-
- row = col.row(align=True)
- row.operator("gpencil.draw", text="Draw").mode = 'DRAW'
- row.operator("gpencil.draw", text="Line").mode = 'DRAW_STRAIGHT'
-
- row = col.row(align=True)
- row.operator("gpencil.draw", text="Poly").mode = 'DRAW_POLY'
- row.operator("gpencil.draw", text="Erase").mode = 'ERASER'
-
- row = col.row(align=True)
- row.prop(context.tool_settings, "use_grease_pencil_sessions")
-
class CLIP_PT_footage(CLIP_PT_clip_view_panel, Panel):
bl_space_type = 'CLIP_EDITOR'
diff --git a/release/scripts/startup/bl_ui/space_image.py b/release/scripts/startup/bl_ui/space_image.py
index fdc5be4db8d..10d292bd8d5 100644
--- a/release/scripts/startup/bl_ui/space_image.py
+++ b/release/scripts/startup/bl_ui/space_image.py
@@ -24,17 +24,20 @@ from bl_ui.properties_paint_common import (
brush_texture_settings,
brush_mask_texture_settings,
)
+from bl_ui.properties_grease_pencil_common import GreasePencilPanel
from bpy.app.translations import pgettext_iface as iface_
class ImagePaintPanel(UnifiedPaintPanel):
bl_space_type = 'IMAGE_EDITOR'
- bl_region_type = 'UI'
+ bl_region_type = 'TOOLS'
+ bl_category = "Tools"
class BrushButtonsPanel:
bl_space_type = 'IMAGE_EDITOR'
- bl_region_type = 'UI'
+ bl_region_type = 'TOOLS'
+ bl_category = "Tools"
@classmethod
def poll(cls, context):
@@ -42,6 +45,15 @@ class BrushButtonsPanel:
toolsettings = context.tool_settings.image_paint
return sima.show_paint and toolsettings.brush
+class UVToolsPanel:
+ bl_space_type = 'IMAGE_EDITOR'
+ bl_region_type = 'TOOLS'
+ bl_category = "Tools"
+
+ @classmethod
+ def poll(cls, context):
+ sima = context.space_data
+ return sima.show_uvedit and not context.tool_settings.use_uv_sculpt
class IMAGE_MT_view(Menu):
bl_label = "View"
@@ -466,6 +478,42 @@ class MASK_MT_editor_menus(Menu):
layout.menu("MASK_MT_mask")
+# -----------------------------------------------------------------------------
+# Mask (similar code in space_clip.py, keep in sync)
+# note! - panel placement does _not_ fit well with image panels... need to fix
+
+from bl_ui.properties_mask_common import (MASK_PT_mask,
+ MASK_PT_layers,
+ MASK_PT_spline,
+ MASK_PT_point,
+ MASK_PT_display,
+ MASK_PT_tools)
+
+
+class IMAGE_PT_mask(MASK_PT_mask, Panel):
+ bl_space_type = 'IMAGE_EDITOR'
+ bl_region_type = 'UI'
+
+class IMAGE_PT_mask_layers(MASK_PT_layers, Panel):
+ bl_space_type = 'IMAGE_EDITOR'
+ bl_region_type = 'UI'
+
+
+class IMAGE_PT_mask_display(MASK_PT_display, Panel):
+ bl_space_type = 'IMAGE_EDITOR'
+ bl_region_type = 'UI'
+
+
+class IMAGE_PT_active_mask_spline(MASK_PT_spline, Panel):
+ bl_space_type = 'IMAGE_EDITOR'
+ bl_region_type = 'UI'
+
+
+class IMAGE_PT_active_mask_point(MASK_PT_point, Panel):
+ bl_space_type = 'IMAGE_EDITOR'
+ bl_region_type = 'UI'
+
+
class IMAGE_PT_image_properties(Panel):
bl_space_type = 'IMAGE_EDITOR'
bl_region_type = 'UI'
@@ -494,7 +542,7 @@ class IMAGE_PT_game_properties(Panel):
def poll(cls, context):
sima = context.space_data
# display even when not in game mode because these settings effect the 3d view
- return (sima and sima.image) # and (rd.engine == 'BLENDER_GAME')
+ return (sima and sima.image and not sima.show_maskedit) # and (rd.engine == 'BLENDER_GAME')
def draw(self, context):
layout = self.layout
@@ -526,112 +574,6 @@ class IMAGE_PT_game_properties(Panel):
col.prop(ima, "mapping", expand=True)
-class IMAGE_PT_view_histogram(Panel):
- bl_space_type = 'IMAGE_EDITOR'
- bl_region_type = 'PREVIEW'
- bl_label = "Histogram"
-
- @classmethod
- def poll(cls, context):
- sima = context.space_data
- return (sima and sima.image)
-
- def draw(self, context):
- layout = self.layout
-
- sima = context.space_data
- hist = sima.scopes.histogram
-
- layout.template_histogram(sima.scopes, "histogram")
- row = layout.row(align=True)
- row.prop(hist, "mode", expand=True)
- row.prop(hist, "show_line", text="")
-
-
-class IMAGE_PT_view_waveform(Panel):
- bl_space_type = 'IMAGE_EDITOR'
- bl_region_type = 'PREVIEW'
- bl_label = "Waveform"
-
- @classmethod
- def poll(cls, context):
- sima = context.space_data
- return (sima and sima.image)
-
- def draw(self, context):
- layout = self.layout
-
- sima = context.space_data
-
- layout.template_waveform(sima, "scopes")
- row = layout.split(percentage=0.75)
- row.prop(sima.scopes, "waveform_alpha")
- row.prop(sima.scopes, "waveform_mode", icon_only=True)
-
-
-class IMAGE_PT_view_vectorscope(Panel):
- bl_space_type = 'IMAGE_EDITOR'
- bl_region_type = 'PREVIEW'
- bl_label = "Vectorscope"
-
- @classmethod
- def poll(cls, context):
- sima = context.space_data
- return (sima and sima.image)
-
- def draw(self, context):
- layout = self.layout
-
- sima = context.space_data
- layout.template_vectorscope(sima, "scopes")
- layout.prop(sima.scopes, "vectorscope_alpha")
-
-
-class IMAGE_PT_sample_line(Panel):
- bl_space_type = 'IMAGE_EDITOR'
- bl_region_type = 'PREVIEW'
- bl_label = "Sample Line"
-
- @classmethod
- def poll(cls, context):
- sima = context.space_data
- return (sima and sima.image)
-
- def draw(self, context):
- layout = self.layout
-
- sima = context.space_data
- hist = sima.sample_histogram
-
- layout.operator("image.sample_line")
- layout.template_histogram(sima, "sample_histogram")
- row = layout.row(align=True)
- row.prop(hist, "mode", expand=True)
- row.prop(hist, "show_line", text="")
-
-
-class IMAGE_PT_scope_sample(Panel):
- bl_space_type = 'IMAGE_EDITOR'
- bl_region_type = 'PREVIEW'
- bl_label = "Scope Samples"
-
- @classmethod
- def poll(cls, context):
- sima = context.space_data
- return sima
-
- def draw(self, context):
- layout = self.layout
-
- sima = context.space_data
-
- row = layout.row()
- row.prop(sima.scopes, "use_full_resolution")
- sub = row.row()
- sub.active = not sima.scopes.use_full_resolution
- sub.prop(sima.scopes, "accuracy")
-
-
class IMAGE_PT_view_properties(Panel):
bl_space_type = 'IMAGE_EDITOR'
bl_region_type = 'UI'
@@ -692,11 +634,28 @@ class IMAGE_PT_view_properties(Panel):
sub.row().prop(uvedit, "draw_stretch_type", expand=True)
+class IMAGE_PT_tools_transform_uvs(Panel, UVToolsPanel):
+ bl_label = "Transform"
+
+ @classmethod
+ def poll(cls, context):
+ sima = context.space_data
+ return sima.show_uvedit and not context.tool_settings.use_uv_sculpt
+
+ def draw(self, context):
+ layout = self.layout
+
+ col = layout.column(align=True)
+ col.operator("transform.translate")
+ col.operator("transform.rotate")
+ col.operator("transform.resize", text="Scale")
+ col.separator()
+
+ col.operator("transform.shear")
+
class IMAGE_PT_paint(Panel, ImagePaintPanel):
- bl_space_type = 'IMAGE_EDITOR'
- bl_region_type = 'UI'
bl_label = "Paint"
-
+
@classmethod
def poll(cls, context):
sima = context.space_data
@@ -952,8 +911,9 @@ class IMAGE_PT_tools_brush_appearance(BrushButtonsPanel, Panel):
class IMAGE_UV_sculpt_curve(Panel):
bl_space_type = 'IMAGE_EDITOR'
- bl_region_type = 'UI'
+ bl_region_type = 'TOOLS'
bl_label = "UV Sculpt Curve"
+ bl_category = "Tools"
bl_options = {'DEFAULT_CLOSED'}
@classmethod
@@ -982,7 +942,8 @@ class IMAGE_UV_sculpt_curve(Panel):
class IMAGE_UV_sculpt(Panel, ImagePaintPanel):
bl_space_type = 'IMAGE_EDITOR'
- bl_region_type = 'UI'
+ bl_region_type = 'TOOLS'
+ bl_category = "Tools"
bl_label = "UV Sculpt"
@classmethod
@@ -1018,48 +979,129 @@ class IMAGE_UV_sculpt(Panel, ImagePaintPanel):
col.prop(toolsettings, "uv_relax_method")
-# -----------------------------------------------------------------------------
-# Mask (similar code in space_clip.py, keep in sync)
-# note! - panel placement does _not_ fit well with image panels... need to fix
-
-from bl_ui.properties_mask_common import (MASK_PT_mask,
- MASK_PT_layers,
- MASK_PT_spline,
- MASK_PT_point,
- MASK_PT_display,
- MASK_PT_tools)
+class IMAGE_PT_tools_mask(MASK_PT_tools, Panel):
+ bl_space_type = 'IMAGE_EDITOR'
+ bl_region_type = 'TOOLS'
+ bl_category = 'Mask'
+# --- end mask ---
-class IMAGE_PT_mask(MASK_PT_mask, Panel):
+class IMAGE_PT_view_histogram(Panel):
bl_space_type = 'IMAGE_EDITOR'
- bl_region_type = 'PREVIEW'
+ bl_region_type = 'TOOLS'
+ bl_label = "Histogram"
+ bl_category = "Scopes"
+ @classmethod
+ def poll(cls, context):
+ sima = context.space_data
+ return (sima and sima.image)
-class IMAGE_PT_mask_layers(MASK_PT_layers, Panel):
+ def draw(self, context):
+ layout = self.layout
+
+ sima = context.space_data
+ hist = sima.scopes.histogram
+
+ layout.template_histogram(sima.scopes, "histogram")
+ row = layout.row(align=True)
+ row.prop(hist, "mode", expand=True)
+ row.prop(hist, "show_line", text="")
+
+
+class IMAGE_PT_view_waveform(Panel):
bl_space_type = 'IMAGE_EDITOR'
- bl_region_type = 'PREVIEW'
+ bl_region_type = 'TOOLS'
+ bl_label = "Waveform"
+ bl_category = "Scopes"
+
+ @classmethod
+ def poll(cls, context):
+ sima = context.space_data
+ return (sima and sima.image)
+ def draw(self, context):
+ layout = self.layout
-class IMAGE_PT_mask_display(MASK_PT_display, Panel):
+ sima = context.space_data
+
+ layout.template_waveform(sima, "scopes")
+ row = layout.split(percentage=0.75)
+ row.prop(sima.scopes, "waveform_alpha")
+ row.prop(sima.scopes, "waveform_mode", icon_only=True)
+
+
+class IMAGE_PT_view_vectorscope(Panel):
bl_space_type = 'IMAGE_EDITOR'
- bl_region_type = 'PREVIEW'
+ bl_region_type = 'TOOLS'
+ bl_label = "Vectorscope"
+ bl_category = "Scopes"
+
+ @classmethod
+ def poll(cls, context):
+ sima = context.space_data
+ return (sima and sima.image)
+ def draw(self, context):
+ layout = self.layout
-class IMAGE_PT_active_mask_spline(MASK_PT_spline, Panel):
+ sima = context.space_data
+ layout.template_vectorscope(sima, "scopes")
+ layout.prop(sima.scopes, "vectorscope_alpha")
+
+
+class IMAGE_PT_sample_line(Panel):
bl_space_type = 'IMAGE_EDITOR'
- bl_region_type = 'PREVIEW'
+ bl_region_type = 'TOOLS'
+ bl_label = "Sample Line"
+ bl_category = "Scopes"
+ @classmethod
+ def poll(cls, context):
+ sima = context.space_data
+ return (sima and sima.image)
-class IMAGE_PT_active_mask_point(MASK_PT_point, Panel):
+ def draw(self, context):
+ layout = self.layout
+
+ sima = context.space_data
+ hist = sima.sample_histogram
+
+ layout.operator("image.sample_line")
+ layout.template_histogram(sima, "sample_histogram")
+ row = layout.row(align=True)
+ row.prop(hist, "mode", expand=True)
+ row.prop(hist, "show_line", text="")
+
+
+class IMAGE_PT_scope_sample(Panel):
bl_space_type = 'IMAGE_EDITOR'
- bl_region_type = 'PREVIEW'
+ bl_region_type = 'TOOLS'
+ bl_label = "Scope Samples"
+ bl_category = "Scopes"
+ @classmethod
+ def poll(cls, context):
+ sima = context.space_data
+ return sima
-class IMAGE_PT_tools_mask(MASK_PT_tools, Panel):
+ def draw(self, context):
+ layout = self.layout
+
+ sima = context.space_data
+
+ row = layout.row()
+ row.prop(sima.scopes, "use_full_resolution")
+ sub = row.row()
+ sub.active = not sima.scopes.use_full_resolution
+ sub.prop(sima.scopes, "accuracy")
+
+
+class IMAGE_PT_tools_grease_pencil(GreasePencilPanel, Panel):
bl_space_type = 'IMAGE_EDITOR'
- bl_region_type = 'UI' # is 'TOOLS' in the clip editor
+ bl_region_type = 'TOOLS'
+ bl_category = "Grease Pencil"
-# --- end mask ---
if __name__ == "__main__": # only for live edit.
bpy.utils.register_module(__name__)
diff --git a/source/blender/blenkernel/BKE_blender.h b/source/blender/blenkernel/BKE_blender.h
index 960ca1b1d20..2e9e6f2db3a 100644
--- a/source/blender/blenkernel/BKE_blender.h
+++ b/source/blender/blenkernel/BKE_blender.h
@@ -42,7 +42,7 @@ extern "C" {
* and keep comment above the defines.
* Use STRINGIFY() rather than defining with quotes */
#define BLENDER_VERSION 269
-#define BLENDER_SUBVERSION 10
+#define BLENDER_SUBVERSION 11
/* 262 was the last editmesh release but it has compatibility code for bmesh data */
#define BLENDER_MINVERSION 262
#define BLENDER_MINSUBVERSION 0
diff --git a/source/blender/blenloader/intern/versioning_260.c b/source/blender/blenloader/intern/versioning_260.c
index 2880fec698b..18ba048e5a1 100644
--- a/source/blender/blenloader/intern/versioning_260.c
+++ b/source/blender/blenloader/intern/versioning_260.c
@@ -2672,6 +2672,41 @@ void blo_do_versions_260(FileData *fd, Library *UNUSED(lib), Main *main)
}
}
+ if (!MAIN_VERSION_ATLEAST(main, 269, 11)) {
+ bScreen *sc;
+
+ for (sc = main->screen.first; sc; sc = sc->id.next) {
+ ScrArea *sa;
+ for (sa = sc->areabase.first; sa; sa = sa->next) {
+ SpaceLink *space_link;
+
+ for (space_link = sa->spacedata.first; space_link; space_link = space_link->next) {
+ if (space_link->spacetype == SPACE_IMAGE) {
+ ARegion *ar;
+ ListBase *lb;
+
+ if (space_link == sa->spacedata.first) {
+ lb = &sa->regionbase;
+ }
+ else {
+ lb = &space_link->regionbase;
+ }
+
+ for (ar = lb->first; ar; ar = ar->next) {
+ if (ar->regiontype == RGN_TYPE_PREVIEW) {
+ ar->regiontype = RGN_TYPE_TOOLS;
+ ar->alignment = RGN_ALIGN_LEFT;
+ }
+ else if (ar->regiontype == RGN_TYPE_UI) {
+ ar->alignment = RGN_ALIGN_RIGHT;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
if (!DNA_struct_elem_find(fd->filesdna, "BevelModifierData", "float", "profile")) {
Object *ob;
diff --git a/source/blender/editors/space_image/image_buttons.c b/source/blender/editors/space_image/image_buttons.c
index 6b0f4a0615c..21f54a86df4 100644
--- a/source/blender/editors/space_image/image_buttons.c
+++ b/source/blender/editors/space_image/image_buttons.c
@@ -948,6 +948,7 @@ void uiTemplateImageLayers(uiLayout *layout, bContext *C, Image *ima, ImageUser
void image_buttons_register(ARegionType *art)
{
PanelType *pt;
+ const char *category = "Grease Pencil";
pt = MEM_callocN(sizeof(PanelType), "spacetype image panel gpencil");
strcpy(pt->idname, "IMAGE_PT_gpencil");
@@ -955,6 +956,7 @@ void image_buttons_register(ARegionType *art)
strcpy(pt->translation_context, BLF_I18NCONTEXT_DEFAULT_BPYRNA);
pt->draw_header = gpencil_panel_standard_header;
pt->draw = gpencil_panel_standard;
+ BLI_strncpy(pt->category, category, BLI_strlen_utf8(category));
BLI_addtail(&art->paneltypes, pt);
}
@@ -985,7 +987,7 @@ void IMAGE_OT_properties(wmOperatorType *ot)
static int image_scopes_toggle_exec(bContext *C, wmOperator *UNUSED(op))
{
ScrArea *sa = CTX_wm_area(C);
- ARegion *ar = image_has_scope_region(sa);
+ ARegion *ar = image_has_tools_region(sa);
if (ar)
ED_region_toggle_hidden(C, ar);
@@ -993,12 +995,12 @@ static int image_scopes_toggle_exec(bContext *C, wmOperator *UNUSED(op))
return OPERATOR_FINISHED;
}
-void IMAGE_OT_scopes(wmOperatorType *ot)
+void IMAGE_OT_toolshelf(wmOperatorType *ot)
{
- ot->name = "Scopes";
- ot->idname = "IMAGE_OT_scopes";
- ot->description = "Toggle display scopes panel";
-
+ ot->name = "Tool Shelf";
+ ot->idname = "IMAGE_OT_toolshelf";
+ ot->description = "Toggles tool shelf display";
+
ot->exec = image_scopes_toggle_exec;
ot->poll = ED_operator_image_active;
diff --git a/source/blender/editors/space_image/image_intern.h b/source/blender/editors/space_image/image_intern.h
index 5184b1e1a73..f1a20f39c7c 100644
--- a/source/blender/editors/space_image/image_intern.h
+++ b/source/blender/editors/space_image/image_intern.h
@@ -47,7 +47,7 @@ struct bNodeTree;
/* space_image.c */
struct ARegion *image_has_buttons_region(struct ScrArea *sa);
-struct ARegion *image_has_scope_region(struct ScrArea *sa);
+struct ARegion *image_has_tools_region(struct ScrArea *sa);
extern const char *image_context_dir[]; /* doc access */
@@ -91,7 +91,7 @@ void IMAGE_OT_curves_point_set(struct wmOperatorType *ot);
struct ImageUser *ntree_get_active_iuser(struct bNodeTree *ntree);
void image_buttons_register(struct ARegionType *art);
void IMAGE_OT_properties(struct wmOperatorType *ot);
-void IMAGE_OT_scopes(struct wmOperatorType *ot);
+void IMAGE_OT_toolshelf(struct wmOperatorType *ot);
#endif /* __IMAGE_INTERN_H__ */
diff --git a/source/blender/editors/space_image/space_image.c b/source/blender/editors/space_image/space_image.c
index 2197226beb2..e857583924e 100644
--- a/source/blender/editors/space_image/space_image.c
+++ b/source/blender/editors/space_image/space_image.c
@@ -69,6 +69,7 @@
#include "WM_types.h"
#include "UI_resources.h"
+#include "UI_interface.h"
#include "UI_view2d.h"
#include "image_intern.h"
@@ -82,7 +83,7 @@ static void image_scopes_tag_refresh(ScrArea *sa)
/* only while histogram is visible */
for (ar = sa->regionbase.first; ar; ar = ar->next) {
- if (ar->regiontype == RGN_TYPE_PREVIEW && ar->flag & RGN_FLAG_HIDDEN)
+ if (ar->regiontype == RGN_TYPE_TOOLS && ar->flag & RGN_FLAG_HIDDEN)
return;
}
@@ -116,11 +117,11 @@ ARegion *image_has_buttons_region(ScrArea *sa)
return arnew;
}
-ARegion *image_has_scope_region(ScrArea *sa)
+ARegion *image_has_tools_region(ScrArea *sa)
{
ARegion *ar, *arnew;
- ar = BKE_area_find_region_type(sa, RGN_TYPE_PREVIEW);
+ ar = BKE_area_find_region_type(sa, RGN_TYPE_TOOLS);
if (ar) return ar;
/* add subdiv level; after buttons */
@@ -132,7 +133,7 @@ ARegion *image_has_scope_region(ScrArea *sa)
arnew = MEM_callocN(sizeof(ARegion), "scopes for image");
BLI_insertlinkafter(&sa->regionbase, ar, arnew);
- arnew->regiontype = RGN_TYPE_PREVIEW;
+ arnew->regiontype = RGN_TYPE_TOOLS;
arnew->alignment = RGN_ALIGN_LEFT;
arnew->flag = RGN_FLAG_HIDDEN;
@@ -177,11 +178,11 @@ static SpaceLink *image_new(const bContext *UNUSED(C))
ar->alignment = RGN_ALIGN_RIGHT;
ar->flag = RGN_FLAG_HIDDEN;
- /* scopes */
+ /* scopes/uv sculpt/paint */
ar = MEM_callocN(sizeof(ARegion), "buttons for image");
BLI_addtail(&simage->regionbase, ar);
- ar->regiontype = RGN_TYPE_PREVIEW;
+ ar->regiontype = RGN_TYPE_TOOLS;
ar->alignment = RGN_ALIGN_LEFT;
ar->flag = RGN_FLAG_HIDDEN;
@@ -255,7 +256,7 @@ static void image_operatortypes(void)
WM_operatortype_append(IMAGE_OT_curves_point_set);
WM_operatortype_append(IMAGE_OT_properties);
- WM_operatortype_append(IMAGE_OT_scopes);
+ WM_operatortype_append(IMAGE_OT_toolshelf);
}
static void image_keymap(struct wmKeyConfig *keyconf)
@@ -270,7 +271,7 @@ static void image_keymap(struct wmKeyConfig *keyconf)
WM_keymap_add_item(keymap, "IMAGE_OT_save", SKEY, KM_PRESS, KM_ALT, 0);
WM_keymap_add_item(keymap, "IMAGE_OT_save_as", F3KEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "IMAGE_OT_properties", NKEY, KM_PRESS, 0, 0);
- WM_keymap_add_item(keymap, "IMAGE_OT_scopes", TKEY, KM_PRESS, 0, 0);
+ WM_keymap_add_item(keymap, "IMAGE_OT_toolshelf", TKEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "IMAGE_OT_cycle_render_slot", JKEY, KM_PRESS, 0, 0);
RNA_boolean_set(WM_keymap_add_item(keymap, "IMAGE_OT_cycle_render_slot", JKEY, KM_PRESS, KM_ALT, 0)->ptr, "reverse", TRUE);
@@ -808,7 +809,7 @@ static void image_buttons_area_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa)
/* *********************** scopes region ************************ */
/* add handlers, stuff you only do once or on area/region changes */
-static void image_scope_area_init(wmWindowManager *wm, ARegion *ar)
+static void image_tools_area_init(wmWindowManager *wm, ARegion *ar)
{
wmKeyMap *keymap;
@@ -819,28 +820,33 @@ static void image_scope_area_init(wmWindowManager *wm, ARegion *ar)
WM_event_add_keymap_handler(&ar->handlers, keymap);
}
-static void image_scope_area_draw(const bContext *C, ARegion *ar)
+static void image_tools_area_draw(const bContext *C, ARegion *ar)
{
SpaceImage *sima = CTX_wm_space_image(C);
Scene *scene = CTX_data_scene(C);
void *lock;
ImBuf *ibuf = ED_space_image_acquire_buffer(sima, &lock);
-
- if (ibuf) {
- if (!sima->scopes.ok) {
- BKE_histogram_update_sample_line(&sima->sample_line_hist, ibuf, &scene->view_settings, &scene->display_settings);
+ /* XXX performance regression if name of scopes category changes! */
+ PanelCategoryStack *category = UI_panel_category_active_find(ar, "Scopes");
+
+ /* only update scopes if scope category is active */
+ if (category) {
+ if (ibuf) {
+ if (!sima->scopes.ok) {
+ BKE_histogram_update_sample_line(&sima->sample_line_hist, ibuf, &scene->view_settings, &scene->display_settings);
+ }
+ if (sima->image->flag & IMA_VIEW_AS_RENDER)
+ scopes_update(&sima->scopes, ibuf, &scene->view_settings, &scene->display_settings);
+ else
+ scopes_update(&sima->scopes, ibuf, NULL, &scene->display_settings);
}
- if (sima->image->flag & IMA_VIEW_AS_RENDER)
- scopes_update(&sima->scopes, ibuf, &scene->view_settings, &scene->display_settings);
- else
- scopes_update(&sima->scopes, ibuf, NULL, &scene->display_settings);
}
ED_space_image_release_buffer(sima, ibuf, lock);
ED_region_panels(C, ar, 1, NULL, -1);
}
-static void image_scope_area_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar, wmNotifier *wmn)
+static void image_tools_area_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar, wmNotifier *wmn)
{
/* context changes */
switch (wmn->category) {
@@ -942,17 +948,17 @@ void ED_spacetype_image(void)
art->draw = image_buttons_area_draw;
BLI_addhead(&st->regiontypes, art);
- image_buttons_register(art);
ED_uvedit_buttons_register(art);
-
+ image_buttons_register(art);
+
/* regions: statistics/scope buttons */
art = MEM_callocN(sizeof(ARegionType), "spacetype image region");
- art->regionid = RGN_TYPE_PREVIEW;
+ art->regionid = RGN_TYPE_TOOLS;
art->prefsizex = 220; // XXX
art->keymapflag = ED_KEYMAP_UI | ED_KEYMAP_FRAMES;
- art->listener = image_scope_area_listener;
- art->init = image_scope_area_init;
- art->draw = image_scope_area_draw;
+ art->listener = image_tools_area_listener;
+ art->init = image_tools_area_init;
+ art->draw = image_tools_area_draw;
BLI_addhead(&st->regiontypes, art);
/* regions: header */