From 0cad21f3efa7f56b276aa2988ed112bc97fb6e3c Mon Sep 17 00:00:00 2001
From: Mark Olesen <Mark.Olesen@esi-group.com>
Date: Wed, 5 Jun 2019 15:31:49 +0200
Subject: [PATCH] ENH: improve handling of font sizes for scalarBar

---
 src/runTimePostProcessing/scalarBar.C | 23 +++++++++++++++--------
 src/runTimePostProcessing/scalarBar.H | 21 ++++++++++++++++++++-
 2 files changed, 35 insertions(+), 9 deletions(-)

diff --git a/src/runTimePostProcessing/scalarBar.C b/src/runTimePostProcessing/scalarBar.C
index cfd2419..95a5413 100644
--- a/src/runTimePostProcessing/scalarBar.C
+++ b/src/runTimePostProcessing/scalarBar.C
@@ -57,8 +57,8 @@ void Foam::functionObjects::runTimePostPro::scalarBar::clear()
     position_ = {0.8, 0.1};
     size_ = {0.1, 0.5};
     title_ = "";
-    fontSize_ = 12;
-    titleSize_ = 0;   // 0 == Auto-sizing (factor 3)
+    fontSize_ = 0;    // 0 == Auto-sizing (defaultFontSize)
+    titleSize_ = 0;   // 0 == Auto-sizing (defaultTitleSizeFactor)
     nLabels_ = 5;
     labelFormat_ = "%f";
 }
@@ -121,6 +121,8 @@ bool Foam::functionObjects::runTimePostPro::scalarBar::add
         return false;
     }
 
+    const label fontSizeValue = (fontSize_ ? fontSize_ : defaultFontSize);
+
     auto sbar = vtkSmartPointer<vtkScalarBarActor>::New();
     sbar->SetLookupTable(lut);
     sbar->SetNumberOfLabels(nLabels_);
@@ -139,6 +141,8 @@ bool Foam::functionObjects::runTimePostPro::scalarBar::add
     if (titleHack_)
     {
         // Place the scalar bar title ourselves
+        sbar->SetUnconstrainedFontSize(true);
+
         titleActor = vtkSmartPointer<vtkTextActor>::New();
         titleActor->SetInput(title_.c_str());
 
@@ -148,6 +152,7 @@ bool Foam::functionObjects::runTimePostPro::scalarBar::add
     else
     {
         // Use the standard scalar bar title
+        sbar->SetUnconstrainedFontSize(fontSize_ != 0);
         sbar->SetTitle(title_.c_str());
         titleProp = sbar->GetTitleTextProperty();
     }
@@ -163,11 +168,11 @@ bool Foam::functionObjects::runTimePostPro::scalarBar::add
     }
     else
     {
-        // Auto = Factor 3 of fontSize
-        titleProp->SetFontSize(3*fontSize_);
+        // Auto
+        titleProp->SetFontSize(defaultTitleSizeFactor*fontSizeValue);
 
         // Or this??
-        // if (!titleHack_) titleProp->SetFontSize(fontSize_);
+        // if (!titleHack_) titleProp->SetFontSize(fontSizeValue);
     }
 
     titleProp->SetJustificationToCentered();
@@ -178,14 +183,16 @@ bool Foam::functionObjects::runTimePostPro::scalarBar::add
 
     titleProp->SetColor(textColour[0], textColour[1], textColour[2]);
 
-
     auto labProp = sbar->GetLabelTextProperty();
 
     labProp->SetColor(textColour[0], textColour[1], textColour[2]);
 
-    labProp->SetFontSize(fontSize_);
+    if (titleHack_ || fontSize_)
+    {
+        labProp->SetFontSize(fontSizeValue);
+    }
     labProp->ShadowOff();
-    labProp->BoldOff();
+    labProp->BoldOff();     // or: labProp->SetBold(bold_);
     labProp->ItalicOff();
 
     // Positioning
diff --git a/src/runTimePostProcessing/scalarBar.H b/src/runTimePostProcessing/scalarBar.H
index ce3280e..5507444 100644
--- a/src/runTimePostProcessing/scalarBar.H
+++ b/src/runTimePostProcessing/scalarBar.H
@@ -35,7 +35,7 @@ Description
         position    | Viewport position (x y) of scalar bar | yes |
         vertical    | Vertical scalar bar                   | no  | true
         size        | Viewport size (x y) of scalar bar     | no  | auto
-        fontSize    | Label size                            | no  | 12
+        fontSize    | Label size                            | no  | 0 == auto
         titleSize   | Title font size                       | no  | 0 == auto
         labelFormat | Label format string (eg, "%f")        | no  | "%f"
         numberOfLabels | Total number of labels             | no  | 5
@@ -45,6 +45,19 @@ Description
         titleHack   | Alternative placement strategy        | no  | yes
     \endtable
 
+Note
+    The \c titleHack option is a leftover from much older VTK versions
+    that had poor handling of the scalar bar text. When this is active,
+    the normal scalar bar title is suppressed and placed manually
+    (with a predefined ratio of the base font-size).
+
+    When the titleHack is off, the label and title font sizes are
+    automatically defined by the scalar bar size but can be overridden with
+    provided values.
+
+    The effect of fontSize and titleSize is unfortunately not consistent
+    between titleHack on/off.
+
 SourceFiles
     scalarBar.C
 
@@ -77,6 +90,12 @@ namespace runTimePostPro
 
 class scalarBar
 {
+    //- The default font size when titleHack is on
+    static constexpr const label defaultFontSize = 18;
+
+    //- The auto title/label ratio when titleHack is on
+    static constexpr const float defaultTitleSizeFactor = 1.5;
+
     bool visible_;
     bool vertical_;
     bool bold_;
-- 
GitLab