[Bf-blender-cvs] [c86e114] soc-2016-layer_manager: Prepare layer manager editor code for further changes
Julian Eisel
noreply at git.blender.org
Tue May 24 17:30:01 CEST 2016
Commit: c86e114e757065e3b06d319e2bc93f8846d8d9e8
Author: Julian Eisel
Date: Tue May 24 17:24:34 2016 +0200
Branches: soc-2016-layer_manager
https://developer.blender.org/rBc86e114e757065e3b06d319e2bc93f8846d8d9e8
Prepare layer manager editor code for further changes
* Add (empty) keymap for layer manager
* Move list drawing into own file
* Add and use a LayerTreeItem wrapper for drawing in editor (will be used later for extra drawing info).
===================================================================
M source/blender/blenkernel/BKE_context.h
M source/blender/editors/include/ED_object.h
M source/blender/editors/object/object_layer.c
M source/blender/editors/space_layers/CMakeLists.txt
A source/blender/editors/space_layers/layers_draw.c
M source/blender/editors/space_layers/layers_intern.h
M source/blender/editors/space_layers/layers_ops.c
A source/blender/editors/space_layers/layers_util.c
M source/blender/editors/space_layers/space_layers.c
M source/blender/makesdna/DNA_space_types.h
M source/blender/windowmanager/CMakeLists.txt
M source/blender/windowmanager/intern/wm_keymap.c
===================================================================
diff --git a/source/blender/blenkernel/BKE_context.h b/source/blender/blenkernel/BKE_context.h
index 2c34156..2bcb7d4 100644
--- a/source/blender/blenkernel/BKE_context.h
+++ b/source/blender/blenkernel/BKE_context.h
@@ -162,9 +162,9 @@ struct SpaceAction *CTX_wm_space_action(const bContext *C);
struct SpaceInfo *CTX_wm_space_info(const bContext *C);
struct SpaceUserPref *CTX_wm_space_userpref(const bContext *C);
struct SpaceClip *CTX_wm_space_clip(const bContext *C);
-#ifdef WITH_ADVANCED_LAYERS
+//#ifdef WITH_ADVANCED_LAYERS
struct SpaceLayers *CTX_wm_space_layers(const bContext *C);
-#endif
+//#endif
void CTX_wm_manager_set(bContext *C, struct wmWindowManager *wm);
void CTX_wm_window_set(bContext *C, struct wmWindow *win);
diff --git a/source/blender/editors/include/ED_object.h b/source/blender/editors/include/ED_object.h
index f781736..f4ab00b 100644
--- a/source/blender/editors/include/ED_object.h
+++ b/source/blender/editors/include/ED_object.h
@@ -179,7 +179,7 @@ void undo_push_lattice(struct bContext *C, const char *name);
void ED_lattice_flags_set(struct Object *obedit, int flag);
/* object_layer.c */
-void ED_object_layer_add(struct LayerTree *ltree, const char *name);
+struct LayerTreeItem *ED_object_layer_add(struct LayerTree *ltree, const char *name);
/* object_modifier.c */
enum {
diff --git a/source/blender/editors/object/object_layer.c b/source/blender/editors/object/object_layer.c
index bc0c831..2ba31b4 100644
--- a/source/blender/editors/object/object_layer.c
+++ b/source/blender/editors/object/object_layer.c
@@ -57,9 +57,9 @@ static void object_layer_draw_settings(LayerTreeItem *UNUSED(litem), uiLayout *U
* Add an object layer to \a ltree.
* \param name: Name of the layer to add. NULL for default ("Untitled Layer").
*/
-void ED_object_layer_add(LayerTree *ltree, const char *name)
+LayerTreeItem *ED_object_layer_add(LayerTree *ltree, const char *name)
{
- BKE_layeritem_add(
+ return BKE_layeritem_add(
ltree, NULL, LAYER_TREETYPE_OBJECT, name ? name : OBJECTLAYER_DEFAULT_NAME,
NULL, object_layer_draw, object_layer_draw_settings);
}
diff --git a/source/blender/editors/space_layers/CMakeLists.txt b/source/blender/editors/space_layers/CMakeLists.txt
index 397b2f4..9df1798 100644
--- a/source/blender/editors/space_layers/CMakeLists.txt
+++ b/source/blender/editors/space_layers/CMakeLists.txt
@@ -35,7 +35,9 @@ set(INC_SYS
)
set(SRC
+ layers_draw.c
layers_ops.c
+ layers_util.c
space_layers.c
layers_intern.h
diff --git a/source/blender/editors/space_layers/layers_draw.c b/source/blender/editors/space_layers/layers_draw.c
new file mode 100644
index 0000000..f149134
--- /dev/null
+++ b/source/blender/editors/space_layers/layers_draw.c
@@ -0,0 +1,67 @@
+/*
+ * ***** 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 *****
+ */
+
+/** \file blender/editors/space_layers/layers_draw.c
+ * \ingroup splayers
+ */
+
+#include "BLI_listbase.h"
+
+#include "BKE_context.h"
+#include "BKE_layer.h"
+
+#include "DNA_scene_types.h"
+#include "DNA_screen_types.h"
+#include "DNA_space_types.h"
+
+#include "UI_interface.h"
+#include "UI_view2d.h"
+
+#include "layers_intern.h" /* own include */
+
+void layers_draw_tiles(const bContext *C, ARegion *ar)
+{
+ uiStyle *style = UI_style_get_dpi();
+ SpaceLayers *slayer = CTX_wm_space_layers(C);
+ View2D *v2d = &ar->v2d;
+ float size_x = ar->winx;
+ float size_y = 0.0f;
+
+ uiBlock *block = UI_block_begin(C, ar, __func__, UI_EMBOSS);
+
+ /* draw items */
+ for (LayerTile *tile = slayer->layer_tiles.first; tile; tile = tile->next) {
+ LayerTreeItem *litem = tile->litem;
+ if (litem->draw) {
+ uiLayout *layout = UI_block_layout(
+ block, UI_LAYOUT_HORIZONTAL, UI_LAYOUT_HEADER,
+ 0, ar->winy - size_y, litem->height, 0, 0, style);
+ litem->draw(litem, layout);
+ UI_block_layout_resolve(block, NULL, NULL);
+ }
+ size_y += litem->height;
+ }
+
+ UI_block_end(C, block);
+ UI_block_draw(C, block);
+
+ /* update size of tot-rect (extents of data/viewable area) */
+ UI_view2d_totRect_set(v2d, size_x, size_y);
+}
diff --git a/source/blender/editors/space_layers/layers_intern.h b/source/blender/editors/space_layers/layers_intern.h
index 95d6a40..a14d678 100644
--- a/source/blender/editors/space_layers/layers_intern.h
+++ b/source/blender/editors/space_layers/layers_intern.h
@@ -22,11 +22,30 @@
* \ingroup splayers
*/
-
#ifndef __LAYERS_INTERN_H__
#define __LAYERS_INTERN_H__
+struct ARegion;
+struct wmKeyConfig;
+
+/**
+ * Wrapper around LayerTreeItem with extra info for drawing in layer manager editor.
+ */
+typedef struct LayerTile {
+ struct LayerTile *next, *prev;
+
+ LayerTreeItem *litem;
+} LayerTile;
+
+/* layers_draw.c */
+void layers_draw_tiles(const struct bContext *C, struct ARegion *ar);
+
+/* layers_util.c */
+LayerTile *layers_tile_add(struct SpaceLayers *slayer, struct LayerTreeItem *litem);
+
+/* layers_ops.c */
void layers_operatortypes(void);
+void layers_keymap(struct wmKeyConfig *keyconf);
#endif /* __LAYERS_INTERN_H__ */
diff --git a/source/blender/editors/space_layers/layers_ops.c b/source/blender/editors/space_layers/layers_ops.c
index 18283ae..ee0bb5a 100644
--- a/source/blender/editors/space_layers/layers_ops.c
+++ b/source/blender/editors/space_layers/layers_ops.c
@@ -23,6 +23,7 @@
*/
#include "BKE_context.h"
+#include "BKE_layer.h"
#include "BLI_compiler_attrs.h"
@@ -39,10 +40,17 @@
static int layer_add_invoke(bContext *C, wmOperator *UNUSED(op), const wmEvent *UNUSED(event))
{
+ SpaceLayers *slayer = CTX_wm_space_layers(C);
+ LayerTreeItem *new_item;
+
if (true) { /* context check (like: slayer->context == SLAYER_CONTEXT_OBJECT) */
Scene *scene = CTX_data_scene(C);
- ED_object_layer_add(scene->object_layers, NULL);
+ new_item = ED_object_layer_add(scene->object_layers, NULL);
+ }
+ else {
+ BLI_assert(0);
}
+ layers_tile_add(slayer, new_item);
WM_event_add_notifier(C, NC_SCENE | ND_LAYER, NULL);
@@ -71,3 +79,9 @@ void layers_operatortypes(void)
{
WM_operatortype_append(LAYERS_OT_layer_add);
}
+
+void layers_keymap(wmKeyConfig *keyconf)
+{
+ wmKeyMap *keymap = WM_keymap_find(keyconf, "Layer Manager", SPACE_LAYERS, 0);
+ (void)keymap;
+}
diff --git a/source/blender/editors/space_layers/layers_intern.h b/source/blender/editors/space_layers/layers_util.c
similarity index 60%
copy from source/blender/editors/space_layers/layers_intern.h
copy to source/blender/editors/space_layers/layers_util.c
index 95d6a40..d35df82 100644
--- a/source/blender/editors/space_layers/layers_intern.h
+++ b/source/blender/editors/space_layers/layers_util.c
@@ -18,15 +18,32 @@
* ***** END GPL LICENSE BLOCK *****
*/
-/** \file blender/editors/space_layers/layers_intern.h
+/** \file blender/editors/space_layers/layers_util.c
* \ingroup splayers
+ *
+ * Utility functions for layer manager editor.
*/
+#include "BLI_listbase.h"
+
+#include "BKE_layer.h"
+
+#include "DNA_space_types.h"
-#ifndef __LAYERS_INTERN_H__
-#define __LAYERS_INTERN_H__
+#include "MEM_guardedalloc.h"
-void layers_operatortypes(void);
+#include "layers_intern.h"
+
+
+/**
+ * Allocate and register a LayerTile entry for \a litem in layer_item list of \a slayer.
+ */
+LayerTile *layers_tile_add(SpaceLayers *slayer, LayerTreeItem *litem)
+{
+ LayerTile *tile = MEM_callocN(sizeof(LayerTile), __func__);
-#endif /* __LAYERS_INTERN_H__ */
+ tile->litem = litem;
+ BLI_addhead(&slayer->layer_tiles, tile);
+ return tile;
+}
diff --git a/source/blender/editors/space_layers/space_layers.c b/source/blender/editors/space_layers/space_layers.c
index 8c11faa..36554a1 100644
--- a/source/blender/editors/space_layers/space_layers.c
+++ b/source/blender/editors/space_layers/space_layers.c
@@ -33,18 +33,14 @@
#include "BKE_screen.h"
#include "BLI_listbase.h"
-#include "BLI_utildefines.h"
-
-#include "DNA_space_types.h"
-#include "DNA_windowmanager_types.h"
#include "ED_screen.h"
#include "ED_space_api.h"
-#include "UI_interface.h"
#include "UI_resources.h"
#include "UI_view2d.h"
+#include "WM_api.h"
#include "WM_types.h"
#include "layers_intern.h" /* own include */
@@ -76,6 +72,13 @@ static SpaceLink *layers_new(const bContext *UNUSED(C))
return (SpaceLink *)slayer;
}
+/* not spacelink itself */
+static void layers_free(SpaceLink *sl)
+{
+ SpaceLayers *slayer = (SpaceLayers *)sl;
+ BLI_freelistN(&slayer->layer_tiles);
+}
+
static SpaceLink *layers_duplicate(SpaceLink *sl)
{
SpaceLayers *slayer = MEM_dupallocN(sl);
@@ -85,6 +88,14 @@ static SpaceLink *layers_duplicate(SpaceLink *sl)
return (SpaceLink *)slayer;
}
+/* add handlers, stuff you only do once or on area changes */
+static void layer_init(wmWindowManager *wm, ScrArea *sa)
+{
+ /* own keymap */
+ wmKeyMap *keymap = WM_keymap_find(wm->defaultconf, "Layer Manager", SPACE_LAYERS, 0);
+ WM_event_add_keymap_handler(&sa->handlers, keymap);
+}
+
/* add handlers, stuff you only do once or on area/region changes */
static void layer_main_region_init(wmWindowManager *UNUSED(wm), ARegion *ar)
{
@@ -96,33 +107,12 @@ static void layer_main_region_init(wmWindowManager *UNUSED(wm), ARegion *ar)
static void layers_main_region_draw(const bContext *C, ARegion *ar)
{
- Scene *scene = CTX_data_scene(C);
- uiStyle *style = UI_style_get_dpi();
View2D *v2d = &ar->v2d;
- float size_x = ar->winx;
- float size_y = 0.0f;
UI_ThemeClearColor(TH_BACK);
glClear(GL_COLOR_BUFFE
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list