1d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann// Copyright 2014 PDFium Authors. All rights reserved. 2d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann// Use of this source code is governed by a BSD-style license that can be 3d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann// found in the LICENSE file. 4d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 5d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 7d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "fpdfsdk/pwl/cpwl_wnd.h" 8d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 9d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include <map> 10d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include <sstream> 11d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include <vector> 12d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 13d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "core/fxge/cfx_renderdevice.h" 14d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "fpdfsdk/pwl/cpwl_scroll_bar.h" 15d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "third_party/base/ptr_util.h" 16d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "third_party/base/stl_util.h" 17d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 18d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannnamespace { 19d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 20d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannconstexpr float kDefaultFontSize = 9.0f; 21d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 22d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} // namespace 23d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 24d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannCPWL_Wnd::CreateParams::CreateParams() 25d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann : rcRectWnd(0, 0, 0, 0), 26d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pSystemHandler(nullptr), 27d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pFontMap(nullptr), 28d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pProvider(nullptr), 29d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pFocusHandler(nullptr), 30d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann dwFlags(0), 31d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann sBackgroundColor(), 32d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pAttachedWidget(nullptr), 33d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann nBorderStyle(BorderStyle::SOLID), 34d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann dwBorderWidth(1), 35d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann sBorderColor(), 36d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann sTextColor(), 37d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann nTransparency(255), 38d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann fFontSize(kDefaultFontSize), 39d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann sDash(3, 0, 0), 40d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pAttachedData(nullptr), 41d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pParentWnd(nullptr), 42d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pMsgControl(nullptr), 43d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann eCursorType(FXCT_ARROW) {} 44d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 45d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannCPWL_Wnd::CreateParams::CreateParams(const CreateParams& other) = default; 46d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 47d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannCPWL_Wnd::CreateParams::~CreateParams() = default; 48d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 49d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannclass CPWL_MsgControl : public Observable<CPWL_MsgControl> { 50d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann public: 51d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann explicit CPWL_MsgControl(CPWL_Wnd* pWnd) : m_pCreatedWnd(pWnd) {} 52d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ~CPWL_MsgControl() {} 53d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 54d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bool IsWndCreated(const CPWL_Wnd* pWnd) const { 55d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return m_pCreatedWnd == pWnd; 56d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 57d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 58d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bool IsWndCaptureMouse(const CPWL_Wnd* pWnd) const { 59d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return pWnd && pdfium::ContainsValue(m_aMousePath, pWnd); 60d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 61d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 62d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bool IsMainCaptureKeyboard(const CPWL_Wnd* pWnd) const { 63d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return pWnd == m_pMainKeyboardWnd; 64d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 65d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 66d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bool IsWndCaptureKeyboard(const CPWL_Wnd* pWnd) const { 67d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return pWnd && pdfium::ContainsValue(m_aKeyboardPath, pWnd); 68d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 69d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 70d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann void SetFocus(CPWL_Wnd* pWnd) { 71d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_aKeyboardPath.clear(); 72d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pWnd) 73d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return; 74d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 75d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_pMainKeyboardWnd = pWnd; 76d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CPWL_Wnd* pParent = pWnd; 77d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann while (pParent) { 78d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_aKeyboardPath.push_back(pParent); 79d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pParent = pParent->GetParentWindow(); 80d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 81d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann // Note, pWnd may get destroyed in the OnSetFocus call. 82d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pWnd->OnSetFocus(); 83d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 84d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 85d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann void KillFocus() { 86d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ObservedPtr observed_ptr(this); 87d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!m_aKeyboardPath.empty()) 88d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (CPWL_Wnd* pWnd = m_aKeyboardPath[0]) 89d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pWnd->OnKillFocus(); 90d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!observed_ptr) 91d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return; 92d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 93d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_pMainKeyboardWnd = nullptr; 94d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_aKeyboardPath.clear(); 95d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 96d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 97d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann void SetCapture(CPWL_Wnd* pWnd) { 98d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_aMousePath.clear(); 99d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (pWnd) { 100d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CPWL_Wnd* pParent = pWnd; 101d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann while (pParent) { 102d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_aMousePath.push_back(pParent); 103d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pParent = pParent->GetParentWindow(); 104d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 105d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 106d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 107d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 108d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann void ReleaseCapture() { 109d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_aMousePath.clear(); 110d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 111d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 112d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CPWL_Wnd* GetFocusedWindow() const { return m_pMainKeyboardWnd.Get(); } 113d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 114d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann private: 115d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann std::vector<CPWL_Wnd*> m_aMousePath; 116d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann std::vector<CPWL_Wnd*> m_aKeyboardPath; 117d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann UnownedPtr<CPWL_Wnd> m_pCreatedWnd; 118d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann UnownedPtr<CPWL_Wnd> m_pMainKeyboardWnd; 119d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann}; 120d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 121d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannCPWL_Wnd::CPWL_Wnd() 122d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann : m_rcWindow(), 123d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_rcClip(), 124d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_bCreated(false), 125d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_bVisible(false), 126d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_bNotifying(false), 127d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_bEnabled(true) {} 128d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 129d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannCPWL_Wnd::~CPWL_Wnd() { 130d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ASSERT(!m_bCreated); 131d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 132d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 133d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannByteString CPWL_Wnd::GetClassName() const { 134d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return "CPWL_Wnd"; 135d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 136d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 137d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CPWL_Wnd::Create(const CreateParams& cp) { 138d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (IsValid()) 139d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return; 140d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 141d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_CreationParams = cp; 142d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OnCreate(&m_CreationParams); 143d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_CreationParams.rcRectWnd.Normalize(); 144d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_rcWindow = m_CreationParams.rcRectWnd; 145d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_rcClip = m_rcWindow; 146d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!m_rcClip.IsEmpty()) { 147d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_rcClip.Inflate(1.0f, 1.0f); 148d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_rcClip.Normalize(); 149d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 150d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CreateMsgControl(); 151d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (m_CreationParams.pParentWnd) 152d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_CreationParams.pParentWnd->AddChild(this); 153d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 154d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CreateParams ccp = m_CreationParams; 155d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ccp.dwFlags &= 0xFFFF0000L; // remove sub styles 156d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CreateScrollBar(ccp); 157d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CreateChildWnd(ccp); 158d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_bVisible = HasFlag(PWS_VISIBLE); 159d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OnCreated(); 160d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!RePosChildWnd()) 161d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return; 162d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 163d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_bCreated = true; 164d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 165d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 166d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CPWL_Wnd::OnCreate(CreateParams* pParamsToAdjust) {} 167d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 168d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CPWL_Wnd::OnCreated() {} 169d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 170d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CPWL_Wnd::OnDestroy() {} 171d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 172d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CPWL_Wnd::InvalidateFocusHandler(FocusHandlerIface* handler) { 173d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (m_CreationParams.pFocusHandler == handler) 174d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_CreationParams.pFocusHandler = nullptr; 175d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 176d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 177d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CPWL_Wnd::InvalidateProvider(ProviderIface* provider) { 178d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (m_CreationParams.pProvider.Get() == provider) 179d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_CreationParams.pProvider.Reset(); 180d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 181d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 182d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CPWL_Wnd::Destroy() { 183d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann KillFocus(); 184d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OnDestroy(); 185d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (m_bCreated) { 186d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_pVScrollBar = nullptr; 187d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (auto it = m_Children.rbegin(); it != m_Children.rend(); ++it) { 188d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CPWL_Wnd* pChild = *it; 189d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (pChild) { 190d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann *it = nullptr; 191d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pChild->Destroy(); 192d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann delete pChild; 193d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 194d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 195d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (m_CreationParams.pParentWnd) 196d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_CreationParams.pParentWnd->RemoveChild(this); 197d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 198d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_bCreated = false; 199d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 200d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann DestroyMsgControl(); 201d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_Children.clear(); 202d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 203d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 204d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannbool CPWL_Wnd::Move(const CFX_FloatRect& rcNew, bool bReset, bool bRefresh) { 205d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!IsValid()) 206d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return true; 207d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 208d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CFX_FloatRect rcOld = GetWindowRect(); 209d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_rcWindow = rcNew; 210d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_rcWindow.Normalize(); 211d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 212d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (bReset) { 213d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (rcOld.left != rcNew.left || rcOld.right != rcNew.right || 214d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann rcOld.top != rcNew.top || rcOld.bottom != rcNew.bottom) { 215d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!RePosChildWnd()) 216d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return false; 217d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 218d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 219d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (bRefresh && !InvalidateRectMove(rcOld, rcNew)) 220d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return false; 221d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 222d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_CreationParams.rcRectWnd = m_rcWindow; 223d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return true; 224d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 225d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 226d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannbool CPWL_Wnd::InvalidateRectMove(const CFX_FloatRect& rcOld, 227d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann const CFX_FloatRect& rcNew) { 228d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CFX_FloatRect rcUnion = rcOld; 229d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann rcUnion.Union(rcNew); 230d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 231d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return InvalidateRect(&rcUnion); 232d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 233d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 234d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CPWL_Wnd::DrawAppearance(CFX_RenderDevice* pDevice, 235d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann const CFX_Matrix& mtUser2Device) { 236d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (IsValid() && IsVisible()) { 237d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann DrawThisAppearance(pDevice, mtUser2Device); 238d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann DrawChildAppearance(pDevice, mtUser2Device); 239d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 240d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 241d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 242d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CPWL_Wnd::DrawThisAppearance(CFX_RenderDevice* pDevice, 243d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann const CFX_Matrix& mtUser2Device) { 244d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CFX_FloatRect rectWnd = GetWindowRect(); 245d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (rectWnd.IsEmpty()) 246d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return; 247d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 248d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (HasFlag(PWS_BACKGROUND)) { 249d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann float width = static_cast<float>(GetBorderWidth() + GetInnerBorderWidth()); 250d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pDevice->DrawFillRect(&mtUser2Device, rectWnd.GetDeflated(width, width), 251d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann GetBackgroundColor(), GetTransparency()); 252d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 253d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 254d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (HasFlag(PWS_BORDER)) { 255d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pDevice->DrawBorder(&mtUser2Device, rectWnd, 256d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann static_cast<float>(GetBorderWidth()), GetBorderColor(), 257d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann GetBorderLeftTopColor(GetBorderStyle()), 258d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann GetBorderRightBottomColor(GetBorderStyle()), 259d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann GetBorderStyle(), GetTransparency()); 260d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 261d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 262d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 263d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CPWL_Wnd::DrawChildAppearance(CFX_RenderDevice* pDevice, 264d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann const CFX_Matrix& mtUser2Device) { 265d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (CPWL_Wnd* pChild : m_Children) { 266d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pChild) 267d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann continue; 268d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 269d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CFX_Matrix mt = pChild->GetChildMatrix(); 270d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (mt.IsIdentity()) { 271d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pChild->DrawAppearance(pDevice, mtUser2Device); 272d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } else { 273d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann mt.Concat(mtUser2Device); 274d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pChild->DrawAppearance(pDevice, mt); 275d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 276d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 277d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 278d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 279d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannbool CPWL_Wnd::InvalidateRect(CFX_FloatRect* pRect) { 280d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ObservedPtr thisObserved(this); 281d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!IsValid()) 282d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return true; 283d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 284d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CFX_FloatRect rcRefresh = pRect ? *pRect : GetWindowRect(); 285d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 286d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!HasFlag(PWS_NOREFRESHCLIP)) { 287d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CFX_FloatRect rcClip = GetClipRect(); 288d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!rcClip.IsEmpty()) { 289d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann rcRefresh.Intersect(rcClip); 290d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 291d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 292d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 293d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CFX_FloatRect rcWin = PWLtoWnd(rcRefresh); 294d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann rcWin.Inflate(1, 1); 295d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann rcWin.Normalize(); 296d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 297d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (CFX_SystemHandler* pSH = GetSystemHandler()) { 298d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (CPDFSDK_Widget* widget = static_cast<CPDFSDK_Widget*>( 299d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_CreationParams.pAttachedWidget.Get())) { 300d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pSH->InvalidateRect(widget, rcWin); 301d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!thisObserved) 302d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return false; 303d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 304d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 305d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 306d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return true; 307d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 308d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 309d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#define PWL_IMPLEMENT_KEY_METHOD(key_method_name) \ 310d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bool CPWL_Wnd::key_method_name(uint16_t nChar, uint32_t nFlag) { \ 311d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!IsValid() || !IsVisible() || !IsEnabled()) \ 312d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return false; \ 313d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!IsWndCaptureKeyboard(this)) \ 314d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return false; \ 315d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (auto* pChild : m_Children) { \ 316d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (pChild && IsWndCaptureKeyboard(pChild)) \ 317d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return pChild->key_method_name(nChar, nFlag); \ 318d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } \ 319d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return false; \ 320d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 321d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 322d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannPWL_IMPLEMENT_KEY_METHOD(OnKeyDown) 323d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannPWL_IMPLEMENT_KEY_METHOD(OnChar) 324d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#undef PWL_IMPLEMENT_KEY_METHOD 325d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 326d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#define PWL_IMPLEMENT_MOUSE_METHOD(mouse_method_name) \ 327d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann bool CPWL_Wnd::mouse_method_name(const CFX_PointF& point, uint32_t nFlag) { \ 328d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!IsValid() || !IsVisible() || !IsEnabled()) \ 329d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return false; \ 330d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (IsWndCaptureMouse(this)) { \ 331d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (auto* pChild : m_Children) { \ 332d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (pChild && IsWndCaptureMouse(pChild)) { \ 333d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return pChild->mouse_method_name(pChild->ParentToChild(point), \ 334d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann nFlag); \ 335d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } \ 336d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } \ 337d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann SetCursor(); \ 338d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return false; \ 339d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } \ 340d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (auto* pChild : m_Children) { \ 341d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (pChild && pChild->WndHitTest(pChild->ParentToChild(point))) { \ 342d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return pChild->mouse_method_name(pChild->ParentToChild(point), nFlag); \ 343d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } \ 344d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } \ 345d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (WndHitTest(point)) \ 346d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann SetCursor(); \ 347d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return false; \ 348d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 349d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 350d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannPWL_IMPLEMENT_MOUSE_METHOD(OnLButtonDblClk) 351d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannPWL_IMPLEMENT_MOUSE_METHOD(OnLButtonDown) 352d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannPWL_IMPLEMENT_MOUSE_METHOD(OnLButtonUp) 353d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannPWL_IMPLEMENT_MOUSE_METHOD(OnRButtonDown) 354d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannPWL_IMPLEMENT_MOUSE_METHOD(OnRButtonUp) 355d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannPWL_IMPLEMENT_MOUSE_METHOD(OnMouseMove) 356d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#undef PWL_IMPLEMENT_MOUSE_METHOD 357d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 358d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannWideString CPWL_Wnd::GetSelectedText() { 359d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return WideString(); 360d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 361d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 362d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CPWL_Wnd::ReplaceSelection(const WideString& text) {} 363d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 364d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannbool CPWL_Wnd::OnMouseWheel(short zDelta, 365d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann const CFX_PointF& point, 366d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann uint32_t nFlag) { 367d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!IsValid() || !IsVisible() || !IsEnabled()) 368d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return false; 369d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 370d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann SetCursor(); 371d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!IsWndCaptureKeyboard(this)) 372d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return false; 373d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 374d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (auto* pChild : m_Children) { 375d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (pChild && IsWndCaptureKeyboard(pChild)) 376d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return pChild->OnMouseWheel(zDelta, pChild->ParentToChild(point), nFlag); 377d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 378d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return false; 379d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 380d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 381d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CPWL_Wnd::AddChild(CPWL_Wnd* pWnd) { 382d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_Children.push_back(pWnd); 383d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 384d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 385d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CPWL_Wnd::RemoveChild(CPWL_Wnd* pWnd) { 386d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (auto it = m_Children.rbegin(); it != m_Children.rend(); ++it) { 387d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (*it && *it == pWnd) { 388d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_Children.erase(std::next(it).base()); 389d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 390d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 391d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 392d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 393d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 394d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CPWL_Wnd::SetScrollInfo(const PWL_SCROLL_INFO& info) {} 395d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 396d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CPWL_Wnd::SetScrollPosition(float pos) {} 397d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 398d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CPWL_Wnd::ScrollWindowVertically(float pos) {} 399d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 400d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CPWL_Wnd::NotifyLButtonDown(CPWL_Wnd* child, const CFX_PointF& pos) {} 401d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 402d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CPWL_Wnd::NotifyLButtonUp(CPWL_Wnd* child, const CFX_PointF& pos) {} 403d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 404d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CPWL_Wnd::NotifyMouseMove(CPWL_Wnd* child, const CFX_PointF& pos) {} 405d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 406d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannCPWL_Wnd* CPWL_Wnd::GetParentWindow() const { 407d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return m_CreationParams.pParentWnd; 408d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 409d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 410d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannCFX_FloatRect CPWL_Wnd::GetWindowRect() const { 411d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return m_rcWindow; 412d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 413d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 414d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannCFX_FloatRect CPWL_Wnd::GetClientRect() const { 415d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CFX_FloatRect rcWindow = GetWindowRect(); 416d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 417d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann float width = static_cast<float>(GetBorderWidth() + GetInnerBorderWidth()); 418d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CFX_FloatRect rcClient = rcWindow.GetDeflated(width, width); 419d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (CPWL_ScrollBar* pVSB = GetVScrollBar()) 420d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann rcClient.right -= pVSB->GetScrollBarWidth(); 421d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 422d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann rcClient.Normalize(); 423d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return rcWindow.Contains(rcClient) ? rcClient : CFX_FloatRect(); 424d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 425d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 426d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannCFX_PointF CPWL_Wnd::GetCenterPoint() const { 427d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CFX_FloatRect rcClient = GetClientRect(); 428d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return CFX_PointF((rcClient.left + rcClient.right) * 0.5f, 429d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann (rcClient.top + rcClient.bottom) * 0.5f); 430d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 431d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 432d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannbool CPWL_Wnd::HasFlag(uint32_t dwFlags) const { 433d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return (m_CreationParams.dwFlags & dwFlags) != 0; 434d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 435d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 436d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CPWL_Wnd::RemoveFlag(uint32_t dwFlags) { 437d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_CreationParams.dwFlags &= ~dwFlags; 438d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 439d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 440d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CPWL_Wnd::AddFlag(uint32_t dwFlags) { 441d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_CreationParams.dwFlags |= dwFlags; 442d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 443d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 444d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannCFX_Color CPWL_Wnd::GetBackgroundColor() const { 445d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return m_CreationParams.sBackgroundColor; 446d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 447d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 448d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CPWL_Wnd::SetBackgroundColor(const CFX_Color& color) { 449d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_CreationParams.sBackgroundColor = color; 450d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 451d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 452d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannCFX_Color CPWL_Wnd::GetTextColor() const { 453d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return m_CreationParams.sTextColor; 454d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 455d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 456d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannBorderStyle CPWL_Wnd::GetBorderStyle() const { 457d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return m_CreationParams.nBorderStyle; 458d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 459d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 460d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CPWL_Wnd::SetBorderStyle(BorderStyle nBorderStyle) { 461d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (HasFlag(PWS_BORDER)) 462d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_CreationParams.nBorderStyle = nBorderStyle; 463d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 464d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 465d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannint32_t CPWL_Wnd::GetBorderWidth() const { 466d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return HasFlag(PWS_BORDER) ? m_CreationParams.dwBorderWidth : 0; 467d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 468d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 469d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannint32_t CPWL_Wnd::GetInnerBorderWidth() const { 470d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return 0; 471d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 472d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 473d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannCFX_Color CPWL_Wnd::GetBorderColor() const { 474d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return HasFlag(PWS_BORDER) ? m_CreationParams.sBorderColor : CFX_Color(); 475d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 476d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 477d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannconst CPWL_Dash& CPWL_Wnd::GetBorderDash() const { 478d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return m_CreationParams.sDash; 479d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 480d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 481d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannCPWL_Wnd::PrivateData* CPWL_Wnd::GetAttachedData() const { 482d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return m_CreationParams.pAttachedData.Get(); 483d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 484d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 485d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannCPWL_ScrollBar* CPWL_Wnd::GetVScrollBar() const { 486d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return HasFlag(PWS_VSCROLL) ? m_pVScrollBar.Get() : nullptr; 487d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 488d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 489d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CPWL_Wnd::CreateScrollBar(const CreateParams& cp) { 490d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CreateVScrollBar(cp); 491d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 492d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 493d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CPWL_Wnd::CreateVScrollBar(const CreateParams& cp) { 494d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (m_pVScrollBar || !HasFlag(PWS_VSCROLL)) 495d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return; 496d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 497d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CreateParams scp = cp; 498d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 499d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann // flags 500d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann scp.dwFlags = 501d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann PWS_CHILD | PWS_BACKGROUND | PWS_AUTOTRANSPARENT | PWS_NOREFRESHCLIP; 502d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 503d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann scp.pParentWnd = this; 504d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann scp.sBackgroundColor = PWL_DEFAULT_WHITECOLOR; 505d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann scp.eCursorType = FXCT_ARROW; 506d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann scp.nTransparency = PWL_SCROLLBAR_TRANSPARENCY; 507d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 508d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_pVScrollBar = new CPWL_ScrollBar(SBT_VSCROLL); 509d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_pVScrollBar->Create(scp); 510d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 511d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 512d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CPWL_Wnd::SetCapture() { 513d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (CPWL_MsgControl* pMsgCtrl = GetMsgControl()) 514d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pMsgCtrl->SetCapture(this); 515d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 516d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 517d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CPWL_Wnd::ReleaseCapture() { 518d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (auto* pChild : m_Children) { 519d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (pChild) 520d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pChild->ReleaseCapture(); 521d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 522d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (CPWL_MsgControl* pMsgCtrl = GetMsgControl()) 523d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pMsgCtrl->ReleaseCapture(); 524d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 525d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 526d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CPWL_Wnd::SetFocus() { 527d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (CPWL_MsgControl* pMsgCtrl = GetMsgControl()) { 528d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pMsgCtrl->IsMainCaptureKeyboard(this)) 529d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pMsgCtrl->KillFocus(); 530d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pMsgCtrl->SetFocus(this); 531d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 532d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 533d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 534d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CPWL_Wnd::KillFocus() { 535d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (CPWL_MsgControl* pMsgCtrl = GetMsgControl()) { 536d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (pMsgCtrl->IsWndCaptureKeyboard(this)) 537d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pMsgCtrl->KillFocus(); 538d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 539d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 540d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 541d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CPWL_Wnd::OnSetFocus() {} 542d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 543d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CPWL_Wnd::OnKillFocus() {} 544d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 545d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannbool CPWL_Wnd::WndHitTest(const CFX_PointF& point) const { 546d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return IsValid() && IsVisible() && GetWindowRect().Contains(point); 547d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 548d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 549d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannbool CPWL_Wnd::ClientHitTest(const CFX_PointF& point) const { 550d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return IsValid() && IsVisible() && GetClientRect().Contains(point); 551d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 552d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 553d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannconst CPWL_Wnd* CPWL_Wnd::GetRootWnd() const { 554d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann auto* pParent = m_CreationParams.pParentWnd; 555d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return pParent ? pParent->GetRootWnd() : this; 556d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 557d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 558d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannbool CPWL_Wnd::SetVisible(bool bVisible) { 559d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!IsValid()) 560d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return true; 561d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 562d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ObservedPtr thisObserved(this); 563d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 564d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (auto* pChild : m_Children) { 565d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (pChild) { 566d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pChild->SetVisible(bVisible); 567d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!thisObserved) 568d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return false; 569d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 570d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 571d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 572d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (bVisible != m_bVisible) { 573d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_bVisible = bVisible; 574d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!RePosChildWnd()) 575d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return false; 576d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 577d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!InvalidateRect(nullptr)) 578d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return false; 579d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 580d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return true; 581d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 582d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 583d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CPWL_Wnd::SetClipRect(const CFX_FloatRect& rect) { 584d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_rcClip = rect; 585d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_rcClip.Normalize(); 586d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 587d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 588d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannconst CFX_FloatRect& CPWL_Wnd::GetClipRect() const { 589d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return m_rcClip; 590d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 591d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 592d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannbool CPWL_Wnd::IsReadOnly() const { 593d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return HasFlag(PWS_READONLY); 594d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 595d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 596d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannbool CPWL_Wnd::RePosChildWnd() { 597d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CPWL_ScrollBar* pVSB = GetVScrollBar(); 598d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pVSB) 599d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return true; 600d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 601d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CFX_FloatRect rcContent = GetWindowRect(); 602d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!rcContent.IsEmpty()) { 603d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann float width = static_cast<float>(GetBorderWidth() + GetInnerBorderWidth()); 604d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann rcContent.Deflate(width, width); 605d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann rcContent.Normalize(); 606d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 607d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CFX_FloatRect rcVScroll = 608d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CFX_FloatRect(rcContent.right - PWL_SCROLLBAR_WIDTH, rcContent.bottom, 609d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann rcContent.right - 1.0f, rcContent.top); 610d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 611d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ObservedPtr thisObserved(this); 612d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 613d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pVSB->Move(rcVScroll, true, false); 614d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!thisObserved) 615d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return false; 616d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 617d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return true; 618d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 619d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 620d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CPWL_Wnd::CreateChildWnd(const CreateParams& cp) {} 621d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 622d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CPWL_Wnd::SetCursor() { 623d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (IsValid()) { 624d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (CFX_SystemHandler* pSH = GetSystemHandler()) { 625d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann int32_t nCursorType = GetCreationParams().eCursorType; 626d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pSH->SetCursor(nCursorType); 627d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 628d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 629d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 630d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 631d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CPWL_Wnd::CreateMsgControl() { 632d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!m_CreationParams.pMsgControl) 633d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_CreationParams.pMsgControl = new CPWL_MsgControl(this); 634d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 635d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 636d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CPWL_Wnd::DestroyMsgControl() { 637d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CPWL_MsgControl* pMsgControl = GetMsgControl(); 638d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (pMsgControl && pMsgControl->IsWndCreated(this)) 639d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann delete pMsgControl; 640d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 641d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 642d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannCPWL_MsgControl* CPWL_Wnd::GetMsgControl() const { 643d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return m_CreationParams.pMsgControl; 644d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 645d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 646d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannbool CPWL_Wnd::IsCaptureMouse() const { 647d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return IsWndCaptureMouse(this); 648d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 649d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 650d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannbool CPWL_Wnd::IsWndCaptureMouse(const CPWL_Wnd* pWnd) const { 651d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CPWL_MsgControl* pCtrl = GetMsgControl(); 652d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return pCtrl ? pCtrl->IsWndCaptureMouse(pWnd) : false; 653d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 654d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 655d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannbool CPWL_Wnd::IsWndCaptureKeyboard(const CPWL_Wnd* pWnd) const { 656d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CPWL_MsgControl* pCtrl = GetMsgControl(); 657d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return pCtrl ? pCtrl->IsWndCaptureKeyboard(pWnd) : false; 658d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 659d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 660d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannbool CPWL_Wnd::IsFocused() const { 661d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CPWL_MsgControl* pCtrl = GetMsgControl(); 662d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return pCtrl ? pCtrl->IsMainCaptureKeyboard(this) : false; 663d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 664d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 665d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannCFX_FloatRect CPWL_Wnd::GetFocusRect() const { 666d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CFX_FloatRect rect = GetWindowRect(); 667d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!rect.IsEmpty()) { 668d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann rect.Inflate(1.0f, 1.0f); 669d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann rect.Normalize(); 670d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 671d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return rect; 672d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 673d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 674d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannfloat CPWL_Wnd::GetFontSize() const { 675d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return m_CreationParams.fFontSize; 676d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 677d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 678d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CPWL_Wnd::SetFontSize(float fFontSize) { 679d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_CreationParams.fFontSize = fFontSize; 680d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 681d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 682d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannCFX_SystemHandler* CPWL_Wnd::GetSystemHandler() const { 683d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return m_CreationParams.pSystemHandler; 684d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 685d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 686d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannCPWL_Wnd::FocusHandlerIface* CPWL_Wnd::GetFocusHandler() const { 687d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return m_CreationParams.pFocusHandler.Get(); 688d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 689d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 690d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannCPWL_Wnd::ProviderIface* CPWL_Wnd::GetProvider() const { 691d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return m_CreationParams.pProvider.Get(); 692d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 693d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 694d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannIPVT_FontMap* CPWL_Wnd::GetFontMap() const { 695d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return m_CreationParams.pFontMap; 696d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 697d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 698d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannCFX_Color CPWL_Wnd::GetBorderLeftTopColor(BorderStyle nBorderStyle) const { 699d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann switch (nBorderStyle) { 700d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case BorderStyle::BEVELED: 701d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return CFX_Color(CFX_Color::kGray, 1); 702d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case BorderStyle::INSET: 703d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return CFX_Color(CFX_Color::kGray, 0.5f); 704d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann default: 705d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return CFX_Color(); 706d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 707d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 708d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 709d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannCFX_Color CPWL_Wnd::GetBorderRightBottomColor(BorderStyle nBorderStyle) const { 710d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann switch (nBorderStyle) { 711d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case BorderStyle::BEVELED: 712d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return GetBackgroundColor() / 2.0f; 713d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case BorderStyle::INSET: 714d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return CFX_Color(CFX_Color::kGray, 0.75f); 715d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann default: 716d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return CFX_Color(); 717d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 718d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 719d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 720d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannint32_t CPWL_Wnd::GetTransparency() { 721d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return m_CreationParams.nTransparency; 722d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 723d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 724d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CPWL_Wnd::SetTransparency(int32_t nTransparency) { 725d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (auto* pChild : m_Children) { 726d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (pChild) 727d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pChild->SetTransparency(nTransparency); 728d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 729d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_CreationParams.nTransparency = nTransparency; 730d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 731d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 732d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannCFX_Matrix CPWL_Wnd::GetWindowMatrix() const { 733d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CFX_Matrix mt = GetChildToRoot(); 734d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (ProviderIface* pProvider = GetProvider()) 735d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann mt.Concat(pProvider->GetWindowMatrix(GetAttachedData())); 736d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return mt; 737d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 738d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 739d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannCFX_FloatRect CPWL_Wnd::PWLtoWnd(const CFX_FloatRect& rect) const { 740d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CFX_Matrix mt = GetWindowMatrix(); 741d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return mt.TransformRect(rect); 742d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 743d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 744d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannCFX_PointF CPWL_Wnd::ParentToChild(const CFX_PointF& point) const { 745d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CFX_Matrix mt = GetChildMatrix(); 746d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (mt.IsIdentity()) 747d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return point; 748d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 749d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CFX_Matrix inverse = mt.GetInverse(); 750d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!inverse.IsIdentity()) 751d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann mt = inverse; 752d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return mt.Transform(point); 753d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 754d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 755d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannCFX_FloatRect CPWL_Wnd::ParentToChild(const CFX_FloatRect& rect) const { 756d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CFX_Matrix mt = GetChildMatrix(); 757d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (mt.IsIdentity()) 758d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return rect; 759d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 760d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CFX_Matrix inverse = mt.GetInverse(); 761d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!inverse.IsIdentity()) 762d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann mt = inverse; 763d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 764d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return mt.TransformRect(rect); 765d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 766d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 767d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannCFX_Matrix CPWL_Wnd::GetChildToRoot() const { 768d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CFX_Matrix mt; 769d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (HasFlag(PWS_CHILD)) { 770d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann const CPWL_Wnd* pParent = this; 771d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann while (pParent) { 772d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann mt.Concat(pParent->GetChildMatrix()); 773d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pParent = pParent->GetParentWindow(); 774d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 775d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 776d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return mt; 777d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 778d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 779d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannCFX_Matrix CPWL_Wnd::GetChildMatrix() const { 780d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return HasFlag(PWS_CHILD) ? m_CreationParams.mtChild : CFX_Matrix(); 781d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 782d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 783d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CPWL_Wnd::SetChildMatrix(const CFX_Matrix& mt) { 784d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_CreationParams.mtChild = mt; 785d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 786d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 787d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannconst CPWL_Wnd* CPWL_Wnd::GetFocused() const { 788d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CPWL_MsgControl* pMsgCtrl = GetMsgControl(); 789d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return pMsgCtrl ? pMsgCtrl->GetFocusedWindow() : nullptr; 790d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 791d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 792d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CPWL_Wnd::EnableWindow(bool bEnable) { 793d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (m_bEnabled == bEnable) 794d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return; 795d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 796d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (auto* pChild : m_Children) { 797d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (pChild) 798d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pChild->EnableWindow(bEnable); 799d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 800d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_bEnabled = bEnable; 801d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 802