Przeglądaj źródła

Dark theme for Transfer Options dialog (part of Issue 1696)

https://winscp.net/tracker/1696

Source commit: 60e5ebeca3ffaa09da1e98f5d4301b052f1741ce
Martin Prikryl 4 miesięcy temu
rodzic
commit
b5d20839db

+ 6 - 0
source/forms/Copy.cpp

@@ -619,3 +619,9 @@ void __fastcall TCopyDialog::FormAfterMonitorDpiChanged(TObject *, int OldDPI, i
   AutoSizeCheckBox(NeverShowAgainCheck);
 }
 //---------------------------------------------------------------------------
+void __fastcall TCopyDialog::CreateWnd()
+{
+  TForm::CreateWnd();
+  ApplyColorMode(this);
+}
+//---------------------------------------------------------------------------

+ 1 - 0
source/forms/Copy.h

@@ -85,6 +85,7 @@ protected:
   bool __fastcall RemotePaths();
   void __fastcall CopyParamListPopup(TRect R, int AdditionalOptions);
   int __fastcall ActualCopyParamAttrs();
+  virtual void __fastcall CreateWnd();
 
   INTERFACE_HOOK;
 

+ 21 - 0
source/packages/my/HistoryComboBox.pas

@@ -8,8 +8,14 @@ uses
 
 type
   TUIStateAwareComboBox = class(TComboBox)
+  private
+    FDarkMode: Boolean;
+    procedure SetDarkMode(Value: Boolean);
   protected
     procedure ComboWndProc(var Message: TMessage; ComboWnd: HWnd; ComboProc: TWindowProcPtr); override;
+    procedure CreateWnd; override;
+  public
+    property DarkMode: Boolean read FDarkMode write SetDarkMode default False;
   end;
 
 type
@@ -90,6 +96,21 @@ begin
   end;
 end;
 
+procedure TUIStateAwareComboBox.CreateWnd;
+begin
+  inherited;
+  if DarkMode then
+    SetDarkModeTheme(Self, 'CFD');
+end;
+
+procedure TUIStateAwareComboBox.SetDarkMode(Value: Boolean);
+begin
+  if DarkMode <> Value then
+  begin
+    FDarkMode := Value;
+    RecreateWnd;
+  end;
+end;
 
   { THistoryComboBox }
 

+ 1 - 21
source/windows/GUITools.cpp

@@ -2865,26 +2865,6 @@ TButton * CreateButton(TComponent * AOwner)
 }
 //---------------------------------------------------------------------------
 //---------------------------------------------------------------------------
-class TComboBoxEx : public TUIStateAwareComboBox
-{
-public:
-  __fastcall virtual TComboBoxEx(TComponent * AOwner);
-protected:
-  virtual void __fastcall CreateWnd();
-};
-//---------------------------------------------------------------------------
-__fastcall ::TComboBoxEx::TComboBoxEx(TComponent * AOwner) :
-  TUIStateAwareComboBox(AOwner)
-{
-}
-//---------------------------------------------------------------------------
-void __fastcall ::TComboBoxEx::CreateWnd()
-{
-  TUIStateAwareComboBox::CreateWnd();
-  SetColorModeTheme(this, L"CFD");
-}
-//---------------------------------------------------------------------------
-//---------------------------------------------------------------------------
 class TEditEx : public TEdit
 {
 public:
@@ -2944,7 +2924,7 @@ void __fastcall FindComponentClass(
   }
   else if (ComponentClass == __classid(TComboBox))
   {
-    ComponentClass = __classid(::TComboBoxEx);
+    ComponentClass = __classid(TUIStateAwareComboBox);
   }
   else if (ComponentClass == __classid(TGroupBox))
   {

+ 6 - 1
source/windows/VCLCommon.cpp

@@ -1153,6 +1153,10 @@ void ApplyDarkModeOnControl(TControl * Control)
     {
       dynamic_cast<TUpDownEdit *>(WinControl)->DarkMode = true;
     }
+    else if (dynamic_cast<TUIStateAwareComboBox *>(WinControl) != NULL)
+    {
+      dynamic_cast<TUIStateAwareComboBox *>(WinControl)->DarkMode = true;
+    }
 
     for (int Index = 0; Index < WinControl->ControlCount; Index++)
     {
@@ -2395,7 +2399,8 @@ void __fastcall LinkAppLabel(TStaticText * StaticText)
 //---------------------------------------------------------------------------
 static void __fastcall HotTrackLabelMouseEnter(void * /*Data*/, TObject * Sender)
 {
-  reinterpret_cast<TLabel *>(Sender)->Font->Color = clBlue;
+  TLabel * Label = reinterpret_cast<TLabel *>(Sender);
+  Label->Font->Color = GetLinkColor(Label);
 }
 //---------------------------------------------------------------------------
 static void __fastcall HotTrackLabelMouseLeave(void * /*Data*/, TObject * Sender)