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:
authorSergey Sharybin <sergey.vfx@gmail.com>2011-12-23 16:56:48 +0400
committerSergey Sharybin <sergey.vfx@gmail.com>2011-12-23 16:56:48 +0400
commit5627e1b33fda416711b5daf1c14fe3f007f5fc23 (patch)
tree6149fbde4fdfb5bfb77c31f542eda6fbc6c7ff3e /source/blender/editors
parentda3dd4de20153aac857088d2e5837b1e6eb26aac (diff)
Fix #29652: operator tab can not be maximised
Clamp region's size on expand to max allowed size, so it wouldn't be automatically hidden just after expand.
Diffstat (limited to 'source/blender/editors')
-rw-r--r--source/blender/editors/screen/screen_ops.c67
1 files changed, 53 insertions, 14 deletions
diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c
index 1c34df5393a..7e17592f67c 100644
--- a/source/blender/editors/screen/screen_ops.c
+++ b/source/blender/editors/screen/screen_ops.c
@@ -1666,6 +1666,47 @@ static int region_scale_invoke(bContext *C, wmOperator *op, wmEvent *event)
return OPERATOR_FINISHED;
}
+static int region_scale_get_maxsize(RegionMoveData *rmd)
+{
+ int maxsize= 0;
+
+ if(rmd->edge==AE_LEFT_TO_TOPRIGHT || rmd->edge==AE_RIGHT_TO_TOPLEFT) {
+ return rmd->sa->winx - UI_UNIT_X;
+ }
+
+ if(rmd->ar->regiontype == RGN_TYPE_TOOL_PROPS) {
+ /* this calculation seems overly verbose
+ * can someone explain why this method is necessary? - campbell */
+ maxsize = rmd->maxsize - ((rmd->sa->headertype==HEADERTOP)?UI_UNIT_Y*2:UI_UNIT_Y) - (UI_UNIT_Y/4);
+ }
+
+ return maxsize;
+}
+
+static void region_scale_validate_size(RegionMoveData *rmd)
+{
+ if((rmd->ar->flag & RGN_FLAG_HIDDEN)==0) {
+ short *size, maxsize= -1;
+
+
+ if(rmd->edge==AE_LEFT_TO_TOPRIGHT || rmd->edge==AE_RIGHT_TO_TOPLEFT)
+ size= &rmd->ar->sizex;
+ else
+ size= &rmd->ar->sizey;
+
+ maxsize= region_scale_get_maxsize(rmd);
+
+ if(*size > maxsize && maxsize > 0)
+ *size= maxsize;
+ }
+}
+
+static void region_scale_toggle_hidden(bContext *C, RegionMoveData *rmd)
+{
+ ED_region_toggle_hidden(C, rmd->ar);
+ region_scale_validate_size(rmd);
+}
+
static int region_scale_modal(bContext *C, wmOperator *op, wmEvent *event)
{
RegionMoveData *rmd= op->customdata;
@@ -1685,35 +1726,29 @@ static int region_scale_modal(bContext *C, wmOperator *op, wmEvent *event)
if(rmd->ar->sizex < UI_UNIT_X) {
rmd->ar->sizex= rmd->origval;
if(!(rmd->ar->flag & RGN_FLAG_HIDDEN))
- ED_region_toggle_hidden(C, rmd->ar);
+ region_scale_toggle_hidden(C, rmd);
}
else if(rmd->ar->flag & RGN_FLAG_HIDDEN)
- ED_region_toggle_hidden(C, rmd->ar);
+ region_scale_toggle_hidden(C, rmd);
}
else {
- int maxsize=0;
+ int maxsize= region_scale_get_maxsize(rmd);
delta= event->y - rmd->origy;
if(rmd->edge==AE_BOTTOM_TO_TOPLEFT) delta= -delta;
rmd->ar->sizey= rmd->origval + delta;
CLAMP(rmd->ar->sizey, 0, rmd->maxsize);
- if(rmd->ar->regiontype == RGN_TYPE_TOOL_PROPS) {
- /* this calculation seems overly verbose
- * can someone explain why this method is necessary? - campbell */
- maxsize = rmd->maxsize - ((rmd->sa->headertype==HEADERTOP)?UI_UNIT_Y*2:UI_UNIT_Y) - (UI_UNIT_Y/4);
- }
-
/* note, 'UI_UNIT_Y/4' means you need to drag the header almost
* all the way down for it to become hidden, this is done
* otherwise its too easy to do this by accident */
if(rmd->ar->sizey < UI_UNIT_Y/4 || (maxsize > 0 && (rmd->ar->sizey > maxsize)) ) {
rmd->ar->sizey= rmd->origval;
if(!(rmd->ar->flag & RGN_FLAG_HIDDEN))
- ED_region_toggle_hidden(C, rmd->ar);
+ region_scale_toggle_hidden(C, rmd);
}
else if(rmd->ar->flag & RGN_FLAG_HIDDEN)
- ED_region_toggle_hidden(C, rmd->ar);
+ region_scale_toggle_hidden(C, rmd);
}
ED_area_tag_redraw(rmd->sa);
WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL);
@@ -1725,10 +1760,14 @@ static int region_scale_modal(bContext *C, wmOperator *op, wmEvent *event)
if(ABS(event->x - rmd->origx) < 2 && ABS(event->y - rmd->origy) < 2) {
if(rmd->ar->flag & RGN_FLAG_HIDDEN) {
- ED_region_toggle_hidden(C, rmd->ar);
- ED_area_tag_redraw(rmd->sa);
- WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL);
+ region_scale_toggle_hidden(C, rmd);
+ }
+ else if(rmd->ar->flag & RGN_FLAG_TOO_SMALL) {
+ region_scale_validate_size(rmd);
}
+
+ ED_area_tag_redraw(rmd->sa);
+ WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL);
}
MEM_freeN(op->customdata);
op->customdata = NULL;