[Bf-blender-cvs] [1be01b3d5b7] filebrowser_redesign: Merge 'master' into 'filebrowser_redesign'
Julian Eisel
noreply at git.blender.org
Wed Apr 24 15:16:50 CEST 2019
Commit: 1be01b3d5b73feea2a3de1a1ce33e47f1c7edba6
Author: Julian Eisel
Date: Fri Apr 19 22:15:34 2019 +0200
Branches: filebrowser_redesign
https://developer.blender.org/rB1be01b3d5b73feea2a3de1a1ce33e47f1c7edba6
Merge 'master' into 'filebrowser_redesign'
===================================================================
===================================================================
diff --cc source/blender/editors/screen/area.c
index 5be930b2772,f0e8fb3fa2f..94ee6ae498b
--- a/source/blender/editors/screen/area.c
+++ b/source/blender/editors/screen/area.c
@@@ -1139,230 -1188,236 +1188,233 @@@ bool ED_region_is_overlap(int spacetype
static void region_rect_recursive(
ScrArea *sa, ARegion *ar, rcti *remainder, rcti *overlap_remainder, int quad)
{
- rcti *remainder_prev = remainder;
-
- if (ar == NULL)
- return;
-
- int prev_winx = ar->winx;
- int prev_winy = ar->winy;
-
- /* no returns in function, winrct gets set in the end again */
- BLI_rcti_init(&ar->winrct, 0, 0, 0, 0);
-
- /* for test; allow split of previously defined region */
- if (ar->alignment & RGN_SPLIT_PREV)
- if (ar->prev)
- remainder = &ar->prev->winrct;
-
- int alignment = ar->alignment & ~RGN_SPLIT_PREV;
-
- /* set here, assuming userpref switching forces to call this again */
- ar->overlap = ED_region_is_overlap(sa->spacetype, ar->regiontype);
-
- /* clear state flags first */
- ar->flag &= ~(RGN_FLAG_TOO_SMALL | RGN_FLAG_SIZE_CLAMP_X | RGN_FLAG_SIZE_CLAMP_Y);
- /* user errors */
- if ((ar->next == NULL) && !ELEM(alignment, RGN_ALIGN_QSPLIT, RGN_ALIGN_FLOAT)) {
- alignment = RGN_ALIGN_NONE;
- }
-
- /* prefsize, taking into account DPI */
- int prefsizex = UI_DPI_FAC * ((ar->sizex > 1) ? ar->sizex + 0.5f : ar->type->prefsizex);
- int prefsizey;
-
- if (ar->flag & RGN_FLAG_PREFSIZE_OR_HIDDEN) {
- prefsizex = UI_DPI_FAC * ar->type->prefsizex;
- prefsizey = UI_DPI_FAC * ar->type->prefsizey;
- }
- else if (ar->regiontype == RGN_TYPE_HEADER) {
- prefsizey = ED_area_headersize();
- }
- else if (ar->regiontype == RGN_TYPE_FOOTER) {
- prefsizey = ED_area_footersize();
- }
- else if (ED_area_is_global(sa)) {
- prefsizey = ED_region_global_size_y();
- }
- else {
- prefsizey = UI_DPI_FAC * (ar->sizey > 1 ? ar->sizey + 0.5f : ar->type->prefsizey);
- }
-
- if (ar->flag & RGN_FLAG_HIDDEN) {
- /* hidden is user flag */
- }
- else if (alignment == RGN_ALIGN_FLOAT) {
- /**
- * \note Currently this window type is only used for #RGN_TYPE_HUD,
- * We expect the panel to resize it's self to be larger.
- *
- * This aligns to the lower left of the area.
- */
- const int size_min[2] = {UI_UNIT_X, UI_UNIT_Y};
- rcti overlap_remainder_margin = *overlap_remainder;
+ rcti *remainder_prev = remainder;
+
+ if (ar == NULL)
+ return;
+
+ int prev_winx = ar->winx;
+ int prev_winy = ar->winy;
+
+ /* no returns in function, winrct gets set in the end again */
+ BLI_rcti_init(&ar->winrct, 0, 0, 0, 0);
+
+ /* for test; allow split of previously defined region */
+ if (ar->alignment & RGN_SPLIT_PREV)
+ if (ar->prev)
+ remainder = &ar->prev->winrct;
+
+ int alignment = ar->alignment & ~RGN_SPLIT_PREV;
+
+ /* set here, assuming userpref switching forces to call this again */
+ ar->overlap = ED_region_is_overlap(sa->spacetype, ar->regiontype);
+
+ /* clear state flags first */
+ ar->flag &= ~(RGN_FLAG_TOO_SMALL | RGN_FLAG_SIZE_CLAMP_X | RGN_FLAG_SIZE_CLAMP_Y);
+ /* user errors */
+ if ((ar->next == NULL) && !ELEM(alignment, RGN_ALIGN_QSPLIT, RGN_ALIGN_FLOAT)) {
+ alignment = RGN_ALIGN_NONE;
+ }
+
+ /* prefsize, taking into account DPI */
+ int prefsizex = UI_DPI_FAC * ((ar->sizex > 1) ? ar->sizex + 0.5f : ar->type->prefsizex);
+ int prefsizey;
+
+ if (ar->flag & RGN_FLAG_PREFSIZE_OR_HIDDEN) {
+ prefsizex = UI_DPI_FAC * ar->type->prefsizex;
+ prefsizey = UI_DPI_FAC * ar->type->prefsizey;
+ }
+ else if (ar->regiontype == RGN_TYPE_HEADER) {
+ prefsizey = ED_area_headersize();
+ }
+ else if (ar->regiontype == RGN_TYPE_TOOL_HEADER) {
+ prefsizey = ED_area_headersize();
+ }
+ else if (ar->regiontype == RGN_TYPE_FOOTER) {
+ prefsizey = ED_area_footersize();
+ }
+ else if (ED_area_is_global(sa)) {
+ prefsizey = ED_region_global_size_y();
+ }
- else if (ar->regiontype == RGN_TYPE_UI && sa->spacetype == SPACE_FILE) {
- prefsizey = UI_UNIT_Y * 2 + (UI_UNIT_Y / 2);
- }
+ else {
+ prefsizey = UI_DPI_FAC * (ar->sizey > 1 ? ar->sizey + 0.5f : ar->type->prefsizey);
+ }
+
+ if (ar->flag & RGN_FLAG_HIDDEN) {
+ /* hidden is user flag */
+ }
+ else if (alignment == RGN_ALIGN_FLOAT) {
+ /**
+ * \note Currently this window type is only used for #RGN_TYPE_HUD,
+ * We expect the panel to resize it's self to be larger.
+ *
+ * This aligns to the lower left of the area.
+ */
+ const int size_min[2] = {UI_UNIT_X, UI_UNIT_Y};
+ rcti overlap_remainder_margin = *overlap_remainder;
BLI_rcti_resize(&overlap_remainder_margin,
- max_ii(0, BLI_rcti_size_x(overlap_remainder) - UI_UNIT_X / 2),
- max_ii(0, BLI_rcti_size_y(overlap_remainder) - UI_UNIT_Y / 2));
- ar->winrct.xmin = overlap_remainder_margin.xmin;
- ar->winrct.ymin = overlap_remainder_margin.ymin;
- ar->winrct.xmax = ar->winrct.xmin + prefsizex - 1;
- ar->winrct.ymax = ar->winrct.ymin + prefsizey - 1;
-
- BLI_rcti_isect(&ar->winrct, &overlap_remainder_margin, &ar->winrct);
-
- if (BLI_rcti_size_x(&ar->winrct) != prefsizex - 1) {
- ar->flag |= RGN_FLAG_SIZE_CLAMP_X;
- }
- if (BLI_rcti_size_y(&ar->winrct) != prefsizey - 1) {
- ar->flag |= RGN_FLAG_SIZE_CLAMP_Y;
- }
-
- /* We need to use a test that wont have been previously clamped. */
- rcti winrct_test = {
- .xmin = ar->winrct.xmin,
- .ymin = ar->winrct.ymin,
- .xmax = ar->winrct.xmin + size_min[0],
- .ymax = ar->winrct.ymin + size_min[1],
- };
- BLI_rcti_isect(&winrct_test, &overlap_remainder_margin, &winrct_test);
- if (BLI_rcti_size_x(&winrct_test) < size_min[0] ||
+ max_ii(0, BLI_rcti_size_x(overlap_remainder) - UI_UNIT_X / 2),
+ max_ii(0, BLI_rcti_size_y(overlap_remainder) - UI_UNIT_Y / 2));
+ ar->winrct.xmin = overlap_remainder_margin.xmin;
+ ar->winrct.ymin = overlap_remainder_margin.ymin;
+ ar->winrct.xmax = ar->winrct.xmin + prefsizex - 1;
+ ar->winrct.ymax = ar->winrct.ymin + prefsizey - 1;
+
+ BLI_rcti_isect(&ar->winrct, &overlap_remainder_margin, &ar->winrct);
+
+ if (BLI_rcti_size_x(&ar->winrct) != prefsizex - 1) {
+ ar->flag |= RGN_FLAG_SIZE_CLAMP_X;
+ }
+ if (BLI_rcti_size_y(&ar->winrct) != prefsizey - 1) {
+ ar->flag |= RGN_FLAG_SIZE_CLAMP_Y;
+ }
+
+ /* We need to use a test that wont have been previously clamped. */
+ rcti winrct_test = {
+ .xmin = ar->winrct.xmin,
+ .ymin = ar->winrct.ymin,
+ .xmax = ar->winrct.xmin + size_min[0],
+ .ymax = ar->winrct.ymin + size_min[1],
+ };
+ BLI_rcti_isect(&winrct_test, &overlap_remainder_margin, &winrct_test);
+ if (BLI_rcti_size_x(&winrct_test) < size_min[0] ||
BLI_rcti_size_y(&winrct_test) < size_min[1]) {
- ar->flag |= RGN_FLAG_TOO_SMALL;
- }
- }
- else if (rct_fits(remainder, 'v', 1) < 0 || rct_fits(remainder, 'h', 1) < 0) {
- /* remainder is too small for any usage */
- ar->flag |= RGN_FLAG_TOO_SMALL;
- }
- else if (alignment == RGN_ALIGN_NONE) {
- /* typically last region */
- ar->winrct = *remainder;
- BLI_rcti_init(remainder, 0, 0, 0, 0);
- }
- else if (alignment == RGN_ALIGN_TOP || alignment == RGN_ALIGN_BOTTOM) {
- rcti *winrct = (ar->overlap) ? overlap_remainder : remainder;
-
- if (rct_fits(winrct, 'v', prefsizey) < 0) {
- ar->flag |= RGN_FLAG_TOO_SMALL;
- }
- else {
- int fac = rct_fits(winrct, 'v', prefsizey);
-
- if (fac < 0)
- prefsizey += fac;
-
- ar->winrct = *winrct;
-
- if (alignment == RGN_ALIGN_TOP) {
- ar->winrct.ymin = ar->winrct.ymax - prefsizey + 1;
- winrct->ymax = ar->winrct.ymin - 1;
- }
- else {
- ar->winrct.ymax = ar->winrct.ymin + prefsizey - 1;
- winrct->ymin = ar->winrct.ymax + 1;
- }
- }
- }
- else if (ELEM(alignment, RGN_ALIGN_LEFT, RGN_ALIGN_RIGHT)) {
- rcti *winrct = (ar->overlap) ? overlap_remainder : remainder;
-
- if (rct_fits(winrct, 'h', prefsizex) < 0) {
- ar->flag |= RGN_FLAG_TOO_SMALL;
- }
- else {
- int fac = rct_fits(winrct, 'h', prefsizex);
-
- if (fac < 0)
- prefsizex += fac;
-
- ar->winrct = *winrct;
-
- if (alignment == RGN_ALIGN_RIGHT) {
- ar->winrct.xmin = ar->winrct.xmax - prefsizex + 1;
- winrct->xmax = ar->winrct.xmin - 1;
- }
- else {
- ar->winrct.xmax = ar->winrct.xmin + prefsizex - 1;
- winrct->xmin = ar->winrct.xmax + 1;
- }
- }
- }
- else if (alignment == RGN_ALIGN_VSPLIT || alignment == RGN_ALIGN_HSPLIT) {
- /* percentage subdiv*/
- ar->winrct = *remainder;
-
- if (alignment == RGN_ALIGN_HSPLIT) {
- if (rct_fits(remainder, 'h', prefsizex) > 4) {
- ar->winrct.xmax = BLI_rcti_cent_x(remainder);
- remainder->xmin = ar->winrct.xmax + 1;
- }
- else {
- BLI_rcti_init(remainder, 0, 0, 0, 0);
- }
- }
- else {
- if (rct_fits(remainder, 'v', prefsizey) > 4) {
- ar->winrct.ymax = BLI_rcti_cent_y(remainder);
- remainder->ymin = ar->winrct.ymax + 1;
- }
- else {
- BLI_rcti_init(remainder, 0, 0, 0, 0);
- }
- }
- }
- else if (alignment == RGN_ALIGN_QSPLIT) {
- ar->winrct = *remainder;
-
- /* test if there's still 4 regions left */
- if (quad == 0) {
- ARegion *artest = ar->next;
- int count = 1;
-
- while (artest) {
- artest->alignment = RGN_ALIGN_QSPLIT;
- artest = artest->next;
- count++;
- }
-
- if (count != 4) {
- /* let's stop adding regions */
- BLI_rcti_init(remainder, 0, 0, 0, 0);
- if (G.debug & G_DEBUG)
- printf("region quadsplit failed\n");
- }
- else {
- quad = 1;
- }
- }
- if (quad) {
- if (quad == 1) { /* left bottom */
- ar->winrct.xmax = BLI_rcti_cent_x(remainder);
- ar->winrct.ymax = BLI_rcti_cent_y(remainder);
- }
- else if (quad == 2) { /* left top */
- ar->winrct.xmax = BLI_rcti_cent_x(remainder);
- ar->winrct.ymin = BLI_rcti_cent_y(remainder) + 1;
- }
- else if (quad == 3) { /* right bottom */
- ar->winrct.xmin = BLI_rcti_cent_x(remainder) + 1;
- ar->winrct.ymax = BLI_rcti_cent_y(remainder);
- }
- el
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list