Browse Source

Don't need DarkStatusBarSubclassProc anymore, this is okay as well.

Martijn Laan 2 months ago
parent
commit
d61f49ce0f
3 changed files with 8 additions and 91 deletions
  1. 1 1
      Components/ModernColors.pas
  2. 0 1
      Projects/Src/IDE.MainForm.dfm
  3. 7 89
      Projects/Src/IDE.MainForm.pas

+ 1 - 1
Components/ModernColors.pas

@@ -43,7 +43,7 @@ const
 
   DFore = $D6D6D6;           { VSCode Modern Dark, 2 tints lightened using color-hex.com }
   DBack = $1F1F1F;           { VSCode Modern Dark }
-  DToolBack = $413E40;       { Monokai Pro }
+  DToolBack = $2B2B2B;       { VCL Style 'Windows11 Dark 1.0' }
   DSelBack = $764F1D;        { VSCode Modern Dark }
   //DSelInactiveBack = $51504F;{ VSCode Modern Dark }
   DIntelliBack = $202020;    { VSCode Modern Dark }

+ 0 - 1
Projects/Src/IDE.MainForm.dfm

@@ -185,7 +185,6 @@ object MainForm: TMainForm
         Bevel = pbNone
         Width = 50
       end>
-    StyleName = 'Windows'
     OnClick = StatusBarClick
     OnDrawPanel = StatusBarDrawPanel
     OnResize = StatusBarResize

+ 7 - 89
Projects/Src/IDE.MainForm.pas

@@ -814,92 +814,6 @@ begin
   Result := Memo;
 end;
 
-function DarkStatusBarSubclassProc(hWnd: HWND; uMsg: UINT; wParam: WPARAM; lParam: LPARAM; uIdSubclass: UINT_PTR; dwRefData: DWORD_PTR): LRESULT; stdcall;
-const
-  { See TStatusBarStyleHook.Paint }
-  AlignStyles: array [TAlignment] of Integer = (DT_LEFT, DT_RIGHT, DT_CENTER);
-  cGripSize = 17;
-begin
-  case uMsg of
-    WM_ERASEBKGND:
-      begin
-        const MainForm = TMainForm(dwRefData);
-        if MainForm.FTheme.Dark then begin
-          { See StatusBarStyleHook.WMEraseBkgnd }
-          Exit(1);
-        end;
-      end;
-    WM_PAINT, WM_PRINTCLIENT:
-      begin
-        const MainForm = TMainForm(dwRefData);
-        if MainForm.FTheme.Dark then begin
-          var PaintStruct: TPaintStruct;
-          const Canvas = TCanvas.Create;
-          try
-            if uMsg = WM_PAINT then
-              Canvas.Handle := BeginPaint(hWnd, PaintStruct)
-            else
-              Canvas.Handle := wParam;
-
-            const Control = MainForm.StatusBar;
-            Canvas.Font := Control.Font;
-            Canvas.Font.Color := MainForm.FTheme.Colors[tcFore];
-
-            { See TStatusBarStyleHook.Paint }
-
-            Canvas.Brush.Color := $171717; { Same as themed scrollbar drawn by Windows 11 }
-            Canvas.FillRect(Rect(0, 0, Control.Width, Control.Height));
-
-            const Count = Control.Panels.Count;
-            for var I := 0 to Count-1 do begin
-              var R := Default(TRect);
-              SendMessage(hWnd, SB_GETRECT, I, IntPtr(@R));
-              if IsRectEmpty(R) then
-                Continue;
-              var R1 := R;
-              if I = Count - 1 then
-                R1.Right := Control.ClientWidth + 10;
-              Canvas.FillRect(R1);
-              InflateRect(R, -1, -1);
-              var Flags := Control.DrawTextBiDiModeFlags(AlignStyles[Control.Panels[I].Alignment]);
-              Flags := Flags + DT_VCENTER;
-              var LText: String;
-              SetLength(LText, Word(SendMessage(hWnd, SB_GETTEXTLENGTH, I, 0)));
-              if Length(LText) > 0 then begin { Always False at the moment }
-                var Res := SendMessage(hWnd, SB_GETTEXT, I, IntPtr(@LText[1]));
-                if (Res and SBT_OWNERDRAW = 0) then
-                  DrawText(Canvas.Handle, LText, Length(LText), R, Flags)
-                else
-                  MainForm.StatusBarCanvasDrawPanel(Canvas, Control.Panels[I], R);
-              end else begin
-                if Control.Panels[I].Style <> psOwnerDraw then
-                  DrawText(Canvas.handle, Control.Panels[I].Text, Length(Control.Panels[I].Text), R, Flags)
-                else
-                  MainForm.StatusBarCanvasDrawPanel(Canvas, Control.Panels[I], R);
-              end;
-            end;
-
-            if not IsZoomed(MainForm.Handle) and (MainForm.FStatusBarThemeData <> 0) then begin
-              var R1 := Control.ClientRect;
-              R1.Left := R1.Right - MainForm.ToCurrentPPI(cGripSize);
-              R1.Top := R1.Bottom - MainForm.ToCurrentPPI(cGripSize);
-              DrawThemeBackground(MainForm.FStatusBarThemeData, Canvas.Handle, SP_GRIPPER, 0, R1, nil);
-            end;
-          finally
-            Canvas.Free;
-          end;
-          if uMsg = WM_PAINT then
-            EndPaint(hWnd, PaintStruct);
-          Exit(0);
-        end;
-      end;
-    WM_NCDESTROY:
-      RemoveWindowSubclass(hWnd, @DarkStatusBarSubclassProc, 0);
-  end;
-
-  Result := DefSubclassProc(hWnd, uMsg, wParam, lParam);
-end;
-
 constructor TMainForm.Create(AOwner: TComponent);
 
   procedure CheckUpdatePanelMessage(const Ini: TConfigIniFile; const ConfigIdent: String;
@@ -1155,8 +1069,6 @@ begin
 
   UpdateThemeData(True);
   
-  SetWindowSubclass(StatusBar.Handle, @DarkStatusBarSubclassProc, 0, DWORD_PTR(Self));
-
   FMenuBitmaps := TMenuBitmaps.Create;
   FMenuBitmapsSize.cx := 0;
   FMenuBitmapsSize.cy := 0;
@@ -1319,7 +1231,6 @@ begin
   UpdateMarginsAndSquigglyAndCaretWidths;
   UpdateOutputTabSetListsItemHeightAndDebugTimeWidth;
   UpdateStatusPanelHeight(StatusPanel.Height);
-  SetWindowSubclass(StatusBar.Handle, @DarkStatusBarSubclassProc, 0, DWORD_PTR(Self));
 end;
 
 procedure TMainForm.FormCloseQuery(Sender: TObject;
@@ -7300,6 +7211,13 @@ begin
           RGlyph.Left := RText.Right; { RGlyph is now a square }
           DrawThemeBackground(FToolbarThemeData, Canvas.Handle, TP_DROPDOWNBUTTONGLYPH, TS_NORMAL, RGlyph, nil);
         end;
+        var Color: TColor := FTheme.Colors[tcFore];
+        const LStyle = TStyleManager.ActiveStyle;
+        if LStyle <> nil then begin
+          const Details = LStyle.GetElementDetails(tsPane);
+          LStyle.GetElementColor(Details, ecTextColor, Color);
+        end;
+        Canvas.Font.Color := Color;
         var S := Format('Tabs closed: %d', [FHiddenFiles.Count]);
         Canvas.TextRect(RText, S, [tfCenter]);
       end;