diff options
author | Campbell Barton <ideasman42@gmail.com> | 2018-04-26 13:01:44 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2018-04-26 13:08:58 +0300 |
commit | 6a0264896b38794ec8242040cf5104c4e06d844e (patch) | |
tree | a50666f77b81a77441291f27d1b1720a3a6efefe /source/blender/editors/screen/screen_ops.c | |
parent | e0c088f8fb5afcb2dd70d7a6c275fd942f6e42a9 (diff) |
UI: toolbar single column size snapping
Once a region is set to it's snapped size, zooming keeps the size.
Diffstat (limited to 'source/blender/editors/screen/screen_ops.c')
-rw-r--r-- | source/blender/editors/screen/screen_ops.c | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c index 6ed56e91a0f..7dab2c7c3db 100644 --- a/source/blender/editors/screen/screen_ops.c +++ b/source/blender/editors/screen/screen_ops.c @@ -2156,7 +2156,8 @@ static int region_scale_modal(bContext *C, wmOperator *op, const wmEvent *event) /* execute the events */ switch (event->type) { case MOUSEMOVE: - + { + const int snap_size_threshold = U.widget_unit * 3; if (rmd->edge == AE_LEFT_TO_TOPRIGHT || rmd->edge == AE_RIGHT_TO_TOPLEFT) { delta = event->x - rmd->origx; if (rmd->edge == AE_LEFT_TO_TOPRIGHT) delta = -delta; @@ -2165,8 +2166,15 @@ static int region_scale_modal(bContext *C, wmOperator *op, const wmEvent *event) delta /= UI_DPI_FAC; rmd->ar->sizex = rmd->origval + delta; + + if (rmd->ar->type->snap_size) { + short sizex_test = rmd->ar->type->snap_size(rmd->ar, rmd->ar->sizex, 0); + if (ABS(rmd->ar->sizex - sizex_test) < snap_size_threshold) { + rmd->ar->sizex = sizex_test; + } + } CLAMP(rmd->ar->sizex, 0, rmd->maxsize); - + if (rmd->ar->sizex < UI_UNIT_X) { rmd->ar->sizex = rmd->origval; if (!(rmd->ar->flag & RGN_FLAG_HIDDEN)) @@ -2184,6 +2192,13 @@ static int region_scale_modal(bContext *C, wmOperator *op, const wmEvent *event) delta /= UI_DPI_FAC; rmd->ar->sizey = rmd->origval + delta; + + if (rmd->ar->type->snap_size) { + short sizey_test = rmd->ar->type->snap_size(rmd->ar, rmd->ar->sizey, 1); + if (ABS(rmd->ar->sizey - sizey_test) < snap_size_threshold) { + rmd->ar->sizey = sizey_test; + } + } CLAMP(rmd->ar->sizey, 0, rmd->maxsize); /* note, 'UI_UNIT_Y/4' means you need to drag the header almost @@ -2203,7 +2218,7 @@ static int region_scale_modal(bContext *C, wmOperator *op, const wmEvent *event) WM_event_add_notifier(C, NC_SCREEN | NA_EDITED, NULL); break; - + } case LEFTMOUSE: if (event->val == KM_RELEASE) { |