[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [42843] trunk/blender/source/blender/ editors/screen/screen_ops.c: Fix #29652: operator tab can not be maximised
Sergey Sharybin
sergey.vfx at gmail.com
Fri Dec 23 13:56:57 CET 2011
Revision: 42843
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=42843
Author: nazgul
Date: 2011-12-23 12:56:48 +0000 (Fri, 23 Dec 2011)
Log Message:
-----------
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.
Modified Paths:
--------------
trunk/blender/source/blender/editors/screen/screen_ops.c
Modified: trunk/blender/source/blender/editors/screen/screen_ops.c
===================================================================
--- trunk/blender/source/blender/editors/screen/screen_ops.c 2011-12-23 09:04:21 UTC (rev 42842)
+++ trunk/blender/source/blender/editors/screen/screen_ops.c 2011-12-23 12:56:48 UTC (rev 42843)
@@ -1666,6 +1666,47 @@
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 @@
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 @@
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;
More information about the Bf-blender-cvs
mailing list