Browse Source

Refactoring

Source commit: 9e6e8fde1b5aa1e946639efec40d65139491d3d2
Martin Prikryl 2 years ago
parent
commit
0d17857851
2 changed files with 27 additions and 43 deletions
  1. 25 40
      source/components/ThemePageControl.cpp
  2. 2 3
      source/components/ThemePageControl.h

+ 25 - 40
source/components/ThemePageControl.cpp

@@ -200,6 +200,8 @@ void __fastcall TThemePageControl::PaintWindow(HDC DC)
     return;
   }
 
+  HTHEME Theme = OpenThemeData(NULL, IDS_UTIL_TAB);
+
   // TODO use GetClipBox
 
   TRect PageRect = GetClientRect();
@@ -209,7 +211,7 @@ void __fastcall TThemePageControl::PaintWindow(HDC DC)
   ::SendMessage(Handle, TCM_ADJUSTRECT, FALSE, (LPARAM)&PageRect);
 
   ClientRect.Top = PageRect.Top - 2;
-  DrawThemesXpTabItem(DC, -1, ClientRect, true, 0, false);
+  DrawThemeBackground(Theme, DC, TABP_PANE, 0, &ClientRect, NULL);
 
   // 2nd paint the inactive tabs
 
@@ -219,14 +221,16 @@ void __fastcall TThemePageControl::PaintWindow(HDC DC)
   {
     if (Tab != SelectedIndex)
     {
-      DrawThemesXpTab(DC, Tab);
+      DrawThemesXpTab(DC, Theme, Tab);
     }
   }
 
   if (SelectedIndex >= 0)
   {
-    DrawThemesXpTab(DC, TabIndex);
+    DrawThemesXpTab(DC, Theme, TabIndex);
   }
+
+  CloseThemeData(Theme);
 }
 //----------------------------------------------------------------------------------------------------------
 TThemeTabSheetButtons __fastcall TThemePageControl::GetTabButton(int Index)
@@ -235,7 +239,7 @@ TThemeTabSheetButtons __fastcall TThemePageControl::GetTabButton(int Index)
   return (UseThemes() && (ThemeTabSheet != NULL)) ? ThemeTabSheet->Button : ttbNone;
 }
 //----------------------------------------------------------------------------------------------------------
-void __fastcall TThemePageControl::DrawThemesXpTab(HDC DC, int Tab)
+void __fastcall TThemePageControl::DrawThemesXpTab(HDC DC, HTHEME Theme, int Tab)
 {
   TThemeTabSheet * ThemeTabSheet = dynamic_cast<TThemeTabSheet *>(Pages[Tab]);
   bool Shadowed = (ThemeTabSheet != NULL) ? ThemeTabSheet->Shadowed : false;
@@ -252,7 +256,7 @@ void __fastcall TThemePageControl::DrawThemesXpTab(HDC DC, int Tab)
   {
     State = TIS_SELECTED;
   }
-  DrawThemesXpTabItem(DC, Tab, Rect, false, State, Shadowed);
+  DrawThemesXpTabItem(DC, Theme, Tab, Rect, State, Shadowed);
 }
 //----------------------------------------------------------------------------------------------------------
 static TTBXItemInfo GetItemInfo(int State)
@@ -266,37 +270,29 @@ static TTBXItemInfo GetItemInfo(int State)
   return ItemInfo;
 }
 //----------------------------------------------------------------------------------------------------------
-// This function draws Themes Tab control parts: a) Tab-Body and b) Tab-tabs
-void __fastcall TThemePageControl::DrawThemesXpTabItem(HDC DC, int Item,
-  const TRect & Rect, bool Body, int State, bool Shadowed)
+void __fastcall TThemePageControl::DrawThemesXpTabItem(
+  HDC DC, HTHEME Theme, int Item, const TRect & Rect, int State, bool Shadowed)
 {
-  if (Body)
+  TRect PaintRect = Rect;
+  bool Selected = (State == TIS_SELECTED);
+  if (Selected)
   {
-    DrawThemesPart(DC, TABP_PANE, State, IDS_UTIL_TAB, &Rect);
+    PaintRect.Bottom++;
+  }
+
+  if (Selected && (ActiveTabTheme != NULL))
+  {
+    std::unique_ptr<TCanvas> CanvasMem(new TCanvas());
+    CanvasMem->Handle = DC;
+    ActiveTabTheme->PaintFrame(CanvasMem.get(), PaintRect, GetItemInfo(State));
   }
   else
   {
-    TRect PaintRect = Rect;
-    bool Selected = (State == TIS_SELECTED);
-    if (Selected)
-    {
-      PaintRect.Bottom++;
-    }
-
-    if (Selected && (ActiveTabTheme != NULL))
-    {
-      std::unique_ptr<TCanvas> CanvasMem(new TCanvas());
-      CanvasMem->Handle = DC;
-      ActiveTabTheme->PaintFrame(CanvasMem.get(), PaintRect, GetItemInfo(State));
-    }
-    else
-    {
-      int PartID = (Item == 0) ? TABP_TABITEMLEFTEDGE : TABP_TABITEM;
-      DrawThemesPart(DC, PartID, State, IDS_UTIL_TAB, &PaintRect);
-    }
+    int PartID = (Item == 0) ? TABP_TABITEMLEFTEDGE : TABP_TABITEM;
+    DrawThemeBackground(Theme, DC, PartID, State, &PaintRect, NULL);
   }
 
-  if (!Body && (Item >= 0))
+  if (Item >= 0)
   {
     DrawTabItem(DC, Item, Rect, State, Shadowed);
   }
@@ -590,17 +586,6 @@ int __fastcall TThemePageControl::IndexOfTabButtonAt(int X, int Y)
   return Result;
 }
 //----------------------------------------------------------------------------------------------------------
-void __fastcall TThemePageControl::DrawThemesPart(HDC DC, int PartId,
-  int StateId, LPCWSTR PartNameID, LPRECT Rect)
-{
-  HTHEME Theme = OpenThemeData(NULL, PartNameID);
-  if (Theme != 0)
-  {
-    DrawThemeBackground(Theme, DC, PartId, StateId, Rect, NULL);
-    CloseThemeData(Theme);
-  }
-}
-//----------------------------------------------------------------------------------------------------------
 bool __fastcall TThemePageControl::CanChange()
 {
   FOldTabIndex = ActivePageIndex;

+ 2 - 3
source/components/ThemePageControl.h

@@ -76,10 +76,9 @@ protected:
   #endif
 
 private:
-  void __fastcall DrawThemesXpTab(HDC DC, int Tab);
-  void __fastcall DrawThemesXpTabItem(HDC DC, int Item, const TRect & Rect, bool Body, int State, bool Selected);
+  void __fastcall DrawThemesXpTab(HDC DC, HTHEME Theme, int Tab);
+  void __fastcall DrawThemesXpTabItem(HDC DC, HTHEME Theme, int Item, const TRect & Rect, int State, bool Selected);
   void __fastcall DrawTabItem(HDC DC, int Item, TRect Rect, int State, bool Shadowed);
-  void __fastcall DrawThemesPart(HDC DC, int PartId, int StateId, LPCWSTR PartNameID, LPRECT Rect);
   void __fastcall InvalidateTab(int Index);
   int __fastcall TabButtonSize();
   int __fastcall GetCrossPadding();