annotate 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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1 #include "stdafx.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2 #include <vsstyle.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3 #include "Controls.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4 #include "PaintUtils.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5 #include "HyperLinkCtrl.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
7 void CStaticSeparator::OnPaint(CDCHandle) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
8 PaintUtils::PaintSeparatorControl(*this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
9 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
10
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
11 void CSeparator::OnPaint(CDCHandle dc) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
12 PaintUtils::PaintSeparatorControl(*this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
13 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
14
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
15 #if 0 // BROKEN WITH DARK MODE, DO NOT USE
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
16 CStaticMainInstruction::CStaticMainInstruction() {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
17 SetThemePart(TEXT_MAININSTRUCTION);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
18 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
19
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
20 void CStaticThemed::OnPaint(CDCHandle) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
21 if (m_fallback) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
22 SetMsgHandled(FALSE); return;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
23 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
24 if (m_theme == NULL) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
25 m_theme.OpenThemeData(*this, L"TextStyle");
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
26 if (m_theme == NULL) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
27 m_fallback = true; SetMsgHandled(FALSE); return;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
28 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
29 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
30 CPaintDC dc(*this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
31 TCHAR buffer[512] = {};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
32 GetWindowText(buffer, _countof(buffer));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
33 const int txLen = (int) pfc::strlen_max_t(buffer, _countof(buffer));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
34 CRect contentRect;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
35 WIN32_OP_D(GetClientRect(contentRect));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
36 SelectObjectScope scopeFont(dc, GetFont());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
37 dc.SetTextColor(GetSysColor(COLOR_WINDOWTEXT));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
38 dc.SetBkMode(TRANSPARENT);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
39
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
40 if (txLen > 0) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
41 CRect rcText(contentRect);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
42 DWORD flags = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
43 DWORD style = GetStyle();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
44 if (style & SS_LEFT) flags |= DT_LEFT;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
45 else if (style & SS_RIGHT) flags |= DT_RIGHT;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
46 else if (style & SS_CENTER) flags |= DT_CENTER;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
47 if (style & SS_ENDELLIPSIS) flags |= DT_END_ELLIPSIS;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
48
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
49 HRESULT retval = DrawThemeText(m_theme, dc, m_id, 0, buffer, txLen, flags, 0, rcText);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
50 PFC_ASSERT(SUCCEEDED(retval));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
51 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
52 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
53 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
54
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
55
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
56 #include "DarkMode-CHyperLink.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
57 #include "windowLifetime.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
58
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
59 void PP::createHyperLink(HWND wndReplaceMe) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
60 auto obj = PP::subclassThisWindow<DarkMode::CHyperLink>(wndReplaceMe);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
61 obj->SetHyperLinkExtendedStyle(HLINK_NOTIFYBUTTON);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
62 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
63
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
64 namespace {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
65 class CHyperLinkLambda : public DarkMode::CHyperLinkImpl<CHyperLinkLambda> {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
66 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
67 std::function<void ()> f;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
68 bool Navigate() {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
69 f();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
70 return true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
71 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
72 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
73 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
74 void PP::createHyperLink(HWND wndReplaceMe, std::function<void ()> handler) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
75 auto obj = PP::subclassThisWindow<CHyperLinkLambda>(wndReplaceMe);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
76 obj->f = handler;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
77 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
78
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
79 void PP::createHyperLink(HWND wndReplaceMe, const wchar_t* openURL) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
80 auto obj = PP::subclassThisWindow<DarkMode::CHyperLink>(wndReplaceMe);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
81 obj->SetHyperLink(openURL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
82 }