[Bf-blender-cvs] [032d2683135] topbar: Support hiding the lower sub-bar by dragging the area edge up
Julian Eisel
noreply at git.blender.org
Fri Apr 20 14:44:01 CEST 2018
Commit: 032d26831351e01124cd20bd1b2781d385074b3d
Author: Julian Eisel
Date: Fri Apr 20 14:38:36 2018 +0200
Branches: topbar
https://developer.blender.org/rB032d26831351e01124cd20bd1b2781d385074b3d
Support hiding the lower sub-bar by dragging the area edge up
===================================================================
M source/blender/editors/include/ED_screen.h
M source/blender/editors/screen/area.c
M source/blender/editors/screen/screen_edit.c
M source/blender/editors/screen/screen_intern.h
M source/blender/editors/screen/screen_ops.c
M source/blender/makesdna/DNA_screen_types.h
===================================================================
diff --git a/source/blender/editors/include/ED_screen.h b/source/blender/editors/include/ED_screen.h
index 601fc326da2..321cb1d63e8 100644
--- a/source/blender/editors/include/ED_screen.h
+++ b/source/blender/editors/include/ED_screen.h
@@ -133,12 +133,18 @@ bool ED_area_is_global(const struct wmWindow *win, const ScrArea *area);
int ED_region_global_size_y(void);
/** Iterate over all areas visible in the screen (screen as in everything visible in the window, not just bScreen) */
-#define ED_screen_areas_iter(win, screen, area_name) \
- for (ScrArea *area_name = (win)->global_areas.areabase.first ? \
+#define ED_screen_areas_iter(win, screen, area_name) \
+ for (ScrArea *area_name = (win)->global_areas.areabase.first ? \
(win)->global_areas.areabase.first : \
- screen->areabase.first; \
- area_name != NULL; \
+ screen->areabase.first; \
+ area_name != NULL; \
area_name = (area_name == (win)->global_areas.areabase.last) ? (screen)->areabase.first : area_name->next)
+#define ED_screen_verts_iter(win, screen, vert_name) \
+ for (ScrVert *vert_name = (win)->global_areas.vertbase.first ? \
+ (win)->global_areas.vertbase.first : \
+ screen->vertbase.first; \
+ vert_name != NULL; \
+ vert_name = (vert_name == (win)->global_areas.vertbase.last) ? (screen)->vertbase.first : vert_name->next)
/* screens */
void ED_screens_initialize(struct wmWindowManager *wm);
diff --git a/source/blender/editors/screen/area.c b/source/blender/editors/screen/area.c
index cd747ee225f..378ff284cde 100644
--- a/source/blender/editors/screen/area.c
+++ b/source/blender/editors/screen/area.c
@@ -2253,7 +2253,7 @@ int ED_area_global_size_y(const wmWindow *win, const ScrArea *area)
BLI_assert(ED_area_is_global(win, area));
UNUSED_VARS_NDEBUG(win);
- return area->fixed_height * UI_DPI_FAC;
+ return round_fl_to_int(area->cur_fixed_height * UI_DPI_FAC);
}
bool ED_area_is_global(const wmWindow *win, const ScrArea *area)
diff --git a/source/blender/editors/screen/screen_edit.c b/source/blender/editors/screen/screen_edit.c
index 33b21b3e5ca..1a7b3d898be 100644
--- a/source/blender/editors/screen/screen_edit.c
+++ b/source/blender/editors/screen/screen_edit.c
@@ -112,16 +112,16 @@ bool scredge_is_horizontal(ScrEdge *se)
}
/* need win size to make sure not to include edges along screen edge */
-ScrEdge *screen_find_active_scredge(const bScreen *sc,
- const int winsize_x, const int winsize_y,
- const int mx, const int my)
+ScrEdge *screen_area_map_find_active_scredge(
+ const ScrAreaMap *area_map,
+ const int winsize_x, const int winsize_y,
+ const int mx, const int my)
{
- ScrEdge *se;
int safety = U.widget_unit / 10;
-
- if (safety < 2) safety = 2;
-
- for (se = sc->edgebase.first; se; se = se->next) {
+
+ CLAMP_MIN(safety, 2);
+
+ for (ScrEdge *se = area_map->edgebase.first; se; se = se->next) {
if (scredge_is_horizontal(se)) {
if (se->v1->vec.y > 0 && se->v1->vec.y < winsize_y - 1) {
short min, max;
@@ -143,10 +143,27 @@ ScrEdge *screen_find_active_scredge(const bScreen *sc,
}
}
}
-
+
return NULL;
}
+/* need win size to make sure not to include edges along screen edge */
+ScrEdge *screen_find_active_scredge(
+ const wmWindow *win, const bScreen *screen,
+ const int mx, const int my)
+{
+ /* Use layout size (screen excluding global areas) for screen-layout area edges */
+ const int screen_x = WM_window_screen_pixels_x(win), screen_y = WM_window_screen_pixels_y(win);
+ ScrEdge *se = screen_area_map_find_active_scredge(AREAMAP_FROM_SCREEN(screen), screen_x, screen_y, mx, my);
+
+ if (!se) {
+ /* Use entire window size (screen including global areas) for global area edges */
+ const int win_x = WM_window_pixels_x(win), win_y = WM_window_pixels_y(win);
+ se = screen_area_map_find_active_scredge(&win->global_areas, win_x, win_y, mx, my);
+ }
+ return se;
+}
+
/* adds no space data */
@@ -481,10 +498,10 @@ int screen_area_join(bContext *C, bScreen *scr, ScrArea *sa1, ScrArea *sa2)
return 1;
}
-void select_connected_scredge(bScreen *sc, ScrEdge *edge)
+void select_connected_scredge(const wmWindow *win, ScrEdge *edge)
{
+ bScreen *sc = WM_window_get_active_screen(win);
ScrEdge *se;
- ScrVert *sv;
int oneselected;
char dir;
@@ -494,12 +511,10 @@ void select_connected_scredge(bScreen *sc, ScrEdge *edge)
if (edge->v1->vec.x == edge->v2->vec.x) dir = 'v';
else dir = 'h';
- sv = sc->vertbase.first;
- while (sv) {
+ ED_screen_verts_iter(win, sc, sv) {
sv->flag = 0;
- sv = sv->next;
}
-
+
edge->v1->flag = 1;
edge->v2->flag = 1;
@@ -634,7 +649,7 @@ static void screen_vertices_scale(
const int yval = sa->v2->vec.y - headery_init;
se = BKE_screen_find_edge(sc, sa->v4, sa->v1);
if (se != NULL) {
- select_connected_scredge(sc, se);
+ select_connected_scredge(win, se);
}
for (sv = sc->vertbase.first; sv; sv = sv->next) {
if (sv != sa->v2 && sv != sa->v3) {
@@ -649,7 +664,7 @@ static void screen_vertices_scale(
const int yval = sa->v1->vec.y + headery_init;
se = BKE_screen_find_edge(sc, sa->v2, sa->v3);
if (se != NULL) {
- select_connected_scredge(sc, se);
+ select_connected_scredge(win, se);
}
for (sv = sc->vertbase.first; sv; sv = sv->next) {
if (sv != sa->v1 && sv != sa->v4) {
@@ -687,7 +702,7 @@ static void screen_vertices_scale(
if (se && sa->v1 != sa->v2) {
int yval;
- select_connected_scredge(sc, se);
+ select_connected_scredge(win, se);
/* all selected vertices get the right offset */
yval = sa->v2->vec.y - headery + 1;
@@ -723,7 +738,7 @@ static void region_cursor_set(wmWindow *win, bool swin_changed)
{
bScreen *screen = WM_window_get_active_screen(win);
- for (ScrArea *sa = screen->areabase.first; sa; sa = sa->next) {
+ ED_screen_areas_iter(win, screen, sa) {
for (ARegion *ar = sa->regionbase.first; ar; ar = ar->next) {
if (ar == screen->active_region) {
if (swin_changed || (ar->type && ar->type->event_cursor)) {
@@ -974,9 +989,6 @@ void ED_screen_exit(bContext *C, wmWindow *window, bScreen *screen)
static void screen_cursor_set(wmWindow *win, const wmEvent *event)
{
const bScreen *screen = WM_window_get_active_screen(win);
- const int screen_size_x = WM_window_screen_pixels_x(win);
- const int screen_size_y = WM_window_screen_pixels_y(win);
-
AZone *az = NULL;
ScrArea *sa;
@@ -995,8 +1007,8 @@ static void screen_cursor_set(wmWindow *win, const wmEvent *event)
}
}
else {
- ScrEdge *actedge = screen_find_active_scredge(screen, screen_size_x, screen_size_y, event->x, event->y);
-
+ ScrEdge *actedge = screen_find_active_scredge(win, screen, event->x, event->y);
+
if (actedge) {
if (scredge_is_horizontal(actedge))
WM_cursor_set(win, CURSOR_Y_MOVE);
@@ -1112,12 +1124,13 @@ void ED_screen_global_topbar_area_create(wmWindow *win, const bScreen *screen)
SpaceLink *sl = st->new(NULL);
ScrArea *sa;
const short size_y = 2 * HEADERY;
+ const int minx = 0, maxx = WM_window_pixels_x(win) - 1;
+ const int maxy = WM_window_pixels_y(win) - 1, miny = maxy - size_y;
- /* Actual coordinates of area verts are set later (screen_vertices_scale) */
- ScrVert *bottom_left = screen_addvert_ex(&win->global_areas, 0, 0);
- ScrVert *top_left = screen_addvert_ex(&win->global_areas, 0, 0);
- ScrVert *top_right = screen_addvert_ex(&win->global_areas, 0, 0);
- ScrVert *bottom_right = screen_addvert_ex(&win->global_areas, 0, 0);
+ ScrVert *bottom_left = screen_addvert_ex(&win->global_areas, minx, miny);
+ ScrVert *top_left = screen_addvert_ex(&win->global_areas, minx, maxy);
+ ScrVert *top_right = screen_addvert_ex(&win->global_areas, maxx, maxy);
+ ScrVert *bottom_right = screen_addvert_ex(&win->global_areas, maxx, miny);
screen_addedge_ex(&win->global_areas, bottom_left, top_left);
screen_addedge_ex(&win->global_areas, top_left, top_right);
screen_addedge_ex(&win->global_areas, top_right, bottom_right);
@@ -1125,7 +1138,9 @@ void ED_screen_global_topbar_area_create(wmWindow *win, const bScreen *screen)
sa = screen_addarea_ex(&win->global_areas, bottom_left, top_left, top_right, bottom_right,
HEADERTOP, SPACE_TOPBAR);
- sa->fixed_height = size_y;
+ sa->cur_fixed_height = size_y;
+ sa->size_max = size_y;
+ sa->size_min = HEADERY;
sa->regionbase = sl->regionbase;
BLI_addhead(&sa->spacedata, sl);
diff --git a/source/blender/editors/screen/screen_intern.h b/source/blender/editors/screen/screen_intern.h
index 11fb0666df4..045e5ee6b48 100644
--- a/source/blender/editors/screen/screen_intern.h
+++ b/source/blender/editors/screen/screen_intern.h
@@ -56,12 +56,16 @@ bScreen *screen_change_prepare(bScreen *screen_old, bScreen *screen_new, stru
ScrArea *area_split(bScreen *sc, ScrArea *sa, char dir, float fac, int merge);
int screen_area_join(struct bContext *C, bScreen *scr, ScrArea *sa1, ScrArea *sa2);
int area_getorientation(ScrArea *sa, ScrArea *sb);
-void select_connected_scredge(bScreen *sc, ScrEdge *edge);
+void select_connected_scredge(const wmWindow *win, ScrEdge *edge);
bool scredge_is_horizontal(ScrEdge *se);
-ScrEdge *screen_find_active_scredge(const bScreen *sc,
- const int winsize_x, const int winsize_y,
- const int mx, const int my);
+ScrEdge *screen_area_map_find_active_scredge(
+ const struct ScrAreaMap *area_map,
+ const int winsize_x, const int winsize_y,
+ const int mx, const int my);
+ScrEdge *screen_find_active_scredge(
+ const wmWindow *win, const bScreen *screen,
+ const int mx, const
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list