[Bf-blender-cvs] [4dd19a1ad60] master: UI: disable curve map & profile zoom buttons at max/min zoom level

Colin Basnett noreply at git.blender.org
Mon Nov 14 14:04:50 CET 2022


Commit: 4dd19a1ad60e9bb390a155cdd90bbed8002f0324
Author: Colin Basnett
Date:   Mon Nov 14 13:11:18 2022 +0100
Branches: master
https://developer.blender.org/rB4dd19a1ad60e9bb390a155cdd90bbed8002f0324

UI: disable curve map & profile zoom buttons at max/min zoom level

Disable the zoom in and out buttons on the when they would have no effect.

This also removes an incorrect comment that indicates the maximum zoom level
was 20x when in fact it was 25x.

Differential Revision: https://developer.blender.org/D16252

===================================================================

M	source/blender/editors/interface/interface_templates.c

===================================================================

diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c
index b32aa82ad9e..94abfe54328 100644
--- a/source/blender/editors/interface/interface_templates.c
+++ b/source/blender/editors/interface/interface_templates.c
@@ -4122,12 +4122,23 @@ void uiTemplateVectorscope(uiLayout *layout, PointerRNA *ptr, const char *propna
 /** \name CurveMapping Template
  * \{ */
 
+#define CURVE_ZOOM_MAX (1.0f / 25.0f)
+
+static bool curvemap_can_zoom_out(CurveMapping *cumap)
+{
+  return BLI_rctf_size_x(&cumap->curr) < BLI_rctf_size_x(&cumap->clipr);
+}
+
+static bool curvemap_can_zoom_in(CurveMapping *cumap)
+{
+  return BLI_rctf_size_x(&cumap->curr) > CURVE_ZOOM_MAX * BLI_rctf_size_x(&cumap->clipr);
+}
+
 static void curvemap_buttons_zoom_in(bContext *C, void *cumap_v, void *UNUSED(arg))
 {
   CurveMapping *cumap = cumap_v;
 
-  /* we allow 20 times zoom */
-  if (BLI_rctf_size_x(&cumap->curr) > 0.04f * BLI_rctf_size_x(&cumap->clipr)) {
+  if (curvemap_can_zoom_in(cumap)) {
     const float dx = 0.1154f * BLI_rctf_size_x(&cumap->curr);
     cumap->curr.xmin += dx;
     cumap->curr.xmax -= dx;
@@ -4144,8 +4155,7 @@ static void curvemap_buttons_zoom_out(bContext *C, void *cumap_v, void *UNUSED(u
   CurveMapping *cumap = cumap_v;
   float d, d1;
 
-  /* we allow 20 times zoom, but don't view outside clip */
-  if (BLI_rctf_size_x(&cumap->curr) < 20.0f * BLI_rctf_size_x(&cumap->clipr)) {
+  if (curvemap_can_zoom_out(cumap)) {
     d = d1 = 0.15f * BLI_rctf_size_x(&cumap->curr);
 
     if (cumap->flag & CUMA_DO_CLIP) {
@@ -4633,6 +4643,9 @@ static void curvemap_buttons_layout(uiLayout *layout,
                     0.0,
                     TIP_("Zoom in"));
   UI_but_func_set(bt, curvemap_buttons_zoom_in, cumap, NULL);
+  if (!curvemap_can_zoom_in(cumap)) {
+    UI_but_disable(bt, "");
+  }
 
   /* Zoom out */
   bt = uiDefIconBut(block,
@@ -4650,8 +4663,11 @@ static void curvemap_buttons_layout(uiLayout *layout,
                     0.0,
                     TIP_("Zoom out"));
   UI_but_func_set(bt, curvemap_buttons_zoom_out, cumap, NULL);
+  if (!curvemap_can_zoom_out(cumap)) {
+    UI_but_disable(bt, "");
+  }
 
-  /* Clippoing button. */
+  /* Clipping button. */
   const int icon = (cumap->flag & CUMA_DO_CLIP) ? ICON_CLIPUV_HLT : ICON_CLIPUV_DEHLT;
   bt = uiDefIconBlockBut(
       block, curvemap_clipping_func, cumap, 0, icon, 0, 0, dx, dx, TIP_("Clipping Options"));
@@ -5080,12 +5096,21 @@ static uiBlock *CurveProfile_buttons_tools(bContext *C, ARegion *region, void *p
   return CurveProfile_tools_func(C, region, (CurveProfile *)profile_v);
 }
 
+static bool CurveProfile_can_zoom_in(CurveProfile *profile)
+{
+  return BLI_rctf_size_x(&profile->view_rect) > CURVE_ZOOM_MAX * BLI_rctf_size_x(&profile->clip_rect);
+}
+
+static bool CurveProfile_can_zoom_out(CurveProfile *profile)
+{
+  return BLI_rctf_size_x(&profile->view_rect) < BLI_rctf_size_x(&profile->clip_rect);
+}
+
 static void CurveProfile_buttons_zoom_in(bContext *C, void *profile_v, void *UNUSED(arg))
 {
   CurveProfile *profile = profile_v;
 
-  /* Allow a 20x zoom. */
-  if (BLI_rctf_size_x(&profile->view_rect) > 0.04f * BLI_rctf_size_x(&profile->clip_rect)) {
+  if (CurveProfile_can_zoom_in(profile)) {
     const float dx = 0.1154f * BLI_rctf_size_x(&profile->view_rect);
     profile->view_rect.xmin += dx;
     profile->view_rect.xmax -= dx;
@@ -5101,8 +5126,7 @@ static void CurveProfile_buttons_zoom_out(bContext *C, void *profile_v, void *UN
 {
   CurveProfile *profile = profile_v;
 
-  /* Allow 20 times zoom, but don't view outside clip */
-  if (BLI_rctf_size_x(&profile->view_rect) < 20.0f * BLI_rctf_size_x(&profile->clip_rect)) {
+  if (CurveProfile_can_zoom_out(profile)) {
     float d = 0.15f * BLI_rctf_size_x(&profile->view_rect);
     float d1 = d;
 
@@ -5250,6 +5274,9 @@ static void CurveProfile_buttons_layout(uiLayout *layout, PointerRNA *ptr, RNAUp
                     0.0,
                     TIP_("Zoom in"));
   UI_but_func_set(bt, CurveProfile_buttons_zoom_in, profile, NULL);
+  if (!CurveProfile_can_zoom_in(profile)) {
+    UI_but_disable(bt, "");
+  }
 
   /* Zoom out */
   bt = uiDefIconBut(block,
@@ -5267,6 +5294,9 @@ static void CurveProfile_buttons_layout(uiLayout *layout, PointerRNA *ptr, RNAUp
                     0.0,
                     TIP_("Zoom out"));
   UI_but_func_set(bt, CurveProfile_buttons_zoom_out, profile, NULL);
+  if (!CurveProfile_can_zoom_out(profile)) {
+    UI_but_disable(bt, "");
+  }
 
   /* (Right aligned) */
   sub = uiLayoutRow(row, true);



More information about the Bf-blender-cvs mailing list