Mercurial > foo_out_sdl
diff foosdk/sdk/libPPUI/Controls.cpp @ 1:20d02a178406 default tip
*: check in everything else
yay
| author | Paper <paper@tflc.us> |
|---|---|
| date | Mon, 05 Jan 2026 02:15:46 -0500 |
| parents | |
| children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/foosdk/sdk/libPPUI/Controls.cpp Mon Jan 05 02:15:46 2026 -0500 @@ -0,0 +1,82 @@ +#include "stdafx.h" +#include <vsstyle.h> +#include "Controls.h" +#include "PaintUtils.h" +#include "HyperLinkCtrl.h" + +void CStaticSeparator::OnPaint(CDCHandle) { + PaintUtils::PaintSeparatorControl(*this); +} + +void CSeparator::OnPaint(CDCHandle dc) { + PaintUtils::PaintSeparatorControl(*this); +} + +#if 0 // BROKEN WITH DARK MODE, DO NOT USE +CStaticMainInstruction::CStaticMainInstruction() { + SetThemePart(TEXT_MAININSTRUCTION); +} + +void CStaticThemed::OnPaint(CDCHandle) { + if (m_fallback) { + SetMsgHandled(FALSE); return; + } + if (m_theme == NULL) { + m_theme.OpenThemeData(*this, L"TextStyle"); + if (m_theme == NULL) { + m_fallback = true; SetMsgHandled(FALSE); return; + } + } + CPaintDC dc(*this); + TCHAR buffer[512] = {}; + GetWindowText(buffer, _countof(buffer)); + const int txLen = (int) pfc::strlen_max_t(buffer, _countof(buffer)); + CRect contentRect; + WIN32_OP_D(GetClientRect(contentRect)); + SelectObjectScope scopeFont(dc, GetFont()); + dc.SetTextColor(GetSysColor(COLOR_WINDOWTEXT)); + dc.SetBkMode(TRANSPARENT); + + if (txLen > 0) { + CRect rcText(contentRect); + DWORD flags = 0; + DWORD style = GetStyle(); + if (style & SS_LEFT) flags |= DT_LEFT; + else if (style & SS_RIGHT) flags |= DT_RIGHT; + else if (style & SS_CENTER) flags |= DT_CENTER; + if (style & SS_ENDELLIPSIS) flags |= DT_END_ELLIPSIS; + + HRESULT retval = DrawThemeText(m_theme, dc, m_id, 0, buffer, txLen, flags, 0, rcText); + PFC_ASSERT(SUCCEEDED(retval)); + } +} +#endif + + +#include "DarkMode-CHyperLink.h" +#include "windowLifetime.h" + +void PP::createHyperLink(HWND wndReplaceMe) { + auto obj = PP::subclassThisWindow<DarkMode::CHyperLink>(wndReplaceMe); + obj->SetHyperLinkExtendedStyle(HLINK_NOTIFYBUTTON); +} + +namespace { + class CHyperLinkLambda : public DarkMode::CHyperLinkImpl<CHyperLinkLambda> { + public: + std::function<void ()> f; + bool Navigate() { + f(); + return true; + } + }; +} +void PP::createHyperLink(HWND wndReplaceMe, std::function<void ()> handler) { + auto obj = PP::subclassThisWindow<CHyperLinkLambda>(wndReplaceMe); + obj->f = handler; +} + +void PP::createHyperLink(HWND wndReplaceMe, const wchar_t* openURL) { + auto obj = PP::subclassThisWindow<DarkMode::CHyperLink>(wndReplaceMe); + obj->SetHyperLink(openURL); +}
