[Bf-blender-cvs] [a180b754eb4] master: Interface: New region type 'Footer', used by text editor

George Vogiatzis noreply at git.blender.org
Fri Apr 5 13:54:37 CEST 2019


Commit: a180b754eb40637a5d37eeb0ae60066f5a6f93d8
Author: George Vogiatzis
Date:   Fri Apr 5 13:48:26 2019 +0200
Branches: master
https://developer.blender.org/rBa180b754eb40637a5d37eeb0ae60066f5a6f93d8

Interface: New region type 'Footer', used by text editor

* It can be hidden by dragging it up/down.
* It can be at the top or bottom, independent of the header.
* It uses the color theme from the header.
* It does not change its color, when the area becomes active.

Currently, it is used in the text editor to display the file path.

Differential Revision: https://developer.blender.org/D4601

===================================================================

M	release/scripts/modules/bl_keymap_utils/keymap_hierarchy.py
M	release/scripts/presets/keyconfig/keymap_data/blender_default.py
M	release/scripts/startup/bl_ui/space_text.py
M	source/blender/blenkernel/intern/screen.c
M	source/blender/blenloader/intern/versioning_280.c
M	source/blender/editors/include/ED_screen.h
M	source/blender/editors/interface/interface_context_menu.c
M	source/blender/editors/interface/interface_handlers.c
M	source/blender/editors/interface/interface_region_menu_popup.c
M	source/blender/editors/interface/interface_region_popover.c
M	source/blender/editors/interface/resources.c
M	source/blender/editors/screen/area.c
M	source/blender/editors/screen/screen_edit.c
M	source/blender/editors/screen/screen_ops.c
M	source/blender/editors/space_text/space_text.c
M	source/blender/makesdna/DNA_screen_types.h
M	source/blender/makesrna/intern/rna_screen.c
M	source/blender/windowmanager/intern/wm_event_system.c

===================================================================

diff --git a/release/scripts/modules/bl_keymap_utils/keymap_hierarchy.py b/release/scripts/modules/bl_keymap_utils/keymap_hierarchy.py
index e64c78f7661..4fae134860e 100644
--- a/release/scripts/modules/bl_keymap_utils/keymap_hierarchy.py
+++ b/release/scripts/modules/bl_keymap_utils/keymap_hierarchy.py
@@ -55,6 +55,7 @@ _km_hierarchy = [
     ('Screen', 'EMPTY', 'WINDOW', [     # full screen, undo, screenshot
         ('Screen Editing', 'EMPTY', 'WINDOW', []),    # re-sizing, action corners
         ('Header', 'EMPTY', 'WINDOW', []),            # header stuff (per region)
+        ('Footer', 'EMPTY', 'WINDOW', []),            # footer stuff (per region)
     ]),
 
     ('View2D', 'EMPTY', 'WINDOW', []),    # view 2d navigation (per region)
diff --git a/release/scripts/presets/keyconfig/keymap_data/blender_default.py b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
index 84e97d5b764..9d4fcf7d0e7 100644
--- a/release/scripts/presets/keyconfig/keymap_data/blender_default.py
+++ b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
@@ -535,6 +535,21 @@ def km_header(_params):
     return keymap
 
 
+def km_footer(_params):
+    items = []
+    keymap = (
+        "Footer",
+        {"space_type": 'EMPTY', "region_type": 'WINDOW'},
+        {"items": items},
+    )
+
+    items.extend([
+        ("screen.footer_context_menu", {"type": 'RIGHTMOUSE', "value": 'PRESS'}, None),
+    ])
+
+    return keymap
+
+
 def km_view2d(_params):
     items = []
     keymap = (
@@ -6032,6 +6047,7 @@ def generate_keymaps(params=None):
         km_screen(params),
         km_screen_editing(params),
         km_header(params),
+        km_footer(params),
         km_view2d(params),
         km_view2d_buttons_list(params),
         km_user_interface(params),
diff --git a/release/scripts/startup/bl_ui/space_text.py b/release/scripts/startup/bl_ui/space_text.py
index 6726a5d319d..b62e2d740b3 100644
--- a/release/scripts/startup/bl_ui/space_text.py
+++ b/release/scripts/startup/bl_ui/space_text.py
@@ -56,6 +56,29 @@ class TEXT_HT_header(Header):
         if text:
             is_osl = text.name.endswith((".osl", ".osl"))
 
+            row = layout.row()
+            if is_osl:
+                row = layout.row()
+                row.operator("node.shader_script_update")
+            else:
+                row = layout.row()
+                row.active = text.name.endswith(".py")
+                row.prop(text, "use_module")
+
+                row = layout.row()
+                row.operator("text.run_script")
+
+
+class TEXT_HT_footer(Header):
+    bl_space_type = 'TEXT_EDITOR'
+    bl_region_type = 'FOOTER'
+
+    def draw(self, context):
+        layout = self.layout
+
+        st = context.space_data
+        text = st.text
+        if text:
             row = layout.row()
             if text.filepath:
                 if text.is_dirty:
@@ -74,16 +97,6 @@ class TEXT_HT_header(Header):
                     if text.library
                     else "Text: Internal"
                 )
-            if is_osl:
-                row = layout.row()
-                row.operator("node.shader_script_update")
-            else:
-                row = layout.row()
-                row.active = text.name.endswith(".py")
-                row.prop(text, "use_module")
-
-                row = layout.row()
-                row.operator("text.run_script")
 
 
 class TEXT_MT_editor_menus(Menu):
@@ -353,6 +366,7 @@ class TEXT_MT_toolbox(Menu):
 
 classes = (
     TEXT_HT_header,
+    TEXT_HT_footer,
     TEXT_MT_edit,
     TEXT_MT_editor_menus,
     TEXT_PT_properties,
diff --git a/source/blender/blenkernel/intern/screen.c b/source/blender/blenkernel/intern/screen.c
index 7a2b93e6833..7b4b11674ed 100644
--- a/source/blender/blenkernel/intern/screen.c
+++ b/source/blender/blenkernel/intern/screen.c
@@ -860,6 +860,13 @@ void BKE_screen_header_alignment_reset(bScreen *screen)
 				}
 				ar->alignment = alignment;
 			}
+			if (ar->regiontype == RGN_TYPE_FOOTER) {
+				if (ELEM(sa->spacetype, SPACE_FILE, SPACE_USERPREF, SPACE_OUTLINER, SPACE_PROPERTIES)) {
+					ar->alignment = RGN_ALIGN_BOTTOM;
+					continue;
+				}
+				ar->alignment = (U.uiflag & USER_HEADER_BOTTOM) ? RGN_ALIGN_TOP : RGN_ALIGN_BOTTOM;
+			}
 		}
 	}
 	screen->do_refresh = true;
diff --git a/source/blender/blenloader/intern/versioning_280.c b/source/blender/blenloader/intern/versioning_280.c
index a1087caf40c..5c0ff1af7b2 100644
--- a/source/blender/blenloader/intern/versioning_280.c
+++ b/source/blender/blenloader/intern/versioning_280.c
@@ -2969,5 +2969,29 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *bmain)
 
 	{
 		/* Versioning code until next subversion bump goes here. */
+
+		for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
+			for (ScrArea *sa = screen->areabase.first; sa; sa = sa->next) {
+				for (SpaceLink *sl = sa->spacedata.first; sl; sl = sl->next) {
+					if (sl->spacetype == SPACE_TEXT) {
+						ListBase *regionbase = (sl == sa->spacedata.first) ? &sa->regionbase : &sl->regionbase;
+						ARegion *ar = MEM_callocN(sizeof(ARegion), "footer for text");
+						ARegion *ar_header = NULL;
+
+						for (ar_header = regionbase->first; ar_header; ar_header = ar_header->next) {
+							if (ar_header->regiontype == RGN_TYPE_HEADER) {
+								break;
+							}
+						}
+						BLI_assert(ar_header);
+
+						BLI_insertlinkafter(regionbase, ar_header, ar);
+
+						ar->regiontype = RGN_TYPE_FOOTER;
+						ar->alignment = (U.uiflag & USER_HEADER_BOTTOM) ? RGN_ALIGN_TOP : RGN_ALIGN_BOTTOM;
+					}
+				}
+			}
+		}
 	}
 }
diff --git a/source/blender/editors/include/ED_screen.h b/source/blender/editors/include/ED_screen.h
index f44f951123a..10a1eab265a 100644
--- a/source/blender/editors/include/ED_screen.h
+++ b/source/blender/editors/include/ED_screen.h
@@ -147,6 +147,9 @@ void    ED_area_swapspace(struct bContext *C, ScrArea *sa1, ScrArea *sa2);
 int     ED_area_headersize(void);
 int     ED_area_header_alignment_or_fallback(const ScrArea *area, int fallback);
 int     ED_area_header_alignment(const ScrArea *area);
+int     ED_area_footersize(void);
+int     ED_area_footer_alignment_or_fallback(const ScrArea *area, int fallback);
+int     ED_area_footer_alignment(const ScrArea *area);
 int     ED_area_global_size_y(const ScrArea *area);
 int     ED_area_global_min_size_y(const ScrArea *area);
 int     ED_area_global_max_size_y(const ScrArea *area);
@@ -192,6 +195,7 @@ void    ED_screen_full_prevspace(struct bContext *C, ScrArea *sa);
 void    ED_screen_full_restore(struct bContext *C, ScrArea *sa);
 struct ScrArea *ED_screen_state_toggle(struct bContext *C, struct wmWindow *win, struct ScrArea *sa, const short state);
 void    ED_screens_header_tools_menu_create(struct bContext *C, struct uiLayout *layout, void *arg);
+void    ED_screens_footer_tools_menu_create(struct bContext *C, struct uiLayout *layout, void *arg);
 void    ED_screens_navigation_bar_tools_menu_create(struct bContext *C, struct uiLayout *layout, void *arg);
 bool    ED_screen_stereo3d_required(const struct bScreen *screen, const struct Scene *scene);
 Scene   *ED_screen_scene_find(const struct bScreen *screen, const struct wmWindowManager *wm);
@@ -365,6 +369,7 @@ enum {
 	ED_KEYMAP_FRAMES    = (1 << 7),
 	ED_KEYMAP_HEADER    = (1 << 8),
 	ED_KEYMAP_GPENCIL   = (1 << 9),
+	ED_KEYMAP_FOOTER    = (1 << 10),
 };
 
 /* SCREEN_OT_space_context_cycle direction */
diff --git a/source/blender/editors/interface/interface_context_menu.c b/source/blender/editors/interface/interface_context_menu.c
index b5eb6302f81..4ca92fbb386 100644
--- a/source/blender/editors/interface/interface_context_menu.c
+++ b/source/blender/editors/interface/interface_context_menu.c
@@ -847,6 +847,9 @@ bool ui_popup_context_menu_for_button(bContext *C, uiBut *but)
 		else if (ar->regiontype == RGN_TYPE_NAV_BAR) {
 			uiItemMenuF(layout, IFACE_("Navigation Bar"), ICON_NONE, ED_screens_navigation_bar_tools_menu_create, NULL);
 		}
+		else if (ar->regiontype == RGN_TYPE_FOOTER) {
+			uiItemMenuF(layout, IFACE_("Footer"), ICON_NONE, ED_screens_footer_tools_menu_create, NULL);
+		}
 	}
 
 	MenuType *mt = WM_menutype_find("WM_MT_button_context", true);
diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c
index 208c1a90b89..07be2253969 100644
--- a/source/blender/editors/interface/interface_handlers.c
+++ b/source/blender/editors/interface/interface_handlers.c
@@ -1784,7 +1784,7 @@ static bool ui_but_drag_init(
 
 			/* Initialize alignment for single row/column regions,
 			 * otherwise we use the relative position of the first other button dragged over. */
-			if (ELEM(data->region->regiontype, RGN_TYPE_NAV_BAR, RGN_TYPE_HEADER)) {
+			if (ELEM(data->region->regiontype, RGN_TYPE_NAV_BAR, RGN_TYPE_HEADER, RGN_TYPE_FOOTER)) {
 				int lock_axis = -1;
 				if (ELEM(data->region->alignment, RGN_ALIGN_LEFT, RGN_ALIGN_RIGHT)) {
 					lock_axis = 0;
diff --git a/source/blender/editors/interface/interface_region_menu_popup.c b/source/blender/editors/interface/interface_region_menu_popup.c
index a20c4fe9379..0fe847caa20 100644
--- a/source/blender/editors/interface/interface_region_menu_popup.c
+++ b/source/blender/editors/interface/interface_region_menu_popup.c
@@ -278,11 +278,19 @@ static uiBlock *ui_block_func_POPUP(bContext *C, uiPopupBlockHandle *handle, voi
 		/* for a header menu we set the direction automatic */
 		if (!pup->slideout && flip) {
 			ScrArea *sa = CTX_wm_area(C);
-			if (sa && ED_area_header_alignment(sa) == RGN_ALIGN_BOTTOM) {
-				ARegion *ar = CTX_wm_region(C);
-				if (ar && ar->regiontype == RGN_TYPE_HEADER) {
-					UI_block_direction_set(block, UI_DIR_UP);
-					UI_block_order_flip(block);
+			ARegion *ar = CTX_wm_region(C);
+			if (sa && ar) {
+				if (ar->regiontype == RGN_TYPE_HEADER) {
+					if (ED_area_header_alignment(sa) == RGN_ALIGN_BOTTOM) {
+						UI_block_direction_set(block, UI_DIR_UP);
+						UI_block_order_flip(block);
+					}
+				}
+				if (ar->regiontype == RGN_TYPE_FOOTER) {
+					if (ED_area_footer_alignment(sa) == RGN_ALIGN_BOTTOM) {
+						UI_block_direction_set(block, UI_DIR_UP);
+						UI_b

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list