Browse Source

Added IO.FontBaseScale for global rescale. Renamed SetFontScale to SetWindowFontScale

ocornut 11 years ago
parent
commit
05a42ba3a6
2 changed files with 19 additions and 16 deletions
  1. 16 14
      imgui.cpp
  2. 3 2
      imgui.h

+ 16 - 14
imgui.cpp

@@ -1,4 +1,4 @@
-// ImGui library v1.11
+// ImGui library v1.11+
 // See ImGui::ShowTestWindow() for sample code.
 // Read 'Programmer guide' below for notes on how to setup ImGui in your codebase.
 // Get latest version at https://github.com/ocornut/imgui
@@ -301,7 +301,8 @@ ImGuiIO::ImGuiIO()
     Font = NULL;
 	FontYOffset = 0.0f;
     FontTexUvForWhite = ImVec2(0.0f,0.0f);
-    FontAllowScaling = false;
+	FontBaseScale = 1.0f;
+    FontAllowUserScaling = false;
     PixelCenterOffset = 0.0f;
     MousePos = ImVec2(-1,-1);
     MousePosPrev = ImVec2(-1,-1);
@@ -633,7 +634,7 @@ struct ImGuiState
     bool                    Initialized;
     ImGuiIO                 IO;
     ImGuiStyle              Style;
-	float					FontSize;							// == IO.Font->GetFontSize(). Vertical distance between two lines of text, aka == CalcTextSize(" ").y
+	float					FontSize;							// == IO.FontBaseScale * IO.Font->GetFontSize(). Vertical distance between two lines of text, aka == CalcTextSize(" ").y
 
     float                   Time;
     int                     FrameCount;
@@ -720,7 +721,7 @@ struct ImGuiWindow
     int                     LastFrameDrawn;
     float                   ItemWidthDefault;
     ImGuiStorage            StateStorage;
-    float                   FontScale;
+    float                   FontWindowScale;                    // Scale multipler per-window
 
     int                     FocusIdxCounter;                    // Start at -1 and increase as assigned via FocusItemRegister()
     int                     FocusIdxRequestCurrent;             // Item being requested for focus, rely on layout to be stable between the frame pressing TAB and the next frame
@@ -741,7 +742,7 @@ public:
 
     ImGuiAabb   Aabb() const                            { return ImGuiAabb(Pos, Pos+Size); }
     ImFont      Font() const                            { return GImGui.IO.Font; }
-    float       FontSize() const                        { return GImGui.FontSize * FontScale; }
+    float       FontSize() const                        { return GImGui.FontSize * FontWindowScale; }
     ImVec2      CursorPos() const                       { return DC.CursorPos; }
     float       TitleBarHeight() const                  { return (Flags & ImGuiWindowFlags_NoTitleBar) ? 0 : FontSize() + GImGui.Style.FramePadding.y * 2.0f; }
     ImGuiAabb   TitleBarAabb() const                    { return ImGuiAabb(Pos, Pos + ImVec2(SizeFull.x, TitleBarHeight())); }
@@ -973,7 +974,7 @@ ImGuiWindow::ImGuiWindow(const char* name, ImVec2 default_pos, ImVec2 default_si
     AutoFitFrames = -1;
     LastFrameDrawn = -1;
     ItemWidthDefault = 0.0f;
-    FontScale = 1.0f;
+    FontWindowScale = 1.0f;
 
     if (ImLength(Size) < 0.001f)
         AutoFitFrames = 3;
@@ -1218,6 +1219,7 @@ void NewFrame()
     IM_ASSERT(g.IO.DeltaTime > 0.0f);
     IM_ASSERT(g.IO.DisplaySize.x > 0.0f && g.IO.DisplaySize.y > 0.0f);
     IM_ASSERT(g.IO.RenderDrawListsFn != NULL);  // Must be implemented
+	IM_ASSERT(g.IO.FontBaseScale > 0.0f);
 
     if (!g.Initialized)
     {
@@ -1245,7 +1247,7 @@ void NewFrame()
     g.Time += g.IO.DeltaTime;
     g.FrameCount += 1;
     g.Tooltip[0] = '\0';
-    g.FontSize = g.IO.Font->GetFontSize();
+	g.FontSize = g.IO.FontBaseScale * g.IO.Font->GetFontSize();
 
     // Update inputs state
     if (g.IO.MousePos.x < 0 && g.IO.MousePos.y < 0)
@@ -1306,12 +1308,12 @@ void NewFrame()
         ImGuiWindow* window = g.HoveredWindow;
         if (g.IO.KeyCtrl)
         {
-            if (g.IO.FontAllowScaling)
+            if (g.IO.FontAllowUserScaling)
             {
                 // Zoom / Scale window
-                float new_font_scale = ImClamp(window->FontScale + g.IO.MouseWheel * 0.10f, 0.50f, 2.50f);
-                float scale = new_font_scale / window->FontScale;
-                window->FontScale = new_font_scale;
+                float new_font_scale = ImClamp(window->FontWindowScale + g.IO.MouseWheel * 0.10f, 0.50f, 2.50f);
+                float scale = new_font_scale / window->FontWindowScale;
+                window->FontWindowScale = new_font_scale;
 
                 const ImVec2 offset = window->Size * (1.0f - scale) * (g.IO.MousePos - window->Pos) / window->Size;
                 window->Pos += offset;
@@ -2507,10 +2509,10 @@ ImDrawList* GetWindowDrawList()
     return window->DrawList;
 }
 
-void SetFontScale(float scale)
+void SetWindowFontScale(float scale)
 {
     ImGuiWindow* window = GetCurrentWindow();
-    window->FontScale = scale;
+    window->FontWindowScale = scale;
 }
 
 ImVec2 GetCursorPos()
@@ -5533,7 +5535,7 @@ void ShowUserGuide()
     ImGui::BulletText("Click and drag on lower right corner to resize window.");
     ImGui::BulletText("Click and drag on any empty space to move window.");
     ImGui::BulletText("Mouse Wheel to scroll.");
-    if (g.IO.FontAllowScaling)
+    if (g.IO.FontAllowUserScaling)
         ImGui::BulletText("CTRL+Mouse Wheel to zoom window contents.");
     ImGui::BulletText("TAB/SHIFT+TAB to cycle thru keyboard editable fields.");
     ImGui::BulletText("CTRL+Click on a slider to input text.");

+ 3 - 2
imgui.h

@@ -152,7 +152,7 @@ namespace ImGui
     ImVec2      GetWindowContentRegionMin();
     ImVec2      GetWindowContentRegionMax();
     ImDrawList* GetWindowDrawList();                                                // get rendering command-list if you want to append your own draw primitives.
-    void        SetFontScale(float scale);
+    void        SetWindowFontScale(float scale);                                    // per-window font scale. Adjust IO.FontBaseScale if you want to scale all windows together.
     void        SetScrollPosHere();                                                 // adjust scrolling position to center into the current cursor position.
     void        SetTreeStateStorage(ImGuiStorage* tree);                            // replace tree state storage with our own (if you want to manipulate it yourself, typically clear subsection of it).
     ImGuiStorage* GetTreeStateStorage();
@@ -406,7 +406,8 @@ struct ImGuiIO
     ImFont      Font;                       // <auto>                   // Gets passed to text functions. Typedef ImFont to the type you want (ImBitmapFont* or your own font).
 	float		FontYOffset;				// = 0.0f					// Offset font rendering by xx pixels in Y axis.
     ImVec2      FontTexUvForWhite;          // = (0.0f,0.0f)            // Font texture must have a white pixel at this UV coordinate. Adjust if you are using custom texture.
-    bool        FontAllowScaling;           // = false                  // Set to allow scaling text with CTRL+Wheel.
+	float       FontBaseScale;              // = 1.0f                   // Base font scale, multiplied by the per-window font scale which you can adjust with SetFontScale()
+    bool        FontAllowUserScaling;       // = false                  // Set to allow scaling text with CTRL+Wheel.
     float       PixelCenterOffset;          // = 0.0f                   // Try to set to 0.5f or 0.375f if rendering is blurry
 
     // Settings - Rendering function (REQUIRED)