Skip to content

Commit

Permalink
Refactoring
Browse files Browse the repository at this point in the history
Source commit: 9e6e8fde1b5aa1e946639efec40d65139491d3d2
  • Loading branch information
martinprikryl committed Oct 20, 2023
1 parent 09c377b commit 0d17857
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 43 deletions.
65 changes: 25 additions & 40 deletions source/components/ThemePageControl.cpp
Expand Up @@ -200,6 +200,8 @@ void __fastcall TThemePageControl::PaintWindow(HDC DC)
return;
}

HTHEME Theme = OpenThemeData(NULL, IDS_UTIL_TAB);

// TODO use GetClipBox

TRect PageRect = GetClientRect();
Expand All @@ -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

Expand All @@ -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)
Expand All @@ -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;
Expand All @@ -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)
Expand All @@ -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);
}
Expand Down Expand Up @@ -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;
Expand Down
5 changes: 2 additions & 3 deletions source/components/ThemePageControl.h
Expand Up @@ -76,10 +76,9 @@ friend class TThemeTabSheet;
#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();
Expand Down

0 comments on commit 0d17857

Please sign in to comment.