14d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Copyright 2014 PDFium Authors. All rights reserved. 24d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Use of this source code is governed by a BSD-style license that can be 34d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// found in the LICENSE file. 44d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 54d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 64d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 74d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fwl/cfwl_widget.h" 84d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 94d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include <algorithm> 104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include <utility> 1133357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann#include <vector> 124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 1333357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann#include "third_party/base/stl_util.h" 14d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fde/cfde_textout.h" 154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fwl/cfwl_app.h" 164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fwl/cfwl_combobox.h" 174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fwl/cfwl_event.h" 184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fwl/cfwl_eventmouse.h" 194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fwl/cfwl_form.h" 204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fwl/cfwl_messagekey.h" 214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fwl/cfwl_messagekillfocus.h" 224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fwl/cfwl_messagemouse.h" 234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fwl/cfwl_messagemousewheel.h" 244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fwl/cfwl_messagesetfocus.h" 254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fwl/cfwl_notedriver.h" 264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fwl/cfwl_themebackground.h" 274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fwl/cfwl_themepart.h" 284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fwl/cfwl_themetext.h" 294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fwl/cfwl_widgetmgr.h" 304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fwl/ifwl_themeprovider.h" 31d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/cxfa_ffapp.h" 324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#define FWL_STYLEEXT_MNU_Vert (1L << 0) 344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#define FWL_WGT_CalcHeight 2048 354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#define FWL_WGT_CalcWidth 2048 364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#define FWL_WGT_CalcMultiLineDefWidth 120.0f 374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCFWL_Widget::CFWL_Widget(const CFWL_App* app, 394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann std::unique_ptr<CFWL_WidgetProperties> properties, 404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFWL_Widget* pOuter) 414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann : m_pOwnerApp(app), 424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pWidgetMgr(app->GetWidgetMgr()), 434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pProperties(std::move(properties)), 444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pOuter(pOuter), 454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_iLock(0), 464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pLayoutItem(nullptr), 474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_nEventKey(0), 484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pDelegate(nullptr) { 494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ASSERT(m_pWidgetMgr); 504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFWL_Widget* pParent = m_pProperties->m_pParent; 524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pWidgetMgr->InsertWidget(pParent, this); 534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (IsChild()) 544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return; 554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFWL_Widget* pOwner = m_pProperties->m_pOwner; 574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (pOwner) 584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pWidgetMgr->SetOwner(pOwner, this); 594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCFWL_Widget::~CFWL_Widget() { 624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann NotifyDriver(); 634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pWidgetMgr->RemoveWidget(this); 644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 66d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannbool CFWL_Widget::IsInstance(const WideStringView& wsClass) const { 674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return false; 684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCFX_RectF CFWL_Widget::GetAutosizedWidgetRect() { 714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return CFX_RectF(); 724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCFX_RectF CFWL_Widget::GetWidgetRect() { 754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return m_pProperties->m_rtWidget; 764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CFWL_Widget::InflateWidgetRect(CFX_RectF& rect) { 794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (HasBorder()) { 80d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann float fBorder = GetBorderSize(true); 814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rect.Inflate(fBorder, fBorder); 824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CFWL_Widget::SetWidgetRect(const CFX_RectF& rect) { 864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pProperties->m_rtWidget = rect; 874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCFX_RectF CFWL_Widget::GetClientRect() { 904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return GetEdgeRect(); 914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CFWL_Widget::SetParent(CFWL_Widget* pParent) { 944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pProperties->m_pParent = pParent; 954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pWidgetMgr->SetParent(pParent, this); 964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannuint32_t CFWL_Widget::GetStyles() const { 994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return m_pProperties->m_dwStyles; 1004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 1014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 1024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CFWL_Widget::ModifyStyles(uint32_t dwStylesAdded, 1034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann uint32_t dwStylesRemoved) { 1044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pProperties->m_dwStyles = 1054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann (m_pProperties->m_dwStyles & ~dwStylesRemoved) | dwStylesAdded; 1064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 1074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 1084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannuint32_t CFWL_Widget::GetStylesEx() const { 1094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return m_pProperties->m_dwStyleExes; 1104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 1114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannuint32_t CFWL_Widget::GetStates() const { 1124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return m_pProperties->m_dwStates; 1134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 1144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 1154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CFWL_Widget::ModifyStylesEx(uint32_t dwStylesExAdded, 1164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann uint32_t dwStylesExRemoved) { 1174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pProperties->m_dwStyleExes = 1184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann (m_pProperties->m_dwStyleExes & ~dwStylesExRemoved) | dwStylesExAdded; 1194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 1204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 1214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannstatic void NotifyHideChildWidget(CFWL_WidgetMgr* widgetMgr, 1224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFWL_Widget* widget, 1234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFWL_NoteDriver* noteDriver) { 1244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFWL_Widget* child = widgetMgr->GetFirstChildWidget(widget); 1254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann while (child) { 1264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann noteDriver->NotifyTargetHide(child); 1274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann NotifyHideChildWidget(widgetMgr, child, noteDriver); 1284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann child = widgetMgr->GetNextSiblingWidget(child); 1294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 1304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 1314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 1324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CFWL_Widget::SetStates(uint32_t dwStates) { 1334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pProperties->m_dwStates |= dwStates; 1344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!(dwStates & FWL_WGTSTATE_Invisible)) 1354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return; 1364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 1374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFWL_NoteDriver* noteDriver = 1384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann static_cast<CFWL_NoteDriver*>(GetOwnerApp()->GetNoteDriver()); 1394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFWL_WidgetMgr* widgetMgr = GetOwnerApp()->GetWidgetMgr(); 1404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann noteDriver->NotifyTargetHide(this); 1414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFWL_Widget* child = widgetMgr->GetFirstChildWidget(this); 1424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann while (child) { 1434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann noteDriver->NotifyTargetHide(child); 1444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann NotifyHideChildWidget(widgetMgr, child, noteDriver); 1454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann child = widgetMgr->GetNextSiblingWidget(child); 1464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 1474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return; 1484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 1494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 1504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CFWL_Widget::RemoveStates(uint32_t dwStates) { 1514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pProperties->m_dwStates &= ~dwStates; 1524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 1534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 15433357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. MoltmannFWL_WidgetHit CFWL_Widget::HitTest(const CFX_PointF& point) { 15533357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann if (GetClientRect().Contains(point)) 1564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return FWL_WidgetHit::Client; 15733357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann if (HasBorder() && GetRelativeRect().Contains(point)) 1584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return FWL_WidgetHit::Border; 1594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return FWL_WidgetHit::Unknown; 1604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 1614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 16233357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. MoltmannCFX_PointF CFWL_Widget::TransformTo(CFWL_Widget* pWidget, 16333357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann const CFX_PointF& point) { 1644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (m_pWidgetMgr->IsFormDisabled()) { 1654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_SizeF szOffset; 1664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (IsParent(pWidget)) { 1674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann szOffset = GetOffsetFromParent(pWidget); 1684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } else { 1694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann szOffset = pWidget->GetOffsetFromParent(this); 17033357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann szOffset.width = -szOffset.width; 17133357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann szOffset.height = -szOffset.height; 1724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 17333357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann return point + CFX_PointF(szOffset.width, szOffset.height); 1744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 17533357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann 17633357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann CFX_PointF ret = point; 1774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFWL_Widget* parent = GetParent(); 17833357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann if (parent) 17933357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann ret = GetMatrix().Transform(ret + GetWidgetRect().TopLeft()); 18033357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann 1814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFWL_Widget* form1 = m_pWidgetMgr->GetSystemFormWidget(this); 1824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!form1) 18333357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann return ret; 18433357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann 18533357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann if (!pWidget) 18633357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann return ret + form1->GetWidgetRect().TopLeft(); 1874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 1884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFWL_Widget* form2 = m_pWidgetMgr->GetSystemFormWidget(pWidget); 1894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!form2) 19033357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann return ret; 1914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (form1 != form2) { 19233357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann ret += form1->GetWidgetRect().TopLeft(); 19333357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann ret -= form2->GetWidgetRect().TopLeft(); 1944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 19533357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann 1964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann parent = pWidget->GetParent(); 19733357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann if (!parent) 19833357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann return ret; 19933357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann 200d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return pWidget->GetMatrix().GetInverse().Transform(ret) - 201d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pWidget->GetWidgetRect().TopLeft(); 2024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 2034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 2044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCFX_Matrix CFWL_Widget::GetMatrix() { 2054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!m_pProperties) 2064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return CFX_Matrix(); 2074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 2084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFWL_Widget* parent = GetParent(); 20933357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann std::vector<CFWL_Widget*> parents; 2104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann while (parent) { 21133357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann parents.push_back(parent); 2124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann parent = parent->GetParent(); 2134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 2144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 2154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_Matrix matrix; 2164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_Matrix ctmOnParent; 2174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_RectF rect; 21833357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann int32_t count = pdfium::CollectionSize<int32_t>(parents); 2194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann for (int32_t i = count - 2; i >= 0; i--) { 22033357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann parent = parents[i]; 2214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (parent->m_pProperties) 2224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ctmOnParent.SetIdentity(); 2234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rect = parent->GetWidgetRect(); 2244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann matrix.Concat(ctmOnParent, true); 2254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann matrix.Translate(rect.left, rect.top, true); 2264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 2274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_Matrix m; 2284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m.SetIdentity(); 2294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann matrix.Concat(m, true); 23033357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann parents.clear(); 2314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return matrix; 2324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 2334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 2344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannIFWL_ThemeProvider* CFWL_Widget::GetThemeProvider() const { 2354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return m_pProperties->m_pThemeProvider; 2364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 2374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 2384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CFWL_Widget::SetThemeProvider(IFWL_ThemeProvider* pThemeProvider) { 2394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pProperties->m_pThemeProvider = pThemeProvider; 2404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 2414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 2424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CFWL_Widget::IsEnabled() const { 2434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled) == 0; 2444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 2454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 2464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CFWL_Widget::HasBorder() const { 2474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return !!(m_pProperties->m_dwStyles & FWL_WGTSTYLE_Border); 2484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 2494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 2504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CFWL_Widget::IsVisible() const { 2514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return (m_pProperties->m_dwStates & FWL_WGTSTATE_Invisible) == 0; 2524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 2534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 2544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CFWL_Widget::IsOverLapper() const { 2554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return (m_pProperties->m_dwStyles & FWL_WGTSTYLE_WindowTypeMask) == 2564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann FWL_WGTSTYLE_OverLapper; 2574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 2584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 2594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CFWL_Widget::IsPopup() const { 2604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return !!(m_pProperties->m_dwStyles & FWL_WGTSTYLE_Popup); 2614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 2624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 2634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CFWL_Widget::IsChild() const { 2644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return !!(m_pProperties->m_dwStyles & FWL_WGTSTYLE_Child); 2654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 2664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 2674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCFX_RectF CFWL_Widget::GetEdgeRect() { 26833357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann CFX_RectF rtEdge(0, 0, m_pProperties->m_rtWidget.width, 26933357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann m_pProperties->m_rtWidget.height); 2704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (HasBorder()) { 271d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann float fCX = GetBorderSize(true); 272d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann float fCY = GetBorderSize(false); 2734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rtEdge.Deflate(fCX, fCY); 2744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 2754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return rtEdge; 2764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 2774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 278d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannfloat CFWL_Widget::GetBorderSize(bool bCX) { 2794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann IFWL_ThemeProvider* theme = GetAvailableTheme(); 2804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!theme) 2814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return 0.0f; 2824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return bCX ? theme->GetCXBorderSize() : theme->GetCYBorderSize(); 2834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 2844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 2854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCFX_RectF CFWL_Widget::GetRelativeRect() { 28633357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann return CFX_RectF(0, 0, m_pProperties->m_rtWidget.width, 28733357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann m_pProperties->m_rtWidget.height); 2884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 2894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 2904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannIFWL_ThemeProvider* CFWL_Widget::GetAvailableTheme() { 2914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (m_pProperties->m_pThemeProvider) 2924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return m_pProperties->m_pThemeProvider; 2934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 2944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFWL_Widget* pUp = this; 2954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann do { 2964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pUp = (pUp->GetStyles() & FWL_WGTSTYLE_Popup) 2974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ? m_pWidgetMgr->GetOwnerWidget(pUp) 2984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann : m_pWidgetMgr->GetParentWidget(pUp); 2994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (pUp) { 3004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann IFWL_ThemeProvider* pRet = pUp->GetThemeProvider(); 3014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (pRet) 3024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return pRet; 3034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 3044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } while (pUp); 3054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return nullptr; 3064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 3074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 3084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCFWL_Widget* CFWL_Widget::GetRootOuter() { 3094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFWL_Widget* pRet = m_pOuter; 3104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!pRet) 3114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return nullptr; 3124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 3134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann while (CFWL_Widget* pOuter = pRet->GetOuter()) 3144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pRet = pOuter; 3154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return pRet; 3164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 3174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 318d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannCFX_SizeF CFWL_Widget::CalcTextSize(const WideString& wsText, 3194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann IFWL_ThemeProvider* pTheme, 3204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool bMultiLine) { 3214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!pTheme) 3224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return CFX_SizeF(); 3234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 3244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFWL_ThemeText calPart; 3254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann calPart.m_pWidget = this; 3264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann calPart.m_wsText = wsText; 327d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (bMultiLine) 328d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann calPart.m_dwTTOStyles.line_wrap_ = true; 329d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann else 330d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann calPart.m_dwTTOStyles.single_line_ = true; 331d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 332d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann calPart.m_iTTOAlign = FDE_TextAlignment::kTopLeft; 333d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann float fWidth = bMultiLine ? FWL_WGT_CalcMultiLineDefWidth : FWL_WGT_CalcWidth; 33433357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann CFX_RectF rect(0, 0, fWidth, FWL_WGT_CalcHeight); 3354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pTheme->CalcTextRect(&calPart, rect); 3364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return CFX_SizeF(rect.width, rect.height); 3374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 3384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 339d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CFWL_Widget::CalcTextRect(const WideString& wsText, 3404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann IFWL_ThemeProvider* pTheme, 341d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann const FDE_TextStyle& dwTTOStyles, 342d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann FDE_TextAlignment iTTOAlign, 3434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_RectF& rect) { 3444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFWL_ThemeText calPart; 3454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann calPart.m_pWidget = this; 3464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann calPart.m_wsText = wsText; 3474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann calPart.m_dwTTOStyles = dwTTOStyles; 3484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann calPart.m_iTTOAlign = iTTOAlign; 3494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pTheme->CalcTextRect(&calPart, rect); 3504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 3514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 3524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CFWL_Widget::SetFocus(bool bFocus) { 3534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (m_pWidgetMgr->IsFormDisabled()) 3544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return; 3554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 3564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const CFWL_App* pApp = GetOwnerApp(); 3574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!pApp) 3584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return; 3594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 3604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFWL_NoteDriver* pDriver = 3614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann static_cast<CFWL_NoteDriver*>(pApp->GetNoteDriver()); 3624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!pDriver) 3634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return; 3644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 3654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFWL_Widget* curFocus = pDriver->GetFocus(); 3664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (bFocus && curFocus != this) 3674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pDriver->SetFocus(this); 3684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann else if (!bFocus && curFocus == this) 3694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pDriver->SetFocus(nullptr); 3704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 3714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 3724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CFWL_Widget::SetGrab(bool bSet) { 3734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const CFWL_App* pApp = GetOwnerApp(); 3744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!pApp) 3754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return; 3764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 3774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFWL_NoteDriver* pDriver = 3784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann static_cast<CFWL_NoteDriver*>(pApp->GetNoteDriver()); 3794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pDriver->SetGrab(this, bSet); 3804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 3814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 382d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CFWL_Widget::GetPopupPos(float fMinHeight, 383d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann float fMaxHeight, 3844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const CFX_RectF& rtAnchor, 3854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_RectF& rtPopup) { 3864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (GetClassID() == FWL_Type::ComboBox) { 3874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (m_pWidgetMgr->IsFormDisabled()) { 3884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pWidgetMgr->GetAdapterPopupPos(this, fMinHeight, fMaxHeight, rtAnchor, 3894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rtPopup); 3904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return; 3914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 3924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann GetPopupPosComboBox(fMinHeight, fMaxHeight, rtAnchor, rtPopup); 3934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return; 3944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 3954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (GetClassID() == FWL_Type::DateTimePicker && 3964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pWidgetMgr->IsFormDisabled()) { 3974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pWidgetMgr->GetAdapterPopupPos(this, fMinHeight, fMaxHeight, rtAnchor, 3984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rtPopup); 3994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return; 4004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 4014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann GetPopupPosGeneral(fMinHeight, fMaxHeight, rtAnchor, rtPopup); 4024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 4034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 404d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannbool CFWL_Widget::GetPopupPosMenu(float fMinHeight, 405d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann float fMaxHeight, 4064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const CFX_RectF& rtAnchor, 4074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_RectF& rtPopup) { 4084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (GetStylesEx() & FWL_STYLEEXT_MNU_Vert) { 4094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool bLeft = m_pProperties->m_rtWidget.left < 0; 410d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann float fRight = rtAnchor.right() + rtPopup.width; 41133357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann CFX_PointF point = TransformTo(nullptr, CFX_PointF()); 41233357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann if (fRight + point.x > 0.0f || bLeft) { 41333357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann rtPopup = CFX_RectF(rtAnchor.left - rtPopup.width, rtAnchor.top, 41433357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann rtPopup.width, rtPopup.height); 4154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } else { 41633357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann rtPopup = CFX_RectF(rtAnchor.right(), rtAnchor.top, rtPopup.width, 41733357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann rtPopup.height); 4184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 41933357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann rtPopup.Offset(point.x, point.y); 42033357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann return true; 42133357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann } 42233357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann 423d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann float fBottom = rtAnchor.bottom() + rtPopup.height; 42433357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann CFX_PointF point = TransformTo(nullptr, point); 42533357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann if (fBottom + point.y > 0.0f) { 42633357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann rtPopup = CFX_RectF(rtAnchor.left, rtAnchor.top - rtPopup.height, 42733357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann rtPopup.width, rtPopup.height); 4284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } else { 42933357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann rtPopup = CFX_RectF(rtAnchor.left, rtAnchor.bottom(), rtPopup.width, 43033357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann rtPopup.height); 4314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 43233357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann rtPopup.Offset(point.x, point.y); 4334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return true; 4344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 4354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 436d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannbool CFWL_Widget::GetPopupPosComboBox(float fMinHeight, 437d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann float fMaxHeight, 4384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const CFX_RectF& rtAnchor, 4394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_RectF& rtPopup) { 440d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann float fPopHeight = rtPopup.height; 4414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (rtPopup.height > fMaxHeight) 4424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann fPopHeight = fMaxHeight; 4434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann else if (rtPopup.height < fMinHeight) 4444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann fPopHeight = fMinHeight; 4454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 446d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann float fWidth = std::max(rtAnchor.width, rtPopup.width); 447d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann float fBottom = rtAnchor.bottom() + fPopHeight; 44833357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann CFX_PointF point = TransformTo(nullptr, CFX_PointF()); 44933357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann if (fBottom + point.y > 0.0f) { 45033357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann rtPopup = 45133357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann CFX_RectF(rtAnchor.left, rtAnchor.top - fPopHeight, fWidth, fPopHeight); 45233357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann } else { 45333357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann rtPopup = CFX_RectF(rtAnchor.left, rtAnchor.bottom(), fWidth, fPopHeight); 45433357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann } 4554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 45633357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann rtPopup.Offset(point.x, point.y); 4574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return true; 4584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 4594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 460d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannbool CFWL_Widget::GetPopupPosGeneral(float fMinHeight, 461d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann float fMaxHeight, 4624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const CFX_RectF& rtAnchor, 4634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_RectF& rtPopup) { 46433357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann CFX_PointF point = TransformTo(nullptr, CFX_PointF()); 46533357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann if (rtAnchor.bottom() + point.y > 0.0f) { 46633357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann rtPopup = CFX_RectF(rtAnchor.left, rtAnchor.top - rtPopup.height, 46733357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann rtPopup.width, rtPopup.height); 4684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } else { 46933357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann rtPopup = CFX_RectF(rtAnchor.left, rtAnchor.bottom(), rtPopup.width, 47033357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann rtPopup.height); 4714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 47233357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann rtPopup.Offset(point.x, point.y); 4734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return true; 4744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 4754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 4764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CFWL_Widget::RegisterEventTarget(CFWL_Widget* pEventSource) { 4774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const CFWL_App* pApp = GetOwnerApp(); 4784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!pApp) 4794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return; 4804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 4814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFWL_NoteDriver* pNoteDriver = pApp->GetNoteDriver(); 4824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!pNoteDriver) 4834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return; 4844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 4854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pNoteDriver->RegisterEventTarget(this, pEventSource); 4864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 4874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 4884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CFWL_Widget::UnregisterEventTarget() { 4894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const CFWL_App* pApp = GetOwnerApp(); 4904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!pApp) 4914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return; 4924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 4934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFWL_NoteDriver* pNoteDriver = pApp->GetNoteDriver(); 4944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!pNoteDriver) 4954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return; 4964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 4974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pNoteDriver->UnregisterEventTarget(this); 4984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 4994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 5004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CFWL_Widget::DispatchEvent(CFWL_Event* pEvent) { 5014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (m_pOuter) { 5024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pOuter->GetDelegate()->OnProcessEvent(pEvent); 5034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return; 5044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 5054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const CFWL_App* pApp = GetOwnerApp(); 5064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!pApp) 5074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return; 5084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 5094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFWL_NoteDriver* pNoteDriver = pApp->GetNoteDriver(); 5104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!pNoteDriver) 5114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return; 5124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pNoteDriver->SendEvent(pEvent); 5134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 5144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 5154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CFWL_Widget::Repaint() { 51633357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann RepaintRect(CFX_RectF(0, 0, m_pProperties->m_rtWidget.width, 51733357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann m_pProperties->m_rtWidget.height)); 5184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 5194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 5204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CFWL_Widget::RepaintRect(const CFX_RectF& pRect) { 5214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pWidgetMgr->RepaintWidget(this, pRect); 5224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 5234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 524d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CFWL_Widget::DrawBackground(CXFA_Graphics* pGraphics, 5254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFWL_Part iPartBk, 5264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann IFWL_ThemeProvider* pTheme, 5274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const CFX_Matrix* pMatrix) { 5284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFWL_ThemeBackground param; 5294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann param.m_pWidget = this; 5304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann param.m_iPart = iPartBk; 5314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann param.m_pGraphics = pGraphics; 5324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (pMatrix) 5334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann param.m_matrix.Concat(*pMatrix, true); 5344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann param.m_rtPart = GetRelativeRect(); 5354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pTheme->DrawBackground(¶m); 5364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 5374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 538d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CFWL_Widget::DrawBorder(CXFA_Graphics* pGraphics, 5394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFWL_Part iPartBorder, 5404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann IFWL_ThemeProvider* pTheme, 541d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann const CFX_Matrix& matrix) { 5424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFWL_ThemeBackground param; 5434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann param.m_pWidget = this; 5444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann param.m_iPart = iPartBorder; 5454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann param.m_pGraphics = pGraphics; 546d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann param.m_matrix.Concat(matrix, true); 5474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann param.m_rtPart = GetRelativeRect(); 5484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pTheme->DrawBackground(¶m); 5494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 5504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 5514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CFWL_Widget::NotifyDriver() { 5524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const CFWL_App* pApp = GetOwnerApp(); 5534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!pApp) 5544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return; 5554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 5564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFWL_NoteDriver* pDriver = 5574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann static_cast<CFWL_NoteDriver*>(pApp->GetNoteDriver()); 5584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!pDriver) 5594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return; 5604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 5614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pDriver->NotifyTargetDestroy(this); 5624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 5634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 5644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCFX_SizeF CFWL_Widget::GetOffsetFromParent(CFWL_Widget* pParent) { 5654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (pParent == this) 5664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return CFX_SizeF(); 5674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 5684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFWL_WidgetMgr* pWidgetMgr = GetOwnerApp()->GetWidgetMgr(); 5694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!pWidgetMgr) 5704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return CFX_SizeF(); 5714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 5724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_SizeF szRet(m_pProperties->m_rtWidget.left, 5734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pProperties->m_rtWidget.top); 5744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 5754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFWL_Widget* pDstWidget = GetParent(); 5764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann while (pDstWidget && pDstWidget != pParent) { 5774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_RectF rtDst = pDstWidget->GetWidgetRect(); 5784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann szRet += CFX_SizeF(rtDst.left, rtDst.top); 5794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pDstWidget = pWidgetMgr->GetParentWidget(pDstWidget); 5804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 5814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return szRet; 5824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 5834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 5844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CFWL_Widget::IsParent(CFWL_Widget* pParent) { 5854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFWL_Widget* pUpWidget = GetParent(); 5864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann while (pUpWidget) { 5874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (pUpWidget == pParent) 5884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return true; 5894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pUpWidget = pUpWidget->GetParent(); 5904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 5914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return false; 5924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 5934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 5944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CFWL_Widget::OnProcessMessage(CFWL_Message* pMessage) { 5954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!pMessage->m_pDstTarget) 5964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return; 5974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 5984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFWL_Widget* pWidget = pMessage->m_pDstTarget; 5994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann switch (pMessage->GetType()) { 6004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann case CFWL_Message::Type::Mouse: { 6014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFWL_MessageMouse* pMsgMouse = static_cast<CFWL_MessageMouse*>(pMessage); 6024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 6034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFWL_EventMouse evt(pWidget, pWidget); 6044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann evt.m_dwCmd = pMsgMouse->m_dwCmd; 6054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pWidget->DispatchEvent(&evt); 6064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann break; 6074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 6084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann default: 6094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann break; 6104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 6114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 6124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 6134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CFWL_Widget::OnProcessEvent(CFWL_Event* pEvent) {} 6144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 615d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CFWL_Widget::OnDrawWidget(CXFA_Graphics* pGraphics, 616d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann const CFX_Matrix& matrix) {} 617