diff options
Diffstat (limited to 'xfa/src/fwl/core/fwl_formimp.cpp')
-rw-r--r-- | xfa/src/fwl/core/fwl_formimp.cpp | 1175 |
1 files changed, 0 insertions, 1175 deletions
diff --git a/xfa/src/fwl/core/fwl_formimp.cpp b/xfa/src/fwl/core/fwl_formimp.cpp deleted file mode 100644 index 558ee00f9c..0000000000 --- a/xfa/src/fwl/core/fwl_formimp.cpp +++ /dev/null @@ -1,1175 +0,0 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "xfa/src/fwl/core/fwl_formimp.h" - -#include "xfa/include/fwl/adapter/fwl_adapterwidgetmgr.h" -#include "xfa/include/fwl/core/fwl_app.h" -#include "xfa/include/fwl/core/fwl_content.h" -#include "xfa/include/fwl/core/fwl_theme.h" -#include "xfa/src/fde/tto/fde_textout.h" -#include "xfa/src/fwl/basewidget/fwl_formproxyimp.h" -#include "xfa/src/fwl/core/fwl_appimp.h" -#include "xfa/src/fwl/core/fwl_noteimp.h" -#include "xfa/src/fwl/core/fwl_panelimp.h" -#include "xfa/src/fwl/core/fwl_targetimp.h" -#include "xfa/src/fwl/core/fwl_threadimp.h" -#include "xfa/src/fwl/core/fwl_widgetimp.h" -#include "xfa/src/fwl/core/fwl_widgetmgrimp.h" - -#define FWL_SYSBTNSIZE 21 -#define FWL_SYSBTNMARGIN 5 -#define FWL_SYSBTNSPAN 2 -#define FWL_CornerEnlarge 10 - -// static -IFWL_Form* IFWL_Form::CreateFormProxy(CFWL_WidgetImpProperties& properties, - CFX_WideString* classname, - IFWL_Widget* pOuter) { - IFWL_Form* pForm = new IFWL_Form; - CFWL_FormProxyImp* pFormProxyImpl = new CFWL_FormProxyImp(properties, pOuter); - pForm->SetImpl(pFormProxyImpl); - pFormProxyImpl->SetInterface(pForm); - return pForm; -} -IFWL_Form::IFWL_Form() {} -FWL_FORMSIZE IFWL_Form::GetFormSize() { - return static_cast<CFWL_FormImp*>(GetImpl())->GetFormSize(); -} -FWL_ERR IFWL_Form::SetFormSize(FWL_FORMSIZE eFormSize) { - return static_cast<CFWL_FormImp*>(GetImpl())->SetFormSize(eFormSize); -} -IFWL_Widget* IFWL_Form::DoModal() { - return static_cast<CFWL_FormImp*>(GetImpl())->DoModal(); -} -IFWL_Widget* IFWL_Form::DoModal(FX_DWORD& dwCommandID) { - return static_cast<CFWL_FormImp*>(GetImpl())->DoModal(dwCommandID); -} -FWL_ERR IFWL_Form::EndDoModal() { - return static_cast<CFWL_FormImp*>(GetImpl())->EndDoModal(); -} -FWL_ERR IFWL_Form::SetBorderRegion(CFX_Path* pPath) { - return static_cast<CFWL_FormImp*>(GetImpl())->SetBorderRegion(pPath); -} - -CFWL_FormImp::CFWL_FormImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) - : CFWL_PanelImp(properties, pOuter), - m_pCloseBox(NULL), - m_pMinBox(NULL), - m_pMaxBox(NULL), - m_pCaptionBox(NULL), - m_pNoteLoop(NULL), - m_pSubFocus(NULL), - m_fCXBorder(0), - m_fCYBorder(0), - m_iCaptureBtn(-1), - m_iSysBox(0), - m_eResizeType(FORM_RESIZETYPE_None), - m_bLButtonDown(FALSE), - m_bMaximized(FALSE), - m_bSetMaximize(FALSE), - m_bCustomizeLayout(FALSE), - m_eFormSize(FWL_FORMSIZE_Manual), - m_bDoModalFlag(FALSE), - m_pBigIcon(NULL), - m_pSmallIcon(NULL), - m_bMouseIn(FALSE) { - m_rtRelative.Reset(); - m_rtCaption.Reset(); - m_rtRestore.Reset(); - m_rtCaptionText.Reset(); - m_rtIcon.Reset(); -} -CFWL_FormImp::~CFWL_FormImp() { - RemoveSysButtons(); - delete m_pNoteLoop; -} -FWL_ERR CFWL_FormImp::GetClassName(CFX_WideString& wsClass) const { - wsClass = FWL_CLASS_Form; - return FWL_ERR_Succeeded; -} -FX_DWORD CFWL_FormImp::GetClassID() const { - return FWL_CLASSHASH_Form; -} -FX_BOOL CFWL_FormImp::IsInstance(const CFX_WideStringC& wsClass) const { - if (wsClass == CFX_WideStringC(FWL_CLASS_Form)) { - return TRUE; - } - return CFWL_PanelImp::IsInstance(wsClass); -} -FWL_ERR CFWL_FormImp::Initialize() { - if (CFWL_WidgetImp::Initialize() != FWL_ERR_Succeeded) - return FWL_ERR_Indefinite; - RegisterForm(); - RegisterEventTarget(); - m_pDelegate = new CFWL_FormImpDelegate(this); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_FormImp::Finalize() { - delete m_pDelegate; - m_pDelegate = nullptr; - UnregisterEventTarget(); - UnRegisterForm(); - return CFWL_WidgetImp::Finalize(); -} -FWL_ERR CFWL_FormImp::GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize) { - if (bAutoSize) { - rect.Reset(); - FX_FLOAT fCapHeight = GetCaptionHeight(); - FX_FLOAT fCXBorder = GetBorderSize(TRUE); - FX_FLOAT fCYBorder = GetBorderSize(FALSE); - FX_FLOAT fEdge = GetEdgeWidth(); - if (m_pContent) { - m_pContent->GetWidgetRect(rect, TRUE); - } - rect.height += fCapHeight + fCYBorder + fEdge + fEdge; - rect.width += fCXBorder + fCXBorder + fEdge + fEdge; - } else { - rect = m_pProperties->m_rtWidget; - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_FormImp::GetClientRect(CFX_RectF& rect) { - if ((m_pProperties->m_dwStyles & FWL_WGTSTYLE_Caption) == 0) { - rect = m_pProperties->m_rtWidget; - rect.Offset(-rect.left, -rect.top); - return FWL_ERR_Succeeded; - } -#ifdef FWL_UseMacSystemBorder - rect = m_rtRelative; - CFWL_WidgetMgr* pWidgetMgr = static_cast<CFWL_WidgetMgr*>(FWL_GetWidgetMgr()); - if (!pWidgetMgr) - return FWL_ERR_Indefinite; - IFWL_AdapterWidgetMgr* adapterWidgetMgr = pWidgetMgr->GetAdapterWidgetMgr(); - FX_FLOAT l, t, r, b; - l = t = r = b = 0; - adapterWidgetMgr->GetSystemBorder(l, t, r, b); - rect.Deflate(l, t, r, b); - rect.left = rect.top = 0; - return FWL_ERR_Succeeded; -#else - FX_FLOAT x = 0; - FX_FLOAT y = 0; - FX_FLOAT t = 0; - IFWL_ThemeProvider* pTheme = m_pProperties->m_pThemeProvider; - if (pTheme) { - CFWL_ThemePart part; - part.m_pWidget = m_pInterface; - x = *static_cast<FX_FLOAT*>( - pTheme->GetCapacity(&part, FWL_WGTCAPACITY_CXBorder)); - y = *static_cast<FX_FLOAT*>( - pTheme->GetCapacity(&part, FWL_WGTCAPACITY_CYBorder)); - t = *static_cast<FX_FLOAT*>( - pTheme->GetCapacity(&part, FWL_WGTCAPACITY_FRM_CYCaption)); - } - rect = m_pProperties->m_rtWidget; - rect.Offset(-rect.left, -rect.top); - rect.Deflate(x, t, x, y); - return FWL_ERR_Succeeded; -#endif -} -FWL_ERR CFWL_FormImp::Update() { - if (m_iLock > 0) { - return FWL_ERR_Succeeded; - } - if (!m_pProperties->m_pThemeProvider) { - m_pProperties->m_pThemeProvider = GetAvailableTheme(); - } -#ifdef FWL_UseMacSystemBorder -#else - SetThemeData(); - if (m_pProperties->m_dwStyles & FWL_WGTSTYLE_Icon) { - UpdateIcon(); - } -#endif - UpdateCaption(); - Layout(); - return FWL_ERR_Succeeded; -} -FX_DWORD CFWL_FormImp::HitTest(FX_FLOAT fx, FX_FLOAT fy) { - (void)GetAvailableTheme(); - if (m_pCloseBox && m_pCloseBox->m_rtBtn.Contains(fx, fy)) { - return FWL_WGTHITTEST_CloseBox; - } - if (m_pMaxBox && m_pMaxBox->m_rtBtn.Contains(fx, fy)) { - return FWL_WGTHITTEST_MaxBox; - } - if (m_pMinBox && m_pMinBox->m_rtBtn.Contains(fx, fy)) { - return FWL_WGTHITTEST_MinBox; - } - CFX_RectF rtCap; - rtCap.Set(m_rtCaption.left + m_fCYBorder, m_rtCaption.top + m_fCXBorder, - m_rtCaption.width - FWL_SYSBTNSIZE * m_iSysBox - 2 * m_fCYBorder, - m_rtCaption.height - m_fCXBorder); - if (rtCap.Contains(fx, fy)) { - return FWL_WGTHITTEST_Titlebar; - } - if ((m_pProperties->m_dwStyles & FWL_WGTSTYLE_Border) && - (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_FRM_Resize)) { - FX_FLOAT fWidth = - m_rtRelative.width - 2 * (m_fCYBorder + FWL_CornerEnlarge); - FX_FLOAT fHeight = - m_rtRelative.height - 2 * (m_fCXBorder + FWL_CornerEnlarge); - CFX_RectF rt; - rt.Set(0, m_fCXBorder + FWL_CornerEnlarge, m_fCYBorder, fHeight); - if (rt.Contains(fx, fy)) { - return FWL_WGTHITTEST_Left; - } - rt.Set(m_rtRelative.width - m_fCYBorder, m_fCXBorder + FWL_CornerEnlarge, - m_fCYBorder, fHeight); - if (rt.Contains(fx, fy)) { - return FWL_WGTHITTEST_Right; - } - rt.Set(m_fCYBorder + FWL_CornerEnlarge, 0, fWidth, m_fCXBorder); - if (rt.Contains(fx, fy)) { - return FWL_WGTHITTEST_Top; - } - rt.Set(m_fCYBorder + FWL_CornerEnlarge, m_rtRelative.height - m_fCXBorder, - fWidth, m_fCXBorder); - if (rt.Contains(fx, fy)) { - return FWL_WGTHITTEST_Bottom; - } - rt.Set(0, 0, m_fCYBorder + FWL_CornerEnlarge, - m_fCXBorder + FWL_CornerEnlarge); - if (rt.Contains(fx, fy)) { - return FWL_WGTHITTEST_LeftTop; - } - rt.Set(0, m_rtRelative.height - m_fCXBorder - FWL_CornerEnlarge, - m_fCYBorder + FWL_CornerEnlarge, m_fCXBorder + FWL_CornerEnlarge); - if (rt.Contains(fx, fy)) { - return FWL_WGTHITTEST_LeftBottom; - } - rt.Set(m_rtRelative.width - m_fCYBorder - FWL_CornerEnlarge, 0, - m_fCYBorder + FWL_CornerEnlarge, m_fCXBorder + FWL_CornerEnlarge); - if (rt.Contains(fx, fy)) { - return FWL_WGTHITTEST_RightTop; - } - rt.Set(m_rtRelative.width - m_fCYBorder - FWL_CornerEnlarge, - m_rtRelative.height - m_fCXBorder - FWL_CornerEnlarge, - m_fCYBorder + FWL_CornerEnlarge, m_fCXBorder + FWL_CornerEnlarge); - if (rt.Contains(fx, fy)) { - return FWL_WGTHITTEST_RightBottom; - } - } - return FWL_WGTHITTEST_Client; -} -FWL_ERR CFWL_FormImp::DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - if (!pGraphics) - return FWL_ERR_Indefinite; - if (!m_pProperties->m_pThemeProvider) - return FWL_ERR_Indefinite; - IFWL_ThemeProvider* pTheme = m_pProperties->m_pThemeProvider; - FX_BOOL bInactive = !IsActive(); - int32_t iState = - bInactive ? FWL_PARTSTATE_FRM_Inactive : FWL_PARTSTATE_FRM_Normal; - if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_FRM_NoDrawClient) == 0) { - DrawBackground(pGraphics, pTheme); - } -#ifdef FWL_UseMacSystemBorder - return FWL_ERR_Succeeded; -#endif - CFWL_ThemeBackground param; - param.m_pWidget = m_pInterface; - param.m_dwStates = iState; - param.m_pGraphics = pGraphics; - param.m_rtPart = m_rtRelative; - if (pMatrix) { - param.m_matrix.Concat(*pMatrix); - } - if (m_pProperties->m_dwStyles & FWL_WGTSTYLE_Border) { - param.m_iPart = FWL_PART_FRM_Border; - pTheme->DrawBackground(¶m); - } - if ((m_pProperties->m_dwStyleExes & FWL_WGTSTYLE_EdgeMask) != - FWL_WGTSTYLE_EdgeNone) { - CFX_RectF rtEdge; - GetEdgeRect(rtEdge); - param.m_iPart = FWL_PART_FRM_Edge; - param.m_rtPart = rtEdge; - param.m_dwStates = iState; - pTheme->DrawBackground(¶m); - } - if (m_pProperties->m_dwStyles & FWL_WGTSTYLE_Caption) { - param.m_iPart = FWL_PART_FRM_Caption; - param.m_dwStates = iState; - param.m_rtPart = m_rtCaption; - pTheme->DrawBackground(¶m); - DrawCaptionText(pGraphics, pTheme, pMatrix); - } else if (m_pProperties->m_dwStyles & FWL_WGTSTYLE_NarrowCaption) { - param.m_iPart = FWL_PART_FRM_NarrowCaption; - param.m_dwStates = iState; - param.m_rtPart = m_rtCaption; - pTheme->DrawBackground(¶m); - DrawCaptionText(pGraphics, pTheme, pMatrix); - } - if (m_pProperties->m_dwStyles & FWL_WGTSTYLE_Icon) { - param.m_iPart = FWL_PART_FRM_Icon; - if (HasIcon()) { - DrawIconImage(pGraphics, pTheme, pMatrix); - } - } -#if (_FX_OS_ == _FX_MACOSX_) - { - if (m_pCloseBox) { - param.m_iPart = FWL_PART_FRM_CloseBox; - param.m_dwStates = m_pCloseBox->GetPartState(); - if (m_pProperties->m_dwStates & FWL_WGTSTATE_Deactivated) { - param.m_dwStates = FWL_PARTSTATE_FRM_Disabled; - } else if (FWL_PARTSTATE_FRM_Normal == param.m_dwStates && m_bMouseIn) { - param.m_dwStates = FWL_PARTSTATE_FRM_Hover; - } - param.m_rtPart = m_pCloseBox->m_rtBtn; - pTheme->DrawBackground(¶m); - } - if (m_pMaxBox) { - param.m_iPart = FWL_PART_FRM_MaximizeBox; - param.m_dwStates = m_pMaxBox->GetPartState(); - if (m_pProperties->m_dwStates & FWL_WGTSTATE_Deactivated) { - param.m_dwStates = FWL_PARTSTATE_FRM_Disabled; - } else if (FWL_PARTSTATE_FRM_Normal == param.m_dwStates && m_bMouseIn) { - param.m_dwStates = FWL_PARTSTATE_FRM_Hover; - } - param.m_rtPart = m_pMaxBox->m_rtBtn; - param.m_dwData = m_bMaximized; - pTheme->DrawBackground(¶m); - } - if (m_pMinBox) { - param.m_iPart = FWL_PART_FRM_MinimizeBox; - param.m_dwStates = m_pMinBox->GetPartState(); - if (m_pProperties->m_dwStates & FWL_WGTSTATE_Deactivated) { - param.m_dwStates = FWL_PARTSTATE_FRM_Disabled; - } else if (FWL_PARTSTATE_FRM_Normal == param.m_dwStates && m_bMouseIn) { - param.m_dwStates = FWL_PARTSTATE_FRM_Hover; - } - param.m_rtPart = m_pMinBox->m_rtBtn; - pTheme->DrawBackground(¶m); - } - m_bMouseIn = FALSE; - } -#else - { - if (m_pCloseBox) { - param.m_iPart = FWL_PART_FRM_CloseBox; - param.m_dwStates = m_pCloseBox->GetPartState(); - param.m_rtPart = m_pCloseBox->m_rtBtn; - pTheme->DrawBackground(¶m); - } - if (m_pMaxBox) { - param.m_iPart = FWL_PART_FRM_MaximizeBox; - param.m_dwStates = m_pMaxBox->GetPartState(); - param.m_rtPart = m_pMaxBox->m_rtBtn; - param.m_dwData = m_bMaximized; - pTheme->DrawBackground(¶m); - } - if (m_pMinBox) { - param.m_iPart = FWL_PART_FRM_MinimizeBox; - param.m_dwStates = m_pMinBox->GetPartState(); - param.m_rtPart = m_pMinBox->m_rtBtn; - pTheme->DrawBackground(¶m); - } - } -#endif - return FWL_ERR_Succeeded; -} -FWL_FORMSIZE CFWL_FormImp::GetFormSize() { - return m_eFormSize; -} -FWL_ERR CFWL_FormImp::SetFormSize(FWL_FORMSIZE eFormSize) { - m_eFormSize = eFormSize; - return FWL_ERR_Succeeded; -} -IFWL_Widget* CFWL_FormImp::DoModal() { - IFWL_NoteThread* pThread = GetOwnerThread(); - if (!pThread) - return NULL; - IFWL_NoteDriver* pDriver = pThread->GetNoteDriver(); - if (!pDriver) - return NULL; - m_pNoteLoop = new CFWL_NoteLoop(this); - pDriver->PushNoteLoop(m_pNoteLoop); - m_bDoModalFlag = TRUE; - SetStates(FWL_WGTSTATE_Invisible, FALSE); - pDriver->Run(); -#if (_FX_OS_ == _FX_MACOSX_) -#else - pDriver->PopNoteLoop(); -#endif - delete m_pNoteLoop; - m_pNoteLoop = NULL; - return NULL; -} -IFWL_Widget* CFWL_FormImp::DoModal(FX_DWORD& dwCommandID) { - return DoModal(); -} -FWL_ERR CFWL_FormImp::EndDoModal() { - if (!m_pNoteLoop) - return FWL_ERR_Indefinite; - m_bDoModalFlag = FALSE; -#if (_FX_OS_ == _FX_MACOSX_) - m_pNoteLoop->EndModalLoop(); - IFWL_NoteThread* pThread = GetOwnerThread(); - if (!pThread) - return FWL_ERR_Indefinite; - CFWL_NoteDriver* pDriver = - static_cast<CFWL_NoteDriver*>(pThread->GetNoteDriver()); - if (!pDriver) - return FWL_ERR_Indefinite; - pDriver->PopNoteLoop(); - SetStates(FWL_WGTSTATE_Invisible, TRUE); - return FWL_ERR_Succeeded; -#else - SetStates(FWL_WGTSTATE_Invisible, TRUE); - return m_pNoteLoop->EndModalLoop(); -#endif -} -FWL_ERR CFWL_FormImp::SetBorderRegion(CFX_Path* pPath) { - return FWL_ERR_Succeeded; -} -void CFWL_FormImp::DrawBackground(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme) { - CFWL_ThemeBackground param; - param.m_pWidget = m_pInterface; - param.m_iPart = FWL_PART_FRM_Background; - param.m_pGraphics = pGraphics; - param.m_rtPart = m_rtRelative; - param.m_rtPart.Deflate(m_fCYBorder, m_rtCaption.height, m_fCYBorder, - m_fCXBorder); - pTheme->DrawBackground(¶m); -} -CFWL_WidgetImp* CFWL_FormImp::GetSubFocus() { - return m_pSubFocus; -} -void CFWL_FormImp::SetSubFocus(CFWL_WidgetImp* pWidget) { - m_pSubFocus = pWidget; -} -CFX_MapAccelerators& CFWL_FormImp::GetAccelerator() { - return m_mapAccelerators; -} -void CFWL_FormImp::SetAccelerator(CFX_MapAccelerators* pAccelerators) { - if (!pAccelerators) - return; - m_mapAccelerators.RemoveAll(); - FX_DWORD vrKey, rValue; - FX_POSITION pos = pAccelerators->GetStartPosition(); - while (pos) { - pAccelerators->GetNextAssoc(pos, vrKey, rValue); - m_mapAccelerators.SetAt(vrKey, rValue); - } -} -void CFWL_FormImp::ShowChildWidget(IFWL_Widget* pParent) { - IFWL_App* pApp = FWL_GetApp(); - if (!pApp) - return; - CFWL_WidgetMgr* pWidgetMgr = - static_cast<CFWL_WidgetMgr*>(pApp->GetWidgetMgr()); - if (!pWidgetMgr) - return; - IFWL_Widget* pChild = - pWidgetMgr->GetWidget(pParent, FWL_WGTRELATION_FirstChild); - while (pChild) { - pWidgetMgr->ShowWidget_Native(pChild); - ShowChildWidget(pChild); - pChild = pWidgetMgr->GetWidget(pChild, FWL_WGTRELATION_NextSibling); - } -} -void CFWL_FormImp::RemoveSysButtons() { - m_rtCaption.Reset(); - if (m_pCloseBox) { - delete m_pCloseBox; - m_pCloseBox = NULL; - } - if (m_pMinBox) { - delete m_pMinBox; - m_pMinBox = NULL; - } - if (m_pMaxBox) { - delete m_pMaxBox; - m_pMaxBox = NULL; - } - if (m_pCaptionBox) { - delete m_pCaptionBox; - m_pCaptionBox = NULL; - } -} -void CFWL_FormImp::CalcContentRect(CFX_RectF& rtContent) { -#ifdef FWL_UseMacSystemBorder - rtContent = m_rtRelative; -#else - GetEdgeRect(rtContent); - if (HasEdge()) { - FX_FLOAT fEdge = GetEdgeWidth(); - rtContent.Deflate(fEdge, fEdge); - } -#endif -} -CFWL_SysBtn* CFWL_FormImp::GetSysBtnAtPoint(FX_FLOAT fx, FX_FLOAT fy) { - if (m_pCloseBox && m_pCloseBox->m_rtBtn.Contains(fx, fy)) { - return m_pCloseBox; - } - if (m_pMaxBox && m_pMaxBox->m_rtBtn.Contains(fx, fy)) { - return m_pMaxBox; - } - if (m_pMinBox && m_pMinBox->m_rtBtn.Contains(fx, fy)) { - return m_pMinBox; - } - if (m_pCaptionBox && m_pCaptionBox->m_rtBtn.Contains(fx, fy)) { - return m_pCaptionBox; - } - return NULL; -} -CFWL_SysBtn* CFWL_FormImp::GetSysBtnByState(FX_DWORD dwState) { - if (m_pCloseBox && (m_pCloseBox->m_dwState & dwState)) { - return m_pCloseBox; - } - if (m_pMaxBox && (m_pMaxBox->m_dwState & dwState)) { - return m_pMaxBox; - } - if (m_pMinBox && (m_pMinBox->m_dwState & dwState)) { - return m_pMinBox; - } - if (m_pCaptionBox && (m_pCaptionBox->m_dwState & dwState)) { - return m_pCaptionBox; - } - return NULL; -} -CFWL_SysBtn* CFWL_FormImp::GetSysBtnByIndex(int32_t nIndex) { - if (nIndex < 0) { - return NULL; - } - CFX_PtrArray arrBtn; - if (m_pMinBox) { - arrBtn.Add(m_pMinBox); - } - if (m_pMaxBox) { - arrBtn.Add(m_pMaxBox); - } - if (m_pCloseBox) { - arrBtn.Add(m_pCloseBox); - } - return static_cast<CFWL_SysBtn*>(arrBtn[nIndex]); -} -int32_t CFWL_FormImp::GetSysBtnIndex(CFWL_SysBtn* pBtn) { - CFX_PtrArray arrBtn; - if (m_pMinBox) { - arrBtn.Add(m_pMinBox); - } - if (m_pMaxBox) { - arrBtn.Add(m_pMaxBox); - } - if (m_pCloseBox) { - arrBtn.Add(m_pCloseBox); - } - return arrBtn.Find(pBtn); -} -FX_FLOAT CFWL_FormImp::GetCaptionHeight() { - FX_DWORD dwCapacity = 0; - if (m_pProperties->m_dwStyles & FWL_WGTSTYLE_Caption) { - dwCapacity = FWL_WGTCAPACITY_FRM_CYCaption; - } else if (m_pProperties->m_dwStyles & FWL_WGTSTYLE_NarrowCaption) { - dwCapacity = FWL_WGTCAPACITY_FRM_CYNarrowCaption; - } - if (dwCapacity > 0) { - FX_FLOAT* pfCapHeight = - static_cast<FX_FLOAT*>(GetThemeCapacity(dwCapacity)); - return pfCapHeight ? *pfCapHeight : 0; - } - return 0; -} -void CFWL_FormImp::DrawCaptionText(CFX_Graphics* pGs, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - CFX_WideString wsText; - IFWL_DataProvider* pData = m_pProperties->m_pDataProvider; - pData->GetCaption(m_pInterface, wsText); - if (wsText.IsEmpty()) { - return; - } - CFWL_ThemeText textParam; - textParam.m_pWidget = m_pInterface; - textParam.m_iPart = FWL_PART_FRM_Caption; - textParam.m_dwStates = FWL_PARTSTATE_FRM_Normal; - textParam.m_pGraphics = pGs; - if (pMatrix) { - textParam.m_matrix.Concat(*pMatrix); - } - CFX_RectF rtText; - if (m_bCustomizeLayout) { - rtText = m_rtCaptionText; - rtText.top -= 5; - } else { - rtText = m_rtCaption; - FX_FLOAT fpos; - fpos = HasIcon() ? 29.0f : 13.0f; - rtText.left += fpos; - } - textParam.m_rtPart = rtText; - textParam.m_wsText = wsText; - textParam.m_dwTTOStyles = FDE_TTOSTYLE_SingleLine | FDE_TTOSTYLE_Ellipsis; - textParam.m_iTTOAlign = m_bCustomizeLayout ? FDE_TTOALIGNMENT_Center - : FDE_TTOALIGNMENT_CenterLeft; - pTheme->DrawText(&textParam); -} -void CFWL_FormImp::DrawIconImage(CFX_Graphics* pGs, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - IFWL_FormDP* pData = - static_cast<IFWL_FormDP*>(m_pProperties->m_pDataProvider); - CFWL_ThemeBackground param; - param.m_pWidget = m_pInterface; - param.m_iPart = FWL_PART_FRM_Icon; - param.m_pGraphics = pGs; - param.m_pImage = pData->GetIcon(m_pInterface, FALSE); - param.m_rtPart = m_rtIcon; - if (pMatrix) { - param.m_matrix.Concat(*pMatrix); - } - pTheme->DrawBackground(¶m); -} -void CFWL_FormImp::GetEdgeRect(CFX_RectF& rtEdge) { - rtEdge = m_rtRelative; - if (m_pProperties->m_dwStyles & FWL_WGTSTYLE_Border) { - FX_FLOAT fCX = GetBorderSize(); - FX_FLOAT fCY = GetBorderSize(FALSE); - rtEdge.Deflate(fCX, m_rtCaption.Height(), fCX, fCY); - } -} -void CFWL_FormImp::SetWorkAreaRect() { - m_rtRestore = m_pProperties->m_rtWidget; - CFWL_WidgetMgr* pWidgetMgr = static_cast<CFWL_WidgetMgr*>(FWL_GetWidgetMgr()); - if (!pWidgetMgr) - return; - m_bSetMaximize = TRUE; - pWidgetMgr->SetMaximize_Native(m_pInterface); - Repaint(&m_rtRelative); -} -void CFWL_FormImp::SetCursor(FX_FLOAT fx, FX_FLOAT fy) {} -void CFWL_FormImp::Layout() { - GetRelativeRect(m_rtRelative); -#ifndef FWL_UseMacSystemBorder - ReSetSysBtn(); -#endif - if (m_pContent) { - CFX_RectF rtClient; - GetClientRect(rtClient); - m_pContent->SetWidgetRect(rtClient); - m_pContent->Update(); - } -} -void CFWL_FormImp::ReSetSysBtn() { - m_fCXBorder = - *static_cast<FX_FLOAT*>(GetThemeCapacity(FWL_WGTCAPACITY_CXBorder)); - m_fCYBorder = - *static_cast<FX_FLOAT*>(GetThemeCapacity(FWL_WGTCAPACITY_CYBorder)); - RemoveSysButtons(); - IFWL_ThemeProvider* pTheme = m_pProperties->m_pThemeProvider; - m_bCustomizeLayout = pTheme->IsCustomizedLayout(m_pInterface); - FX_FLOAT fCapHeight = GetCaptionHeight(); - if (fCapHeight > 0) { - m_rtCaption = m_rtRelative; - m_rtCaption.height = fCapHeight; - } - m_iSysBox = 0; - if (m_pProperties->m_dwStyles & FWL_WGTSTYLE_CloseBox) { - m_pCloseBox = new CFWL_SysBtn; - if (m_bCustomizeLayout) { - CFWL_ThemeBackground param; - param.m_pWidget = m_pInterface; - param.m_iPart = FWL_PART_FRM_CloseBox; - pTheme->GetPartRect(¶m, m_pCloseBox->m_rtBtn); - } else { - m_pCloseBox->m_rtBtn.Set( - m_rtRelative.right() - FWL_SYSBTNMARGIN - FWL_SYSBTNSIZE, - FWL_SYSBTNMARGIN, FWL_SYSBTNSIZE, FWL_SYSBTNSIZE); - } - m_iSysBox++; - } - if (m_pProperties->m_dwStyles & FWL_WGTSTYLE_MaximizeBox) { - m_pMaxBox = new CFWL_SysBtn; - if (m_bCustomizeLayout) { - CFWL_ThemeBackground param; - param.m_pWidget = m_pInterface; - param.m_iPart = FWL_PART_FRM_MaximizeBox; - pTheme->GetPartRect(¶m, m_pMaxBox->m_rtBtn); - } else { - if (m_pCloseBox) { - m_pMaxBox->m_rtBtn.Set( - m_pCloseBox->m_rtBtn.left - FWL_SYSBTNSPAN - FWL_SYSBTNSIZE, - m_pCloseBox->m_rtBtn.top, FWL_SYSBTNSIZE, FWL_SYSBTNSIZE); - } else { - m_pMaxBox->m_rtBtn.Set( - m_rtRelative.right() - FWL_SYSBTNMARGIN - FWL_SYSBTNSIZE, - FWL_SYSBTNMARGIN, FWL_SYSBTNSIZE, FWL_SYSBTNSIZE); - } - } - m_iSysBox++; - } - if (m_pProperties->m_dwStyles & FWL_WGTSTYLE_MinimizeBox) { - m_pMinBox = new CFWL_SysBtn; - if (m_bCustomizeLayout) { - CFWL_ThemeBackground param; - param.m_pWidget = m_pInterface; - param.m_iPart = FWL_PART_FRM_MinimizeBox; - pTheme->GetPartRect(¶m, m_pMinBox->m_rtBtn); - } else { - if (m_pMaxBox) { - m_pMinBox->m_rtBtn.Set( - m_pMaxBox->m_rtBtn.left - FWL_SYSBTNSPAN - FWL_SYSBTNSIZE, - m_pMaxBox->m_rtBtn.top, FWL_SYSBTNSIZE, FWL_SYSBTNSIZE); - } else if (m_pCloseBox) { - m_pMinBox->m_rtBtn.Set( - m_pCloseBox->m_rtBtn.left - FWL_SYSBTNSPAN - FWL_SYSBTNSIZE, - m_pCloseBox->m_rtBtn.top, FWL_SYSBTNSIZE, FWL_SYSBTNSIZE); - } else { - m_pMinBox->m_rtBtn.Set( - m_rtRelative.right() - FWL_SYSBTNMARGIN - FWL_SYSBTNSIZE, - FWL_SYSBTNMARGIN, FWL_SYSBTNSIZE, FWL_SYSBTNSIZE); - } - } - m_iSysBox++; - } - IFWL_FormDP* pData = - static_cast<IFWL_FormDP*>(m_pProperties->m_pDataProvider); - if (m_pProperties->m_dwStyles & FWL_WGTSTYLE_Icon && - pData->GetIcon(m_pInterface, FALSE)) { - if (m_bCustomizeLayout) { - CFWL_ThemeBackground param; - param.m_pWidget = m_pInterface; - param.m_iPart = FWL_PART_FRM_Icon; - CFX_WideString wsText; - m_pProperties->m_pDataProvider->GetCaption(m_pInterface, wsText); - param.m_pData = &wsText; - pTheme->GetPartRect(¶m, m_rtIcon); - } else { - m_rtIcon.Set(5, (m_rtCaption.height - m_fSmallIconSz) / 2, m_fSmallIconSz, - m_fSmallIconSz); - } - } - if (m_bCustomizeLayout) { - CFWL_ThemeText parma; - parma.m_pWidget = m_pInterface; - parma.m_iPart = FWL_PART_FRM_HeadText; - m_pProperties->m_pDataProvider->GetCaption(m_pInterface, parma.m_wsText); - pTheme->GetPartRect(&parma, m_rtCaptionText); - } -} -void CFWL_FormImp::RegisterForm() { - IFWL_NoteThread* pThread = GetOwnerThread(); - if (!pThread) - return; - CFWL_NoteDriver* pDriver = - static_cast<CFWL_NoteDriver*>(pThread->GetNoteDriver()); - if (!pDriver) - return; - pDriver->RegisterForm(this); -} -void CFWL_FormImp::UnRegisterForm() { - IFWL_NoteThread* pThread = GetOwnerThread(); - if (!pThread) - return; - CFWL_NoteDriver* pDriver = - static_cast<CFWL_NoteDriver*>(pThread->GetNoteDriver()); - if (!pDriver) - return; - pDriver->UnRegisterForm(this); -} -FX_BOOL CFWL_FormImp::IsDoModal() { - return m_bDoModalFlag; -} -void CFWL_FormImp::SetThemeData() { - m_fSmallIconSz = - *static_cast<FX_FLOAT*>(GetThemeCapacity(FWL_WGTCAPACITY_FRM_SmallIcon)); - m_fBigIconSz = - *static_cast<FX_FLOAT*>(GetThemeCapacity(FWL_WGTCAPACITY_FRM_BigIcon)); -} -FX_BOOL CFWL_FormImp::HasIcon() { - IFWL_FormDP* pData = - static_cast<IFWL_FormDP*>(m_pProperties->m_pDataProvider); - return !!pData->GetIcon(m_pInterface, FALSE); -} -void CFWL_FormImp::UpdateIcon() { - CFWL_WidgetMgr* pWidgetMgr = static_cast<CFWL_WidgetMgr*>(FWL_GetWidgetMgr()); - if (!pWidgetMgr) - return; - IFWL_FormDP* pData = - static_cast<IFWL_FormDP*>(m_pProperties->m_pDataProvider); - CFX_DIBitmap* pBigIcon = pData->GetIcon(m_pInterface, TRUE); - CFX_DIBitmap* pSmallIcon = pData->GetIcon(m_pInterface, FALSE); - if (pBigIcon && pBigIcon != m_pBigIcon) { - m_pBigIcon = pBigIcon; - pWidgetMgr->SetWidgetIcon_Native(m_pInterface, m_pBigIcon, TRUE); - } - if (pSmallIcon && pSmallIcon != m_pSmallIcon) { - m_pSmallIcon = pSmallIcon; - pWidgetMgr->SetWidgetIcon_Native(m_pInterface, m_pBigIcon, FALSE); - } -} -void CFWL_FormImp::UpdateCaption() { - CFWL_WidgetMgr* pWidgetMgr = static_cast<CFWL_WidgetMgr*>(FWL_GetWidgetMgr()); - if (!pWidgetMgr) - return; - IFWL_FormDP* pData = - static_cast<IFWL_FormDP*>(m_pProperties->m_pDataProvider); - if (!pData) - return; - CFX_WideString text; - pData->GetCaption(m_pInterface, text); - pWidgetMgr->SetWidgetCaption_Native(m_pInterface, text); -} -void CFWL_FormImp::DoWidthLimit(FX_FLOAT& fLeft, - FX_FLOAT& fWidth, - FX_FLOAT fCurX, - FX_FLOAT fSpace, - FX_FLOAT fLimitMin, - FX_FLOAT fLimitMax, - FX_BOOL bLeft) { - FX_FLOAT fx = fCurX; - FX_FLOAT fy = 0; - TransformTo(NULL, fx, fy); - FX_FLOAT fTemp = - bLeft ? (fWidth - fx + fLeft + fSpace) : (fx - fLeft + fSpace); - if (fTemp >= fLimitMin && fTemp <= fLimitMax) { - fWidth = fTemp; - fLeft += bLeft ? (fx - fLeft - fSpace) : 0; - } else { - if (fTemp < fLimitMin && fWidth > fLimitMin) { - fLeft += bLeft ? (fWidth - fLimitMin) : 0; - fWidth = fLimitMin; - } else if (fTemp > fLimitMax && fWidth < fLimitMax) { - fLeft -= bLeft ? (fLimitMax - fWidth) : 0; - fWidth = fLimitMax; - } - } -} -void CFWL_FormImp::DoHeightLimit(FX_FLOAT& fTop, - FX_FLOAT& fHeight, - FX_FLOAT fCurY, - FX_FLOAT fSpace, - FX_FLOAT fLimitMin, - FX_FLOAT fLimitMax, - FX_BOOL bTop) { - FX_FLOAT fx = 0; - FX_FLOAT fy = fCurY; - TransformTo(NULL, fx, fy); - FX_FLOAT fTemp = bTop ? (fHeight - fy + fTop + fSpace) : (fy - fTop + fSpace); - if (fTemp >= fLimitMin && fTemp <= fLimitMax) { - fHeight = fTemp; - fTop += bTop ? (fy - fTop - fSpace) : 0; - } else { - if (fTemp < fLimitMin && fHeight > fLimitMin) { - fTop += bTop ? (fHeight - fLimitMin) : 0; - fHeight = fLimitMin; - } else if (fTemp > fLimitMax && fHeight < fLimitMax) { - fTop -= bTop ? (fLimitMax - fHeight) : 0; - fHeight = fLimitMax; - } - } -} -CFWL_FormImpDelegate::CFWL_FormImpDelegate(CFWL_FormImp* pOwner) - : m_pOwner(pOwner) {} -int32_t CFWL_FormImpDelegate::OnProcessMessage(CFWL_Message* pMessage) { -#ifdef FWL_UseMacSystemBorder - if (!pMessage) - return 0; - FX_DWORD dwMsgCode = pMessage->GetClassID(); - switch (dwMsgCode) { - case FWL_MSGHASH_Activate: { - m_pOwner->m_pProperties->m_dwStates &= ~FWL_WGTSTATE_Deactivated; - m_pOwner->Repaint(&m_pOwner->m_rtRelative); - break; - } - case FWL_MSGHASH_Deactivate: { - m_pOwner->m_pProperties->m_dwStates |= FWL_WGTSTATE_Deactivated; - m_pOwner->Repaint(&m_pOwner->m_rtRelative); - break; - } - } - return FWL_ERR_Succeeded; -#else - if (!pMessage) - return 0; - FX_DWORD dwMsgCode = pMessage->GetClassID(); - int32_t iRet = 1; - switch (dwMsgCode) { - case FWL_MSGHASH_Activate: { - m_pOwner->m_pProperties->m_dwStates &= ~FWL_WGTSTATE_Deactivated; - IFWL_NoteThread* pThread = m_pOwner->GetOwnerThread(); - CFWL_NoteDriver* pDriver = - static_cast<CFWL_NoteDriver*>(pThread->GetNoteDriver()); - CFWL_WidgetImp* pSubFocusImp = m_pOwner->GetSubFocus(); - IFWL_Widget* pSubFocus = - pSubFocusImp ? pSubFocusImp->GetInterface() : NULL; - if (pSubFocus && pSubFocus != pDriver->GetFocus()) { - pDriver->SetFocus(pSubFocus); - } - m_pOwner->Repaint(&m_pOwner->m_rtRelative); - break; - } - case FWL_MSGHASH_Deactivate: { - m_pOwner->m_pProperties->m_dwStates |= FWL_WGTSTATE_Deactivated; - IFWL_NoteThread* pThread = m_pOwner->GetOwnerThread(); - CFWL_NoteDriver* pDriver = - static_cast<CFWL_NoteDriver*>(pThread->GetNoteDriver()); - CFWL_WidgetImp* pSubFocusImp = m_pOwner->GetSubFocus(); - IFWL_Widget* pSubFocus = - pSubFocusImp ? pSubFocusImp->GetInterface() : NULL; - if (pSubFocus) { - if (pSubFocus == pDriver->GetFocus()) { - pDriver->SetFocus(NULL); - } else if (pSubFocus->GetStates() & FWL_WGTSTATE_Focused) { - CFWL_MsgKillFocus ms; - IFWL_WidgetDelegate* pDelegate = pSubFocus->SetDelegate(NULL); - if (pDelegate) { - pDelegate->OnProcessMessage(&ms); - } - } - } - m_pOwner->Repaint(&m_pOwner->m_rtRelative); - break; - } - case FWL_MSGHASH_Mouse: { - CFWL_MsgMouse* pMsg = static_cast<CFWL_MsgMouse*>(pMessage); - switch (pMsg->m_dwCmd) { - case FWL_MSGMOUSECMD_LButtonDown: { - OnLButtonDown(pMsg); - break; - } - case FWL_MSGMOUSECMD_LButtonUp: { - OnLButtonUp(pMsg); - break; - } - case FWL_MSGMOUSECMD_MouseMove: { - OnMouseMove(pMsg); - break; - } - case FWL_MSGMOUSECMD_MouseHover: { - OnMouseHover(pMsg); - break; - } - case FWL_MSGMOUSECMD_MouseLeave: { - OnMouseLeave(pMsg); - break; - } - case FWL_MSGMOUSECMD_LButtonDblClk: { - OnLButtonDblClk(pMsg); - break; - } - } - break; - } - case FWL_MSGHASH_Size: { - CFWL_WidgetMgr* pWidgetMgr = - static_cast<CFWL_WidgetMgr*>(FWL_GetWidgetMgr()); - if (!pWidgetMgr) - return 0; - pWidgetMgr->AddRedrawCounts(m_pOwner->m_pInterface); - if (!m_pOwner->m_bSetMaximize) { - break; - } - m_pOwner->m_bSetMaximize = FALSE; - CFWL_MsgSize* pMsg = static_cast<CFWL_MsgSize*>(pMessage); - CFX_RectF rt; - pWidgetMgr->GetWidgetRect_Native(m_pOwner->m_pInterface, rt); - m_pOwner->m_pProperties->m_rtWidget.left = rt.left; - m_pOwner->m_pProperties->m_rtWidget.top = rt.top; - m_pOwner->m_pProperties->m_rtWidget.width = (FX_FLOAT)pMsg->m_iWidth; - m_pOwner->m_pProperties->m_rtWidget.height = (FX_FLOAT)pMsg->m_iHeight; - m_pOwner->Update(); - break; - } - case FWL_MSGHASH_WindowMove: { - OnWindowMove(static_cast<CFWL_MsgWindowMove*>(pMessage)); - break; - } - case FWL_MSGHASH_Close: { - OnClose(static_cast<CFWL_MsgClose*>(pMessage)); - break; - } - default: { iRet = 0; } - } - return iRet; -#endif -} -FWL_ERR CFWL_FormImpDelegate::OnProcessEvent(CFWL_Event* pEvent) { - if (!pEvent) - return FWL_ERR_Indefinite; - if (pEvent->GetClassID() == FWL_EVTHASH_Close && - pEvent->m_pSrcTarget == m_pOwner->m_pInterface) { - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_FormImpDelegate::OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - return m_pOwner->DrawWidget(pGraphics, pMatrix); -} -void CFWL_FormImpDelegate::OnLButtonDown(CFWL_MsgMouse* pMsg) { - m_pOwner->SetGrab(TRUE); - m_pOwner->m_bLButtonDown = TRUE; - m_pOwner->m_eResizeType = FORM_RESIZETYPE_None; - CFWL_SysBtn* pPressBtn = m_pOwner->GetSysBtnAtPoint(pMsg->m_fx, pMsg->m_fy); - m_pOwner->m_iCaptureBtn = m_pOwner->GetSysBtnIndex(pPressBtn); - CFX_RectF rtCap; - rtCap.Set(m_pOwner->m_rtCaption.left + m_pOwner->m_fCYBorder, - m_pOwner->m_rtCaption.top + m_pOwner->m_fCXBorder, - m_pOwner->m_rtCaption.width - FWL_SYSBTNSIZE * m_pOwner->m_iSysBox - - 2 * m_pOwner->m_fCYBorder, - m_pOwner->m_rtCaption.height - m_pOwner->m_fCXBorder); - if (pPressBtn) { - pPressBtn->SetPressed(); - m_pOwner->Repaint(&pPressBtn->m_rtBtn); - } else if (rtCap.Contains(pMsg->m_fx, pMsg->m_fy)) { - m_pOwner->m_eResizeType = FORM_RESIZETYPE_Cap; - } else if ((m_pOwner->m_pProperties->m_dwStyles & FWL_WGTSTYLE_Border) && - (m_pOwner->m_pProperties->m_dwStyleExes & - FWL_STYLEEXT_FRM_Resize) && - !m_pOwner->m_bMaximized) { - m_pOwner->SetCursor(pMsg->m_fx, pMsg->m_fy); - } - m_pOwner->m_InfoStart.m_ptStart = CFX_PointF(pMsg->m_fx, pMsg->m_fy); - m_pOwner->m_InfoStart.m_szStart = - CFX_SizeF(m_pOwner->m_pProperties->m_rtWidget.width, - m_pOwner->m_pProperties->m_rtWidget.height); -} -void CFWL_FormImpDelegate::OnLButtonUp(CFWL_MsgMouse* pMsg) { - m_pOwner->SetGrab(FALSE); - m_pOwner->m_bLButtonDown = FALSE; - CFWL_SysBtn* pPointBtn = m_pOwner->GetSysBtnAtPoint(pMsg->m_fx, pMsg->m_fy); - CFWL_SysBtn* pPressedBtn = - m_pOwner->GetSysBtnByIndex(m_pOwner->m_iCaptureBtn); - if (!pPressedBtn || pPointBtn != pPressedBtn) { - return; - } - if (pPressedBtn == m_pOwner->GetSysBtnByState(FWL_SYSBUTTONSTATE_Pressed)) { - pPressedBtn->SetNormal(); - } - if (pPressedBtn == m_pOwner->m_pMaxBox) { - if (m_pOwner->m_bMaximized) { - m_pOwner->SetWidgetRect(m_pOwner->m_rtRestore); - m_pOwner->Update(); - m_pOwner->Repaint(); - } else { - m_pOwner->SetWorkAreaRect(); - m_pOwner->Update(); - } - m_pOwner->m_bMaximized = !m_pOwner->m_bMaximized; - } else if (pPressedBtn == m_pOwner->m_pMinBox) { - CFWL_WidgetMgr* pWidgetMgr = - static_cast<CFWL_WidgetMgr*>(FWL_GetWidgetMgr()); - if (!pWidgetMgr) - return; - pWidgetMgr->SetMinimize_Native(m_pOwner->m_pInterface); - } else { - CFWL_EvtClose eClose; - eClose.m_pSrcTarget = m_pOwner->m_pInterface; - m_pOwner->DispatchEvent(&eClose); - } -} -void CFWL_FormImpDelegate::OnMouseMove(CFWL_MsgMouse* pMsg) { - if (m_pOwner->m_bLButtonDown) { - return; - } - if ((m_pOwner->m_pProperties->m_dwStyles & FWL_WGTSTYLE_Border) && - (m_pOwner->m_pProperties->m_dwStyleExes & FWL_STYLEEXT_FRM_Resize) && - !m_pOwner->m_bMaximized) { - m_pOwner->SetCursor(pMsg->m_fx, pMsg->m_fy); - } - CFX_RectF rtInvalidate; - rtInvalidate.Reset(); - CFWL_SysBtn* pPointBtn = m_pOwner->GetSysBtnAtPoint(pMsg->m_fx, pMsg->m_fy); - CFWL_SysBtn* pOldHover = m_pOwner->GetSysBtnByState(FWL_SYSBUTTONSTATE_Hover); -#if (_FX_OS_ == _FX_MACOSX_) - { - if (pOldHover && pPointBtn != pOldHover) { - pOldHover->SetNormal(); - } - if (pPointBtn && pPointBtn != pOldHover) { - pPointBtn->SetHover(); - } - if (m_pOwner->m_pCloseBox) { - rtInvalidate = m_pOwner->m_pCloseBox->m_rtBtn; - } - if (m_pOwner->m_pMaxBox) { - if (rtInvalidate.IsEmpty()) { - rtInvalidate = m_pOwner->m_pMaxBox->m_rtBtn; - } else { - rtInvalidate.Union(m_pOwner->m_pMaxBox->m_rtBtn); - } - } - if (m_pOwner->m_pMinBox) { - if (rtInvalidate.IsEmpty()) { - rtInvalidate = m_pOwner->m_pMinBox->m_rtBtn; - } else { - rtInvalidate.Union(m_pOwner->m_pMinBox->m_rtBtn); - } - } - if (!rtInvalidate.IsEmpty() && - rtInvalidate.Contains(pMsg->m_fx, pMsg->m_fy)) { - m_pOwner->m_bMouseIn = TRUE; - } - } -#else - { - if (pOldHover && pPointBtn != pOldHover) { - pOldHover->SetNormal(); - rtInvalidate = pOldHover->m_rtBtn; - } - if (pPointBtn && pPointBtn != pOldHover) { - pPointBtn->SetHover(); - if (rtInvalidate.IsEmpty()) { - rtInvalidate = pPointBtn->m_rtBtn; - } else { - rtInvalidate.Union(pPointBtn->m_rtBtn); - } - } - } -#endif - if (!rtInvalidate.IsEmpty()) { - m_pOwner->Repaint(&rtInvalidate); - } -} -void CFWL_FormImpDelegate::OnMouseHover(CFWL_MsgMouse* pMsg) { - m_pOwner->SetCursor(pMsg->m_fx, pMsg->m_fy); -} -void CFWL_FormImpDelegate::OnMouseLeave(CFWL_MsgMouse* pMsg) { - CFWL_SysBtn* pHover = m_pOwner->GetSysBtnByState(FWL_SYSBUTTONSTATE_Hover); - if (pHover) { - pHover->SetNormal(); - m_pOwner->Repaint(&pHover->m_rtBtn); - } - if (pMsg->m_dwCmd == FWL_MSGMOUSECMD_MouseLeave && - !m_pOwner->m_bLButtonDown) { - m_pOwner->SetCursor(pMsg->m_fx, pMsg->m_fy); - } -} -void CFWL_FormImpDelegate::OnLButtonDblClk(CFWL_MsgMouse* pMsg) { - if ((m_pOwner->m_pProperties->m_dwStyleExes & FWL_STYLEEXT_FRM_Resize) && - m_pOwner->HitTest(pMsg->m_fx, pMsg->m_fy) == FWL_WGTHITTEST_Titlebar) { - if (m_pOwner->m_bMaximized) { - m_pOwner->SetWidgetRect(m_pOwner->m_rtRestore); - } else { - m_pOwner->SetWorkAreaRect(); - } - m_pOwner->Update(); - m_pOwner->m_bMaximized = !m_pOwner->m_bMaximized; - } -} -void CFWL_FormImpDelegate::OnWindowMove(CFWL_MsgWindowMove* pMsg) { - m_pOwner->m_pProperties->m_rtWidget.left = pMsg->m_fx; - m_pOwner->m_pProperties->m_rtWidget.top = pMsg->m_fy; -} -void CFWL_FormImpDelegate::OnClose(CFWL_MsgClose* pMsg) { - CFWL_EvtClose eClose; - eClose.m_pSrcTarget = m_pOwner->m_pInterface; - m_pOwner->DispatchEvent(&eClose); -} -FWL_ERR FWL_Accelerator_SetForm(IFWL_Form* pFrom, - CFX_MapAccelerators* pMapAccel) { - CFWL_FormImp* pImp = static_cast<CFWL_FormImp*>(pFrom->GetImpl()); - if (!pImp) - return FWL_ERR_Indefinite; - return FWL_ERR_Succeeded; -} |