Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
cpwl_wnd.cpp
Go to the documentation of this file.
1// Copyright 2014 The PDFium Authors
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6
7#include "fpdfsdk/pwl/cpwl_wnd.h"
8
9#include <sstream>
10#include <utility>
11#include <vector>
12
13#include "build/build_config.h"
14#include "core/fxcrt/check.h"
15#include "core/fxcrt/check_op.h"
16#include "core/fxcrt/containers/contains.h"
17#include "core/fxcrt/stl_util.h"
18#include "core/fxge/cfx_renderdevice.h"
19#include "fpdfsdk/pwl/cpwl_scroll_bar.h"
20#include "public/fpdf_fwlevent.h"
21
22namespace {
23
24constexpr float kDefaultFontSize = 9.0f;
25
26} // namespace
27
28// static
31
32// static
35
37 IPWL_FillerNotify* filler_notify,
38 ProviderIface* provider)
42 fFontSize(kDefaultFontSize),
43 sDash(3, 0, 0) {}
44
45CPWL_Wnd::CreateParams::CreateParams(const CreateParams& other) = default;
46
48
49// For a compound window (a window containing a child window as occurs in a
50// list box, combo box, or even a scroll bar), this class contains information
51// shared amongst the parent and children.
52class CPWL_Wnd::SharedCaptureFocusState final : public Observable {
53 public:
54 explicit SharedCaptureFocusState(const CPWL_Wnd* pOwnerWnd)
57
58 bool IsOwnedByWnd(const CPWL_Wnd* pWnd) const { return m_pOwnerWnd == pWnd; }
59
60 bool IsWndCaptureMouse(const CPWL_Wnd* pWnd) const {
61 return pWnd && pdfium::Contains(m_MousePaths, pWnd);
62 }
63
64 bool IsMainCaptureKeyboard(const CPWL_Wnd* pWnd) const {
65 return pWnd == m_pMainKeyboardWnd;
66 }
67
68 bool IsWndCaptureKeyboard(const CPWL_Wnd* pWnd) const {
69 return pWnd && pdfium::Contains(m_KeyboardPaths, pWnd);
70 }
71
72 void SetCapture(CPWL_Wnd* pWnd) { m_MousePaths = pWnd->GetAncestors(); }
73 void ReleaseCapture() { m_MousePaths.clear(); }
74
75 void SetFocus(CPWL_Wnd* pWnd) {
76 m_KeyboardPaths = pWnd->GetAncestors();
77 m_pMainKeyboardWnd = pWnd;
78
79 // Note, pWnd may get destroyed in the OnSetFocus call.
81 }
82
83 void ReleaseFocus() {
84 ObservedPtr<SharedCaptureFocusState> this_observed(this);
85 if (!this_observed->m_KeyboardPaths.empty()) {
86 CPWL_Wnd* pWnd = this_observed->m_KeyboardPaths.front();
87 if (pWnd)
89 }
90 if (!this_observed) {
91 return;
92 }
93 this_observed->m_pMainKeyboardWnd = nullptr;
94 this_observed->m_KeyboardPaths.clear();
95 }
96
97 void RemoveWnd(CPWL_Wnd* pWnd) {
98 if (pWnd == m_pOwnerWnd) {
99 m_pOwnerWnd = nullptr;
100 }
101 if (pWnd == m_pMainKeyboardWnd) {
102 m_pMainKeyboardWnd = nullptr;
103 }
104 auto mouse_it = std::find(m_MousePaths.begin(), m_MousePaths.end(), pWnd);
105 if (mouse_it != m_MousePaths.end()) {
106 m_MousePaths.erase(mouse_it);
107 }
108 auto keyboard_it =
109 std::find(m_KeyboardPaths.begin(), m_KeyboardPaths.end(), pWnd);
110 if (keyboard_it != m_KeyboardPaths.end()) {
111 m_KeyboardPaths.erase(keyboard_it);
112 }
113 }
114
115 private:
116 UnownedPtr<const CPWL_Wnd> m_pOwnerWnd;
117 UnownedPtr<const CPWL_Wnd> m_pMainKeyboardWnd;
118 std::vector<UnownedPtr<CPWL_Wnd>> m_MousePaths;
119 std::vector<UnownedPtr<CPWL_Wnd>> m_KeyboardPaths;
120};
121
122// static
123bool CPWL_Wnd::IsSHIFTKeyDown(Mask<FWL_EVENTFLAG> nFlag) {
124 return !!(nFlag & FWL_EVENTFLAG_ShiftKey);
125}
126
127// static
128bool CPWL_Wnd::IsCTRLKeyDown(Mask<FWL_EVENTFLAG> nFlag) {
129 return !!(nFlag & FWL_EVENTFLAG_ControlKey);
130}
131
132// static
133bool CPWL_Wnd::IsALTKeyDown(Mask<FWL_EVENTFLAG> nFlag) {
134 return !!(nFlag & FWL_EVENTFLAG_AltKey);
135}
136
137// static
138bool CPWL_Wnd::IsMETAKeyDown(Mask<FWL_EVENTFLAG> nFlag) {
139 return !!(nFlag & FWL_EVENTFLAG_MetaKey);
140}
141
142// static
143bool CPWL_Wnd::IsPlatformShortcutKey(Mask<FWL_EVENTFLAG> nFlag) {
144#if BUILDFLAG(IS_APPLE)
145 return IsMETAKeyDown(nFlag);
146#else
147 return IsCTRLKeyDown(nFlag);
148#endif
149}
150
152 const CreateParams& cp,
153 std::unique_ptr<IPWL_FillerNotify::PerWindowData> pAttachedData)
155
157 DCHECK(!m_bCreated);
158}
159
161 DCHECK(!m_bCreated);
162
163 m_CreationParams.rcRectWnd.Normalize();
164 m_rcWindow = m_CreationParams.rcRectWnd;
165 m_rcClip = m_rcWindow;
166 if (!m_rcClip.IsEmpty()) {
167 m_rcClip.Inflate(1.0f, 1.0f);
168 m_rcClip.Normalize();
169 }
170 CreateSharedCaptureFocusState();
171
172 CreateParams ccp = m_CreationParams;
173 ccp.dwFlags &= 0xFFFF0000L; // remove sub styles
174 CreateVScrollBar(ccp);
176 m_bVisible = HasFlag(PWS_VISIBLE);
179 return;
180 }
181
182 m_bCreated = true;
183}
184
186
188
190 if (m_CreationParams.pProvider.Get() == provider)
191 m_CreationParams.pProvider.Reset();
192}
193
197 if (m_bCreated) {
198 m_pVScrollBar = nullptr;
199 while (!m_Children.empty()) {
200 std::unique_ptr<CPWL_Wnd> pChild = std::move(m_Children.back());
201 m_Children.pop_back();
202 pChild->Destroy();
203 }
204 if (m_pParent)
205 m_pParent->RemoveChild(this);
206 m_bCreated = false;
207 }
208 DestroySharedCaptureFocusState();
209}
210
211bool CPWL_Wnd::Move(const CFX_FloatRect& rcNew, bool bReset, bool bRefresh) {
212 if (!IsValid())
213 return true;
214
216 m_rcWindow = rcNew;
217 m_rcWindow.Normalize();
218
219 if (bReset) {
220 if (rcOld.left != rcNew.left || rcOld.right != rcNew.right ||
221 rcOld.top != rcNew.top || rcOld.bottom != rcNew.bottom) {
223 return false;
224 }
225 }
226 }
227 if (bRefresh && !InvalidateRectMove(rcOld, rcNew))
228 return false;
229
230 m_CreationParams.rcRectWnd = m_rcWindow;
231 return true;
232}
233
235 const CFX_FloatRect& rcNew) {
236 CFX_FloatRect rcUnion = rcOld;
237 rcUnion.Union(rcNew);
238
239 return InvalidateRect(&rcUnion);
240}
241
243 const CFX_Matrix& mtUser2Device) {
244 if (IsValid() && IsVisible()) {
245 DrawThisAppearance(pDevice, mtUser2Device);
246 DrawChildAppearance(pDevice, mtUser2Device);
247 }
248}
249
251 const CFX_Matrix& mtUser2Device) {
253 if (rectWnd.IsEmpty())
254 return;
255
257 float width = static_cast<float>(GetBorderWidth() + GetInnerBorderWidth());
258 pDevice->DrawFillRect(&mtUser2Device, rectWnd.GetDeflated(width, width),
260 }
261
263 pDevice->DrawBorder(&mtUser2Device, rectWnd,
264 static_cast<float>(GetBorderWidth()), GetBorderColor(),
268 }
269}
270
271void CPWL_Wnd::DrawChildAppearance(CFX_RenderDevice* pDevice,
272 const CFX_Matrix& mtUser2Device) {
273 for (const auto& pChild : m_Children) {
274 pChild->DrawAppearance(pDevice, mtUser2Device);
275 }
276}
277
279 ObservedPtr<CPWL_Wnd> this_observed(this);
280 if (!this_observed->IsValid()) {
281 return true;
282 }
283 CFX_FloatRect rcRefresh = pRect ? *pRect : this_observed->GetWindowRect();
284 if (!this_observed->HasFlag(PWS_NOREFRESHCLIP)) {
285 CFX_FloatRect rcClip = this_observed->GetClipRect();
286 if (!rcClip.IsEmpty())
287 rcRefresh.Intersect(rcClip);
288 }
289
290 CFX_FloatRect rcWin = this_observed->PWLtoWnd(rcRefresh);
291 rcWin.Inflate(1, 1);
292 rcWin.Normalize();
293 this_observed->GetFillerNotify()->InvalidateRect(
294 this_observed->m_pAttachedData.get(), rcWin);
295 return !!this_observed;
296}
297
298bool CPWL_Wnd::OnKeyDown(FWL_VKEYCODE nKeyCode, Mask<FWL_EVENTFLAG> nFlag) {
299 if (!IsValid() || !IsVisible())
300 return false;
301 if (!IsWndCaptureKeyboard(this))
302 return false;
303 for (const auto& pChild : m_Children) {
304 if (IsWndCaptureKeyboard(pChild.get()))
305 return pChild->OnKeyDown(nKeyCode, nFlag);
306 }
307 return false;
308}
309
310bool CPWL_Wnd::OnChar(uint16_t nChar, Mask<FWL_EVENTFLAG> nFlag) {
311 if (!IsValid() || !IsVisible())
312 return false;
313 if (!IsWndCaptureKeyboard(this))
314 return false;
315 for (const auto& pChild : m_Children) {
316 if (IsWndCaptureKeyboard(pChild.get()))
317 return pChild->OnChar(nChar, nFlag);
318 }
319 return false;
320}
321
322#define PWL_IMPLEMENT_MOUSE_METHOD(mouse_method_name)
323 bool CPWL_Wnd::mouse_method_name(Mask<FWL_EVENTFLAG> nFlag,
324 const CFX_PointF& point) {
325 if (!IsValid() || !IsVisible())
326 return false;
327 if (IsWndCaptureMouse(this)) {
328 for (const auto& pChild : m_Children) {
329 if (IsWndCaptureMouse(pChild.get())) {
330 return pChild->mouse_method_name(nFlag, point);
331 }
332 }
333 SetCursor();
334 return false;
335 }
336 for (const auto& pChild : m_Children) {
337 if (pChild->WndHitTest(point)) {
338 return pChild->mouse_method_name(nFlag, point);
339 }
340 }
341 if (WndHitTest(point))
342 SetCursor();
343 return false;
344 }
345
346PWL_IMPLEMENT_MOUSE_METHOD(OnLButtonDblClk)
347PWL_IMPLEMENT_MOUSE_METHOD(OnLButtonDown)
350#undef PWL_IMPLEMENT_MOUSE_METHOD
351
352// Unlike their FWL counterparts, PWL windows don't handle right clicks.
353bool CPWL_Wnd::OnRButtonDown(Mask<FWL_EVENTFLAG> nFlag,
354 const CFX_PointF& point) {
355 return false;
356}
357
358bool CPWL_Wnd::OnRButtonUp(Mask<FWL_EVENTFLAG> nFlag, const CFX_PointF& point) {
359 return false;
360}
361
365
369
371
373
375 return false;
376}
377
379 return false;
380}
381
383 return false;
384}
385
386bool CPWL_Wnd::Undo() {
387 return false;
388}
389
390bool CPWL_Wnd::Redo() {
391 return false;
392}
393
394bool CPWL_Wnd::OnMouseWheel(Mask<FWL_EVENTFLAG> nFlag,
395 const CFX_PointF& point,
396 const CFX_Vector& delta) {
397 if (!IsValid() || !IsVisible())
398 return false;
399
401 if (!IsWndCaptureKeyboard(this))
402 return false;
403
404 for (const auto& pChild : m_Children) {
405 if (IsWndCaptureKeyboard(pChild.get()))
406 return pChild->OnMouseWheel(nFlag, point, delta);
407 }
408 return false;
409}
410
411void CPWL_Wnd::AddChild(std::unique_ptr<CPWL_Wnd> pWnd) {
412 DCHECK(!pWnd->m_pParent);
413 pWnd->m_pParent = this;
414 m_Children.push_back(std::move(pWnd));
415}
416
418 DCHECK_EQ(pWnd->m_pParent, this);
419 auto it =
420 std::find(m_Children.begin(), m_Children.end(), MakeFakeUniquePtr(pWnd));
421 if (it == m_Children.end())
422 return;
423
424 // TODO(tsepez): murky ownership.
425 it->release();
426 m_Children.erase(it);
427}
428
430
431void CPWL_Wnd::SetScrollPosition(float pos) {}
432
434
435void CPWL_Wnd::NotifyLButtonDown(CPWL_Wnd* child, const CFX_PointF& pos) {}
436
437void CPWL_Wnd::NotifyLButtonUp(CPWL_Wnd* child, const CFX_PointF& pos) {}
438
439void CPWL_Wnd::NotifyMouseMove(CPWL_Wnd* child, const CFX_PointF& pos) {}
440
442 return m_rcWindow;
443}
444
447
448 float width = static_cast<float>(GetBorderWidth() + GetInnerBorderWidth());
449 CFX_FloatRect rcClient = rcWindow.GetDeflated(width, width);
450 if (CPWL_ScrollBar* pVSB = GetVScrollBar())
451 rcClient.right -= pVSB->GetScrollBarWidth();
452
453 rcClient.Normalize();
454 return rcWindow.Contains(rcClient) ? rcClient : CFX_FloatRect();
455}
456
459 return CFX_PointF((rcClient.left + rcClient.right) * 0.5f,
460 (rcClient.top + rcClient.bottom) * 0.5f);
461}
462
463bool CPWL_Wnd::HasFlag(uint32_t dwFlags) const {
464 return (m_CreationParams.dwFlags & dwFlags) != 0;
465}
466
467void CPWL_Wnd::RemoveFlag(uint32_t dwFlags) {
468 m_CreationParams.dwFlags &= ~dwFlags;
469}
470
472 return m_CreationParams.sBackgroundColor;
473}
474
476 return m_CreationParams.sTextColor;
477}
478
480 return m_CreationParams.nBorderStyle;
481}
482
483int32_t CPWL_Wnd::GetBorderWidth() const {
484 return HasFlag(PWS_BORDER) ? m_CreationParams.dwBorderWidth : 0;
485}
486
488 return 0;
489}
490
492 return HasFlag(PWS_BORDER) ? m_CreationParams.sBorderColor : CFX_Color();
493}
494
496 return m_CreationParams.sDash;
497}
498
499CPWL_ScrollBar* CPWL_Wnd::GetVScrollBar() const {
500 return HasFlag(PWS_VSCROLL) ? m_pVScrollBar : nullptr;
501}
502
503void CPWL_Wnd::CreateVScrollBar(const CreateParams& cp) {
504 if (m_pVScrollBar || !HasFlag(PWS_VSCROLL))
505 return;
506
507 CreateParams scp = cp;
511 scp.nTransparency = CPWL_ScrollBar::kTransparency;
512
513 auto pBar = std::make_unique<CPWL_ScrollBar>(scp, CloneAttachedData());
514 m_pVScrollBar = pBar.get();
515 AddChild(std::move(pBar));
516 m_pVScrollBar->Realize();
517}
518
520 if (SharedCaptureFocusState* pSharedState = GetSharedCaptureFocusState()) {
521 pSharedState->SetCapture(this);
522 }
523}
524
526 for (const auto& pChild : m_Children)
527 pChild->ReleaseCapture();
528
529 if (SharedCaptureFocusState* pSharedState = GetSharedCaptureFocusState()) {
530 pSharedState->ReleaseCapture();
531 }
532}
533
535 if (SharedCaptureFocusState* pSharedState = GetSharedCaptureFocusState()) {
536 if (!pSharedState->IsMainCaptureKeyboard(this)) {
537 pSharedState->ReleaseFocus();
538 }
539 pSharedState->SetFocus(this);
540 }
541}
542
544 if (SharedCaptureFocusState* pSharedState = GetSharedCaptureFocusState()) {
545 if (pSharedState->IsWndCaptureKeyboard(this)) {
546 pSharedState->ReleaseFocus();
547 }
548 }
549}
550
552
554
556 const {
557 return m_pAttachedData ? m_pAttachedData->Clone() : nullptr;
558}
559
561 std::vector<UnownedPtr<CPWL_Wnd>> results;
562 for (CPWL_Wnd* pWnd = this; pWnd; pWnd = pWnd->GetParentWindow()) {
563 results.emplace_back(pWnd);
564 }
565 return results;
566}
567
568bool CPWL_Wnd::WndHitTest(const CFX_PointF& point) const {
570}
571
572bool CPWL_Wnd::ClientHitTest(const CFX_PointF& point) const {
574}
575
576bool CPWL_Wnd::SetVisible(bool bVisible) {
577 ObservedPtr<CPWL_Wnd> this_observed(this);
578 if (!this_observed->IsValid()) {
579 return true;
580 }
581 for (const auto& pChild : this_observed->m_Children) {
582 if (!pChild->SetVisible(bVisible)) {
583 return false;
584 }
585 if (!this_observed) {
586 return false;
587 }
588 }
589 if (bVisible != this_observed->m_bVisible) {
590 this_observed->m_bVisible = bVisible;
591 if (!this_observed->RepositionChildWnd()) {
592 return false;
593 }
594 if (!this_observed->InvalidateRect(nullptr)) {
595 return false;
596 }
597 }
598 return true;
599}
600
602 m_rcClip = rect;
603 m_rcClip.Normalize();
604}
605
607 return m_rcClip;
608}
609
610bool CPWL_Wnd::IsReadOnly() const {
612}
613
615 ObservedPtr<CPWL_Wnd> this_observed(this);
616 CPWL_ScrollBar* pVSB = this_observed->GetVScrollBar();
617 if (!pVSB) {
618 return true;
619 }
620 CFX_FloatRect rcContent = this_observed->GetWindowRect();
621 if (!rcContent.IsEmpty()) {
622 float width = static_cast<float>(this_observed->GetBorderWidth() +
623 this_observed->GetInnerBorderWidth());
624 rcContent.Deflate(width, width);
625 rcContent.Normalize();
626 }
627 CFX_FloatRect rcVScroll =
628 CFX_FloatRect(rcContent.right - CPWL_ScrollBar::kWidth, rcContent.bottom,
629 rcContent.right - 1.0f, rcContent.top);
630
631 pVSB->Move(rcVScroll, true, false);
632 return !!this_observed;
633}
634
636
641
642void CPWL_Wnd::CreateSharedCaptureFocusState() {
643 if (!m_CreationParams.pSharedCaptureFocusState) {
644 m_CreationParams.pSharedCaptureFocusState =
645 new SharedCaptureFocusState(this);
646 }
647}
648
649void CPWL_Wnd::DestroySharedCaptureFocusState() {
650 SharedCaptureFocusState* pSharedCaptureFocusState =
651 GetSharedCaptureFocusState();
652 if (!pSharedCaptureFocusState) {
653 return;
654 }
655 const bool owned = pSharedCaptureFocusState->IsOwnedByWnd(this);
656 pSharedCaptureFocusState->RemoveWnd(this);
657 if (owned) {
658 delete pSharedCaptureFocusState;
659 }
660}
661
662CPWL_Wnd::SharedCaptureFocusState* CPWL_Wnd::GetSharedCaptureFocusState()
663 const {
664 return m_CreationParams.pSharedCaptureFocusState;
665}
666
668 return IsWndCaptureMouse(this);
669}
670
671bool CPWL_Wnd::IsWndCaptureMouse(const CPWL_Wnd* pWnd) const {
672 SharedCaptureFocusState* pCtrl = GetSharedCaptureFocusState();
673 return pCtrl && pCtrl->IsWndCaptureMouse(pWnd);
674}
675
676bool CPWL_Wnd::IsWndCaptureKeyboard(const CPWL_Wnd* pWnd) const {
677 SharedCaptureFocusState* pCtrl = GetSharedCaptureFocusState();
678 return pCtrl && pCtrl->IsWndCaptureKeyboard(pWnd);
679}
680
681bool CPWL_Wnd::IsFocused() const {
682 SharedCaptureFocusState* pCtrl = GetSharedCaptureFocusState();
683 return pCtrl && pCtrl->IsMainCaptureKeyboard(this);
684}
685
688 if (!rect.IsEmpty()) {
689 rect.Inflate(1.0f, 1.0f);
690 rect.Normalize();
691 }
692 return rect;
693}
694
695float CPWL_Wnd::GetFontSize() const {
696 return m_CreationParams.fFontSize;
697}
698
699void CPWL_Wnd::SetFontSize(float fFontSize) {
700 m_CreationParams.fFontSize = fFontSize;
701}
702
704 switch (nBorderStyle) {
709 default:
710 return CFX_Color();
711 }
712}
713
715 switch (nBorderStyle) {
717 return GetBackgroundColor() / 2.0f;
720 default:
721 return CFX_Color();
722 }
723}
724
726 return m_CreationParams.nTransparency;
727}
728
729void CPWL_Wnd::SetTransparency(int32_t nTransparency) {
730 for (const auto& pChild : m_Children)
731 pChild->SetTransparency(nTransparency);
732
733 m_CreationParams.nTransparency = nTransparency;
734}
735
737 CFX_Matrix mt;
738 if (ProviderIface* pProvider = GetProvider())
740 return mt;
741}
742
743CFX_FloatRect CPWL_Wnd::PWLtoWnd(const CFX_FloatRect& rect) const {
745 return mt.TransformRect(rect);
746}
BorderStyle
#define DCHECK
Definition check.h:33
#define DCHECK_EQ(x, y)
Definition check_op.h:17
bool Contains(const CFX_PointF &point) const
constexpr CFX_FloatRect(float l, float b, float r, float t)
constexpr CFX_FloatRect()=default
bool IsEmpty() const
void Intersect(const CFX_FloatRect &other_rect)
void Inflate(float x, float y)
CFX_FloatRect & operator=(const CFX_FloatRect &that)=default
void Deflate(float x, float y)
bool Contains(const CFX_FloatRect &other_rect) const
CFX_FloatRect GetDeflated(float x, float y) const
void Union(const CFX_FloatRect &other_rect)
CFX_FloatRect TransformRect(const CFX_FloatRect &rect) const
void Concat(const CFX_Matrix &right)
void DrawBorder(const CFX_Matrix *pUser2Device, const CFX_FloatRect &rect, float fWidth, const CFX_Color &color, const CFX_Color &crLeftTop, const CFX_Color &crRightBottom, BorderStyle nStyle, int32_t nTransparency)
void DrawFillRect(const CFX_Matrix *pUser2Device, const CFX_FloatRect &rect, const CFX_Color &color, int32_t nTransparency)
static constexpr uint8_t kTransparency
static constexpr float kWidth
float GetScrollBarWidth() const
CreateParams(const CreateParams &other)
IPWL_FillerNotify::CursorStyle eCursorType
Definition cpwl_wnd.h:126
CreateParams(CFX_Timer::HandlerIface *timer_handler, IPWL_FillerNotify *filler_notify, ProviderIface *provider)
Definition cpwl_wnd.cpp:36
CFX_Color sBackgroundColor
Definition cpwl_wnd.h:113
virtual CFX_Matrix GetWindowMatrix(const IPWL_FillerNotify::PerWindowData *pAttached)=0
bool IsOwnedByWnd(const CPWL_Wnd *pWnd) const
Definition cpwl_wnd.cpp:58
void RemoveWnd(CPWL_Wnd *pWnd)
Definition cpwl_wnd.cpp:97
SharedCaptureFocusState(const CPWL_Wnd *pOwnerWnd)
Definition cpwl_wnd.cpp:54
void SetCapture(CPWL_Wnd *pWnd)
Definition cpwl_wnd.cpp:72
bool IsMainCaptureKeyboard(const CPWL_Wnd *pWnd) const
Definition cpwl_wnd.cpp:64
bool IsWndCaptureKeyboard(const CPWL_Wnd *pWnd) const
Definition cpwl_wnd.cpp:68
bool IsWndCaptureMouse(const CPWL_Wnd *pWnd) const
Definition cpwl_wnd.cpp:60
void SetFocus(CPWL_Wnd *pWnd)
Definition cpwl_wnd.cpp:75
CFX_Matrix GetWindowMatrix() const
Definition cpwl_wnd.cpp:736
static bool IsPlatformShortcutKey(Mask< FWL_EVENTFLAG > nFlag)
Definition cpwl_wnd.cpp:143
virtual void KillFocus()
Definition cpwl_wnd.cpp:543
static bool IsCTRLKeyDown(Mask< FWL_EVENTFLAG > nFlag)
Definition cpwl_wnd.cpp:128
virtual bool OnMouseWheel(Mask< FWL_EVENTFLAG > nFlag, const CFX_PointF &point, const CFX_Vector &delta)
Definition cpwl_wnd.cpp:394
virtual bool SelectAllText()
Definition cpwl_wnd.cpp:374
virtual void ScrollWindowVertically(float pos)
Definition cpwl_wnd.cpp:433
virtual bool OnRButtonDown(Mask< FWL_EVENTFLAG > nFlag, const CFX_PointF &point)
Definition cpwl_wnd.cpp:353
bool InvalidateRectMove(const CFX_FloatRect &rcOld, const CFX_FloatRect &rcNew)
Definition cpwl_wnd.cpp:234
bool ClientHitTest(const CFX_PointF &point) const
Definition cpwl_wnd.cpp:572
void SetCapture()
Definition cpwl_wnd.cpp:519
static bool IsALTKeyDown(Mask< FWL_EVENTFLAG > nFlag)
Definition cpwl_wnd.cpp:133
CFX_Color GetBorderColor() const
Definition cpwl_wnd.cpp:491
const CFX_FloatRect & GetClipRect() const
Definition cpwl_wnd.cpp:606
BorderStyle GetBorderStyle() const
Definition cpwl_wnd.cpp:479
virtual void NotifyMouseMove(CPWL_Wnd *child, const CFX_PointF &pos)
Definition cpwl_wnd.cpp:439
virtual bool OnChar(uint16_t nChar, Mask< FWL_EVENTFLAG > nFlag)
Definition cpwl_wnd.cpp:310
bool WndHitTest(const CFX_PointF &point) const
Definition cpwl_wnd.cpp:568
virtual void SetCursor()
Definition cpwl_wnd.cpp:637
virtual void ReplaceAndKeepSelection(const WideString &text)
Definition cpwl_wnd.cpp:370
CFX_PointF GetCenterPoint() const
Definition cpwl_wnd.cpp:457
void RemoveFlag(uint32_t dwFlags)
Definition cpwl_wnd.cpp:467
CFX_Color GetBackgroundColor() const
Definition cpwl_wnd.cpp:471
std::vector< UnownedPtr< CPWL_Wnd > > GetAncestors()
Definition cpwl_wnd.cpp:560
IPWL_FillerNotify * GetFillerNotify() const
Definition cpwl_wnd.h:245
virtual bool Redo()
Definition cpwl_wnd.cpp:390
bool HasFlag(uint32_t dwFlags) const
Definition cpwl_wnd.cpp:463
virtual CFX_FloatRect GetClientRect() const
Definition cpwl_wnd.cpp:445
virtual WideString GetSelectedText()
Definition cpwl_wnd.cpp:366
CFX_FloatRect GetWindowRect() const
Definition cpwl_wnd.cpp:441
void ReleaseCapture()
Definition cpwl_wnd.cpp:525
bool IsFocused() const
Definition cpwl_wnd.cpp:681
bool IsCaptureMouse() const
Definition cpwl_wnd.cpp:667
CPWL_Wnd * GetParentWindow() const
Definition cpwl_wnd.h:249
virtual void NotifyLButtonDown(CPWL_Wnd *child, const CFX_PointF &pos)
Definition cpwl_wnd.cpp:435
void SetTransparency(int32_t nTransparency)
Definition cpwl_wnd.cpp:729
CPWL_Wnd(const CreateParams &cp, std::unique_ptr< IPWL_FillerNotify::PerWindowData > pAttachedData)
Definition cpwl_wnd.cpp:151
virtual bool RepositionChildWnd()
Definition cpwl_wnd.cpp:614
void InvalidateProvider(ProviderIface *provider)
Definition cpwl_wnd.cpp:189
static bool IsSHIFTKeyDown(Mask< FWL_EVENTFLAG > nFlag)
Definition cpwl_wnd.cpp:123
virtual bool OnRButtonUp(Mask< FWL_EVENTFLAG > nFlag, const CFX_PointF &point)
Definition cpwl_wnd.cpp:358
virtual ~CPWL_Wnd()
Definition cpwl_wnd.cpp:156
virtual bool OnKeyDown(FWL_VKEYCODE nKeyCode, Mask< FWL_EVENTFLAG > nFlag)
Definition cpwl_wnd.cpp:298
int32_t GetBorderWidth() const
Definition cpwl_wnd.cpp:483
CreateParams * GetCreationParams()
Definition cpwl_wnd.h:238
virtual float GetFontSize() const
Definition cpwl_wnd.cpp:695
CFX_Color GetBorderRightBottomColor(BorderStyle nBorderStyle) const
Definition cpwl_wnd.cpp:714
virtual void SetScrollInfo(const PWL_SCROLL_INFO &info)
Definition cpwl_wnd.cpp:429
virtual bool InvalidateRect(const CFX_FloatRect *pRect)
Definition cpwl_wnd.cpp:278
virtual void SetFocus()
Definition cpwl_wnd.cpp:534
virtual void CreateChildWnd(const CreateParams &cp)
Definition cpwl_wnd.cpp:635
bool IsVisible() const
Definition cpwl_wnd.h:204
virtual CFX_FloatRect GetFocusRect() const
Definition cpwl_wnd.cpp:686
virtual void OnDestroy()
Definition cpwl_wnd.cpp:187
virtual bool SetVisible(bool bVisible)
Definition cpwl_wnd.cpp:576
virtual void ReplaceSelection(const WideString &text)
Definition cpwl_wnd.cpp:372
IPWL_FillerNotify::PerWindowData * GetAttachedData() const
Definition cpwl_wnd.h:209
const CPWL_Dash & GetBorderDash() const
Definition cpwl_wnd.cpp:495
virtual void OnSetFocus()
Definition cpwl_wnd.cpp:551
virtual void SetFontSize(float fFontSize)
Definition cpwl_wnd.cpp:699
void Realize()
Definition cpwl_wnd.cpp:160
int32_t GetInnerBorderWidth() const
Definition cpwl_wnd.cpp:487
int32_t GetTransparency()
Definition cpwl_wnd.cpp:725
virtual bool CanUndo()
Definition cpwl_wnd.cpp:378
bool IsWndCaptureMouse(const CPWL_Wnd *pWnd) const
Definition cpwl_wnd.cpp:671
virtual void SetScrollPosition(float pos)
Definition cpwl_wnd.cpp:431
virtual void DrawThisAppearance(CFX_RenderDevice *pDevice, const CFX_Matrix &mtUser2Device)
Definition cpwl_wnd.cpp:250
ProviderIface * GetProvider() const
Definition cpwl_wnd.h:239
bool Move(const CFX_FloatRect &rcNew, bool bReset, bool bRefresh)
Definition cpwl_wnd.cpp:211
virtual void OnCreated()
Definition cpwl_wnd.cpp:185
void SetClipRect(const CFX_FloatRect &rect)
Definition cpwl_wnd.cpp:601
bool IsWndCaptureKeyboard(const CPWL_Wnd *pWnd) const
Definition cpwl_wnd.cpp:676
virtual bool CanRedo()
Definition cpwl_wnd.cpp:382
CFX_Color GetBorderLeftTopColor(BorderStyle nBorderStyle) const
Definition cpwl_wnd.cpp:703
virtual bool Undo()
Definition cpwl_wnd.cpp:386
static const CFX_Color kDefaultWhiteColor
Definition cpwl_wnd.h:80
virtual void OnKillFocus()
Definition cpwl_wnd.cpp:553
std::unique_ptr< IPWL_FillerNotify::PerWindowData > CloneAttachedData() const
Definition cpwl_wnd.cpp:555
CFX_Color GetTextColor() const
Definition cpwl_wnd.cpp:475
virtual void NotifyLButtonUp(CPWL_Wnd *child, const CFX_PointF &pos)
Definition cpwl_wnd.cpp:437
void Destroy()
Definition cpwl_wnd.cpp:194
CPWL_ScrollBar * GetVScrollBar() const
Definition cpwl_wnd.cpp:499
static const CFX_Color kDefaultBlackColor
Definition cpwl_wnd.h:79
bool IsValid() const
Definition cpwl_wnd.h:237
static bool IsMETAKeyDown(Mask< FWL_EVENTFLAG > nFlag)
Definition cpwl_wnd.cpp:138
void AddChild(std::unique_ptr< CPWL_Wnd > pWnd)
Definition cpwl_wnd.cpp:411
bool IsReadOnly() const
Definition cpwl_wnd.cpp:610
void DrawAppearance(CFX_RenderDevice *pDevice, const CFX_Matrix &mtUser2Device)
Definition cpwl_wnd.cpp:242
void RemoveChild(CPWL_Wnd *pWnd)
Definition cpwl_wnd.cpp:417
virtual WideString GetText()
Definition cpwl_wnd.cpp:362
virtual void SetCursor(CursorStyle nCursorStyle)=0
WideString()=default
#define PWL_IMPLEMENT_MOUSE_METHOD(mouse_method_name)
Definition cpwl_wnd.cpp:322
#define PWS_READONLY
Definition cpwl_wnd.h:34
#define PWS_BACKGROUND
Definition cpwl_wnd.h:31
#define PWS_VSCROLL
Definition cpwl_wnd.h:32
#define PWS_VISIBLE
Definition cpwl_wnd.h:33
#define PWS_BORDER
Definition cpwl_wnd.h:30
#define PWS_AUTOTRANSPARENT
Definition cpwl_wnd.h:36
#define PWS_NOREFRESHCLIP
Definition cpwl_wnd.h:37
@ FWL_EVENTFLAG_ShiftKey
@ FWL_EVENTFLAG_MetaKey
@ FWL_EVENTFLAG_AltKey
@ FWL_EVENTFLAG_ControlKey
CFX_VTemplate< int32_t > CFX_Vector
CFX_PTemplate< float > CFX_PointF
CFX_Color operator/(float fColorDivide) const
CFX_Color & operator=(const CFX_Color &that)=default
constexpr CFX_Color(Type type=CFX_Color::Type::kTransparent, float color1=0.0f, float color2=0.0f, float color3=0.0f, float color4=0.0f)
Definition cfx_color.h:27
CPWL_Dash(int32_t dash, int32_t gap, int32_t phase)
Definition cpwl_wnd.h:63
fxcrt::WideString WideString
Definition widestring.h:207