Browse Source

Autosizing "View Statistics" button for longer translations (asked for by Italian translator)

Source commit: 9041efa40da547efa1118169119ccf9b0693c754
Martin Prikryl 6 years ago
parent
commit
0260185077

+ 2 - 0
source/forms/Preferences.cpp

@@ -127,6 +127,8 @@ __fastcall TPreferencesDialog::TPreferencesDialog(
   LinkLabel(UpdatesLink);
   LinkLabel(UpdatesLink);
   LinkAppLabel(BackgroundConfirmationsLink);
   LinkAppLabel(BackgroundConfirmationsLink);
 
 
+  AutoSizeButton(UsageViewButton);
+
   AutomaticIniFileStorageLabel->Caption = ExpandEnvironmentVariables(Configuration->GetAutomaticIniFileStorageName(false));
   AutomaticIniFileStorageLabel->Caption = ExpandEnvironmentVariables(Configuration->GetAutomaticIniFileStorageName(false));
 
 
   if (IsUWP())
   if (IsUWP())

+ 27 - 6
source/windows/VCLCommon.cpp

@@ -460,6 +460,7 @@ class TPublicControl : public TControl
 {
 {
 friend void __fastcall RealignControl(TControl * Control);
 friend void __fastcall RealignControl(TControl * Control);
 friend void __fastcall DoFormWindowProc(TCustomForm * Form, TWndMethod WndProc, TMessage & Message);
 friend void __fastcall DoFormWindowProc(TCustomForm * Form, TWndMethod WndProc, TMessage & Message);
+friend TCanvas * CreateControlCanvas(TControl * Control);
 };
 };
 //---------------------------------------------------------------------
 //---------------------------------------------------------------------
 class TPublicForm : public TForm
 class TPublicForm : public TForm
@@ -1812,14 +1813,11 @@ void __fastcall InvokeHelp(TWinControl * Control)
 //---------------------------------------------------------------------------
 //---------------------------------------------------------------------------
 //---------------------------------------------------------------------------
 //---------------------------------------------------------------------------
 static void __fastcall FocusableLabelCanvas(TStaticText * StaticText,
 static void __fastcall FocusableLabelCanvas(TStaticText * StaticText,
-  TControlCanvas ** ACanvas, TRect & R)
+  TCanvas ** ACanvas, TRect & R)
 {
 {
-  TControlCanvas * Canvas = new TControlCanvas();
+  TCanvas * Canvas = CreateControlCanvas(StaticText);
   try
   try
   {
   {
-    Canvas->Control = StaticText;
-    Canvas->Font = StaticText->Font;
-
     R = StaticText->ClientRect;
     R = StaticText->ClientRect;
 
 
     TSize TextSize;
     TSize TextSize;
@@ -1944,7 +1942,7 @@ static void __fastcall FocusableLabelWindowProc(void * Data, TMessage & Message,
   if (Message.Msg == WM_PAINT)
   if (Message.Msg == WM_PAINT)
   {
   {
     TRect R;
     TRect R;
-    TControlCanvas * Canvas;
+    TCanvas * Canvas;
     FocusableLabelCanvas(StaticText, &Canvas, R);
     FocusableLabelCanvas(StaticText, &Canvas, R);
     try
     try
     {
     {
@@ -2823,3 +2821,26 @@ bool IsCancelButtonBeingClicked(TControl * Control)
   // Find dialog has no Cancel button
   // Find dialog has no Cancel button
   return (CancelButton != NULL) && IsButtonBeingClicked(CancelButton);
   return (CancelButton != NULL) && IsButtonBeingClicked(CancelButton);
 }
 }
+//---------------------------------------------------------------------------
+TCanvas * CreateControlCanvas(TControl * Control)
+{
+  std::unique_ptr<TControlCanvas> Canvas(new TControlCanvas());
+  Canvas->Control = Control;
+  TPublicControl * PublicControl = static_cast<TPublicControl *>(Control);
+  Canvas->Font = PublicControl->Font;
+  return Canvas.release();
+}
+//---------------------------------------------------------------------------
+void AutoSizeButton(TButton * Button)
+{
+  std::unique_ptr<TCanvas> Canvas(CreateControlCanvas(Button));
+  int MinWidth = Canvas->TextWidth(Button->Caption) + ScaleByTextHeight(Button, (2 * 8));
+  if (Button->Width < MinWidth)
+  {
+    if (Button->Anchors.Contains(akRight))
+    {
+      Button->Left = Button->Left - (MinWidth - Button->Width);
+    }
+    Button->Width = MinWidth;
+  }
+}

+ 2 - 0
source/windows/VCLCommon.h

@@ -87,5 +87,7 @@ void __fastcall RecordFormImplicitRescale(TForm * Form);
 void __fastcall CountClicksForWindowPrint(TForm * Form);
 void __fastcall CountClicksForWindowPrint(TForm * Form);
 bool IsButtonBeingClicked(TButtonControl * Button);
 bool IsButtonBeingClicked(TButtonControl * Button);
 bool IsCancelButtonBeingClicked(TControl * Control);
 bool IsCancelButtonBeingClicked(TControl * Control);
+TCanvas * CreateControlCanvas(TControl * Control);
+void AutoSizeButton(TButton * Button);
 //---------------------------------------------------------------------------
 //---------------------------------------------------------------------------
 #endif  // VCLCommonH
 #endif  // VCLCommonH

+ 1 - 3
source/windows/WinInterface.cpp

@@ -1296,9 +1296,7 @@ void __fastcall CenterButtonImage(TButton * Button)
     Button->ImageAlignment = iaCenter;
     Button->ImageAlignment = iaCenter;
     int ImageWidth = Button->Images->Width;
     int ImageWidth = Button->Images->Width;
 
 
-    std::unique_ptr<TControlCanvas> Canvas(new TControlCanvas());
-    Canvas->Control = Button;
-    Canvas->Font = Button->Font;
+    std::unique_ptr<TCanvas> Canvas(CreateControlCanvas(Button));
 
 
     UnicodeString Caption = Button->Caption.Trim();
     UnicodeString Caption = Button->Caption.Trim();
     UnicodeString Padding;
     UnicodeString Padding;