diff options
author | Dan Sinclair <dsinclair@chromium.org> | 2016-03-14 14:14:16 -0400 |
---|---|---|
committer | Dan Sinclair <dsinclair@chromium.org> | 2016-03-14 14:14:16 -0400 |
commit | 1770c021cf998ff1b33855b1397f6ea8ff9f7cd7 (patch) | |
tree | 285e39abd4b5872d8cd632b9e331b0667fdc3eae /xfa/src/fwl | |
parent | f766ad219f66543654520f6a1955836f519e26d1 (diff) | |
download | pdfium-1770c021cf998ff1b33855b1397f6ea8ff9f7cd7.tar.xz |
Move xfa/src up to xfa/.
This CL moves the xfa/src files up to the xfa/ directory and fixes the includes,
include guards, and build files.
R=tsepez@chromium.org
Review URL: https://codereview.chromium.org/1803723002 .
Diffstat (limited to 'xfa/src/fwl')
79 files changed, 0 insertions, 26374 deletions
diff --git a/xfa/src/fwl/basewidget/fwl_barcodeimp.cpp b/xfa/src/fwl/basewidget/fwl_barcodeimp.cpp deleted file mode 100644 index af604f15a6..0000000000 --- a/xfa/src/fwl/basewidget/fwl_barcodeimp.cpp +++ /dev/null @@ -1,221 +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/basewidget/fwl_barcodeimp.h" - -#include "xfa/include/fwl/core/fwl_theme.h" -#include "xfa/src/fwl/basewidget/fwl_editimp.h" -#include "xfa/src/fwl/core/fwl_noteimp.h" -#include "xfa/src/fwl/core/fwl_targetimp.h" -#include "xfa/src/fwl/core/fwl_widgetimp.h" - -// static -IFWL_Barcode* IFWL_Barcode::Create(const CFWL_WidgetImpProperties& properties) { - IFWL_Barcode* pBarcode = new IFWL_Barcode; - CFWL_BarcodeImp* pBarcodeImpl = new CFWL_BarcodeImp(properties, nullptr); - pBarcode->SetImpl(pBarcodeImpl); - pBarcodeImpl->SetInterface(pBarcode); - return pBarcode; -} -IFWL_Barcode::IFWL_Barcode() {} -void IFWL_Barcode::SetType(BC_TYPE type) { - static_cast<CFWL_BarcodeImp*>(GetImpl())->SetType(type); -} -FX_BOOL IFWL_Barcode::IsProtectedType() { - return static_cast<CFWL_BarcodeImp*>(GetImpl())->IsProtectedType(); -} - -CFWL_BarcodeImp::CFWL_BarcodeImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) - : CFWL_EditImp(properties, pOuter), - m_pBarcodeEngine(NULL), - m_dwStatus(0), - m_type(BC_UNKNOWN) {} -CFWL_BarcodeImp::~CFWL_BarcodeImp() { - ReleaseBarcodeEngine(); -} -FWL_ERR CFWL_BarcodeImp::GetClassName(CFX_WideString& wsClass) const { - wsClass = FWL_CLASS_Barcode; - return FWL_ERR_Succeeded; -} -FX_DWORD CFWL_BarcodeImp::GetClassID() const { - return FWL_CLASSHASH_Barcode; -} -FWL_ERR CFWL_BarcodeImp::Initialize() { - if (!m_pDelegate) { - m_pDelegate = new CFWL_BarcodeImpDelegate(this); - } - if (CFWL_EditImp::Initialize() != FWL_ERR_Succeeded) - return FWL_ERR_Indefinite; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_BarcodeImp::Finalize() { - delete m_pDelegate; - m_pDelegate = nullptr; - ReleaseBarcodeEngine(); - return CFWL_EditImp::Finalize(); -} -FWL_ERR CFWL_BarcodeImp::Update() { - if (IsLocked()) { - return FWL_ERR_Indefinite; - } - FWL_ERR ret = CFWL_EditImp::Update(); - GenerateBarcodeImageCache(); - return ret; -} -FWL_ERR CFWL_BarcodeImp::DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - if (!pGraphics) - return FWL_ERR_Indefinite; - if (!m_pProperties->m_pThemeProvider) - return FWL_ERR_Indefinite; - if ((m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) == 0) { - GenerateBarcodeImageCache(); - if (!m_pBarcodeEngine || (m_dwStatus & XFA_BCS_EncodeSuccess) == 0) { - return FWL_ERR_Succeeded; - } - CFX_Matrix mt; - mt.e = m_rtClient.left; - mt.f = m_rtClient.top; - if (pMatrix) { - mt.Concat(*pMatrix); - } - int32_t errorCode = 0; - if (!m_pBarcodeEngine->RenderDevice(pGraphics->GetRenderDevice(), pMatrix, - errorCode)) { - return FWL_ERR_Indefinite; - } - return FWL_ERR_Succeeded; - } - return CFWL_EditImp::DrawWidget(pGraphics, pMatrix); -} -void CFWL_BarcodeImp::GenerateBarcodeImageCache() { - if ((m_dwStatus & XFA_BCS_NeedUpdate) == 0) - return; - m_dwStatus = 0; - CreateBarcodeEngine(); - IFWL_BarcodeDP* pData = - static_cast<IFWL_BarcodeDP*>(m_pProperties->m_pDataProvider); - if (!pData) - return; - if (!m_pBarcodeEngine) - return; - CFX_WideString wsText; - if (GetText(wsText) != FWL_ERR_Succeeded) - return; - CFWL_ThemePart part; - part.m_pWidget = m_pInterface; - IFWL_ThemeProvider* pTheme = GetAvailableTheme(); - IFX_Font* pFont = - static_cast<IFX_Font*>(pTheme->GetCapacity(&part, FWL_WGTCAPACITY_Font)); - CFX_Font* pCXFont = - pFont ? static_cast<CFX_Font*>(pFont->GetDevFont()) : nullptr; - if (pCXFont) { - m_pBarcodeEngine->SetFont(pCXFont); - } - FX_FLOAT* pFontSize = static_cast<FX_FLOAT*>( - pTheme->GetCapacity(&part, FWL_WGTCAPACITY_FontSize)); - if (pFontSize) { - m_pBarcodeEngine->SetFontSize(*pFontSize); - } - FX_ARGB* pFontColor = static_cast<FX_ARGB*>( - pTheme->GetCapacity(&part, FWL_WGTCAPACITY_TextColor)); - if (pFontColor) { - m_pBarcodeEngine->SetFontColor(*pFontColor); - } - m_pBarcodeEngine->SetHeight(int32_t(m_rtClient.height)); - m_pBarcodeEngine->SetWidth(int32_t(m_rtClient.width)); - FX_DWORD dwAttributeMask = pData->GetBarcodeAttributeMask(); - if (dwAttributeMask & FWL_BCDATTRIBUTE_CHARENCODING) { - m_pBarcodeEngine->SetCharEncoding(pData->GetCharEncoding()); - } - if (dwAttributeMask & FWL_BCDATTRIBUTE_MODULEHEIGHT) { - m_pBarcodeEngine->SetModuleHeight(pData->GetModuleHeight()); - } - if (dwAttributeMask & FWL_BCDATTRIBUTE_MODULEWIDTH) { - m_pBarcodeEngine->SetModuleWidth(pData->GetModuleWidth()); - } - if (dwAttributeMask & FWL_BCDATTRIBUTE_DATALENGTH) { - m_pBarcodeEngine->SetDataLength(pData->GetDataLength()); - } - if (dwAttributeMask & FWL_BCDATTRIBUTE_CALCHECKSUM) { - m_pBarcodeEngine->SetCalChecksum(pData->GetCalChecksum()); - } - if (dwAttributeMask & FWL_BCDATTRIBUTE_PRINTCHECKSUM) { - m_pBarcodeEngine->SetPrintChecksum(pData->GetPrintChecksum()); - } - if (dwAttributeMask & FWL_BCDATTRIBUTE_TEXTLOCATION) { - m_pBarcodeEngine->SetTextLocation(pData->GetTextLocation()); - } - if (dwAttributeMask & FWL_BCDATTRIBUTE_WIDENARROWRATIO) { - m_pBarcodeEngine->SetWideNarrowRatio(pData->GetWideNarrowRatio()); - } - if (dwAttributeMask & FWL_BCDATTRIBUTE_STARTCHAR) { - m_pBarcodeEngine->SetStartChar(pData->GetStartChar()); - } - if (dwAttributeMask & FWL_BCDATTRIBUTE_ENDCHAR) { - m_pBarcodeEngine->SetEndChar(pData->GetEndChar()); - } - if (dwAttributeMask & FWL_BCDATTRIBUTE_VERSION) { - m_pBarcodeEngine->SetVersion(pData->GetVersion()); - } - if (dwAttributeMask & FWL_BCDATTRIBUTE_ECLEVEL) { - m_pBarcodeEngine->SetErrorCorrectionLevel(pData->GetErrorCorrectionLevel()); - } - if (dwAttributeMask & FWL_BCDATTRIBUTE_TRUNCATED) { - m_pBarcodeEngine->SetTruncated(pData->GetTruncated()); - } - int32_t errorCode = 0; - m_dwStatus = m_pBarcodeEngine->Encode(wsText, TRUE, errorCode) - ? XFA_BCS_EncodeSuccess - : 0; -} -void CFWL_BarcodeImp::CreateBarcodeEngine() { - if ((m_pBarcodeEngine == NULL) && (m_type != BC_UNKNOWN)) { - m_pBarcodeEngine = FX_Barcode_Create(m_type); - } -} -void CFWL_BarcodeImp::ReleaseBarcodeEngine() { - if (m_pBarcodeEngine) { - m_pBarcodeEngine->Release(); - m_pBarcodeEngine = NULL; - } -} -void CFWL_BarcodeImp::SetType(BC_TYPE type) { - if (m_type == type) { - return; - } - ReleaseBarcodeEngine(); - m_type = type; - m_dwStatus = XFA_BCS_NeedUpdate; -} -FWL_ERR CFWL_BarcodeImp::SetText(const CFX_WideString& wsText) { - ReleaseBarcodeEngine(); - m_dwStatus = XFA_BCS_NeedUpdate; - return CFWL_EditImp::SetText(wsText); -} -FX_BOOL CFWL_BarcodeImp::IsProtectedType() { - if (!m_pBarcodeEngine) { - return TRUE; - } - BC_TYPE tEngineType = m_pBarcodeEngine->GetType(); - if (tEngineType == BC_QR_CODE || tEngineType == BC_PDF417 || - tEngineType == BC_DATAMATRIX) { - return TRUE; - } - return FALSE; -} -CFWL_BarcodeImpDelegate::CFWL_BarcodeImpDelegate(CFWL_BarcodeImp* pOwner) - : CFWL_EditImpDelegate(pOwner) {} -FWL_ERR CFWL_BarcodeImpDelegate::OnProcessEvent(CFWL_Event* pEvent) { - FX_DWORD dwFlag = pEvent->GetClassID(); - if (dwFlag == FWL_EVTHASH_EDT_TextChanged) { - CFWL_BarcodeImp* pOwner = static_cast<CFWL_BarcodeImp*>(m_pOwner); - pOwner->ReleaseBarcodeEngine(); - pOwner->m_dwStatus = XFA_BCS_NeedUpdate; - } - return CFWL_EditImpDelegate::OnProcessEvent(pEvent); -} diff --git a/xfa/src/fwl/basewidget/fwl_barcodeimp.h b/xfa/src/fwl/basewidget/fwl_barcodeimp.h deleted file mode 100644 index eedcb16024..0000000000 --- a/xfa/src/fwl/basewidget/fwl_barcodeimp.h +++ /dev/null @@ -1,54 +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 - -#ifndef XFA_SRC_FWL_BASEWIDGET_FWL_BARCODEIMP_H_ -#define XFA_SRC_FWL_BASEWIDGET_FWL_BARCODEIMP_H_ - -#include "xfa/include/fwl/basewidget/fwl_barcode.h" -#include "xfa/include/fwl/basewidget/fwl_scrollbar.h" -#include "xfa/include/fwl/basewidget/fxmath_barcode.h" -#include "xfa/src/fwl/basewidget/fwl_editimp.h" - -class CFWL_WidgetImpProperties; -class CFWL_BarcodeImpDelegate; -class IFWL_Widget; - -#define XFA_BCS_NeedUpdate 0x0001 -#define XFA_BCS_EncodeSuccess 0x0002 - -class CFWL_BarcodeImp : public CFWL_EditImp { - public: - CFWL_BarcodeImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter); - virtual ~CFWL_BarcodeImp(); - virtual FWL_ERR GetClassName(CFX_WideString& wsClass) const; - virtual FX_DWORD GetClassID() const; - virtual FWL_ERR Initialize(); - virtual FWL_ERR Finalize(); - virtual FWL_ERR Update(); - virtual FWL_ERR DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL); - virtual FWL_ERR SetText(const CFX_WideString& wsText); - virtual void SetType(BC_TYPE type); - FX_BOOL IsProtectedType(); - - protected: - void GenerateBarcodeImageCache(); - void CreateBarcodeEngine(); - void ReleaseBarcodeEngine(); - IFX_Barcode* m_pBarcodeEngine; - FX_DWORD m_dwStatus; - BC_TYPE m_type; - friend class CFWL_BarcodeImpDelegate; -}; - -class CFWL_BarcodeImpDelegate : public CFWL_EditImpDelegate { - public: - CFWL_BarcodeImpDelegate(CFWL_BarcodeImp* pOwner); - FWL_ERR OnProcessEvent(CFWL_Event* pEvent) override; -}; - -#endif // XFA_SRC_FWL_BASEWIDGET_FWL_BARCODEIMP_H_ diff --git a/xfa/src/fwl/basewidget/fwl_caretimp.cpp b/xfa/src/fwl/basewidget/fwl_caretimp.cpp deleted file mode 100644 index 752f889dcf..0000000000 --- a/xfa/src/fwl/basewidget/fwl_caretimp.cpp +++ /dev/null @@ -1,157 +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/basewidget/fwl_caretimp.h" - -#include "xfa/include/fwl/basewidget/fwl_caret.h" -#include "xfa/include/fwl/core/fwl_theme.h" -#include "xfa/src/fwl/core/fwl_noteimp.h" -#include "xfa/src/fwl/core/fwl_targetimp.h" -#include "xfa/src/fwl/core/fwl_widgetimp.h" - -// static -IFWL_Caret* IFWL_Caret::Create(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) { - IFWL_Caret* pCaret = new IFWL_Caret; - CFWL_CaretImp* pCaretImpl = new CFWL_CaretImp(properties, pOuter); - pCaret->SetImpl(pCaretImpl); - pCaretImpl->SetInterface(pCaret); - return pCaret; -} -IFWL_Caret::IFWL_Caret() {} -FWL_ERR IFWL_Caret::ShowCaret(FX_BOOL bFlag) { - return static_cast<CFWL_CaretImp*>(GetImpl())->ShowCaret(bFlag); -} -FWL_ERR IFWL_Caret::GetFrequency(FX_DWORD& elapse) { - return static_cast<CFWL_CaretImp*>(GetImpl())->GetFrequency(elapse); -} -FWL_ERR IFWL_Caret::SetFrequency(FX_DWORD elapse) { - return static_cast<CFWL_CaretImp*>(GetImpl())->SetFrequency(elapse); -} -FWL_ERR IFWL_Caret::SetColor(CFX_Color crFill) { - return static_cast<CFWL_CaretImp*>(GetImpl())->SetColor(crFill); -} - -CFWL_CaretImp::CFWL_CaretImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) - : CFWL_WidgetImp(properties, pOuter), - m_hTimer(nullptr), - m_dwElapse(400), - m_bSetColor(FALSE) { - m_pTimer = new CFWL_CaretTimer(this); - SetStates(FWL_STATE_CAT_HightLight); -} -CFWL_CaretImp::~CFWL_CaretImp() { - if (m_pTimer) { - delete m_pTimer; - m_pTimer = NULL; - } -} -FWL_ERR CFWL_CaretImp::GetClassName(CFX_WideString& wsClass) const { - wsClass = FWL_CLASS_Caret; - return FWL_ERR_Succeeded; -} -FX_DWORD CFWL_CaretImp::GetClassID() const { - return FWL_CLASSHASH_Caret; -} -FWL_ERR CFWL_CaretImp::Initialize() { - if (CFWL_WidgetImp::Initialize() != FWL_ERR_Succeeded) - return FWL_ERR_Indefinite; - m_pDelegate = new CFWL_CaretImpDelegate(this); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_CaretImp::Finalize() { - if (m_hTimer) { - FWL_StopTimer(m_hTimer); - m_hTimer = NULL; - } - delete m_pDelegate; - m_pDelegate = nullptr; - return CFWL_WidgetImp::Finalize(); -} -FWL_ERR CFWL_CaretImp::DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - if (!pGraphics) - return FWL_ERR_Indefinite; - if (!m_pProperties->m_pThemeProvider) - m_pProperties->m_pThemeProvider = GetAvailableTheme(); - if (!m_pProperties->m_pThemeProvider) - return FWL_ERR_Indefinite; - DrawCaretBK(pGraphics, m_pProperties->m_pThemeProvider, pMatrix); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_CaretImp::ShowCaret(FX_BOOL bFlag) { - if (m_hTimer) { - FWL_StopTimer(m_hTimer); - m_hTimer = NULL; - } - if (bFlag) { - m_hTimer = FWL_StartTimer(m_pTimer, m_dwElapse); - } - return SetStates(FWL_WGTSTATE_Invisible, !bFlag); -} -FWL_ERR CFWL_CaretImp::GetFrequency(FX_DWORD& elapse) { - elapse = m_dwElapse; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_CaretImp::SetFrequency(FX_DWORD elapse) { - m_dwElapse = elapse; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_CaretImp::SetColor(CFX_Color crFill) { - m_bSetColor = TRUE; - m_crFill = crFill; - return FWL_ERR_Succeeded; -} -FX_BOOL CFWL_CaretImp::DrawCaretBK(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - CFX_RectF rect; - GetWidgetRect(rect); - rect.Set(0, 0, rect.width, rect.height); - CFWL_ThemeBackground param; - param.m_pWidget = m_pInterface; - param.m_pGraphics = pGraphics; - param.m_rtPart = rect; - if (m_bSetColor) { - param.m_pData = &m_crFill; - } - if (!(m_pProperties->m_dwStates & FWL_STATE_CAT_HightLight)) { - return FWL_ERR_Succeeded; - } - param.m_iPart = FWL_PART_CAT_Background; - param.m_dwStates = FWL_PARTSTATE_CAT_HightLight; - if (pMatrix) { - param.m_matrix.Concat(*pMatrix); - } - pTheme->DrawBackground(¶m); - return FWL_ERR_Succeeded; -} - -CFWL_CaretImp::CFWL_CaretTimer::CFWL_CaretTimer(CFWL_CaretImp* pCaret) - : m_pCaret(pCaret) {} - -int32_t CFWL_CaretImp::CFWL_CaretTimer::Run(FWL_HTIMER hTimer) { - if (m_pCaret->GetStates() & FWL_STATE_CAT_HightLight) { - m_pCaret->SetStates(FWL_STATE_CAT_HightLight, FALSE); - } else { - m_pCaret->SetStates(FWL_STATE_CAT_HightLight); - } - CFX_RectF rt; - m_pCaret->GetWidgetRect(rt); - rt.Set(0, 0, rt.width + 1, rt.height); - m_pCaret->Repaint(&rt); - return 1; -} -CFWL_CaretImpDelegate::CFWL_CaretImpDelegate(CFWL_CaretImp* pOwner) - : m_pOwner(pOwner) {} -int32_t CFWL_CaretImpDelegate::OnProcessMessage(CFWL_Message* pMessage) { - return 1; -} -FWL_ERR CFWL_CaretImpDelegate::OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - return m_pOwner->DrawWidget(pGraphics, pMatrix); -} diff --git a/xfa/src/fwl/basewidget/fwl_caretimp.h b/xfa/src/fwl/basewidget/fwl_caretimp.h deleted file mode 100644 index e3dde63ab6..0000000000 --- a/xfa/src/fwl/basewidget/fwl_caretimp.h +++ /dev/null @@ -1,67 +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 - -#ifndef XFA_SRC_FWL_BASEWIDGET_FWL_CARETIMP_H_ -#define XFA_SRC_FWL_BASEWIDGET_FWL_CARETIMP_H_ - -#include "xfa/include/fwl/core/fwl_timer.h" -#include "xfa/src/fwl/core/fwl_widgetimp.h" - -class CFWL_WidgetImpProperties; -class IFWL_Widget; -class CFWL_CaretImpDelegate; - -class CFWL_CaretImp : public CFWL_WidgetImp { - public: - CFWL_CaretImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter); - virtual ~CFWL_CaretImp(); - - virtual FWL_ERR GetClassName(CFX_WideString& wsClass) const; - virtual FX_DWORD GetClassID() const; - - virtual FWL_ERR Initialize(); - virtual FWL_ERR Finalize(); - - virtual FWL_ERR DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL); - - virtual FWL_ERR ShowCaret(FX_BOOL bFlag = TRUE); - virtual FWL_ERR GetFrequency(FX_DWORD& elapse); - virtual FWL_ERR SetFrequency(FX_DWORD elapse); - virtual FWL_ERR SetColor(CFX_Color crFill); - - protected: - FX_BOOL DrawCaretBK(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix); - class CFWL_CaretTimer : public IFWL_Timer { - public: - explicit CFWL_CaretTimer(CFWL_CaretImp* pCaret); - ~CFWL_CaretTimer() override {} - int32_t Run(FWL_HTIMER hTimer) override; - CFWL_CaretImp* const m_pCaret; - }; - CFWL_CaretTimer* m_pTimer; - FWL_HTIMER m_hTimer; - FX_DWORD m_dwElapse; - CFX_Color m_crFill; - FX_BOOL m_bSetColor; - friend class CFWL_CaretImpDelegate; - friend class CFWL_CaretTimer; -}; -class CFWL_CaretImpDelegate : public CFWL_WidgetImpDelegate { - public: - CFWL_CaretImpDelegate(CFWL_CaretImp* pOwner); - int32_t OnProcessMessage(CFWL_Message* pMessage) override; - FWL_ERR OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL) override; - - protected: - CFWL_CaretImp* m_pOwner; -}; - -#endif // XFA_SRC_FWL_BASEWIDGET_FWL_CARETIMP_H_ diff --git a/xfa/src/fwl/basewidget/fwl_checkboximp.cpp b/xfa/src/fwl/basewidget/fwl_checkboximp.cpp deleted file mode 100644 index 16cc8f7080..0000000000 --- a/xfa/src/fwl/basewidget/fwl_checkboximp.cpp +++ /dev/null @@ -1,555 +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/basewidget/fwl_checkboximp.h" - -#include <algorithm> - -#include "xfa/include/fwl/basewidget/fwl_checkbox.h" -#include "xfa/include/fwl/core/fwl_theme.h" -#include "xfa/src/fde/tto/fde_textout.h" -#include "xfa/src/fwl/core/fwl_noteimp.h" -#include "xfa/src/fwl/core/fwl_targetimp.h" -#include "xfa/src/fwl/core/fwl_widgetimp.h" -#include "xfa/src/fwl/core/fwl_widgetmgrimp.h" - -#define FWL_CKB_CaptionMargin 5 - -// static -IFWL_CheckBox* IFWL_CheckBox::Create(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) { - IFWL_CheckBox* pCheckBox = new IFWL_CheckBox; - CFWL_CheckBoxImp* pCheckBoxImpl = new CFWL_CheckBoxImp(properties, pOuter); - pCheckBox->SetImpl(pCheckBoxImpl); - pCheckBoxImpl->SetInterface(pCheckBox); - return pCheckBox; -} -IFWL_CheckBox::IFWL_CheckBox() {} -int32_t IFWL_CheckBox::GetCheckState() { - return static_cast<CFWL_CheckBoxImp*>(GetImpl())->GetCheckState(); -} -FWL_ERR IFWL_CheckBox::SetCheckState(int32_t iCheck) { - return static_cast<CFWL_CheckBoxImp*>(GetImpl())->SetCheckState(iCheck); -} - -CFWL_CheckBoxImp::CFWL_CheckBoxImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) - : CFWL_WidgetImp(properties, pOuter), - m_dwTTOStyles(FDE_TTOSTYLE_SingleLine), - m_iTTOAlign(FDE_TTOALIGNMENT_Center), - m_bBtnDown(FALSE) { - m_rtClient.Reset(); - m_rtBox.Reset(); - m_rtCaption.Reset(); - m_rtFocus.Reset(); -} -CFWL_CheckBoxImp::~CFWL_CheckBoxImp() {} -FWL_ERR CFWL_CheckBoxImp::GetClassName(CFX_WideString& wsClass) const { - wsClass = FWL_CLASS_CheckBox; - return FWL_ERR_Succeeded; -} -FX_DWORD CFWL_CheckBoxImp::GetClassID() const { - return FWL_CLASSHASH_CheckBox; -} -FWL_ERR CFWL_CheckBoxImp::Initialize() { - if (CFWL_WidgetImp::Initialize() != FWL_ERR_Succeeded) - return FWL_ERR_Indefinite; - m_pDelegate = new CFWL_CheckBoxImpDelegate(this); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_CheckBoxImp::Finalize() { - delete m_pDelegate; - m_pDelegate = nullptr; - return CFWL_WidgetImp::Finalize(); -} -FWL_ERR CFWL_CheckBoxImp::GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize) { - if (bAutoSize) { - rect.Set(0, 0, 0, 0); - if (!m_pProperties->m_pThemeProvider) - m_pProperties->m_pThemeProvider = GetAvailableTheme(); - if (!m_pProperties->m_pThemeProvider) - return FWL_ERR_Indefinite; - if (!m_pProperties->m_pDataProvider) - return FWL_ERR_Indefinite; - CFX_WideString wsCaption; - m_pProperties->m_pDataProvider->GetCaption(m_pInterface, wsCaption); - if (wsCaption.GetLength() > 0) { - CFX_SizeF sz = CalcTextSize( - wsCaption, m_pProperties->m_pThemeProvider, - m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CKB_MultiLine); - rect.Set(0, 0, sz.x, sz.y); - } - rect.Inflate(FWL_CKB_CaptionMargin, FWL_CKB_CaptionMargin); - IFWL_CheckBoxDP* pData = - static_cast<IFWL_CheckBoxDP*>(m_pProperties->m_pDataProvider); - FX_FLOAT fCheckBox = pData->GetBoxSize(m_pInterface); - rect.width += fCheckBox; - if (rect.height < fCheckBox) { - rect.height = fCheckBox; - } - CFWL_WidgetImp::GetWidgetRect(rect, TRUE); - } else { - rect = m_pProperties->m_rtWidget; - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_CheckBoxImp::Update() { - if (IsLocked()) { - return FWL_ERR_Indefinite; - } - if (!m_pProperties->m_pThemeProvider) { - m_pProperties->m_pThemeProvider = GetAvailableTheme(); - } - UpdateTextOutStyles(); - Layout(); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_CheckBoxImp::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; - if (HasBorder()) { - DrawBorder(pGraphics, FWL_PART_CKB_Border, m_pProperties->m_pThemeProvider, - pMatrix); - } - if (HasEdge()) { - DrawEdge(pGraphics, FWL_PART_CKB_Edge, pTheme, pMatrix); - } - int32_t dwStates = GetPartStates(); - { - CFWL_ThemeBackground param; - param.m_pWidget = m_pInterface; - param.m_iPart = FWL_PART_CKB_Background; - param.m_dwStates = dwStates; - param.m_pGraphics = pGraphics; - if (pMatrix) { - param.m_matrix.Concat(*pMatrix); - } - param.m_rtPart = m_rtClient; - if (m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) { - param.m_pData = &m_rtFocus; - } - pTheme->DrawBackground(¶m); - param.m_iPart = FWL_PART_CKB_CheckBox; - param.m_rtPart = m_rtBox; - pTheme->DrawBackground(¶m); - } - if (!m_pProperties->m_pDataProvider) - return FWL_ERR_Indefinite; - { - CFX_WideString wsCaption; - m_pProperties->m_pDataProvider->GetCaption(m_pInterface, wsCaption); - int32_t iLen = wsCaption.GetLength(); - if (iLen <= 0) - return FWL_ERR_Indefinite; - CFWL_ThemeText textParam; - textParam.m_pWidget = m_pInterface; - textParam.m_iPart = FWL_PART_CKB_Caption; - textParam.m_dwStates = dwStates; - textParam.m_pGraphics = pGraphics; - if (pMatrix) { - textParam.m_matrix.Concat(*pMatrix); - } - textParam.m_rtPart = m_rtCaption; - textParam.m_wsText = wsCaption; - textParam.m_dwTTOStyles = m_dwTTOStyles; - textParam.m_iTTOAlign = m_iTTOAlign; - pTheme->DrawText(&textParam); - } - return FWL_ERR_Succeeded; -} -int32_t CFWL_CheckBoxImp::GetCheckState() { - if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CKB_3State) && - ((m_pProperties->m_dwStates & FWL_STATE_CKB_CheckMask) == - FWL_STATE_CKB_Neutral)) { - return 2; - } - if ((m_pProperties->m_dwStates & FWL_STATE_CKB_CheckMask) == - FWL_STATE_CKB_Checked) { - return 1; - } - return 0; -} -FWL_ERR CFWL_CheckBoxImp::SetCheckState(int32_t iCheck) { - m_pProperties->m_dwStates &= ~FWL_STATE_CKB_CheckMask; - switch (iCheck) { - case 0: { - break; - } - case 1: { - m_pProperties->m_dwStates |= FWL_STATE_CKB_Checked; - break; - } - case 2: { - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CKB_3State) { - m_pProperties->m_dwStates |= FWL_STATE_CKB_Neutral; - } - break; - } - default: {} - } - Repaint(&m_rtClient); - return FWL_ERR_Succeeded; -} -void CFWL_CheckBoxImp::Layout() { - int32_t width = int32_t(m_pProperties->m_rtWidget.width + 0.5f); - int32_t height = int32_t(m_pProperties->m_rtWidget.height + 0.5f); - m_pProperties->m_rtWidget.width = (FX_FLOAT)width; - m_pProperties->m_rtWidget.height = (FX_FLOAT)height; - GetClientRect(m_rtClient); - FX_FLOAT fBoxTop = m_rtClient.top; - FX_FLOAT fBoxLeft = m_rtClient.left; - FX_FLOAT fTextLeft = 0.0, fTextRight = 0.0; - FX_FLOAT fClientRight = m_rtClient.right(); - FX_FLOAT fClientBottom = m_rtClient.bottom(); - if (!m_pProperties->m_pDataProvider) - return; - IFWL_CheckBoxDP* pData = - static_cast<IFWL_CheckBoxDP*>(m_pProperties->m_pDataProvider); - FX_FLOAT fCheckBox = pData->GetBoxSize(m_pInterface); - switch (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CKB_VLayoutMask) { - case FWL_STYLEEXT_CKB_Top: { - fBoxTop = m_rtClient.top; - break; - } - case FWL_STYLEEXT_CKB_Bottom: { - fBoxTop = fClientBottom - fCheckBox; - break; - } - case FWL_STYLEEXT_CKB_VCenter: - default: { - fBoxTop = m_rtClient.top + (m_rtClient.height - fCheckBox) / 2; - fBoxTop = FXSYS_floor(fBoxTop); - } - } - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CKB_LeftText) { - fBoxLeft = fClientRight - fCheckBox; - fTextLeft = m_rtClient.left; - fTextRight = fBoxLeft; - } else { - fTextLeft = fBoxLeft + fCheckBox; - fTextRight = fClientRight; - } - m_rtBox.Set(fBoxLeft, fBoxTop, fCheckBox, fCheckBox); - m_rtCaption.Set(fTextLeft, m_rtClient.top, fTextRight - fTextLeft, - m_rtClient.height); - m_rtCaption.Inflate(-FWL_CKB_CaptionMargin, -FWL_CKB_CaptionMargin); - CFX_RectF rtFocus; - rtFocus.Set(m_rtCaption.left, m_rtCaption.top, m_rtCaption.width, - m_rtCaption.height); - CFX_WideString wsCaption; - m_pProperties->m_pDataProvider->GetCaption(m_pInterface, wsCaption); - if (wsCaption.IsEmpty()) { - m_rtFocus.Set(0, 0, 0, 0); - } else { - CalcTextRect(wsCaption, m_pProperties->m_pThemeProvider, m_dwTTOStyles, - m_iTTOAlign, rtFocus); - if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CKB_MultiLine) == 0) { - FX_FLOAT fWidth = std::max(m_rtCaption.width, rtFocus.width); - FX_FLOAT fHeight = std::min(m_rtCaption.height, rtFocus.height); - FX_FLOAT fLeft = m_rtCaption.left; - FX_FLOAT fTop = m_rtCaption.top; - if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CKB_HLayoutMask) == - FWL_STYLEEXT_CKB_Center) { - fLeft = m_rtCaption.left + (m_rtCaption.width - fWidth) / 2; - } else if ((m_pProperties->m_dwStyleExes & - FWL_STYLEEXT_CKB_HLayoutMask) == FWL_STYLEEXT_CKB_Right) { - fLeft = m_rtCaption.right() - fWidth; - } - if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CKB_VLayoutMask) == - FWL_STYLEEXT_CKB_VCenter) { - fTop = m_rtCaption.top + (m_rtCaption.height - fHeight) / 2; - } else if ((m_pProperties->m_dwStyleExes & - FWL_STYLEEXT_CKB_VLayoutMask) == FWL_STYLEEXT_CKB_Bottom) { - fTop = m_rtCaption.bottom() - fHeight; - } - m_rtFocus.Set(fLeft, fTop, fWidth, fHeight); - } else { - m_rtFocus.Set(rtFocus.left, rtFocus.top, rtFocus.width, rtFocus.height); - } - m_rtFocus.Inflate(1, 1); - } -} -FX_DWORD CFWL_CheckBoxImp::GetPartStates() { - int32_t dwStates = FWL_PARTSTATE_CKB_UnChecked; - if ((m_pProperties->m_dwStates & FWL_STATE_CKB_CheckMask) == - FWL_STATE_CKB_Neutral) { - dwStates = FWL_PARTSTATE_CKB_Neutral; - } else if ((m_pProperties->m_dwStates & FWL_STATE_CKB_CheckMask) == - FWL_STATE_CKB_Checked) { - dwStates = FWL_PARTSTATE_CKB_Checked; - } - if (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled) { - dwStates |= FWL_PARTSTATE_CKB_Disabled; - } else if (m_pProperties->m_dwStates & FWL_STATE_CKB_Hovered) { - dwStates |= FWL_PARTSTATE_CKB_Hovered; - } else if (m_pProperties->m_dwStates & FWL_STATE_CKB_Pressed) { - dwStates |= FWL_PARTSTATE_CKB_Pressed; - } else { - dwStates |= FWL_PARTSTATE_CKB_Normal; - } - if (m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) { - dwStates |= FWL_PARTSTATE_CKB_Focused; - } - return dwStates; -} -void CFWL_CheckBoxImp::UpdateTextOutStyles() { - m_iTTOAlign = FDE_TTOALIGNMENT_Center; - switch (m_pProperties->m_dwStyleExes & - (FWL_STYLEEXT_CKB_HLayoutMask | FWL_STYLEEXT_CKB_VLayoutMask)) { - case FWL_STYLEEXT_CKB_Left | FWL_STYLEEXT_CKB_Top: { - m_iTTOAlign = FDE_TTOALIGNMENT_TopLeft; - break; - } - case FWL_STYLEEXT_CKB_Center | FWL_STYLEEXT_CKB_Top: { - m_iTTOAlign = FDE_TTOALIGNMENT_TopCenter; - break; - } - case FWL_STYLEEXT_CKB_Right | FWL_STYLEEXT_CKB_Top: { - m_iTTOAlign = FDE_TTOALIGNMENT_TopRight; - break; - } - case FWL_STYLEEXT_CKB_Left | FWL_STYLEEXT_CKB_VCenter: { - m_iTTOAlign = FDE_TTOALIGNMENT_CenterLeft; - break; - } - case FWL_STYLEEXT_CKB_Center | FWL_STYLEEXT_CKB_VCenter: { - m_iTTOAlign = FDE_TTOALIGNMENT_Center; - break; - } - case FWL_STYLEEXT_CKB_Right | FWL_STYLEEXT_CKB_VCenter: { - m_iTTOAlign = FDE_TTOALIGNMENT_CenterRight; - break; - } - case FWL_STYLEEXT_CKB_Left | FWL_STYLEEXT_CKB_Bottom: { - m_iTTOAlign = FDE_TTOALIGNMENT_BottomLeft; - break; - } - case FWL_STYLEEXT_CKB_Center | FWL_STYLEEXT_CKB_Bottom: { - m_iTTOAlign = FDE_TTOALIGNMENT_BottomCenter; - break; - } - case FWL_STYLEEXT_CKB_Right | FWL_STYLEEXT_CKB_Bottom: { - m_iTTOAlign = FDE_TTOALIGNMENT_BottomRight; - break; - } - default: {} - } - m_dwTTOStyles = 0; - if (m_pProperties->m_dwStyleExes & FWL_WGTSTYLE_RTLReading) { - m_dwTTOStyles |= FDE_TTOSTYLE_RTL; - } - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CKB_MultiLine) { - m_dwTTOStyles |= FDE_TTOSTYLE_LineWrap; - } else { - m_dwTTOStyles |= FDE_TTOSTYLE_SingleLine; - } -} -void CFWL_CheckBoxImp::NextStates() { - FX_DWORD dwFirststate = m_pProperties->m_dwStates; - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CKB_RadioButton) { - if ((m_pProperties->m_dwStates & FWL_STATE_CKB_CheckMask) == - FWL_STATE_CKB_Unchecked) { - CFWL_WidgetMgr* pWidgetMgr = - static_cast<CFWL_WidgetMgr*>(FWL_GetWidgetMgr()); - if (!pWidgetMgr->IsFormDisabled()) { - CFX_PtrArray radioarr; - pWidgetMgr->GetSameGroupRadioButton(m_pInterface, radioarr); - IFWL_CheckBox* pCheckBox = NULL; - int32_t iCount = radioarr.GetSize(); - for (int32_t i = 0; i < iCount; i++) { - pCheckBox = static_cast<IFWL_CheckBox*>(radioarr[i]); - if (pCheckBox != m_pInterface && - pCheckBox->GetStates() & FWL_STATE_CKB_Checked) { - pCheckBox->SetCheckState(0); - CFX_RectF rt; - pCheckBox->GetWidgetRect(rt); - rt.left = rt.top = 0; - m_pWidgetMgr->RepaintWidget(pCheckBox, &rt); - break; - } - } - } - m_pProperties->m_dwStates |= FWL_STATE_CKB_Checked; - } - } else { - if ((m_pProperties->m_dwStates & FWL_STATE_CKB_CheckMask) == - FWL_STATE_CKB_Neutral) { - m_pProperties->m_dwStates &= ~FWL_STATE_CKB_CheckMask; - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CKB_3State) { - m_pProperties->m_dwStates |= FWL_STATE_CKB_Checked; - } - } else if ((m_pProperties->m_dwStates & FWL_STATE_CKB_CheckMask) == - FWL_STATE_CKB_Checked) { - m_pProperties->m_dwStates &= ~FWL_STATE_CKB_CheckMask; - } else { - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CKB_3State) { - m_pProperties->m_dwStates |= FWL_STATE_CKB_Neutral; - } else { - m_pProperties->m_dwStates |= FWL_STATE_CKB_Checked; - } - } - } - Repaint(&m_rtClient); - FX_DWORD dwLaststate = m_pProperties->m_dwStates; - if (dwFirststate != dwLaststate) { - CFWL_EvtCkbCheckStateChanged wmCheckBoxState; - wmCheckBoxState.m_pSrcTarget = m_pInterface; - DispatchEvent(&wmCheckBoxState); - } -} -CFWL_CheckBoxImpDelegate::CFWL_CheckBoxImpDelegate(CFWL_CheckBoxImp* pOwner) - : m_pOwner(pOwner) {} -int32_t CFWL_CheckBoxImpDelegate::OnProcessMessage(CFWL_Message* pMessage) { - if (!pMessage) - return 0; - FX_DWORD dwMsgCode = pMessage->GetClassID(); - int32_t iRet = 1; - switch (dwMsgCode) { - case FWL_MSGHASH_Activate: { - OnActivate(pMessage); - break; - } - case FWL_MSGHASH_SetFocus: - case FWL_MSGHASH_KillFocus: { - OnFocusChanged(pMessage, dwMsgCode == FWL_MSGHASH_SetFocus); - break; - } - case FWL_MSGHASH_Mouse: { - CFWL_MsgMouse* pMsg = static_cast<CFWL_MsgMouse*>(pMessage); - FX_DWORD dwCmd = pMsg->m_dwCmd; - switch (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_MouseLeave: { - OnMouseLeave(pMsg); - break; - } - default: {} - } - break; - } - case FWL_MSGHASH_Key: { - CFWL_MsgKey* pKey = static_cast<CFWL_MsgKey*>(pMessage); - if (pKey->m_dwCmd == FWL_MSGKEYCMD_KeyDown) { - OnKeyDown(pKey); - } - break; - } - default: { iRet = 0; } - } - CFWL_WidgetImpDelegate::OnProcessMessage(pMessage); - return iRet; -} -FWL_ERR CFWL_CheckBoxImpDelegate::OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - return m_pOwner->DrawWidget(pGraphics, pMatrix); -} -void CFWL_CheckBoxImpDelegate::OnActivate(CFWL_Message* pMsg) { - m_pOwner->m_pProperties->m_dwStates &= ~FWL_WGTSTATE_Deactivated; - m_pOwner->Repaint(&(m_pOwner->m_rtClient)); -} -void CFWL_CheckBoxImpDelegate::OnFocusChanged(CFWL_Message* pMsg, - FX_BOOL bSet) { - if (bSet) { - m_pOwner->m_pProperties->m_dwStates |= FWL_WGTSTATE_Focused; - } else { - m_pOwner->m_pProperties->m_dwStates &= ~FWL_WGTSTATE_Focused; - } - m_pOwner->Repaint(&(m_pOwner->m_rtClient)); -} -void CFWL_CheckBoxImpDelegate::OnLButtonDown(CFWL_MsgMouse* pMsg) { - if (m_pOwner->m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled) { - return; - } - if ((m_pOwner->m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) == 0) { - m_pOwner->SetFocus(TRUE); - } - m_pOwner->m_bBtnDown = TRUE; - m_pOwner->m_pProperties->m_dwStates &= ~FWL_STATE_CKB_Hovered; - m_pOwner->m_pProperties->m_dwStates |= FWL_STATE_CKB_Pressed; - m_pOwner->Repaint(&(m_pOwner->m_rtClient)); -} -void CFWL_CheckBoxImpDelegate::OnLButtonUp(CFWL_MsgMouse* pMsg) { - if (!m_pOwner->m_bBtnDown) { - return; - } - m_pOwner->m_bBtnDown = FALSE; - if (!m_pOwner->m_rtClient.Contains(pMsg->m_fx, pMsg->m_fy)) { - return; - } - m_pOwner->m_pProperties->m_dwStates |= FWL_STATE_CKB_Hovered; - m_pOwner->m_pProperties->m_dwStates &= ~FWL_STATE_CKB_Pressed; - m_pOwner->NextStates(); -} -void CFWL_CheckBoxImpDelegate::OnMouseMove(CFWL_MsgMouse* pMsg) { - if (m_pOwner->m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled) { - return; - } - FX_BOOL bRepaint = FALSE; - if (m_pOwner->m_bBtnDown) { - if (m_pOwner->m_rtClient.Contains(pMsg->m_fx, pMsg->m_fy)) { - if ((m_pOwner->m_pProperties->m_dwStates & FWL_STATE_CKB_Pressed) == 0) { - bRepaint = TRUE; - m_pOwner->m_pProperties->m_dwStates |= FWL_STATE_CKB_Pressed; - } - if ((m_pOwner->m_pProperties->m_dwStates & FWL_STATE_CKB_Hovered)) { - bRepaint = TRUE; - m_pOwner->m_pProperties->m_dwStates &= ~FWL_STATE_CKB_Hovered; - } - } else { - if (m_pOwner->m_pProperties->m_dwStates & FWL_STATE_CKB_Pressed) { - bRepaint = TRUE; - m_pOwner->m_pProperties->m_dwStates &= ~FWL_STATE_CKB_Pressed; - } - if ((m_pOwner->m_pProperties->m_dwStates & FWL_STATE_CKB_Hovered) == 0) { - bRepaint = TRUE; - m_pOwner->m_pProperties->m_dwStates |= FWL_STATE_CKB_Hovered; - } - } - } else { - if (m_pOwner->m_rtClient.Contains(pMsg->m_fx, pMsg->m_fy)) { - if ((m_pOwner->m_pProperties->m_dwStates & FWL_STATE_CKB_Hovered) == 0) { - bRepaint = TRUE; - m_pOwner->m_pProperties->m_dwStates |= FWL_STATE_CKB_Hovered; - } - } - } - if (bRepaint) { - m_pOwner->Repaint(&(m_pOwner->m_rtBox)); - } -} -void CFWL_CheckBoxImpDelegate::OnMouseLeave(CFWL_MsgMouse* pMsg) { - if (m_pOwner->m_bBtnDown) { - m_pOwner->m_pProperties->m_dwStates |= FWL_STATE_CKB_Hovered; - } else { - m_pOwner->m_pProperties->m_dwStates &= ~FWL_STATE_CKB_Hovered; - } - m_pOwner->Repaint(&(m_pOwner->m_rtBox)); -} -void CFWL_CheckBoxImpDelegate::OnKeyDown(CFWL_MsgKey* pMsg) { - if (pMsg->m_dwKeyCode == FWL_VKEY_Tab) { - m_pOwner->DispatchKeyEvent(pMsg); - return; - } - if (pMsg->m_dwKeyCode == FWL_VKEY_Return || - pMsg->m_dwKeyCode == FWL_VKEY_Space) { - m_pOwner->NextStates(); - } -} diff --git a/xfa/src/fwl/basewidget/fwl_checkboximp.h b/xfa/src/fwl/basewidget/fwl_checkboximp.h deleted file mode 100644 index 98702aaa59..0000000000 --- a/xfa/src/fwl/basewidget/fwl_checkboximp.h +++ /dev/null @@ -1,64 +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 - -#ifndef XFA_SRC_FWL_BASEWIDGET_FWL_CHECKBOXIMP_H_ -#define XFA_SRC_FWL_BASEWIDGET_FWL_CHECKBOXIMP_H_ - -#include "xfa/src/fwl/core/fwl_widgetimp.h" - -class CFWL_WidgetImpProperties; -class IFWL_Widget; -class CFWL_CheckBoxImpDelegate; - -class CFWL_CheckBoxImp : public CFWL_WidgetImp { - public: - CFWL_CheckBoxImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter); - ~CFWL_CheckBoxImp(); - virtual FWL_ERR GetClassName(CFX_WideString& wsClass) const; - virtual FX_DWORD GetClassID() const; - virtual FWL_ERR Initialize(); - virtual FWL_ERR Finalize(); - virtual FWL_ERR GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize = FALSE); - virtual FWL_ERR Update(); - virtual FWL_ERR DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL); - virtual int32_t GetCheckState(); - virtual FWL_ERR SetCheckState(int32_t iCheck); - - protected: - void Layout(); - FX_DWORD GetPartStates(); - void UpdateTextOutStyles(); - void NextStates(); - CFX_RectF m_rtClient; - CFX_RectF m_rtBox; - CFX_RectF m_rtCaption; - CFX_RectF m_rtFocus; - FX_DWORD m_dwTTOStyles; - int32_t m_iTTOAlign; - FX_BOOL m_bBtnDown; - friend class CFWL_CheckBoxImpDelegate; -}; -class CFWL_CheckBoxImpDelegate : public CFWL_WidgetImpDelegate { - public: - CFWL_CheckBoxImpDelegate(CFWL_CheckBoxImp* pOwner); - int32_t OnProcessMessage(CFWL_Message* pMessage) override; - FWL_ERR OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL) override; - - protected: - void OnActivate(CFWL_Message* pMsg); - void OnFocusChanged(CFWL_Message* pMsg, FX_BOOL bSet = TRUE); - void OnLButtonDown(CFWL_MsgMouse* pMsg); - void OnLButtonUp(CFWL_MsgMouse* pMsg); - void OnMouseMove(CFWL_MsgMouse* pMsg); - void OnMouseLeave(CFWL_MsgMouse* pMsg); - void OnKeyDown(CFWL_MsgKey* pMsg); - CFWL_CheckBoxImp* m_pOwner; -}; - -#endif // XFA_SRC_FWL_BASEWIDGET_FWL_CHECKBOXIMP_H_ diff --git a/xfa/src/fwl/basewidget/fwl_comboboximp.cpp b/xfa/src/fwl/basewidget/fwl_comboboximp.cpp deleted file mode 100644 index 5eef96eebf..0000000000 --- a/xfa/src/fwl/basewidget/fwl_comboboximp.cpp +++ /dev/null @@ -1,1819 +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/basewidget/fwl_comboboximp.h" - -#include "xfa/include/fwl/core/fwl_theme.h" -#include "xfa/src/fde/tto/fde_textout.h" -#include "xfa/src/fwl/basewidget/fwl_editimp.h" -#include "xfa/src/fwl/basewidget/fwl_formproxyimp.h" -#include "xfa/src/fwl/basewidget/fwl_listboximp.h" -#include "xfa/src/fwl/basewidget/fwl_scrollbarimp.h" -#include "xfa/src/fwl/core/fwl_appimp.h" -#include "xfa/src/fwl/core/fwl_formimp.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" - -// static -IFWL_ComboBox* IFWL_ComboBox::Create( - const CFWL_WidgetImpProperties& properties) { - IFWL_ComboBox* pComboBox = new IFWL_ComboBox; - CFWL_ComboBoxImp* pComboBoxImpl = new CFWL_ComboBoxImp(properties, nullptr); - pComboBox->SetImpl(pComboBoxImpl); - pComboBoxImpl->SetInterface(pComboBox); - return pComboBox; -} -IFWL_ComboBox::IFWL_ComboBox() {} -int32_t IFWL_ComboBox::GetCurSel() { - return static_cast<CFWL_ComboBoxImp*>(GetImpl())->GetCurSel(); -} -FWL_ERR IFWL_ComboBox::SetCurSel(int32_t iSel) { - return static_cast<CFWL_ComboBoxImp*>(GetImpl())->SetCurSel(iSel); -} -FWL_ERR IFWL_ComboBox::SetEditText(const CFX_WideString& wsText) { - return static_cast<CFWL_ComboBoxImp*>(GetImpl())->SetEditText(wsText); -} -int32_t IFWL_ComboBox::GetEditTextLength() const { - return static_cast<CFWL_ComboBoxImp*>(GetImpl())->GetEditTextLength(); -} -FWL_ERR IFWL_ComboBox::GetEditText(CFX_WideString& wsText, - int32_t nStart, - int32_t nCount) const { - return static_cast<CFWL_ComboBoxImp*>(GetImpl()) - ->GetEditText(wsText, nStart, nCount); -} -FWL_ERR IFWL_ComboBox::SetEditSelRange(int32_t nStart, int32_t nCount) { - return static_cast<CFWL_ComboBoxImp*>(GetImpl()) - ->SetEditSelRange(nStart, nCount); -} -int32_t IFWL_ComboBox::GetEditSelRange(int32_t nIndex, int32_t& nStart) { - return static_cast<CFWL_ComboBoxImp*>(GetImpl()) - ->GetEditSelRange(nIndex, nStart); -} -int32_t IFWL_ComboBox::GetEditLimit() { - return static_cast<CFWL_ComboBoxImp*>(GetImpl())->GetEditLimit(); -} -FWL_ERR IFWL_ComboBox::SetEditLimit(int32_t nLimit) { - return static_cast<CFWL_ComboBoxImp*>(GetImpl())->SetEditLimit(nLimit); -} -FWL_ERR IFWL_ComboBox::EditDoClipboard(int32_t iCmd) { - return static_cast<CFWL_ComboBoxImp*>(GetImpl())->EditDoClipboard(iCmd); -} -FX_BOOL IFWL_ComboBox::EditRedo(const CFX_ByteStringC& bsRecord) { - return static_cast<CFWL_ComboBoxImp*>(GetImpl())->EditRedo(bsRecord); -} -FX_BOOL IFWL_ComboBox::EditUndo(const CFX_ByteStringC& bsRecord) { - return static_cast<CFWL_ComboBoxImp*>(GetImpl())->EditUndo(bsRecord); -} -IFWL_ListBox* IFWL_ComboBox::GetListBoxt() { - return static_cast<CFWL_ComboBoxImp*>(GetImpl())->GetListBoxt(); -} -FX_BOOL IFWL_ComboBox::AfterFocusShowDropList() { - return static_cast<CFWL_ComboBoxImp*>(GetImpl())->AfterFocusShowDropList(); -} -FX_ERR IFWL_ComboBox::OpenDropDownList(FX_BOOL bActivate) { - return static_cast<CFWL_ComboBoxImp*>(GetImpl())->OpenDropDownList(bActivate); -} -FX_BOOL IFWL_ComboBox::EditCanUndo() { - return static_cast<CFWL_ComboBoxImp*>(GetImpl())->EditCanUndo(); -} -FX_BOOL IFWL_ComboBox::EditCanRedo() { - return static_cast<CFWL_ComboBoxImp*>(GetImpl())->EditCanRedo(); -} -FX_BOOL IFWL_ComboBox::EditUndo() { - return static_cast<CFWL_ComboBoxImp*>(GetImpl())->EditUndo(); -} -FX_BOOL IFWL_ComboBox::EditRedo() { - return static_cast<CFWL_ComboBoxImp*>(GetImpl())->EditRedo(); -} -FX_BOOL IFWL_ComboBox::EditCanCopy() { - return static_cast<CFWL_ComboBoxImp*>(GetImpl())->EditCanCopy(); -} -FX_BOOL IFWL_ComboBox::EditCanCut() { - return static_cast<CFWL_ComboBoxImp*>(GetImpl())->EditCanCut(); -} -FX_BOOL IFWL_ComboBox::EditCanSelectAll() { - return static_cast<CFWL_ComboBoxImp*>(GetImpl())->EditCanSelectAll(); -} -FX_BOOL IFWL_ComboBox::EditCopy(CFX_WideString& wsCopy) { - return static_cast<CFWL_ComboBoxImp*>(GetImpl())->EditCopy(wsCopy); -} -FX_BOOL IFWL_ComboBox::EditCut(CFX_WideString& wsCut) { - return static_cast<CFWL_ComboBoxImp*>(GetImpl())->EditCut(wsCut); -} -FX_BOOL IFWL_ComboBox::EditPaste(const CFX_WideString& wsPaste) { - return static_cast<CFWL_ComboBoxImp*>(GetImpl())->EditPaste(wsPaste); -} -FX_BOOL IFWL_ComboBox::EditSelectAll() { - return static_cast<CFWL_ComboBoxImp*>(GetImpl())->EditSelectAll(); -} -FX_BOOL IFWL_ComboBox::EditDelete() { - return static_cast<CFWL_ComboBoxImp*>(GetImpl())->EditDelete(); -} -FX_BOOL IFWL_ComboBox::EditDeSelect() { - return static_cast<CFWL_ComboBoxImp*>(GetImpl())->EditDeSelect(); -} -FWL_ERR IFWL_ComboBox::GetBBox(CFX_RectF& rect) { - return static_cast<CFWL_ComboBoxImp*>(GetImpl())->GetBBox(rect); -} -FWL_ERR IFWL_ComboBox::EditModifyStylesEx(FX_DWORD dwStylesExAdded, - FX_DWORD dwStylesExRemoved) { - return static_cast<CFWL_ComboBoxImp*>(GetImpl()) - ->EditModifyStylesEx(dwStylesExAdded, dwStylesExRemoved); -} - -CFWL_ComboEditImp::CFWL_ComboEditImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) - : CFWL_EditImp(properties, pOuter) { - m_pOuter = static_cast<CFWL_ComboBoxImp*>(pOuter->GetImpl()); -} - -CFWL_ComboEditImpDelegate::CFWL_ComboEditImpDelegate(CFWL_ComboEditImp* pOwner) - : CFWL_EditImpDelegate(pOwner), m_pOwner(pOwner) {} -int32_t CFWL_ComboEditImpDelegate::OnProcessMessage(CFWL_Message* pMessage) { - if (!pMessage) - return 0; - FX_DWORD dwMsgCode = pMessage->GetClassID(); - FX_BOOL backDefault = TRUE; - switch (dwMsgCode) { - case FWL_MSGHASH_SetFocus: - case FWL_MSGHASH_KillFocus: { - if (dwMsgCode == FWL_MSGHASH_SetFocus) { - m_pOwner->m_pProperties->m_dwStates |= FWL_WGTSTATE_Focused; - } else { - m_pOwner->m_pProperties->m_dwStates &= ~FWL_WGTSTATE_Focused; - } - backDefault = FALSE; - break; - } - case FWL_MSGHASH_Mouse: { - CFWL_MsgMouse* pMsg = static_cast<CFWL_MsgMouse*>(pMessage); - if ((pMsg->m_dwCmd == FWL_MSGMOUSECMD_LButtonDown) && - ((m_pOwner->m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) == 0)) { - m_pOwner->SetSelected(); - m_pOwner->SetComboBoxFocus(TRUE); - } - break; - } - default: {} - } - if (!backDefault) { - return 1; - } - return CFWL_EditImpDelegate::OnProcessMessage(pMessage); -} -void CFWL_ComboEditImp::ClearSelected() { - ClearSelections(); - Repaint(&m_rtClient); -} -void CFWL_ComboEditImp::SetSelected() { - FlagFocus(TRUE); - EndCaret(); - AddSelRange(0); -} -void CFWL_ComboEditImp::EndCaret() { - m_pEdtEngine->MoveCaretPos(MC_End); -} -void CFWL_ComboEditImp::FlagFocus(FX_BOOL bSet) { - if (bSet) { - m_pProperties->m_dwStates |= FWL_WGTSTATE_Focused; - } else { - m_pProperties->m_dwStates &= ~FWL_WGTSTATE_Focused; - ShowCaret(FALSE); - } -} -void CFWL_ComboEditImp::SetComboBoxFocus(FX_BOOL bSet) { - m_pOuter->SetFocus(bSet); -} -CFWL_ComboListImp::CFWL_ComboListImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) - : CFWL_ListBoxImp(properties, pOuter), m_bNotifyOwner(TRUE) { - FXSYS_assert(pOuter != NULL); -} -FWL_ERR CFWL_ComboListImp::Initialize() { - if (CFWL_ListBoxImp::Initialize() != FWL_ERR_Succeeded) - return FWL_ERR_Indefinite; - delete m_pDelegate; - m_pDelegate = new CFWL_ComboListImpDelegate(this); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ComboListImp::Finalize() { - delete m_pDelegate; - m_pDelegate = nullptr; - return CFWL_ListBoxImp::Finalize(); -} -int32_t CFWL_ComboListImp::MatchItem(const CFX_WideString& wsMatch) { - if (wsMatch.IsEmpty()) { - return -1; - } - if (!m_pProperties->m_pDataProvider) - return -1; - IFWL_ListBoxDP* pData = - static_cast<IFWL_ListBoxDP*>(m_pProperties->m_pDataProvider); - int32_t iCount = pData->CountItems(m_pInterface); - for (int32_t i = 0; i < iCount; i++) { - FWL_HLISTITEM hItem = pData->GetItem(m_pInterface, i); - CFX_WideString wsText; - pData->GetItemText(m_pInterface, hItem, wsText); - FX_STRSIZE pos = wsText.Find(wsMatch.c_str()); - if (!pos) { - return i; - } - } - return -1; -} -void CFWL_ComboListImp::ChangeSelected(int32_t iSel) { - if (!m_pProperties->m_pDataProvider) - return; - IFWL_ListBoxDP* pData = - static_cast<IFWL_ListBoxDP*>(m_pProperties->m_pDataProvider); - FWL_HLISTITEM hItem = pData->GetItem(m_pInterface, iSel); - CFX_RectF rtInvalidate; - rtInvalidate.Reset(); - FWL_HLISTITEM hOld = GetSelItem(0); - int32_t iOld = pData->GetItemIndex(m_pInterface, hOld); - if (iOld == iSel) { - return; - } else if (iOld > -1) { - GetItemRect(iOld, rtInvalidate); - SetSelItem(hOld, FALSE); - } - if (hItem) { - CFX_RectF rect; - GetItemRect(iSel, rect); - rtInvalidate.Union(rect); - FWL_HLISTITEM hSel = pData->GetItem(m_pInterface, iSel); - SetSelItem(hSel, TRUE); - } - if (!rtInvalidate.IsEmpty()) { - Repaint(&rtInvalidate); - } -} -int32_t CFWL_ComboListImp::CountItems() { - IFWL_ListBoxDP* pData = - static_cast<IFWL_ListBoxDP*>(m_pProperties->m_pDataProvider); - return pData ? pData->CountItems(m_pInterface) : 0; -} -void CFWL_ComboListImp::GetItemRect(int32_t nIndex, CFX_RectF& rtItem) { - IFWL_ListBoxDP* pData = - static_cast<IFWL_ListBoxDP*>(m_pProperties->m_pDataProvider); - FWL_HLISTITEM hItem = pData->GetItem(m_pInterface, nIndex); - pData->GetItemRect(m_pInterface, hItem, rtItem); -} -void CFWL_ComboListImp::ClientToOuter(FX_FLOAT& fx, FX_FLOAT& fy) { - fx += m_pProperties->m_rtWidget.left, fy += m_pProperties->m_rtWidget.top; - IFWL_Widget* pOwner = GetOwner(); - if (!pOwner) - return; - pOwner->TransformTo(m_pOuter, fx, fy); -} -void CFWL_ComboListImp::SetFocus(FX_BOOL bSet) { - CFWL_WidgetImp::SetFocus(bSet); -} -CFWL_ComboListImpDelegate::CFWL_ComboListImpDelegate(CFWL_ComboListImp* pOwner) - : CFWL_ListBoxImpDelegate(pOwner), m_pOwner(pOwner) {} -int32_t CFWL_ComboListImpDelegate::OnProcessMessage(CFWL_Message* pMessage) { - if (!pMessage) - return 0; - FX_DWORD dwHashCode = pMessage->GetClassID(); - FX_BOOL backDefault = TRUE; - if (dwHashCode == FWL_MSGHASH_SetFocus || - dwHashCode == FWL_MSGHASH_KillFocus) { - OnDropListFocusChanged(pMessage, dwHashCode == FWL_MSGHASH_SetFocus); - } else if (dwHashCode == FWL_MSGHASH_Mouse) { - CFWL_MsgMouse* pMsg = static_cast<CFWL_MsgMouse*>(pMessage); - if (m_pOwner->IsShowScrollBar(TRUE) && m_pOwner->m_pVertScrollBar) { - CFX_RectF rect; - m_pOwner->m_pVertScrollBar->GetWidgetRect(rect); - if (rect.Contains(pMsg->m_fx, pMsg->m_fy)) { - pMsg->m_fx -= rect.left; - pMsg->m_fy -= rect.top; - IFWL_WidgetDelegate* pDelegate = - m_pOwner->m_pVertScrollBar->SetDelegate(NULL); - return pDelegate->OnProcessMessage(pMsg); - } - } - FX_DWORD dwCmd = pMsg->m_dwCmd; - switch (dwCmd) { - case FWL_MSGMOUSECMD_MouseMove: { - backDefault = FALSE; - OnDropListMouseMove(pMsg); - break; - } - case FWL_MSGMOUSECMD_LButtonDown: { - backDefault = FALSE; - OnDropListLButtonDown(pMsg); - break; - } - case FWL_MSGMOUSECMD_LButtonUp: { - backDefault = FALSE; - OnDropListLButtonUp(pMsg); - break; - } - default: {} - } - } else if (dwHashCode == FWL_MSGHASH_Key) { - backDefault = !OnDropListKey(static_cast<CFWL_MsgKey*>(pMessage)); - } - if (!backDefault) { - return 1; - } - return CFWL_ListBoxImpDelegate::OnProcessMessage(pMessage); -} -void CFWL_ComboListImpDelegate::OnDropListFocusChanged(CFWL_Message* pMsg, - FX_BOOL bSet) { - if (!bSet) { - CFWL_MsgKillFocus* pKill = static_cast<CFWL_MsgKillFocus*>(pMsg); - CFWL_ComboBoxImp* pOuter = - static_cast<CFWL_ComboBoxImp*>(m_pOwner->m_pOuter->GetImpl()); - if (pKill->m_pSetFocus == m_pOwner->m_pOuter || - pKill->m_pSetFocus == pOuter->m_pEdit.get()) { - pOuter->ShowDropList(FALSE); - } - } -} -int32_t CFWL_ComboListImpDelegate::OnDropListMouseMove(CFWL_MsgMouse* pMsg) { - if (m_pOwner->m_rtClient.Contains(pMsg->m_fx, pMsg->m_fy)) { - if (m_pOwner->m_bNotifyOwner) { - m_pOwner->m_bNotifyOwner = FALSE; - } - if (m_pOwner->IsShowScrollBar(TRUE) && m_pOwner->m_pVertScrollBar) { - CFX_RectF rect; - m_pOwner->m_pVertScrollBar->GetWidgetRect(rect); - if (rect.Contains(pMsg->m_fx, pMsg->m_fy)) { - return 1; - } - } - FWL_HLISTITEM hItem = m_pOwner->GetItemAtPoint(pMsg->m_fx, pMsg->m_fy); - if (hItem) { - if (!m_pOwner->m_pProperties->m_pDataProvider) - return 0; - IFWL_ListBoxDP* pData = static_cast<IFWL_ListBoxDP*>( - m_pOwner->m_pProperties->m_pDataProvider); - int32_t iSel = pData->GetItemIndex(m_pOwner->m_pInterface, hItem); - CFWL_EvtCmbHoverChanged event; - event.m_pSrcTarget = m_pOwner->m_pOuter; - event.m_iCurHover = iSel; - m_pOwner->DispatchEvent(&event); - m_pOwner->ChangeSelected(iSel); - } - } else if (m_pOwner->m_bNotifyOwner) { - m_pOwner->ClientToOuter(pMsg->m_fx, pMsg->m_fy); - CFWL_ComboBoxImp* pOuter = - static_cast<CFWL_ComboBoxImp*>(m_pOwner->m_pOuter->GetImpl()); - pOuter->m_pDelegate->OnProcessMessage(pMsg); - } - return 1; -} -int32_t CFWL_ComboListImpDelegate::OnDropListLButtonDown(CFWL_MsgMouse* pMsg) { - if (m_pOwner->m_rtClient.Contains(pMsg->m_fx, pMsg->m_fy)) { - return 0; - } - CFWL_ComboBoxImp* pOuter = - static_cast<CFWL_ComboBoxImp*>(m_pOwner->m_pOuter->GetImpl()); - pOuter->ShowDropList(FALSE); - return 1; -} -int32_t CFWL_ComboListImpDelegate::OnDropListLButtonUp(CFWL_MsgMouse* pMsg) { - CFWL_ComboBoxImp* pOuter = - static_cast<CFWL_ComboBoxImp*>(m_pOwner->m_pOuter->GetImpl()); - if (m_pOwner->m_bNotifyOwner) { - m_pOwner->ClientToOuter(pMsg->m_fx, pMsg->m_fy); - pOuter->m_pDelegate->OnProcessMessage(pMsg); - } else { - if (m_pOwner->IsShowScrollBar(TRUE) && m_pOwner->m_pVertScrollBar) { - CFX_RectF rect; - m_pOwner->m_pVertScrollBar->GetWidgetRect(rect); - if (rect.Contains(pMsg->m_fx, pMsg->m_fy)) { - return 1; - } - } - pOuter->ShowDropList(FALSE); - FWL_HLISTITEM hItem = m_pOwner->GetItemAtPoint(pMsg->m_fx, pMsg->m_fy); - if (hItem) { - pOuter->ProcessSelChanged(TRUE); - } - } - return 1; -} -int32_t CFWL_ComboListImpDelegate::OnDropListKey(CFWL_MsgKey* pKey) { - CFWL_ComboBoxImp* pOuter = - static_cast<CFWL_ComboBoxImp*>(m_pOwner->m_pOuter->GetImpl()); - FX_BOOL bPropagate = FALSE; - if (pKey->m_dwCmd == FWL_MSGKEYCMD_KeyDown) { - FX_DWORD dwKeyCode = pKey->m_dwKeyCode; - switch (dwKeyCode) { - case FWL_VKEY_Return: - case FWL_VKEY_Escape: { - pOuter->ShowDropList(FALSE); - return 1; - } - case FWL_VKEY_Up: - case FWL_VKEY_Down: { - OnDropListKeyDown(pKey); - pOuter->SetDelegate(nullptr); - pOuter->ProcessSelChanged(FALSE); - return 1; - } - default: { bPropagate = TRUE; } - } - } else if (pKey->m_dwCmd == FWL_MSGKEYCMD_Char) { - bPropagate = TRUE; - } - if (bPropagate) { - pKey->m_pDstTarget = m_pOwner->m_pOuter; - pOuter->m_pDelegate->OnProcessMessage(pKey); - return 1; - } - return 0; -} -void CFWL_ComboListImpDelegate::OnDropListKeyDown(CFWL_MsgKey* pKey) { - FX_DWORD dwKeyCode = pKey->m_dwKeyCode; - switch (dwKeyCode) { - case FWL_VKEY_Up: - case FWL_VKEY_Down: - case FWL_VKEY_Home: - case FWL_VKEY_End: { - CFWL_ComboBoxImp* pOuter = - static_cast<CFWL_ComboBoxImp*>(m_pOwner->m_pOuter->GetImpl()); - IFWL_ListBoxDP* pData = static_cast<IFWL_ListBoxDP*>( - m_pOwner->m_pProperties->m_pDataProvider); - FWL_HLISTITEM hItem = - pData->GetItem(m_pOwner->m_pInterface, pOuter->m_iCurSel); - hItem = m_pOwner->GetItem(hItem, dwKeyCode); - if (!hItem) { - break; - } - m_pOwner->SetSelection(hItem, hItem, TRUE); - m_pOwner->ScrollToVisible(hItem); - CFX_RectF rtInvalidate; - rtInvalidate.Set(0, 0, m_pOwner->m_pProperties->m_rtWidget.width, - m_pOwner->m_pProperties->m_rtWidget.height); - m_pOwner->Repaint(&rtInvalidate); - break; - } - default: {} - } -} -CFWL_ComboBoxImp::CFWL_ComboBoxImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) - : CFWL_WidgetImp(properties, pOuter), - m_pForm(NULL), - m_bLButtonDown(FALSE), - m_iCurSel(-1), - m_iBtnState(FWL_PARTSTATE_CMB_Normal), - m_fComboFormHandler(0), - m_bNeedShowList(FALSE) { - m_rtClient.Reset(); - m_rtBtn.Reset(); - m_rtHandler.Reset(); -} -CFWL_ComboBoxImp::~CFWL_ComboBoxImp() {} -FWL_ERR CFWL_ComboBoxImp::GetClassName(CFX_WideString& wsClass) const { - wsClass = FWL_CLASS_ComboBox; - return FWL_ERR_Succeeded; -} -FX_DWORD CFWL_ComboBoxImp::GetClassID() const { - return FWL_CLASSHASH_ComboBox; -} -FWL_ERR CFWL_ComboBoxImp::Initialize() { - if (m_pWidgetMgr->IsFormDisabled()) { - return DisForm_Initialize(); - } - if (CFWL_WidgetImp::Initialize() != FWL_ERR_Succeeded) - return FWL_WGTSTATE_Invisible; // Probably a bug; not a FWL_ERR_ value. - m_pDelegate = new CFWL_ComboBoxImpDelegate(this); - CFWL_WidgetImpProperties prop; - prop.m_pThemeProvider = m_pProperties->m_pThemeProvider; - prop.m_dwStyles |= FWL_WGTSTYLE_Border | FWL_WGTSTYLE_VScroll; - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CMB_ListItemIconText) { - prop.m_dwStyleExes |= FWL_STYLEEXT_LTB_Icon; - } - prop.m_pDataProvider = m_pProperties->m_pDataProvider; - m_pListBox.reset(IFWL_ListBox::CreateComboList(prop, m_pInterface)); - m_pListBox->Initialize(); - if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CMB_DropDown) && !m_pEdit) { - CFWL_WidgetImpProperties prop2; - m_pEdit.reset(IFWL_Edit::CreateComboEdit(prop2, m_pInterface)); - m_pEdit->Initialize(); - static_cast<CFWL_EditImp*>(m_pEdit->GetImpl())->SetOuter(m_pInterface); - } - if (m_pEdit) { - m_pEdit->SetParent(m_pInterface); - } - SetStates(m_pProperties->m_dwStates); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ComboBoxImp::Finalize() { - if (m_pEdit) { - m_pEdit->Finalize(); - } - m_pListBox->Finalize(); - delete m_pDelegate; - m_pDelegate = nullptr; - return CFWL_WidgetImp::Finalize(); -} -FWL_ERR CFWL_ComboBoxImp::GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize) { - if (bAutoSize) { - rect.Reset(); - FX_BOOL bIsDropDown = IsDropDownStyle(); - if (bIsDropDown && m_pEdit) { - m_pEdit->GetWidgetRect(rect, TRUE); - } else { - rect.width = 100; - rect.height = 16; - } - if (!m_pProperties->m_pThemeProvider) { - ReSetTheme(); - } - FX_FLOAT* pFWidth = static_cast<FX_FLOAT*>( - GetThemeCapacity(FWL_WGTCAPACITY_ScrollBarWidth)); - if (!pFWidth) - return FWL_ERR_Indefinite; - rect.Inflate(0, 0, *pFWidth, 0); - CFWL_WidgetImp::GetWidgetRect(rect, TRUE); - } else { - rect = m_pProperties->m_rtWidget; - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ComboBoxImp::ModifyStylesEx(FX_DWORD dwStylesExAdded, - FX_DWORD dwStylesExRemoved) { - if (m_pWidgetMgr->IsFormDisabled()) { - return DisForm_ModifyStylesEx(dwStylesExAdded, dwStylesExRemoved); - } - FX_BOOL bAddDropDown = dwStylesExAdded & FWL_STYLEEXT_CMB_DropDown; - FX_BOOL bRemoveDropDown = dwStylesExRemoved & FWL_STYLEEXT_CMB_DropDown; - if (bAddDropDown && !m_pEdit) { - CFWL_WidgetImpProperties prop; - m_pEdit.reset(IFWL_Edit::CreateComboEdit(prop, nullptr)); - m_pEdit->Initialize(); - static_cast<CFWL_EditImp*>(m_pEdit->GetImpl())->SetOuter(m_pInterface); - m_pEdit->SetParent(m_pInterface); - } else if (bRemoveDropDown && m_pEdit) { - m_pEdit->SetStates(FWL_WGTSTATE_Invisible, TRUE); - } - return CFWL_WidgetImp::ModifyStylesEx(dwStylesExAdded, dwStylesExRemoved); -} -FWL_ERR CFWL_ComboBoxImp::Update() { - if (m_pWidgetMgr->IsFormDisabled()) { - return DisForm_Update(); - } - if (IsLocked()) { - return FWL_ERR_Indefinite; - } - ReSetTheme(); - FX_BOOL bDropDown = IsDropDownStyle(); - if (bDropDown && m_pEdit) { - ReSetEditAlignment(); - } - if (m_pProperties->m_pThemeProvider == NULL) { - m_pProperties->m_pThemeProvider = GetAvailableTheme(); - } - Layout(); - CFWL_ThemePart part; - part.m_pWidget = m_pInterface; - m_fComboFormHandler = - *static_cast<FX_FLOAT*>(m_pProperties->m_pThemeProvider->GetCapacity( - &part, FWL_WGTCAPACITY_CMB_ComboFormHandler)); - return FWL_ERR_Succeeded; -} -FX_DWORD CFWL_ComboBoxImp::HitTest(FX_FLOAT fx, FX_FLOAT fy) { - if (m_pWidgetMgr->IsFormDisabled()) { - return DisForm_HitTest(fx, fy); - } - return CFWL_WidgetImp::HitTest(fx, fy); -} -FWL_ERR CFWL_ComboBoxImp::DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - if (m_pWidgetMgr->IsFormDisabled()) { - return DisForm_DrawWidget(pGraphics, 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 bIsDropDown = IsDropDownStyle(); - if (HasBorder()) { - DrawBorder(pGraphics, FWL_PART_CMB_Border, pTheme, pMatrix); - } - if (HasEdge()) { - DrawEdge(pGraphics, FWL_PART_CMB_Edge, pTheme, pMatrix); - } - if (!bIsDropDown) { - CFX_RectF rtTextBk(m_rtClient); - rtTextBk.width -= m_rtBtn.width; - CFWL_ThemeBackground param; - param.m_pWidget = m_pInterface; - param.m_iPart = FWL_PART_CMB_Background; - param.m_pGraphics = pGraphics; - if (pMatrix) { - param.m_matrix.Concat(*pMatrix); - } - param.m_rtPart = rtTextBk; - if (m_iCurSel >= 0) { - IFWL_ListBoxDP* pData = static_cast<IFWL_ListBoxDP*>( - static_cast<CFWL_ComboListImp*>(m_pListBox->GetImpl()) - ->m_pProperties->m_pDataProvider); - void* p = pData->GetItemData(m_pListBox.get(), - pData->GetItem(m_pListBox.get(), m_iCurSel)); - if (p != NULL) { - param.m_pData = p; - } - } - if (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled) { - param.m_dwStates = FWL_PARTSTATE_CMB_Disabled; - } else if ((m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) && - (m_iCurSel >= 0)) { - param.m_dwStates = FWL_PARTSTATE_CMB_Selected; - } else { - param.m_dwStates = FWL_PARTSTATE_CMB_Normal; - } - pTheme->DrawBackground(¶m); - if (m_iCurSel >= 0) { - if (!m_pListBox) - return FWL_ERR_Indefinite; - CFX_WideString wsText; - IFWL_ComboBoxDP* pData = - static_cast<IFWL_ComboBoxDP*>(m_pProperties->m_pDataProvider); - FWL_HLISTITEM hItem = pData->GetItem(m_pInterface, m_iCurSel); - static_cast<CFWL_ComboListImp*>(m_pListBox->GetImpl()) - ->GetItemText(hItem, wsText); - CFWL_ThemeText param; - param.m_pWidget = m_pInterface; - param.m_iPart = FWL_PART_CMB_Caption; - param.m_dwStates = m_iBtnState; - param.m_pGraphics = pGraphics; - param.m_matrix.Concat(*pMatrix); - param.m_rtPart = rtTextBk; - param.m_dwStates = (m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) - ? FWL_PARTSTATE_CMB_Selected - : FWL_PARTSTATE_CMB_Normal; - param.m_wsText = wsText; - param.m_dwTTOStyles = FDE_TTOSTYLE_SingleLine; - param.m_iTTOAlign = FDE_TTOALIGNMENT_CenterLeft; - pTheme->DrawText(¶m); - } - } - { - CFWL_ThemeBackground param; - param.m_pWidget = m_pInterface; - param.m_iPart = FWL_PART_CMB_DropDownButton; - param.m_dwStates = (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled) - ? FWL_PARTSTATE_CMB_Disabled - : m_iBtnState; - param.m_pGraphics = pGraphics; - param.m_matrix.Concat(*pMatrix); - param.m_rtPart = m_rtBtn; - pTheme->DrawBackground(¶m); - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ComboBoxImp::SetThemeProvider(IFWL_ThemeProvider* pThemeProvider) { - if (!pThemeProvider) - return FWL_ERR_Indefinite; - m_pProperties->m_pThemeProvider = pThemeProvider; - if (m_pListBox && pThemeProvider->IsValidWidget(m_pListBox.get())) { - m_pListBox->SetThemeProvider(pThemeProvider); - } - if (m_pEdit && pThemeProvider->IsValidWidget(m_pEdit.get())) { - m_pEdit->SetThemeProvider(pThemeProvider); - } - return FWL_ERR_Succeeded; -} -int32_t CFWL_ComboBoxImp::GetCurSel() { - return m_iCurSel; -} -FWL_ERR CFWL_ComboBoxImp::SetCurSel(int32_t iSel) { - int32_t iCount = - static_cast<CFWL_ComboListImp*>(m_pListBox->GetImpl())->CountItems(); - FX_BOOL bClearSel = iSel < 0 || iSel >= iCount; - FX_BOOL bDropDown = IsDropDownStyle(); - if (bDropDown && m_pEdit) { - if (bClearSel) { - m_pEdit->SetText(CFX_WideString()); - } else { - CFX_WideString wsText; - IFWL_ComboBoxDP* pData = - static_cast<IFWL_ComboBoxDP*>(m_pProperties->m_pDataProvider); - FWL_HLISTITEM hItem = pData->GetItem(m_pInterface, iSel); - static_cast<CFWL_ComboListImp*>(m_pListBox->GetImpl()) - ->GetItemText(hItem, wsText); - m_pEdit->SetText(wsText); - } - m_pEdit->Update(); - } - m_iCurSel = bClearSel ? -1 : iSel; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ComboBoxImp::SetStates(FX_DWORD dwStates, FX_BOOL bSet) { - FX_BOOL bIsDropDown = IsDropDownStyle(); - if (bIsDropDown && m_pEdit) { - m_pEdit->SetStates(dwStates, bSet); - } - if (m_pListBox) { - m_pListBox->SetStates(dwStates, bSet); - } - return CFWL_WidgetImp::SetStates(dwStates, bSet); -} -FWL_ERR CFWL_ComboBoxImp::SetEditText(const CFX_WideString& wsText) { - if (!m_pEdit) - return FWL_ERR_Indefinite; - m_pEdit->SetText(wsText); - return m_pEdit->Update(); -} -int32_t CFWL_ComboBoxImp::GetEditTextLength() const { - if (!m_pEdit) - return -1; - return m_pEdit->GetTextLength(); -} -FWL_ERR CFWL_ComboBoxImp::GetEditText(CFX_WideString& wsText, - int32_t nStart, - int32_t nCount) const { - if (m_pEdit) { - return m_pEdit->GetText(wsText, nStart, nCount); - } else if (m_pListBox) { - IFWL_ComboBoxDP* pData = - static_cast<IFWL_ComboBoxDP*>(m_pProperties->m_pDataProvider); - FWL_HLISTITEM hItem = pData->GetItem(m_pInterface, m_iCurSel); - return m_pListBox->GetItemText(hItem, wsText); - } - return FWL_ERR_Indefinite; -} -FWL_ERR CFWL_ComboBoxImp::SetEditSelRange(int32_t nStart, int32_t nCount) { - if (!m_pEdit) - return FWL_ERR_Indefinite; - static_cast<CFWL_ComboEditImp*>(m_pEdit->GetImpl())->ClearSelected(); - m_pEdit->AddSelRange(nStart, nCount); - return FWL_ERR_Succeeded; -} -int32_t CFWL_ComboBoxImp::GetEditSelRange(int32_t nIndex, int32_t& nStart) { - if (!m_pEdit) - return -1; - return m_pEdit->GetSelRange(nIndex, nStart); -} -int32_t CFWL_ComboBoxImp::GetEditLimit() { - if (!m_pEdit) - return -1; - return m_pEdit->GetLimit(); -} -FWL_ERR CFWL_ComboBoxImp::SetEditLimit(int32_t nLimit) { - if (!m_pEdit) - return FWL_ERR_Indefinite; - return m_pEdit->SetLimit(nLimit); -} -FWL_ERR CFWL_ComboBoxImp::EditDoClipboard(int32_t iCmd) { - if (!m_pEdit) - return FWL_ERR_Indefinite; - return m_pEdit->DoClipboard(iCmd); -} -FX_BOOL CFWL_ComboBoxImp::EditRedo(const CFX_ByteStringC& bsRecord) { - if (!m_pEdit) - return FALSE; - return m_pEdit->Redo(bsRecord); -} -FX_BOOL CFWL_ComboBoxImp::EditUndo(const CFX_ByteStringC& bsRecord) { - if (!m_pEdit) - return FALSE; - return m_pEdit->Undo(bsRecord); -} -IFWL_ListBox* CFWL_ComboBoxImp::GetListBoxt() { - return m_pListBox.get(); -} -FX_BOOL CFWL_ComboBoxImp::AfterFocusShowDropList() { - if (!m_bNeedShowList) { - return FALSE; - } - if (m_pEdit) { - MatchEditText(); - } - ShowDropList(TRUE); - m_bNeedShowList = FALSE; - return TRUE; -} -FX_ERR CFWL_ComboBoxImp::OpenDropDownList(FX_BOOL bActivate) { - ShowDropList(bActivate); - return FWL_ERR_Succeeded; -} -FX_BOOL CFWL_ComboBoxImp::EditCanUndo() { - return m_pEdit->CanUndo(); -} -FX_BOOL CFWL_ComboBoxImp::EditCanRedo() { - return m_pEdit->CanRedo(); -} -FX_BOOL CFWL_ComboBoxImp::EditUndo() { - return m_pEdit->Undo(); -} -FX_BOOL CFWL_ComboBoxImp::EditRedo() { - return m_pEdit->Redo(); -} -FX_BOOL CFWL_ComboBoxImp::EditCanCopy() { - return m_pEdit->CountSelRanges() > 0; -} -FX_BOOL CFWL_ComboBoxImp::EditCanCut() { - if (m_pEdit->GetStylesEx() & FWL_STYLEEXT_EDT_ReadOnly) { - return FALSE; - } - return m_pEdit->CountSelRanges() > 0; -} -FX_BOOL CFWL_ComboBoxImp::EditCanSelectAll() { - return m_pEdit->GetTextLength() > 0; -} -FX_BOOL CFWL_ComboBoxImp::EditCopy(CFX_WideString& wsCopy) { - return m_pEdit->Copy(wsCopy); -} -FX_BOOL CFWL_ComboBoxImp::EditCut(CFX_WideString& wsCut) { - return m_pEdit->Cut(wsCut); -} -FX_BOOL CFWL_ComboBoxImp::EditPaste(const CFX_WideString& wsPaste) { - return m_pEdit->Paste(wsPaste); -} -FX_BOOL CFWL_ComboBoxImp::EditSelectAll() { - return m_pEdit->AddSelRange(0) == FWL_ERR_Succeeded; -} -FX_BOOL CFWL_ComboBoxImp::EditDelete() { - return m_pEdit->ClearText() == FWL_ERR_Succeeded; -} -FX_BOOL CFWL_ComboBoxImp::EditDeSelect() { - return m_pEdit->ClearSelections() == FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ComboBoxImp::GetBBox(CFX_RectF& rect) { - if (m_pWidgetMgr->IsFormDisabled()) { - return DisForm_GetBBox(rect); - } - rect = m_pProperties->m_rtWidget; - if (m_pListBox && IsDropListShowed()) { - CFX_RectF rtList; - m_pListBox->GetWidgetRect(rtList); - rtList.Offset(rect.left, rect.top); - rect.Union(rtList); - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ComboBoxImp::EditModifyStylesEx(FX_DWORD dwStylesExAdded, - FX_DWORD dwStylesExRemoved) { - if (m_pEdit != NULL) { - return m_pEdit->ModifyStylesEx(dwStylesExAdded, dwStylesExRemoved); - } else { - return FWL_ERR_Parameter_Invalid; - } -} -FX_FLOAT CFWL_ComboBoxImp::GetListHeight() { - return static_cast<IFWL_ComboBoxDP*>(m_pProperties->m_pDataProvider) - ->GetListHeight(m_pInterface); -} -void CFWL_ComboBoxImp::DrawStretchHandler(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - CFWL_ThemeBackground param; - param.m_pGraphics = pGraphics; - param.m_iPart = FWL_PART_CMB_StretcgHandler; - param.m_dwStates = FWL_PARTSTATE_CMB_Normal; - param.m_pWidget = m_pInterface; - if (pMatrix) { - param.m_matrix.Concat(*pMatrix); - } - param.m_rtPart = m_rtHandler; - m_pProperties->m_pThemeProvider->DrawBackground(¶m); -} -void CFWL_ComboBoxImp::ShowDropList(FX_BOOL bActivate) { - if (m_pWidgetMgr->IsFormDisabled()) { - return DisForm_ShowDropList(bActivate); - } - FX_BOOL bDropList = IsDropListShowed(); - if (bDropList == bActivate) { - return; - } - if (!m_pForm) { - InitProxyForm(); - } - m_pListProxyDelegate->Reset(); - if (bActivate) { - static_cast<CFWL_ComboListImp*>(m_pListBox->GetImpl()) - ->ChangeSelected(m_iCurSel); - ReSetListItemAlignment(); - FX_DWORD dwStyleAdd = m_pProperties->m_dwStyleExes & - (FWL_STYLEEXT_CMB_Sort | FWL_STYLEEXT_CMB_OwnerDraw); - m_pListBox->ModifyStylesEx(dwStyleAdd, 0); - m_pListBox->GetWidgetRect(m_rtList, TRUE); - FX_FLOAT fHeight = GetListHeight(); - if (fHeight > 0) { - if (m_rtList.height > GetListHeight()) { - m_rtList.height = GetListHeight(); - m_pListBox->ModifyStyles(FWL_WGTSTYLE_VScroll, 0); - } - } - CFX_RectF rtAnchor; - rtAnchor.Set(0, 0, m_pProperties->m_rtWidget.width, - m_pProperties->m_rtWidget.height); - FX_FLOAT fMinHeight = 0; - if (m_rtList.width < m_rtClient.width) { - m_rtList.width = m_rtClient.width; - } - m_rtProxy = m_rtList; - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CMB_ListDrag) { - m_rtProxy.height += m_fComboFormHandler; - } - GetPopupPos(fMinHeight, m_rtProxy.height, rtAnchor, m_rtProxy); - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CMB_ListDrag) { - FX_FLOAT fx = 0; - FX_FLOAT fy = m_rtClient.top + m_rtClient.height / 2; - TransformTo(NULL, fx, fy); - m_bUpFormHandler = fy > m_rtProxy.top; - if (m_bUpFormHandler) { - m_rtHandler.Set(0, 0, m_rtList.width, m_fComboFormHandler); - m_rtList.top = m_fComboFormHandler; - } else { - m_rtHandler.Set(0, m_rtList.height, m_rtList.width, - m_fComboFormHandler); - } - } - m_pForm->SetWidgetRect(m_rtProxy); - m_pForm->Update(); - m_pListBox->SetWidgetRect(m_rtList); - m_pListBox->Update(); - CFWL_EvtCmbPreDropDown ev; - ev.m_pSrcTarget = m_pInterface; - DispatchEvent(&ev); - m_fItemHeight = - static_cast<CFWL_ComboListImp*>(m_pListBox->GetImpl())->m_fItemHeight; - static_cast<CFWL_ComboListImp*>(m_pListBox->GetImpl())->SetFocus(TRUE); - m_pForm->DoModal(); - static_cast<CFWL_ComboListImp*>(m_pListBox->GetImpl())->SetFocus(FALSE); - } else { - m_pForm->EndDoModal(); - CFWL_EvtCmbCloseUp ev; - ev.m_pSrcTarget = m_pInterface; - DispatchEvent(&ev); - m_bLButtonDown = FALSE; - static_cast<CFWL_ComboListImp*>(m_pListBox->GetImpl())->m_bNotifyOwner = - TRUE; - SetFocus(TRUE); - } -} -FX_BOOL CFWL_ComboBoxImp::IsDropListShowed() { - return m_pForm && !(m_pForm->GetStates() & FWL_WGTSTATE_Invisible); -} -FX_BOOL CFWL_ComboBoxImp::IsDropDownStyle() const { - return m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CMB_DropDown; -} -void CFWL_ComboBoxImp::MatchEditText() { - CFX_WideString wsText; - m_pEdit->GetText(wsText); - int32_t iMatch = - static_cast<CFWL_ComboListImp*>(m_pListBox->GetImpl())->MatchItem(wsText); - if (iMatch != m_iCurSel) { - static_cast<CFWL_ComboListImp*>(m_pListBox->GetImpl()) - ->ChangeSelected(iMatch); - if (iMatch >= 0) { - SynchrEditText(iMatch); - } - } else if (iMatch >= 0) { - static_cast<CFWL_ComboEditImp*>(m_pEdit->GetImpl())->SetSelected(); - } - m_iCurSel = iMatch; -} -void CFWL_ComboBoxImp::SynchrEditText(int32_t iListItem) { - CFX_WideString wsText; - IFWL_ComboBoxDP* pData = - static_cast<IFWL_ComboBoxDP*>(m_pProperties->m_pDataProvider); - FWL_HLISTITEM hItem = pData->GetItem(m_pInterface, iListItem); - static_cast<CFWL_ComboListImp*>(m_pListBox->GetImpl()) - ->GetItemText(hItem, wsText); - m_pEdit->SetText(wsText); - m_pEdit->Update(); - static_cast<CFWL_ComboEditImp*>(m_pEdit->GetImpl())->SetSelected(); -} -void CFWL_ComboBoxImp::Layout() { - if (m_pWidgetMgr->IsFormDisabled()) { - return DisForm_Layout(); - } - GetClientRect(m_rtClient); - FX_FLOAT* pFWidth = - static_cast<FX_FLOAT*>(GetThemeCapacity(FWL_WGTCAPACITY_ScrollBarWidth)); - if (!pFWidth) - return; - FX_FLOAT fBtn = *pFWidth; - m_rtBtn.Set(m_rtClient.right() - fBtn, m_rtClient.top, fBtn, - m_rtClient.height); - FX_BOOL bIsDropDown = IsDropDownStyle(); - if (bIsDropDown && m_pEdit) { - CFX_RectF rtEdit; - rtEdit.Set(m_rtClient.left, m_rtClient.top, m_rtClient.width - fBtn, - m_rtClient.height); - m_pEdit->SetWidgetRect(rtEdit); - if (m_iCurSel >= 0) { - CFX_WideString wsText; - IFWL_ComboBoxDP* pData = - static_cast<IFWL_ComboBoxDP*>(m_pProperties->m_pDataProvider); - FWL_HLISTITEM hItem = pData->GetItem(m_pInterface, m_iCurSel); - static_cast<CFWL_ComboListImp*>(m_pListBox->GetImpl()) - ->GetItemText(hItem, wsText); - m_pEdit->LockUpdate(); - m_pEdit->SetText(wsText); - m_pEdit->UnlockUpdate(); - } - m_pEdit->Update(); - } -} -void CFWL_ComboBoxImp::ReSetTheme() { - IFWL_ThemeProvider* pTheme = m_pProperties->m_pThemeProvider; - if (!pTheme) { - pTheme = GetAvailableTheme(); - m_pProperties->m_pThemeProvider = pTheme; - } - if (m_pListBox) { - if (!m_pListBox->GetThemeProvider() && - pTheme->IsValidWidget(m_pListBox.get())) { - m_pListBox->SetThemeProvider(pTheme); - } - } - if (m_pEdit) { - if (!m_pEdit->GetThemeProvider() && pTheme->IsValidWidget(m_pEdit.get())) { - m_pEdit->SetThemeProvider(pTheme); - } - } -} -void CFWL_ComboBoxImp::ReSetEditAlignment() { - if (!m_pEdit) - return; - FX_DWORD dwStylExes = m_pProperties->m_dwStyleExes; - FX_DWORD dwAdd = 0; - switch (dwStylExes & FWL_STYLEEXT_CMB_EditHAlignMask) { - case FWL_STYLEEXT_CMB_EditHCenter: { - dwAdd |= FWL_STYLEEXT_EDT_HCenter; - break; - } - case FWL_STYLEEXT_CMB_EditHFar: { - dwAdd |= FWL_STYLEEXT_EDT_HFar; - break; - } - default: { dwAdd |= FWL_STYLEEXT_EDT_HNear; } - } - switch (dwStylExes & FWL_STYLEEXT_CMB_EditVAlignMask) { - case FWL_STYLEEXT_CMB_EditVCenter: { - dwAdd |= FWL_STYLEEXT_EDT_VCenter; - break; - } - case FWL_STYLEEXT_CMB_EditVFar: { - dwAdd |= FWL_STYLEEXT_EDT_VFar; - break; - } - default: { dwAdd |= FWL_STYLEEXT_EDT_VNear; } - } - if (dwStylExes & FWL_STYLEEXT_CMB_EditJustified) { - dwAdd |= FWL_STYLEEXT_EDT_Justified; - } - if (dwStylExes & FWL_STYLEEXT_CMB_EditDistributed) { - dwAdd |= FWL_STYLEEXT_EDT_Distributed; - } - m_pEdit->ModifyStylesEx(dwAdd, FWL_STYLEEXT_EDT_HAlignMask | - FWL_STYLEEXT_EDT_HAlignModeMask | - FWL_STYLEEXT_EDT_VAlignMask); -} -void CFWL_ComboBoxImp::ReSetListItemAlignment() { - if (!m_pListBox) - return; - FX_DWORD dwStylExes = m_pProperties->m_dwStyleExes; - FX_DWORD dwAdd = 0; - switch (dwStylExes & FWL_STYLEEXT_CMB_ListItemAlignMask) { - case FWL_STYLEEXT_CMB_ListItemCenterAlign: { - dwAdd |= FWL_STYLEEXT_LTB_CenterAlign; - } - case FWL_STYLEEXT_CMB_ListItemRightAlign: { - dwAdd |= FWL_STYLEEXT_LTB_RightAlign; - } - default: { dwAdd |= FWL_STYLEEXT_LTB_LeftAlign; } - } - m_pListBox->ModifyStylesEx(dwAdd, FWL_STYLEEXT_CMB_ListItemAlignMask); -} -void CFWL_ComboBoxImp::ProcessSelChanged(FX_BOOL bLButtonUp) { - IFWL_ComboBoxDP* pDatas = - static_cast<IFWL_ComboBoxDP*>(m_pProperties->m_pDataProvider); - m_iCurSel = pDatas->GetItemIndex(m_pInterface, m_pListBox->GetSelItem(0)); - FX_BOOL bDropDown = IsDropDownStyle(); - if (bDropDown) { - IFWL_ComboBoxDP* pData = - static_cast<IFWL_ComboBoxDP*>(m_pProperties->m_pDataProvider); - FWL_HLISTITEM hItem = pData->GetItem(m_pInterface, m_iCurSel); - if (hItem) { - CFX_WideString wsText; - pData->GetItemText(m_pInterface, hItem, wsText); - if (m_pEdit) { - m_pEdit->SetText(wsText); - m_pEdit->Update(); - static_cast<CFWL_ComboEditImp*>(m_pEdit->GetImpl())->SetSelected(); - } - CFWL_EvtCmbSelChanged ev; - ev.bLButtonUp = bLButtonUp; - ev.m_pSrcTarget = m_pInterface; - ev.iArraySels.Add(m_iCurSel); - DispatchEvent(&ev); - } - } else { - Repaint(&m_rtClient); - } -} -void CFWL_ComboBoxImp::InitProxyForm() { - if (m_pForm) - return; - if (!m_pListBox) - return; - CFWL_WidgetImpProperties propForm; - propForm.m_pOwner = m_pInterface; - propForm.m_dwStyles = FWL_WGTSTYLE_Popup; - propForm.m_dwStates = FWL_WGTSTATE_Invisible; - CFX_WideString className; - m_pForm = IFWL_Form::CreateFormProxy(propForm, &className, m_pListBox.get()); - m_pForm->Initialize(); - m_pProxy = static_cast<CFWL_FormProxyImp*>(m_pForm->GetImpl()); - m_pListBox->SetParent(m_pForm); - m_pListProxyDelegate = new CFWL_ComboProxyImpDelegate(m_pForm, this); - m_pProxy->SetDelegate(m_pListProxyDelegate); -} -FWL_ERR CFWL_ComboBoxImp::DisForm_Initialize() { - if (CFWL_WidgetImp::Initialize() != FWL_ERR_Succeeded) - return FWL_WGTSTATE_Invisible; // Ditto. - m_pDelegate = new CFWL_ComboBoxImpDelegate(this); - DisForm_InitComboList(); - DisForm_InitComboEdit(); - return FWL_ERR_Succeeded; -} -void CFWL_ComboBoxImp::DisForm_InitComboList() { - if (m_pListBox) { - return; - } - CFWL_WidgetImpProperties prop; - prop.m_pParent = m_pInterface; - prop.m_dwStyles = FWL_WGTSTYLE_Border | FWL_WGTSTYLE_VScroll; - prop.m_dwStates = FWL_WGTSTATE_Invisible; - prop.m_pDataProvider = m_pProperties->m_pDataProvider; - prop.m_pThemeProvider = m_pProperties->m_pThemeProvider; - m_pListBox.reset(IFWL_ListBox::CreateComboList(prop, m_pInterface)); - m_pListBox->Initialize(); -} -void CFWL_ComboBoxImp::DisForm_InitComboEdit() { - if (m_pEdit) { - return; - } - CFWL_WidgetImpProperties prop; - prop.m_pParent = m_pInterface; - prop.m_pThemeProvider = m_pProperties->m_pThemeProvider; - m_pEdit.reset(IFWL_Edit::CreateComboEdit(prop, m_pInterface)); - m_pEdit->Initialize(); - static_cast<CFWL_ComboEditImp*>(m_pEdit->GetImpl())->SetOuter(m_pInterface); -} -void CFWL_ComboBoxImp::DisForm_ShowDropList(FX_BOOL bActivate) { - FX_BOOL bDropList = DisForm_IsDropListShowed(); - if (bDropList == bActivate) { - return; - } - if (bActivate) { - CFWL_EvtCmbPreDropDown preEvent; - preEvent.m_pSrcTarget = m_pInterface; - DispatchEvent(&preEvent); - CFWL_ComboListImp* pComboList = - static_cast<CFWL_ComboListImp*>(m_pListBox->GetImpl()); - int32_t iItems = pComboList->CountItems(); - if (iItems < 1) { - return; - } - ReSetListItemAlignment(); - pComboList->ChangeSelected(m_iCurSel); - FX_FLOAT fItemHeight = pComboList->GetItemHeigt(); - FX_FLOAT fBorder = GetBorderSize(); - FX_FLOAT fPopupMin = 0.0f; - if (iItems > 3) { - fPopupMin = fItemHeight * 3 + fBorder * 2; - } - FX_FLOAT fPopupMax = fItemHeight * iItems + fBorder * 2; - CFX_RectF rtList; - rtList.left = m_rtClient.left; - rtList.width = m_pProperties->m_rtWidget.width; - rtList.top = 0; - rtList.height = 0; - GetPopupPos(fPopupMin, fPopupMax, m_pProperties->m_rtWidget, rtList); - m_pListBox->SetWidgetRect(rtList); - m_pListBox->Update(); - } else { - SetFocus(TRUE); - } - m_pListBox->SetStates(FWL_WGTSTATE_Invisible, !bActivate); - if (bActivate) { - CFWL_EvtCmbPostDropDown postEvent; - postEvent.m_pSrcTarget = m_pInterface; - DispatchEvent(&postEvent); - } - CFX_RectF rect; - m_pListBox->GetWidgetRect(rect); - rect.Inflate(2, 2); - Repaint(&rect); -} -FX_BOOL CFWL_ComboBoxImp::DisForm_IsDropListShowed() { - return !(m_pListBox->GetStates() & FWL_WGTSTATE_Invisible); -} -FWL_ERR CFWL_ComboBoxImp::DisForm_ModifyStylesEx(FX_DWORD dwStylesExAdded, - FX_DWORD dwStylesExRemoved) { - if (!m_pEdit) { - DisForm_InitComboEdit(); - } - FX_BOOL bAddDropDown = dwStylesExAdded & FWL_STYLEEXT_CMB_DropDown; - FX_BOOL bDelDropDown = dwStylesExRemoved & FWL_STYLEEXT_CMB_DropDown; - dwStylesExRemoved &= ~FWL_STYLEEXT_CMB_DropDown; - m_pProperties->m_dwStyleExes |= FWL_STYLEEXT_CMB_DropDown; - if (bAddDropDown) { - m_pEdit->ModifyStylesEx(0, FWL_STYLEEXT_EDT_ReadOnly); - } else if (bDelDropDown) { - m_pEdit->ModifyStylesEx(FWL_STYLEEXT_EDT_ReadOnly, 0); - } - return CFWL_WidgetImp::ModifyStylesEx(dwStylesExAdded, dwStylesExRemoved); -} -FWL_ERR CFWL_ComboBoxImp::DisForm_Update() { - if (m_iLock) { - return FWL_ERR_Indefinite; - } - if (m_pEdit) { - ReSetEditAlignment(); - } - ReSetTheme(); - Layout(); - return FWL_ERR_Succeeded; -} -FX_DWORD CFWL_ComboBoxImp::DisForm_HitTest(FX_FLOAT fx, FX_FLOAT fy) { - CFX_RectF rect; - rect.Set(0, 0, m_pProperties->m_rtWidget.width - m_rtBtn.width, - m_pProperties->m_rtWidget.height); - if (rect.Contains(fx, fy)) { - return FWL_WGTHITTEST_Edit; - } - if (m_rtBtn.Contains(fx, fy)) { - return FWL_WGTHITTEST_Client; - } - if (DisForm_IsDropListShowed()) { - m_pListBox->GetWidgetRect(rect); - if (rect.Contains(fx, fy)) { - return FWL_WGTHITTEST_Client; - } - } - return FWL_WGTHITTEST_Unknown; -} -FWL_ERR CFWL_ComboBoxImp::DisForm_DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - IFWL_ThemeProvider* pTheme = m_pProperties->m_pThemeProvider; - CFX_Matrix mtOrg; - mtOrg.Set(1, 0, 0, 1, 0, 0); - if (pMatrix) { - mtOrg = *pMatrix; - } - FX_BOOL bListShowed = m_pListBox && DisForm_IsDropListShowed(); - pGraphics->SaveGraphState(); - pGraphics->ConcatMatrix(&mtOrg); - if (!m_rtBtn.IsEmpty(0.1f)) { - CFWL_ThemeBackground param; - param.m_pWidget = m_pInterface; - param.m_iPart = FWL_PART_CMB_DropDownButton; - param.m_dwStates = m_iBtnState; - param.m_pGraphics = pGraphics; - param.m_rtPart = m_rtBtn; - pTheme->DrawBackground(¶m); - } - pGraphics->RestoreGraphState(); - if (m_pEdit) { - CFX_RectF rtEdit; - m_pEdit->GetWidgetRect(rtEdit); - CFX_Matrix mt; - mt.Set(1, 0, 0, 1, rtEdit.left, rtEdit.top); - mt.Concat(mtOrg); - m_pEdit->DrawWidget(pGraphics, &mt); - } - if (bListShowed) { - CFX_RectF rtList; - m_pListBox->GetWidgetRect(rtList); - CFX_Matrix mt; - mt.Set(1, 0, 0, 1, rtList.left, rtList.top); - mt.Concat(mtOrg); - m_pListBox->DrawWidget(pGraphics, &mt); - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ComboBoxImp::DisForm_GetBBox(CFX_RectF& rect) { - rect = m_pProperties->m_rtWidget; - if (m_pListBox && DisForm_IsDropListShowed()) { - CFX_RectF rtList; - m_pListBox->GetWidgetRect(rtList); - rtList.Offset(rect.left, rect.top); - rect.Union(rtList); - } - return FWL_ERR_Succeeded; -} -void CFWL_ComboBoxImp::DisForm_Layout() { - GetClientRect(m_rtClient); - m_rtContent = m_rtClient; - FX_FLOAT* pFWidth = - static_cast<FX_FLOAT*>(GetThemeCapacity(FWL_WGTCAPACITY_ScrollBarWidth)); - if (!pFWidth) - return; - FX_FLOAT borderWidth = 0; - { borderWidth = FWL_PART_CMB_Border; } - FX_FLOAT fBtn = *pFWidth; - if (!(GetStylesEx() & FWL_STYLEEXT_CMB_ReadOnly)) { - m_rtBtn.Set(m_rtClient.right() - fBtn, m_rtClient.top + borderWidth, - fBtn - borderWidth, m_rtClient.height - 2 * borderWidth); - } - CFX_RectF* pUIMargin = - static_cast<CFX_RectF*>(GetThemeCapacity(FWL_WGTCAPACITY_UIMargin)); - if (pUIMargin) { - m_rtContent.Deflate(pUIMargin->left, pUIMargin->top, pUIMargin->width, - pUIMargin->height); - } - FX_BOOL bIsDropDown = IsDropDownStyle(); - if (bIsDropDown && m_pEdit) { - CFX_RectF rtEdit; - rtEdit.Set(m_rtContent.left, m_rtContent.top, m_rtContent.width - fBtn, - m_rtContent.height); - m_pEdit->SetWidgetRect(rtEdit); - if (m_iCurSel >= 0) { - CFX_WideString wsText; - IFWL_ComboBoxDP* pData = - static_cast<IFWL_ComboBoxDP*>(m_pProperties->m_pDataProvider); - FWL_HLISTITEM hItem = pData->GetItem(m_pInterface, m_iCurSel); - static_cast<CFWL_ComboListImp*>(m_pListBox->GetImpl()) - ->GetItemText(hItem, wsText); - m_pEdit->LockUpdate(); - m_pEdit->SetText(wsText); - m_pEdit->UnlockUpdate(); - } - m_pEdit->Update(); - } -} -CFWL_ComboBoxImpDelegate::CFWL_ComboBoxImpDelegate(CFWL_ComboBoxImp* pOwner) - : m_pOwner(pOwner) {} -int32_t CFWL_ComboBoxImpDelegate::OnProcessMessage(CFWL_Message* pMessage) { - if (m_pOwner->m_pWidgetMgr->IsFormDisabled()) { - return DisForm_OnProcessMessage(pMessage); - } - if (!pMessage) - return 0; - FX_DWORD dwMsgCode = pMessage->GetClassID(); - FX_BOOL iRet = 1; - switch (dwMsgCode) { - case FWL_MSGHASH_SetFocus: - case FWL_MSGHASH_KillFocus: { - OnFocusChanged(pMessage, dwMsgCode == FWL_MSGHASH_SetFocus); - break; - } - case FWL_MSGHASH_Mouse: { - CFWL_MsgMouse* pMsg = static_cast<CFWL_MsgMouse*>(pMessage); - FX_DWORD dwCmd = pMsg->m_dwCmd; - switch (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_MouseLeave: { - OnMouseLeave(pMsg); - break; - } - default: {} - } - break; - } - case FWL_MSGHASH_Key: { - OnKey(static_cast<CFWL_MsgKey*>(pMessage)); - break; - } - default: { iRet = 0; } - } - CFWL_WidgetImpDelegate::OnProcessMessage(pMessage); - return iRet; -} -FWL_ERR CFWL_ComboBoxImpDelegate::OnProcessEvent(CFWL_Event* pEvent) { - FX_DWORD dwFlag = pEvent->GetClassID(); - if (dwFlag == FWL_EVTHASH_LTB_DrawItem) { - CFWL_EvtLtbDrawItem* pDrawItemEvent = - static_cast<CFWL_EvtLtbDrawItem*>(pEvent); - CFWL_EvtCmbDrawItem pTemp; - pTemp.m_pSrcTarget = m_pOwner->m_pInterface; - pTemp.m_pGraphics = pDrawItemEvent->m_pGraphics; - pTemp.m_index = pDrawItemEvent->m_index; - pTemp.m_rtItem = pDrawItemEvent->m_rect; - m_pOwner->DispatchEvent(&pTemp); - } else if (dwFlag == FWL_EVTHASH_Scroll) { - CFWL_EvtScroll* pScrollEvent = static_cast<CFWL_EvtScroll*>(pEvent); - CFWL_EvtScroll pScrollEv; - pScrollEv.m_pSrcTarget = m_pOwner->m_pInterface; - pScrollEv.m_iScrollCode = pScrollEvent->m_iScrollCode; - pScrollEv.m_fPos = pScrollEvent->m_fPos; - m_pOwner->DispatchEvent(&pScrollEv); - } else if (dwFlag == FWL_EVTHASH_EDT_TextChanged) { - CFWL_EvtEdtTextChanged* pTextChangedEvent = - static_cast<CFWL_EvtEdtTextChanged*>(pEvent); - CFWL_EvtCmbEditChanged pTemp; - pTemp.m_pSrcTarget = m_pOwner->m_pInterface; - pTemp.wsInsert = pTextChangedEvent->wsInsert; - pTemp.wsDelete = pTextChangedEvent->wsDelete; - pTemp.nChangeType = pTextChangedEvent->nChangeType; - m_pOwner->DispatchEvent(&pTemp); - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ComboBoxImpDelegate::OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - return m_pOwner->DrawWidget(pGraphics, pMatrix); -} -void CFWL_ComboBoxImpDelegate::OnFocusChanged(CFWL_Message* pMsg, - FX_BOOL bSet) { - IFWL_Target* pDstTarget = pMsg->m_pDstTarget; - IFWL_Target* pSrcTarget = pMsg->m_pSrcTarget; - FX_BOOL bDropDown = m_pOwner->IsDropDownStyle(); - if (bSet) { - m_pOwner->m_pProperties->m_dwStates |= FWL_WGTSTATE_Focused; - if (bDropDown && pSrcTarget != m_pOwner->m_pListBox.get()) { - if (!m_pOwner->m_pEdit) - return; - static_cast<CFWL_ComboEditImp*>(m_pOwner->m_pEdit->GetImpl()) - ->SetSelected(); - } else { - m_pOwner->Repaint(&m_pOwner->m_rtClient); - } - } else { - m_pOwner->m_pProperties->m_dwStates &= ~FWL_WGTSTATE_Focused; - if (bDropDown && pDstTarget != m_pOwner->m_pListBox.get()) { - if (!m_pOwner->m_pEdit) - return; - static_cast<CFWL_ComboEditImp*>(m_pOwner->m_pEdit->GetImpl()) - ->FlagFocus(FALSE); - static_cast<CFWL_ComboEditImp*>(m_pOwner->m_pEdit->GetImpl()) - ->ClearSelected(); - } else { - m_pOwner->Repaint(&m_pOwner->m_rtClient); - } - } -} -void CFWL_ComboBoxImpDelegate::OnLButtonDown(CFWL_MsgMouse* pMsg) { - if (m_pOwner->m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled) { - return; - } - FX_BOOL bDropDown = m_pOwner->IsDropDownStyle(); - CFX_RectF& rtBtn = bDropDown ? m_pOwner->m_rtBtn : m_pOwner->m_rtClient; - FX_BOOL bClickBtn = rtBtn.Contains(pMsg->m_fx, pMsg->m_fy); - if (bClickBtn) { - if (bDropDown && m_pOwner->m_pEdit) { - m_pOwner->MatchEditText(); - } - m_pOwner->m_bLButtonDown = TRUE; - m_pOwner->m_iBtnState = FWL_PARTSTATE_CMB_Pressed; - m_pOwner->Repaint(&m_pOwner->m_rtClient); - m_pOwner->ShowDropList(TRUE); - m_pOwner->m_iBtnState = FWL_PARTSTATE_CMB_Normal; - m_pOwner->Repaint(&m_pOwner->m_rtClient); - } -} -void CFWL_ComboBoxImpDelegate::OnLButtonUp(CFWL_MsgMouse* pMsg) { - m_pOwner->m_bLButtonDown = FALSE; - if (m_pOwner->m_rtBtn.Contains(pMsg->m_fx, pMsg->m_fy)) { - m_pOwner->m_iBtnState = FWL_PARTSTATE_CMB_Hovered; - } else { - m_pOwner->m_iBtnState = FWL_PARTSTATE_CMB_Normal; - } - m_pOwner->Repaint(&m_pOwner->m_rtBtn); -} -void CFWL_ComboBoxImpDelegate::OnMouseMove(CFWL_MsgMouse* pMsg) { - int32_t iOldState = m_pOwner->m_iBtnState; - if (m_pOwner->m_rtBtn.Contains(pMsg->m_fx, pMsg->m_fy)) { - m_pOwner->m_iBtnState = m_pOwner->m_bLButtonDown - ? FWL_PARTSTATE_CMB_Pressed - : FWL_PARTSTATE_CMB_Hovered; - } else { - m_pOwner->m_iBtnState = FWL_PARTSTATE_CMB_Normal; - } - if ((iOldState != m_pOwner->m_iBtnState) && - !((m_pOwner->m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled) == - FWL_WGTSTATE_Disabled)) { - m_pOwner->Repaint(&m_pOwner->m_rtBtn); - } -} -void CFWL_ComboBoxImpDelegate::OnMouseLeave(CFWL_MsgMouse* pMsg) { - if (!m_pOwner->IsDropListShowed() && - !((m_pOwner->m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled) == - FWL_WGTSTATE_Disabled)) { - m_pOwner->m_iBtnState = FWL_PARTSTATE_CMB_Normal; - m_pOwner->Repaint(&m_pOwner->m_rtBtn); - } -} -void CFWL_ComboBoxImpDelegate::OnKey(CFWL_MsgKey* pMsg) { - FX_DWORD dwKeyCode = pMsg->m_dwKeyCode; - if (dwKeyCode == FWL_VKEY_Tab) { - m_pOwner->DispatchKeyEvent(pMsg); - return; - } - if (pMsg->m_pDstTarget == m_pOwner->m_pInterface) - DoSubCtrlKey(pMsg); -} -void CFWL_ComboBoxImpDelegate::DoSubCtrlKey(CFWL_MsgKey* pMsg) { - FX_DWORD dwKeyCode = pMsg->m_dwKeyCode; - const bool bUp = dwKeyCode == FWL_VKEY_Up; - const bool bDown = dwKeyCode == FWL_VKEY_Down; - if (bUp || bDown) { - int32_t iCount = - static_cast<CFWL_ComboListImp*>(m_pOwner->m_pListBox->GetImpl()) - ->CountItems(); - if (iCount < 1) { - return; - } - FX_BOOL bMatchEqual = FALSE; - int32_t iCurSel = m_pOwner->m_iCurSel; - FX_BOOL bDropDown = m_pOwner->IsDropDownStyle(); - if (bDropDown && m_pOwner->m_pEdit) { - CFX_WideString wsText; - m_pOwner->m_pEdit->GetText(wsText); - iCurSel = static_cast<CFWL_ComboListImp*>(m_pOwner->m_pListBox->GetImpl()) - ->MatchItem(wsText); - if (iCurSel >= 0) { - CFX_WideString wsTemp; - IFWL_ComboBoxDP* pData = static_cast<IFWL_ComboBoxDP*>( - m_pOwner->m_pProperties->m_pDataProvider); - FWL_HLISTITEM hItem = pData->GetItem(m_pOwner->m_pInterface, iCurSel); - static_cast<CFWL_ComboListImp*>(m_pOwner->m_pListBox->GetImpl()) - ->GetItemText(hItem, wsTemp); - bMatchEqual = wsText.Equal(wsTemp); - } - } - if (iCurSel < 0) { - iCurSel = 0; - } else if (!bDropDown || bMatchEqual) { - if ((bUp && iCurSel == 0) || (bDown && iCurSel == iCount - 1)) { - return; - } - if (bUp) { - iCurSel--; - } else { - iCurSel++; - } - } - m_pOwner->m_iCurSel = iCurSel; - if (bDropDown && m_pOwner->m_pEdit) { - m_pOwner->SynchrEditText(m_pOwner->m_iCurSel); - } else { - m_pOwner->Repaint(&m_pOwner->m_rtClient); - } - return; - } - FX_BOOL bDropDown = m_pOwner->IsDropDownStyle(); - if (bDropDown) { - IFWL_WidgetDelegate* pDelegate = m_pOwner->m_pEdit->SetDelegate(NULL); - pDelegate->OnProcessMessage(pMsg); - } -} -int32_t CFWL_ComboBoxImpDelegate::DisForm_OnProcessMessage( - CFWL_Message* pMessage) { - if (!pMessage) - return 0; - FX_DWORD dwMsgCode = pMessage->GetClassID(); - FX_BOOL backDefault = TRUE; - switch (dwMsgCode) { - case FWL_MSGHASH_SetFocus: - case FWL_MSGHASH_KillFocus: { - backDefault = FALSE; - DisForm_OnFocusChanged(pMessage, dwMsgCode == FWL_MSGHASH_SetFocus); - break; - } - case FWL_MSGHASH_Mouse: { - backDefault = FALSE; - CFWL_MsgMouse* pMsg = static_cast<CFWL_MsgMouse*>(pMessage); - FX_DWORD dwCmd = pMsg->m_dwCmd; - switch (dwCmd) { - case FWL_MSGMOUSECMD_LButtonDown: { - DisForm_OnLButtonDown(pMsg); - break; - } - case FWL_MSGMOUSECMD_LButtonUp: { - OnLButtonUp(pMsg); - break; - } - default: {} - } - break; - } - case FWL_MSGHASH_Key: { - backDefault = FALSE; - CFWL_MsgKey* pKey = static_cast<CFWL_MsgKey*>(pMessage); - if (pKey->m_dwCmd == FWL_MSGKEYCMD_KeyUp) { - break; - } - if (m_pOwner->DisForm_IsDropListShowed() && - pKey->m_dwCmd == FWL_MSGKEYCMD_KeyDown) { - FX_DWORD dwKeyCode = pKey->m_dwKeyCode; - FX_BOOL bListKey = - dwKeyCode == FWL_VKEY_Up || dwKeyCode == FWL_VKEY_Down || - dwKeyCode == FWL_VKEY_Return || dwKeyCode == FWL_VKEY_Escape; - if (bListKey) { - IFWL_WidgetDelegate* pDelegate = - m_pOwner->m_pListBox->SetDelegate(NULL); - pDelegate->OnProcessMessage(pMessage); - break; - } - } - DisForm_OnKey(pKey); - break; - } - default: {} - } - if (!backDefault) { - return 1; - } - return CFWL_WidgetImpDelegate::OnProcessMessage(pMessage); -} -void CFWL_ComboBoxImpDelegate::DisForm_OnLButtonDown(CFWL_MsgMouse* pMsg) { - FX_BOOL bDropDown = m_pOwner->DisForm_IsDropListShowed(); - CFX_RectF& rtBtn = bDropDown ? m_pOwner->m_rtBtn : m_pOwner->m_rtClient; - FX_BOOL bClickBtn = rtBtn.Contains(pMsg->m_fx, pMsg->m_fy); - if (bClickBtn) { - if (m_pOwner->DisForm_IsDropListShowed()) { - m_pOwner->DisForm_ShowDropList(FALSE); - return; - } - { - if (m_pOwner->m_pEdit) { - m_pOwner->MatchEditText(); - } - m_pOwner->DisForm_ShowDropList(TRUE); - } - } -} -void CFWL_ComboBoxImpDelegate::DisForm_OnFocusChanged(CFWL_Message* pMsg, - FX_BOOL bSet) { - if (bSet) { - m_pOwner->m_pProperties->m_dwStates |= FWL_WGTSTATE_Focused; - if ((m_pOwner->m_pEdit->GetStates() & FWL_WGTSTATE_Focused) == 0) { - CFWL_MsgSetFocus msg; - msg.m_pDstTarget = m_pOwner->m_pEdit.get(); - msg.m_pSrcTarget = NULL; - IFWL_WidgetDelegate* pDelegate = m_pOwner->m_pEdit->SetDelegate(NULL); - pDelegate->OnProcessMessage(&msg); - } - } else { - m_pOwner->m_pProperties->m_dwStates &= ~FWL_WGTSTATE_Focused; - m_pOwner->DisForm_ShowDropList(FALSE); - CFWL_MsgKillFocus msg; - msg.m_pDstTarget = NULL; - msg.m_pSrcTarget = m_pOwner->m_pEdit.get(); - IFWL_WidgetDelegate* pDelegate = m_pOwner->m_pEdit->SetDelegate(NULL); - pDelegate->OnProcessMessage(&msg); - } -} -void CFWL_ComboBoxImpDelegate::DisForm_OnKey(CFWL_MsgKey* pMsg) { - FX_DWORD dwKeyCode = pMsg->m_dwKeyCode; - const bool bUp = dwKeyCode == FWL_VKEY_Up; - const bool bDown = dwKeyCode == FWL_VKEY_Down; - if (bUp || bDown) { - CFWL_ComboListImp* pComboList = - static_cast<CFWL_ComboListImp*>(m_pOwner->m_pListBox->GetImpl()); - int32_t iCount = pComboList->CountItems(); - if (iCount < 1) { - return; - } - FX_BOOL bMatchEqual = FALSE; - int32_t iCurSel = m_pOwner->m_iCurSel; - if (m_pOwner->m_pEdit) { - CFX_WideString wsText; - m_pOwner->m_pEdit->GetText(wsText); - iCurSel = pComboList->MatchItem(wsText); - if (iCurSel >= 0) { - CFX_WideString wsTemp; - FWL_HLISTITEM item = m_pOwner->m_pListBox->GetSelItem(iCurSel); - m_pOwner->m_pListBox->GetItemText(item, wsTemp); - bMatchEqual = wsText.Equal(wsTemp); - } - } - if (iCurSel < 0) { - iCurSel = 0; - } else if (bMatchEqual) { - if ((bUp && iCurSel == 0) || (bDown && iCurSel == iCount - 1)) { - return; - } - if (bUp) { - iCurSel--; - } else { - iCurSel++; - } - } - m_pOwner->m_iCurSel = iCurSel; - m_pOwner->SynchrEditText(m_pOwner->m_iCurSel); - return; - } - if (m_pOwner->m_pEdit) { - IFWL_WidgetDelegate* pDelegate = m_pOwner->m_pEdit->SetDelegate(NULL); - pDelegate->OnProcessMessage(pMsg); - } -} -CFWL_ComboProxyImpDelegate::CFWL_ComboProxyImpDelegate( - IFWL_Form* pForm, - CFWL_ComboBoxImp* pComboBox) - : m_bLButtonDown(FALSE), - m_bLButtonUpSelf(FALSE), - m_fStartPos(0), - m_pForm(pForm), - m_pComboBox(pComboBox) {} -int32_t CFWL_ComboProxyImpDelegate::OnProcessMessage(CFWL_Message* pMessage) { - if (!pMessage) - return 0; - FX_DWORD dwMsgCode = pMessage->GetClassID(); - if (dwMsgCode == FWL_MSGHASH_Mouse) { - CFWL_MsgMouse* pMsg = static_cast<CFWL_MsgMouse*>(pMessage); - FX_DWORD dwCmd = pMsg->m_dwCmd; - switch (dwCmd) { - case FWL_MSGMOUSECMD_LButtonDown: { - OnLButtonDown(pMsg); - break; - } - case FWL_MSGMOUSECMD_LButtonUp: { - OnLButtonUp(pMsg); - break; - } - case FWL_MSGMOUSECMD_MouseMove: { - OnMouseMove(pMsg); - break; - } - default: {} - } - } - if (dwMsgCode == FWL_MSGHASH_Deactivate) { - OnDeactive(static_cast<CFWL_MsgDeactivate*>(pMessage)); - } - if (dwMsgCode == FWL_MSGHASH_KillFocus || dwMsgCode == FWL_MSGHASH_SetFocus) { - OnFocusChanged(static_cast<CFWL_MsgKillFocus*>(pMessage), - dwMsgCode == FWL_MSGHASH_SetFocus); - } - return CFWL_WidgetImpDelegate::OnProcessMessage(pMessage); -} -FWL_ERR CFWL_ComboProxyImpDelegate::OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - m_pComboBox->DrawStretchHandler(pGraphics, pMatrix); - return FWL_ERR_Succeeded; -} -void CFWL_ComboProxyImpDelegate::OnLButtonDown(CFWL_MsgMouse* pMsg) { - IFWL_NoteThread* pThread = m_pForm->GetOwnerThread(); - if (!pThread) - return; - CFWL_NoteDriver* pDriver = - static_cast<CFWL_NoteDriver*>(pThread->GetNoteDriver()); - CFX_RectF rtWidget; - m_pForm->GetWidgetRect(rtWidget); - rtWidget.left = rtWidget.top = 0; - if (rtWidget.Contains(pMsg->m_fx, pMsg->m_fy)) { - m_bLButtonDown = TRUE; - pDriver->SetGrab(m_pForm, TRUE); - } else { - m_bLButtonDown = FALSE; - pDriver->SetGrab(m_pForm, FALSE); - m_pComboBox->ShowDropList(FALSE); - } -} -void CFWL_ComboProxyImpDelegate::OnLButtonUp(CFWL_MsgMouse* pMsg) { - m_bLButtonDown = FALSE; - IFWL_NoteThread* pThread = m_pForm->GetOwnerThread(); - if (!pThread) - return; - CFWL_NoteDriver* pDriver = - static_cast<CFWL_NoteDriver*>(pThread->GetNoteDriver()); - pDriver->SetGrab(m_pForm, FALSE); - if (m_bLButtonUpSelf) { - CFX_RectF rect; - m_pForm->GetWidgetRect(rect); - rect.left = rect.top = 0; - if (!rect.Contains(pMsg->m_fx, pMsg->m_fy) && - m_pComboBox->IsDropListShowed()) { - m_pComboBox->ShowDropList(FALSE); - } - } else { - m_bLButtonUpSelf = TRUE; - } -} -void CFWL_ComboProxyImpDelegate::OnMouseMove(CFWL_MsgMouse* pMsg) {} -void CFWL_ComboProxyImpDelegate::OnDeactive(CFWL_MsgDeactivate* pMsg) { - m_pComboBox->ShowDropList(FALSE); -} -void CFWL_ComboProxyImpDelegate::OnFocusChanged(CFWL_MsgKillFocus* pMsg, - FX_BOOL bSet) { - if (!bSet) { - if (pMsg->m_pSetFocus == NULL) { - m_pComboBox->ShowDropList(FALSE); - } - } -} diff --git a/xfa/src/fwl/basewidget/fwl_comboboximp.h b/xfa/src/fwl/basewidget/fwl_comboboximp.h deleted file mode 100644 index 000e0afe9c..0000000000 --- a/xfa/src/fwl/basewidget/fwl_comboboximp.h +++ /dev/null @@ -1,237 +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 - -#ifndef XFA_SRC_FWL_BASEWIDGET_FWL_COMBOBOXIMP_H_ -#define XFA_SRC_FWL_BASEWIDGET_FWL_COMBOBOXIMP_H_ - -#include <memory> - -#include "xfa/src/fwl/basewidget/fwl_editimp.h" -#include "xfa/src/fwl/basewidget/fwl_listboximp.h" - -class CFWL_WidgetImp; -class CFWL_WidgetImpProperties; -class CFWL_WidgetImpDelegate; -class CFWL_ListBoxImp; -class CFWL_ListBoxImpDelegate; -class CFWL_FormProxyImp; -class IFWL_Widget; -class CFWL_ComboEditImp; -class CFWL_ComboEditImpDelegate; -class CFWL_ComboListImp; -class CFWL_ComboListImpDelegate; -class CFWL_ComboBoxImp; -class CFWL_ComboBoxImpDelegate; -class CFWL_ComboProxyImpDelegate; -class CFWL_ComboEditImp : public CFWL_EditImp { - public: - CFWL_ComboEditImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter); - - void ClearSelected(); - void SetSelected(); - void EndCaret(); - void FlagFocus(FX_BOOL bSet); - - protected: - void SetComboBoxFocus(FX_BOOL bSet); - CFWL_ComboBoxImp* m_pOuter; - friend class CFWL_ComboEditImpDelegate; -}; -class CFWL_ComboEditImpDelegate : public CFWL_EditImpDelegate { - public: - CFWL_ComboEditImpDelegate(CFWL_ComboEditImp* pOwner); - int32_t OnProcessMessage(CFWL_Message* pMessage) override; - - protected: - CFWL_ComboEditImp* m_pOwner; -}; -class CFWL_ComboListImp : public CFWL_ListBoxImp { - public: - CFWL_ComboListImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter); - virtual FWL_ERR Initialize(); - virtual FWL_ERR Finalize(); - int32_t MatchItem(const CFX_WideString& wsMatch); - void ChangeSelected(int32_t iSel); - int32_t CountItems(); - void GetItemRect(int32_t nIndex, CFX_RectF& rtItem); - void ClientToOuter(FX_FLOAT& fx, FX_FLOAT& fy); - void SetFocus(FX_BOOL bSet); - FX_BOOL m_bNotifyOwner; - friend class CFWL_ComboListImpDelegate; - friend class CFWL_ComboBoxImp; -}; -class CFWL_ComboListImpDelegate : public CFWL_ListBoxImpDelegate { - public: - CFWL_ComboListImpDelegate(CFWL_ComboListImp* pOwner); - int32_t OnProcessMessage(CFWL_Message* pMessage) override; - - protected: - void OnDropListFocusChanged(CFWL_Message* pMsg, FX_BOOL bSet = TRUE); - int32_t OnDropListMouseMove(CFWL_MsgMouse* pMsg); - int32_t OnDropListLButtonDown(CFWL_MsgMouse* pMsg); - int32_t OnDropListLButtonUp(CFWL_MsgMouse* pMsg); - int32_t OnDropListKey(CFWL_MsgKey* pKey); - void OnDropListKeyDown(CFWL_MsgKey* pKey); - CFWL_ComboListImp* m_pOwner; -}; -class CFWL_ComboBoxImp : public CFWL_WidgetImp { - public: - CFWL_ComboBoxImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter); - virtual ~CFWL_ComboBoxImp(); - virtual FWL_ERR GetClassName(CFX_WideString& wsClass) const; - virtual FX_DWORD GetClassID() const; - virtual FWL_ERR Initialize(); - virtual FWL_ERR Finalize(); - virtual FWL_ERR GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize = FALSE); - virtual FWL_ERR ModifyStylesEx(FX_DWORD dwStylesExAdded, - FX_DWORD dwStylesExRemoved); - virtual FWL_ERR SetStates(FX_DWORD dwStates, FX_BOOL bSet = TRUE); - virtual FWL_ERR Update(); - virtual FX_DWORD HitTest(FX_FLOAT fx, FX_FLOAT fy); - virtual FWL_ERR DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL); - virtual FWL_ERR SetThemeProvider(IFWL_ThemeProvider* pThemeProvider); - virtual int32_t GetCurSel(); - virtual FWL_ERR SetCurSel(int32_t iSel); - virtual FWL_ERR SetEditText(const CFX_WideString& wsText); - virtual int32_t GetEditTextLength() const; - virtual FWL_ERR GetEditText(CFX_WideString& wsText, - int32_t nStart = 0, - int32_t nCount = -1) const; - virtual FWL_ERR SetEditSelRange(int32_t nStart, int32_t nCount = -1); - virtual int32_t GetEditSelRange(int32_t nIndex, int32_t& nStart); - virtual int32_t GetEditLimit(); - virtual FWL_ERR SetEditLimit(int32_t nLimit); - virtual FWL_ERR EditDoClipboard(int32_t iCmd); - virtual FX_BOOL EditRedo(const CFX_ByteStringC& bsRecord); - virtual FX_BOOL EditUndo(const CFX_ByteStringC& bsRecord); - virtual IFWL_ListBox* GetListBoxt(); - virtual FX_BOOL AfterFocusShowDropList(); - virtual FX_ERR OpenDropDownList(FX_BOOL bActivate); - virtual FX_BOOL EditCanUndo(); - virtual FX_BOOL EditCanRedo(); - virtual FX_BOOL EditUndo(); - virtual FX_BOOL EditRedo(); - virtual FX_BOOL EditCanCopy(); - virtual FX_BOOL EditCanCut(); - virtual FX_BOOL EditCanSelectAll(); - virtual FX_BOOL EditCopy(CFX_WideString& wsCopy); - virtual FX_BOOL EditCut(CFX_WideString& wsCut); - virtual FX_BOOL EditPaste(const CFX_WideString& wsPaste); - virtual FX_BOOL EditSelectAll(); - virtual FX_BOOL EditDelete(); - virtual FX_BOOL EditDeSelect(); - virtual FWL_ERR GetBBox(CFX_RectF& rect); - virtual FWL_ERR EditModifyStylesEx(FX_DWORD dwStylesExAdded, - FX_DWORD dwStylesExRemoved); - - protected: - void DrawStretchHandler(CFX_Graphics* pGraphics, const CFX_Matrix* pMatrix); - FX_FLOAT GetListHeight(); - void ShowDropList(FX_BOOL bActivate); - FX_BOOL IsDropListShowed(); - FX_BOOL IsDropDownStyle() const; - void MatchEditText(); - void SynchrEditText(int32_t iListItem); - void Layout(); - void ReSetTheme(); - void ReSetEditAlignment(); - void ReSetListItemAlignment(); - void ProcessSelChanged(FX_BOOL bLButtonUp); - void InitProxyForm(); - FWL_ERR DisForm_Initialize(); - void DisForm_InitComboList(); - void DisForm_InitComboEdit(); - void DisForm_ShowDropList(FX_BOOL bActivate); - FX_BOOL DisForm_IsDropListShowed(); - FWL_ERR DisForm_ModifyStylesEx(FX_DWORD dwStylesExAdded, - FX_DWORD dwStylesExRemoved); - FWL_ERR DisForm_Update(); - FX_DWORD DisForm_HitTest(FX_FLOAT fx, FX_FLOAT fy); - FWL_ERR DisForm_DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL); - FWL_ERR DisForm_GetBBox(CFX_RectF& rect); - void DisForm_Layout(); - - CFX_RectF m_rtClient; - CFX_RectF m_rtContent; - CFX_RectF m_rtBtn; - CFX_RectF m_rtList; - CFX_RectF m_rtProxy; - CFX_RectF m_rtHandler; - std::unique_ptr<IFWL_Edit> m_pEdit; - std::unique_ptr<IFWL_ListBox> m_pListBox; - IFWL_Form* m_pForm; - FX_BOOL m_bLButtonDown; - FX_BOOL m_bUpFormHandler; - int32_t m_iCurSel; - int32_t m_iBtnState; - FX_FLOAT m_fComboFormHandler; - FX_FLOAT m_fItemHeight; - FX_BOOL m_bNeedShowList; - CFWL_FormProxyImp* m_pProxy; - CFWL_ComboProxyImpDelegate* m_pListProxyDelegate; - - friend class CFWL_ComboListImp; - friend class CFWL_ComboEditImp; - friend class CFWL_ComboEditImpDelegate; - friend class CFWL_ComboListImpDelegate; - friend class CFWL_ComboBoxImpDelegate; - friend class CFWL_ComboProxyImpDelegate; -}; -class CFWL_ComboBoxImpDelegate : public CFWL_WidgetImpDelegate { - public: - CFWL_ComboBoxImpDelegate(CFWL_ComboBoxImp* pOwner); - int32_t OnProcessMessage(CFWL_Message* pMessage) override; - FWL_ERR OnProcessEvent(CFWL_Event* pEvent) override; - FWL_ERR OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL) override; - - protected: - void OnFocusChanged(CFWL_Message* pMsg, FX_BOOL bSet = TRUE); - void OnLButtonDown(CFWL_MsgMouse* pMsg); - void OnLButtonUp(CFWL_MsgMouse* pMsg); - void OnMouseMove(CFWL_MsgMouse* pMsg); - void OnMouseLeave(CFWL_MsgMouse* pMsg); - void OnKey(CFWL_MsgKey* pMsg); - void DoSubCtrlKey(CFWL_MsgKey* pMsg); - - protected: - int32_t DisForm_OnProcessMessage(CFWL_Message* pMessage); - void DisForm_OnLButtonDown(CFWL_MsgMouse* pMsg); - void DisForm_OnFocusChanged(CFWL_Message* pMsg, FX_BOOL bSet = TRUE); - void DisForm_OnKey(CFWL_MsgKey* pMsg); - - protected: - CFWL_ComboBoxImp* m_pOwner; - friend class CFWL_ComboEditImpDelegate; - friend class CFWL_ComboListImpDelegate; -}; -class CFWL_ComboProxyImpDelegate : public CFWL_WidgetImpDelegate { - public: - CFWL_ComboProxyImpDelegate(IFWL_Form* pForm, CFWL_ComboBoxImp* pComboBox); - int32_t OnProcessMessage(CFWL_Message* pMessage) override; - FWL_ERR OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL) override; - void Reset() { m_bLButtonUpSelf = FALSE; } - - protected: - void OnLButtonDown(CFWL_MsgMouse* pMsg); - void OnLButtonUp(CFWL_MsgMouse* pMsg); - void OnMouseMove(CFWL_MsgMouse* pMsg); - void OnDeactive(CFWL_MsgDeactivate* pMsg); - void OnFocusChanged(CFWL_MsgKillFocus* pMsg, FX_BOOL bSet); - FX_BOOL m_bLButtonDown; - FX_BOOL m_bLButtonUpSelf; - FX_FLOAT m_fStartPos; - IFWL_Form* m_pForm; - CFWL_ComboBoxImp* m_pComboBox; -}; - -#endif // XFA_SRC_FWL_BASEWIDGET_FWL_COMBOBOXIMP_H_ diff --git a/xfa/src/fwl/basewidget/fwl_datetimepickerimp.cpp b/xfa/src/fwl/basewidget/fwl_datetimepickerimp.cpp deleted file mode 100644 index c969418c3a..0000000000 --- a/xfa/src/fwl/basewidget/fwl_datetimepickerimp.cpp +++ /dev/null @@ -1,1161 +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/basewidget/fwl_datetimepickerimp.h" - -#include "xfa/include/fwl/basewidget/fwl_spinbutton.h" -#include "xfa/src/fwl/basewidget/fwl_editimp.h" -#include "xfa/src/fwl/basewidget/fwl_formproxyimp.h" -#include "xfa/src/fwl/basewidget/fwl_monthcalendarimp.h" -#include "xfa/src/fwl/core/fwl_formimp.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_widgetimp.h" -#include "xfa/src/fwl/core/fwl_widgetmgrimp.h" - -#define FWL_DTP_WIDTH 100 -#define FWL_DTP_HEIGHT 20 - -// static -IFWL_DateTimePicker* IFWL_DateTimePicker::Create( - const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) { - IFWL_DateTimePicker* pDateTimePicker = new IFWL_DateTimePicker; - CFWL_DateTimePickerImp* pDateTimePickerImpl = - new CFWL_DateTimePickerImp(properties, pOuter); - pDateTimePicker->SetImpl(pDateTimePickerImpl); - pDateTimePickerImpl->SetInterface(pDateTimePicker); - return pDateTimePicker; -} - -// Static -IFWL_DateTimeForm* IFWL_DateTimeForm::Create( - const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) { - IFWL_DateTimeForm* pDateTimeForm = new IFWL_DateTimeForm; - CFWL_FormProxyImp* pFormProxyImpl = new CFWL_FormProxyImp(properties, pOuter); - pDateTimeForm->SetImpl(pFormProxyImpl); - pFormProxyImpl->SetInterface(pDateTimeForm); - return pDateTimeForm; -} - -// static -IFWL_DateTimeCalender* IFWL_DateTimeCalender::Create( - const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) { - IFWL_DateTimeCalender* pDateTimeCalendar = new IFWL_DateTimeCalender; - CFWL_DateTimeCalendar* pDateTimeCalendarImpl = - new CFWL_DateTimeCalendar(properties, pOuter); - pDateTimeCalendar->SetImpl(pDateTimeCalendarImpl); - pDateTimeCalendarImpl->SetInterface(pDateTimeCalendar); - return pDateTimeCalendar; -} - -// static -IFWL_DateTimeEdit* IFWL_DateTimeEdit::Create( - const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) { - IFWL_DateTimeEdit* pDateTimeEdit = new IFWL_DateTimeEdit; - CFWL_DateTimeEdit* pDateTimeEditImpl = - new CFWL_DateTimeEdit(properties, pOuter); - pDateTimeEdit->SetImpl(pDateTimeEditImpl); - pDateTimeEditImpl->SetInterface(pDateTimeEdit); - return pDateTimeEdit; -} - -IFWL_DateTimePicker::IFWL_DateTimePicker() {} -int32_t IFWL_DateTimePicker::CountSelRanges() { - return static_cast<CFWL_DateTimePickerImp*>(GetImpl()) - ->GetDataTimeEdit() - ->CountSelRanges(); -} -int32_t IFWL_DateTimePicker::GetSelRange(int32_t nIndex, int32_t& nStart) { - return static_cast<CFWL_DateTimePickerImp*>(GetImpl()) - ->GetDataTimeEdit() - ->GetSelRange(nIndex, nStart); -} -FWL_ERR IFWL_DateTimePicker::GetCurSel(int32_t& iYear, - int32_t& iMonth, - int32_t& iDay) { - return static_cast<CFWL_DateTimePickerImp*>(GetImpl()) - ->GetCurSel(iYear, iMonth, iDay); -} -FWL_ERR IFWL_DateTimePicker::SetCurSel(int32_t iYear, - int32_t iMonth, - int32_t iDay) { - return static_cast<CFWL_DateTimePickerImp*>(GetImpl()) - ->SetCurSel(iYear, iMonth, iDay); -} -FWL_ERR IFWL_DateTimePicker::SetEditText(const CFX_WideString& wsText) { - return static_cast<CFWL_DateTimePickerImp*>(GetImpl())->SetEditText(wsText); -} -FWL_ERR IFWL_DateTimePicker::GetEditText(CFX_WideString& wsText, - int32_t nStart, - int32_t nCount) const { - return static_cast<CFWL_DateTimePickerImp*>(GetImpl()) - ->GetEditText(wsText, nStart, nCount); -} -FX_BOOL IFWL_DateTimePicker::CanUndo() { - return static_cast<CFWL_DateTimePickerImp*>(GetImpl())->CanUndo(); -} -FX_BOOL IFWL_DateTimePicker::CanRedo() { - return static_cast<CFWL_DateTimePickerImp*>(GetImpl())->CanRedo(); -} -FX_BOOL IFWL_DateTimePicker::Undo() { - return static_cast<CFWL_DateTimePickerImp*>(GetImpl())->Undo(); -} -FX_BOOL IFWL_DateTimePicker::Redo() { - return static_cast<CFWL_DateTimePickerImp*>(GetImpl())->Redo(); -} -FX_BOOL IFWL_DateTimePicker::CanCopy() { - return static_cast<CFWL_DateTimePickerImp*>(GetImpl())->CanCopy(); -} -FX_BOOL IFWL_DateTimePicker::CanCut() { - return static_cast<CFWL_DateTimePickerImp*>(GetImpl())->CanCut(); -} -FX_BOOL IFWL_DateTimePicker::CanSelectAll() { - return static_cast<CFWL_DateTimePickerImp*>(GetImpl())->CanSelectAll(); -} -FX_BOOL IFWL_DateTimePicker::Copy(CFX_WideString& wsCopy) { - return static_cast<CFWL_DateTimePickerImp*>(GetImpl())->Copy(wsCopy); -} -FX_BOOL IFWL_DateTimePicker::Cut(CFX_WideString& wsCut) { - return static_cast<CFWL_DateTimePickerImp*>(GetImpl())->Cut(wsCut); -} -FX_BOOL IFWL_DateTimePicker::Paste(const CFX_WideString& wsPaste) { - return static_cast<CFWL_DateTimePickerImp*>(GetImpl())->Paste(wsPaste); -} -FX_BOOL IFWL_DateTimePicker::SelectAll() { - return static_cast<CFWL_DateTimePickerImp*>(GetImpl())->SelectAll(); -} -FX_BOOL IFWL_DateTimePicker::Delete() { - return static_cast<CFWL_DateTimePickerImp*>(GetImpl())->Delete(); -} -FX_BOOL IFWL_DateTimePicker::DeSelect() { - return static_cast<CFWL_DateTimePickerImp*>(GetImpl())->DeSelect(); -} -FWL_ERR IFWL_DateTimePicker::GetBBox(CFX_RectF& rect) { - return static_cast<CFWL_DateTimePickerImp*>(GetImpl())->GetBBox(rect); -} -FWL_ERR IFWL_DateTimePicker::SetEditLimit(int32_t nLimit) { - return static_cast<CFWL_DateTimePickerImp*>(GetImpl())->SetEditLimit(nLimit); -} -FWL_ERR IFWL_DateTimePicker::ModifyEditStylesEx(FX_DWORD dwStylesExAdded, - FX_DWORD dwStylesExRemoved) { - return static_cast<CFWL_DateTimePickerImp*>(GetImpl()) - ->ModifyEditStylesEx(dwStylesExAdded, dwStylesExRemoved); -} -CFWL_DateTimeEdit::CFWL_DateTimeEdit(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) - : CFWL_EditImp(properties, pOuter) {} -FWL_ERR CFWL_DateTimeEdit::Initialize() { - m_pDelegate = new CFWL_DateTimeEditImpDelegate(this); - if (CFWL_EditImp::Initialize() != FWL_ERR_Succeeded) - return FWL_ERR_Indefinite; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_DateTimeEdit::Finalize() { - delete m_pDelegate; - m_pDelegate = nullptr; - return CFWL_EditImp::Finalize(); -} -CFWL_DateTimeEditImpDelegate::CFWL_DateTimeEditImpDelegate( - CFWL_DateTimeEdit* pOwner) - : CFWL_EditImpDelegate(pOwner), m_pOwner(pOwner) {} -int32_t CFWL_DateTimeEditImpDelegate::OnProcessMessage(CFWL_Message* pMessage) { - if (m_pOwner->m_pWidgetMgr->IsFormDisabled()) { - return DisForm_OnProcessMessage(pMessage); - } - FX_DWORD dwHashCode = pMessage->GetClassID(); - if (dwHashCode == FWL_MSGHASH_SetFocus || - dwHashCode == FWL_MSGHASH_KillFocus) { - IFWL_Widget* pOuter = m_pOwner->GetOuter(); - IFWL_WidgetDelegate* pDelegate = pOuter->SetDelegate(NULL); - pDelegate->OnProcessMessage(pMessage); - } - return 1; -} -int32_t CFWL_DateTimeEditImpDelegate::DisForm_OnProcessMessage( - CFWL_Message* pMessage) { - FX_DWORD dwHashCode = pMessage->GetClassID(); - if (m_pOwner->m_pWidgetMgr->IsFormDisabled()) { - if (dwHashCode == FWL_MSGHASH_Mouse) { - CFWL_MsgMouse* pMouse = static_cast<CFWL_MsgMouse*>(pMessage); - if (pMouse->m_dwCmd == FWL_MSGMOUSECMD_LButtonDown || - pMouse->m_dwCmd == FWL_MSGMOUSECMD_RButtonDown) { - if ((m_pOwner->m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) == 0) { - m_pOwner->m_pProperties->m_dwStates |= FWL_WGTSTATE_Focused; - } - CFWL_DateTimePickerImp* pDateTime = - static_cast<CFWL_DateTimePickerImp*>(m_pOwner->m_pOuter->GetImpl()); - if (pDateTime->IsMonthCalendarShowed()) { - CFX_RectF rtInvalidate; - pDateTime->GetWidgetRect(rtInvalidate); - pDateTime->ShowMonthCalendar(FALSE); - rtInvalidate.Offset(-rtInvalidate.left, -rtInvalidate.top); - pDateTime->Repaint(&rtInvalidate); - } - } - } else if (dwHashCode == FWL_MSGHASH_Key) { - return CFWL_EditImpDelegate::OnProcessMessage(pMessage); - } - } - return CFWL_EditImpDelegate::OnProcessMessage(pMessage); -} -CFWL_DateTimeCalendar::CFWL_DateTimeCalendar( - const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) - : CFWL_MonthCalendarImp(properties, pOuter) {} -FWL_ERR CFWL_DateTimeCalendar::Initialize() { - if (CFWL_MonthCalendarImp::Initialize() != FWL_ERR_Succeeded) - return FWL_ERR_Indefinite; - delete m_pDelegate; - m_pDelegate = new CFWL_DateTimeCalendarImpDelegate(this); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_DateTimeCalendar::Finalize() { - delete m_pDelegate; - m_pDelegate = nullptr; - return CFWL_MonthCalendarImp::Finalize(); -} -CFWL_DateTimeCalendarImpDelegate::CFWL_DateTimeCalendarImpDelegate( - CFWL_DateTimeCalendar* pOwner) - : CFWL_MonthCalendarImpDelegate(pOwner), m_pOwner(pOwner) { - m_bFlag = FALSE; -} -int32_t CFWL_DateTimeCalendarImpDelegate::OnProcessMessage( - CFWL_Message* pMessage) { - FX_DWORD dwCode = pMessage->GetClassID(); - if (dwCode == FWL_MSGHASH_SetFocus || dwCode == FWL_MSGHASH_KillFocus) { - IFWL_Widget* pOuter = m_pOwner->GetOuter(); - IFWL_WidgetDelegate* pDelegate = pOuter->SetDelegate(NULL); - return pDelegate->OnProcessMessage(pMessage); - } else if (dwCode == FWL_MSGHASH_Mouse) { - CFWL_MsgMouse* pMsg = static_cast<CFWL_MsgMouse*>(pMessage); - if (pMsg->m_dwCmd == FWL_MSGMOUSECMD_LButtonDown) { - OnLButtonDownEx(pMsg); - return 1; - } else if (pMsg->m_dwCmd == FWL_MSGMOUSECMD_LButtonUp) { - OnLButtonUpEx(pMsg); - return 1; - } - } - return CFWL_MonthCalendarImpDelegate::OnProcessMessage(pMessage); -} -void CFWL_DateTimeCalendarImpDelegate::OnLButtonDownEx(CFWL_MsgMouse* pMsg) { - if (m_pOwner->m_rtLBtn.Contains(pMsg->m_fx, pMsg->m_fy)) { - m_pOwner->m_iLBtnPartStates = FWL_PARTSTATE_MCD_Pressed; - m_pOwner->PrevMonth(); - m_pOwner->Repaint(&m_pOwner->m_rtClient); - } else if (m_pOwner->m_rtRBtn.Contains(pMsg->m_fx, pMsg->m_fy)) { - m_pOwner->m_iRBtnPartStates |= FWL_PARTSTATE_MCD_Pressed; - m_pOwner->NextMonth(); - m_pOwner->Repaint(&m_pOwner->m_rtClient); - } else if (m_pOwner->m_rtToday.Contains(pMsg->m_fx, pMsg->m_fy)) { - if ((m_pOwner->m_pProperties->m_dwStyleExes & FWL_STYLEEXT_MCD_NoToday) == - 0) { - m_pOwner->JumpToToday(); - m_pOwner->Repaint(&m_pOwner->m_rtClient); - } - } else { - IFWL_DateTimePicker* pIPicker = - static_cast<IFWL_DateTimePicker*>(m_pOwner->m_pOuter); - CFWL_DateTimePickerImp* pPicker = - static_cast<CFWL_DateTimePickerImp*>(pIPicker->GetImpl()); - if (pPicker->IsMonthCalendarShowed()) { - m_bFlag = 1; - } - } -} -void CFWL_DateTimeCalendarImpDelegate::OnLButtonUpEx(CFWL_MsgMouse* pMsg) { - if (m_pOwner->m_pWidgetMgr->IsFormDisabled()) { - return DisForm_OnLButtonUpEx(pMsg); - } - if (m_pOwner->m_rtLBtn.Contains(pMsg->m_fx, pMsg->m_fy)) { - m_pOwner->m_iLBtnPartStates = 0; - m_pOwner->Repaint(&m_pOwner->m_rtLBtn); - return; - } - if (m_pOwner->m_rtRBtn.Contains(pMsg->m_fx, pMsg->m_fy)) { - m_pOwner->m_iRBtnPartStates = 0; - m_pOwner->Repaint(&m_pOwner->m_rtRBtn); - return; - } - if (m_pOwner->m_rtToday.Contains(pMsg->m_fx, pMsg->m_fy)) { - return; - } - int32_t iOldSel = 0; - if (m_pOwner->m_arrSelDays.GetSize() > 0) { - iOldSel = m_pOwner->m_arrSelDays[0]; - } - int32_t iCurSel = m_pOwner->GetDayAtPoint(pMsg->m_fx, pMsg->m_fy); - CFX_RectF rt; - IFWL_DateTimePicker* pIPicker = - static_cast<IFWL_DateTimePicker*>(m_pOwner->m_pOuter); - CFWL_DateTimePickerImp* pPicker = - static_cast<CFWL_DateTimePickerImp*>(pIPicker->GetImpl()); - pPicker->m_pForm->GetWidgetRect(rt); - rt.Set(0, 0, rt.width, rt.height); - if (iCurSel > 0) { - FWL_DATEINFO* lpDatesInfo = - (FWL_DATEINFO*)m_pOwner->m_arrDates.GetAt(iCurSel - 1); - CFX_RectF rtInvalidate(lpDatesInfo->rect); - if (iOldSel > 0 && iOldSel <= m_pOwner->m_arrDates.GetSize()) { - lpDatesInfo = (FWL_DATEINFO*)m_pOwner->m_arrDates.GetAt(iOldSel - 1); - rtInvalidate.Union(lpDatesInfo->rect); - } - m_pOwner->AddSelDay(iCurSel); - if (!m_pOwner->m_pOuter) - return; - pPicker->ProcessSelChanged(m_pOwner->m_iCurYear, m_pOwner->m_iCurMonth, - iCurSel); - pPicker->ShowMonthCalendar(FALSE); - } else if (m_bFlag && (!rt.Contains(pMsg->m_fx, pMsg->m_fy))) { - IFWL_DateTimePicker* pIPicker = - static_cast<IFWL_DateTimePicker*>(m_pOwner->m_pOuter); - CFWL_DateTimePickerImp* pPicker = - static_cast<CFWL_DateTimePickerImp*>(pIPicker->GetImpl()); - pPicker->ShowMonthCalendar(FALSE); - } - m_bFlag = 0; -} -void CFWL_DateTimeCalendarImpDelegate::OnMouseMoveEx(CFWL_MsgMouse* pMsg) { - if (m_pOwner->m_pProperties->m_dwStyleExes & FWL_STYLEEXT_MCD_MultiSelect) { - return; - } - FX_BOOL bRepaint = FALSE; - CFX_RectF rtInvalidate; - rtInvalidate.Set(0, 0, 0, 0); - if (m_pOwner->m_rtDates.Contains(pMsg->m_fx, pMsg->m_fy)) { - int32_t iHover = m_pOwner->GetDayAtPoint(pMsg->m_fx, pMsg->m_fy); - bRepaint = m_pOwner->m_iHovered != iHover; - if (bRepaint) { - if (m_pOwner->m_iHovered > 0) { - m_pOwner->GetDayRect(m_pOwner->m_iHovered, rtInvalidate); - } - if (iHover > 0) { - CFX_RectF rtDay; - m_pOwner->GetDayRect(iHover, rtDay); - if (rtInvalidate.IsEmpty()) { - rtInvalidate = rtDay; - } else { - rtInvalidate.Union(rtDay); - } - } - } - m_pOwner->m_iHovered = iHover; - CFWL_Event_DtpHoverChanged ev; - ev.hoverday = iHover; - m_pOwner->DispatchEvent(&ev); - } else { - bRepaint = m_pOwner->m_iHovered > 0; - if (bRepaint) { - m_pOwner->GetDayRect(m_pOwner->m_iHovered, rtInvalidate); - } - m_pOwner->m_iHovered = -1; - } - if (bRepaint && !rtInvalidate.IsEmpty()) { - m_pOwner->Repaint(&rtInvalidate); - } -} -int32_t CFWL_DateTimeCalendarImpDelegate::DisForm_OnProcessMessage( - CFWL_Message* pMessage) { - if (pMessage->GetClassID() == FWL_MSGHASH_Mouse) { - CFWL_MsgMouse* pMsg = static_cast<CFWL_MsgMouse*>(pMessage); - if (pMsg->m_dwCmd == FWL_MSGMOUSECMD_LButtonUp) { - DisForm_OnLButtonUpEx(pMsg); - return 1; - } - } - return CFWL_MonthCalendarImpDelegate::OnProcessMessage(pMessage); -} -void CFWL_DateTimeCalendarImpDelegate::DisForm_OnLButtonUpEx( - CFWL_MsgMouse* pMsg) { - if (m_pOwner->m_rtLBtn.Contains(pMsg->m_fx, pMsg->m_fy)) { - m_pOwner->m_iLBtnPartStates = 0; - m_pOwner->Repaint(&(m_pOwner->m_rtLBtn)); - return; - } - if (m_pOwner->m_rtRBtn.Contains(pMsg->m_fx, pMsg->m_fy)) { - m_pOwner->m_iRBtnPartStates = 0; - m_pOwner->Repaint(&(m_pOwner->m_rtRBtn)); - return; - } - if (m_pOwner->m_rtToday.Contains(pMsg->m_fx, pMsg->m_fy)) { - return; - } - int32_t iOldSel = 0; - if (m_pOwner->m_arrSelDays.GetSize() > 0) { - iOldSel = m_pOwner->m_arrSelDays[0]; - } - int32_t iCurSel = m_pOwner->GetDayAtPoint(pMsg->m_fx, pMsg->m_fy); - if (iCurSel > 0) { - FWL_DATEINFO* lpDatesInfo = - (FWL_DATEINFO*)m_pOwner->m_arrDates.GetAt(iCurSel - 1); - CFX_RectF rtInvalidate(lpDatesInfo->rect); - if (iOldSel > 0 && iOldSel <= m_pOwner->m_arrDates.GetSize()) { - lpDatesInfo = (FWL_DATEINFO*)m_pOwner->m_arrDates.GetAt(iOldSel - 1); - rtInvalidate.Union(lpDatesInfo->rect); - } - m_pOwner->AddSelDay(iCurSel); - CFWL_DateTimePickerImp* pDateTime = - static_cast<CFWL_DateTimePickerImp*>(m_pOwner->m_pOuter->GetImpl()); - pDateTime->ProcessSelChanged(m_pOwner->m_iCurYear, m_pOwner->m_iCurMonth, - iCurSel); - pDateTime->ShowMonthCalendar(FALSE); - } -} -CFWL_DateTimePickerImp::CFWL_DateTimePickerImp( - const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) - : CFWL_WidgetImp(properties, pOuter), - m_iBtnState(1), - m_iYear(-1), - m_iMonth(-1), - m_iDay(-1), - m_bLBtnDown(FALSE), - m_pEdit(nullptr), - m_pMonthCal(nullptr), - m_pForm(nullptr) { - m_rtBtn.Set(0, 0, 0, 0); -} -CFWL_DateTimePickerImp::~CFWL_DateTimePickerImp() {} -FWL_ERR CFWL_DateTimePickerImp::GetClassName(CFX_WideString& wsClass) const { - wsClass = FWL_CLASS_DateTimePicker; - return FWL_ERR_Succeeded; -} -FX_DWORD CFWL_DateTimePickerImp::GetClassID() const { - return FWL_CLASSHASH_DateTimePicker; -} -FWL_ERR CFWL_DateTimePickerImp::Initialize() { - if (CFWL_WidgetImp::Initialize() != FWL_ERR_Succeeded) - return FWL_ERR_Indefinite; - m_pDelegate = new CFWL_DateTimePickerImpDelegate(this); - m_pProperties->m_dwStyleExes = FWL_STYLEEXT_DTP_ShortDateFormat; - CFWL_WidgetImpProperties propMonth; - propMonth.m_dwStyles = FWL_WGTSTYLE_Popup | FWL_WGTSTYLE_Border; - propMonth.m_dwStates = FWL_WGTSTATE_Invisible; - propMonth.m_pDataProvider = &m_MonthCalendarDP; - propMonth.m_pParent = m_pInterface; - propMonth.m_pThemeProvider = m_pProperties->m_pThemeProvider; - m_pMonthCal.reset(IFWL_DateTimeCalender::Create(propMonth, m_pInterface)); - m_pMonthCal->Initialize(); - CFX_RectF rtMonthCal; - m_pMonthCal->GetWidgetRect(rtMonthCal, TRUE); - rtMonthCal.Set(0, 0, rtMonthCal.width, rtMonthCal.height); - m_pMonthCal->SetWidgetRect(rtMonthCal); - CFWL_WidgetImpProperties propEdit; - propEdit.m_pParent = m_pInterface; - propEdit.m_pThemeProvider = m_pProperties->m_pThemeProvider; - m_pEdit.reset(IFWL_DateTimeEdit::Create(propEdit, m_pInterface)); - m_pEdit->Initialize(); - RegisterEventTarget(m_pMonthCal.get()); - RegisterEventTarget(m_pEdit.get()); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_DateTimePickerImp::Finalize() { - if (m_pEdit) { - m_pEdit->Finalize(); - } - if (m_pMonthCal) { - m_pMonthCal->Finalize(); - } - if (m_pForm) { - m_pForm->Finalize(); - } - UnregisterEventTarget(); - delete m_pDelegate; - m_pDelegate = nullptr; - return CFWL_WidgetImp::Finalize(); -} -FWL_ERR CFWL_DateTimePickerImp::GetWidgetRect(CFX_RectF& rect, - FX_BOOL bAutoSize) { - if (m_pWidgetMgr->IsFormDisabled()) { - return DisForm_GetWidgetRect(rect, bAutoSize); - } - if (bAutoSize) { - rect.Set(0, 0, FWL_DTP_WIDTH, FWL_DTP_HEIGHT); - CFWL_WidgetImp::GetWidgetRect(rect, TRUE); - } else { - rect = m_pProperties->m_rtWidget; - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_DateTimePickerImp::Update() { - if (m_pWidgetMgr->IsFormDisabled()) { - return DisForm_Update(); - } - if (m_iLock) { - return FWL_ERR_Indefinite; - } - if (!m_pProperties->m_pThemeProvider) { - m_pProperties->m_pThemeProvider = GetAvailableTheme(); - } - m_pEdit->SetThemeProvider(m_pProperties->m_pThemeProvider); - GetClientRect(m_rtClient); - FX_FLOAT* pFWidth = - static_cast<FX_FLOAT*>(GetThemeCapacity(FWL_WGTCAPACITY_ScrollBarWidth)); - if (!pFWidth) - return FWL_ERR_Indefinite; - FX_FLOAT fBtn = *pFWidth; - m_rtBtn.Set(m_rtClient.right() - fBtn, m_rtClient.top, fBtn - 1, - m_rtClient.height - 1); - CFX_RectF rtEdit; - rtEdit.Set(m_rtClient.left, m_rtClient.top, m_rtClient.width - fBtn, - m_rtClient.height); - m_pEdit->SetWidgetRect(rtEdit); - ReSetEditAlignment(); - m_pEdit->Update(); - if (!(m_pMonthCal->GetThemeProvider())) { - m_pMonthCal->SetThemeProvider(m_pProperties->m_pThemeProvider); - } - if (m_pProperties->m_pDataProvider) { - IFWL_DateTimePickerDP* pData = - static_cast<IFWL_DateTimePickerDP*>(m_pProperties->m_pDataProvider); - pData->GetToday(m_pInterface, m_MonthCalendarDP.m_iCurYear, - m_MonthCalendarDP.m_iCurMonth, m_MonthCalendarDP.m_iCurDay); - } - CFX_RectF rtMonthCal; - m_pMonthCal->GetWidgetRect(rtMonthCal, TRUE); - CFX_RectF rtPopUp; - rtPopUp.Set(rtMonthCal.left, rtMonthCal.top + FWL_DTP_HEIGHT, - rtMonthCal.width, rtMonthCal.height); - m_pMonthCal->SetWidgetRect(rtPopUp); - m_pMonthCal->Update(); - return FWL_ERR_Succeeded; -} -FX_DWORD CFWL_DateTimePickerImp::HitTest(FX_FLOAT fx, FX_FLOAT fy) { - if (m_pWidgetMgr->IsFormDisabled()) { - return DisForm_HitTest(fx, fy); - } - if (m_rtClient.Contains(fx, fy)) { - return FWL_WGTHITTEST_Client; - } - if (IsMonthCalendarShowed()) { - CFX_RectF rect; - m_pMonthCal->GetWidgetRect(rect); - if (rect.Contains(fx, fy)) { - return FWL_WGTHITTEST_Client; - } - } - return FWL_WGTHITTEST_Unknown; -} -FWL_ERR CFWL_DateTimePickerImp::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; - if (HasBorder()) { - DrawBorder(pGraphics, FWL_PART_DTP_Border, pTheme, pMatrix); - } - if (HasEdge()) { - DrawEdge(pGraphics, FWL_PART_DTP_Edge, pTheme, pMatrix); - } - if (!m_rtBtn.IsEmpty()) { - DrawDropDownButton(pGraphics, pTheme, pMatrix); - } - if (m_pWidgetMgr->IsFormDisabled()) { - return DisForm_DrawWidget(pGraphics, pMatrix); - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_DateTimePickerImp::SetThemeProvider(IFWL_ThemeProvider* pTP) { - m_pProperties->m_pThemeProvider = pTP; - m_pMonthCal->SetThemeProvider(pTP); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_DateTimePickerImp::GetCurSel(int32_t& iYear, - int32_t& iMonth, - int32_t& iDay) { - iYear = m_iYear; - iMonth = m_iMonth; - iDay = m_iDay; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_DateTimePickerImp::SetCurSel(int32_t iYear, - int32_t iMonth, - int32_t iDay) { - if (iYear <= 0 || iYear >= 3000) - return FWL_ERR_Indefinite; - if (iMonth <= 0 || iMonth >= 13) - return FWL_ERR_Indefinite; - if (iDay <= 0 || iDay >= 32) - return FWL_ERR_Indefinite; - m_iYear = iYear; - m_iMonth = iMonth; - m_iDay = iDay; - m_pMonthCal->SetSelect(iYear, iMonth, iDay); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_DateTimePickerImp::SetEditText(const CFX_WideString& wsText) { - if (!m_pEdit) - return FWL_ERR_Indefinite; - int32_t iRet = m_pEdit->SetText(wsText); - Repaint(&m_rtClient); - CFWL_Event_DtpEditChanged ev; - ev.m_wsText = wsText; - DispatchEvent(&ev); - return iRet; -} -FWL_ERR CFWL_DateTimePickerImp::GetEditText(CFX_WideString& wsText, - int32_t nStart, - int32_t nCount) const { - if (m_pEdit) { - return m_pEdit->GetText(wsText, nStart, nCount); - } - return FWL_ERR_Indefinite; -} -FX_BOOL CFWL_DateTimePickerImp::CanUndo() { - return m_pEdit->CanUndo(); -} -FX_BOOL CFWL_DateTimePickerImp::CanRedo() { - return m_pEdit->CanRedo(); -} -FX_BOOL CFWL_DateTimePickerImp::Undo() { - return m_pEdit->Undo(); -} -FX_BOOL CFWL_DateTimePickerImp::Redo() { - return m_pEdit->Redo(); -} -FX_BOOL CFWL_DateTimePickerImp::CanCopy() { - int32_t nCount = m_pEdit->CountSelRanges(); - return nCount > 0; -} -FX_BOOL CFWL_DateTimePickerImp::CanCut() { - if (m_pEdit->GetStylesEx() & FWL_STYLEEXT_EDT_ReadOnly) { - return FALSE; - } - int32_t nCount = m_pEdit->CountSelRanges(); - return nCount > 0; -} -FX_BOOL CFWL_DateTimePickerImp::CanSelectAll() { - return m_pEdit->GetTextLength() > 0; -} -FX_BOOL CFWL_DateTimePickerImp::Copy(CFX_WideString& wsCopy) { - return m_pEdit->Copy(wsCopy); -} -FX_BOOL CFWL_DateTimePickerImp::Cut(CFX_WideString& wsCut) { - return m_pEdit->Cut(wsCut); -} -FX_BOOL CFWL_DateTimePickerImp::Paste(const CFX_WideString& wsPaste) { - return m_pEdit->Paste(wsPaste); -} -FX_BOOL CFWL_DateTimePickerImp::SelectAll() { - return m_pEdit->AddSelRange(0) == FWL_ERR_Succeeded; -} -FX_BOOL CFWL_DateTimePickerImp::Delete() { - return m_pEdit->ClearText() == FWL_ERR_Succeeded; -} -FX_BOOL CFWL_DateTimePickerImp::DeSelect() { - return m_pEdit->ClearSelections() == FWL_ERR_Succeeded; -} -FWL_ERR CFWL_DateTimePickerImp::GetBBox(CFX_RectF& rect) { - if (m_pWidgetMgr->IsFormDisabled()) { - return DisForm_GetBBox(rect); - } - rect = m_pProperties->m_rtWidget; - if (IsMonthCalendarShowed()) { - CFX_RectF rtMonth; - m_pMonthCal->GetWidgetRect(rtMonth); - rtMonth.Offset(m_pProperties->m_rtWidget.left, - m_pProperties->m_rtWidget.top); - rect.Union(rtMonth); - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_DateTimePickerImp::SetEditLimit(int32_t nLimit) { - return m_pEdit->SetLimit(nLimit); -} -FWL_ERR CFWL_DateTimePickerImp::ModifyEditStylesEx(FX_DWORD dwStylesExAdded, - FX_DWORD dwStylesExRemoved) { - return m_pEdit->ModifyStylesEx(dwStylesExAdded, dwStylesExRemoved); -} -void CFWL_DateTimePickerImp::DrawDropDownButton(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_DTP_Spin) == - FWL_STYLEEXT_DTP_Spin) { - CFWL_WidgetImpProperties prop; - prop.m_dwStyleExes |= FWL_STYLEEXE_SPB_Vert; - prop.m_pParent = m_pInterface; - prop.m_rtWidget = m_rtBtn; - IFWL_SpinButton* pSpin = IFWL_SpinButton::Create(prop, m_pInterface); - pSpin->Initialize(); - } else { - CFWL_ThemeBackground param; - param.m_pWidget = m_pInterface; - param.m_iPart = FWL_PART_DTP_DropDownButton; - param.m_dwStates = m_iBtnState; - param.m_pGraphics = pGraphics; - param.m_rtPart = m_rtBtn; - if (pMatrix) { - param.m_matrix.Concat(*pMatrix); - } - pTheme->DrawBackground(¶m); - } -} -void CFWL_DateTimePickerImp::FormatDateString(int32_t iYear, - int32_t iMonth, - int32_t iDay, - CFX_WideString& wsText) { - if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_DTP_ShortDateFormat) == - FWL_STYLEEXT_DTP_ShortDateFormat) { - wsText.Format(L"%d-%d-%d", iYear, iMonth, iDay); - } else if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_DTP_LongDateFormat) == - FWL_STYLEEXT_DTP_LongDateFormat) { - wsText.Format(L"%d Year %d Month %d Day", iYear, iMonth, iDay); - } else if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_DTP_TimeFormat) == - FWL_STYLEEXT_DTP_TimeFormat) { - } -} -void CFWL_DateTimePickerImp::ShowMonthCalendar(FX_BOOL bActivate) { - if (m_pWidgetMgr->IsFormDisabled()) { - return DisForm_ShowMonthCalendar(bActivate); - } - if (IsMonthCalendarShowed() == bActivate) { - return; - } - if (!m_pForm) { - InitProxyForm(); - } - if (bActivate) { - CFX_RectF rtMonth; - m_pMonthCal->GetWidgetRect(rtMonth); - CFX_RectF rtAnchor; - rtAnchor.Set(0, 0, m_pProperties->m_rtWidget.width, - m_pProperties->m_rtWidget.height); - GetPopupPos(0, rtMonth.height, rtAnchor, rtMonth); - m_pForm->SetWidgetRect(rtMonth); - rtMonth.left = rtMonth.top = 0; - m_pMonthCal->SetStates(FWL_WGTSTATE_Invisible, !bActivate); - m_pMonthCal->SetWidgetRect(rtMonth); - m_pMonthCal->Update(); - m_pForm->DoModal(); - } else { - m_pForm->EndDoModal(); - } -} -FX_BOOL CFWL_DateTimePickerImp::IsMonthCalendarShowed() { - if (m_pWidgetMgr->IsFormDisabled()) { - return DisForm_IsMonthCalendarShowed(); - } - if (!m_pForm) - return FALSE; - return !(m_pForm->GetStates() & FWL_WGTSTATE_Invisible); -} -void CFWL_DateTimePickerImp::ReSetEditAlignment() { - if (!m_pEdit) - return; - FX_DWORD dwStylExes = m_pProperties->m_dwStyleExes; - FX_DWORD dwAdd = 0; - switch (dwStylExes & FWL_STYLEEXT_DTP_EditHAlignMask) { - case FWL_STYLEEXT_DTP_EditHCenter: { - dwAdd |= FWL_STYLEEXT_EDT_HCenter; - break; - } - case FWL_STYLEEXT_DTP_EditHFar: { - dwAdd |= FWL_STYLEEXT_EDT_HFar; - break; - } - default: { dwAdd |= FWL_STYLEEXT_EDT_HNear; } - } - switch (dwStylExes & FWL_STYLEEXT_DTP_EditVAlignMask) { - case FWL_STYLEEXT_DTP_EditVCenter: { - dwAdd |= FWL_STYLEEXT_EDT_VCenter; - break; - } - case FWL_STYLEEXT_DTP_EditVFar: { - dwAdd |= FWL_STYLEEXT_EDT_VFar; - break; - } - default: { dwAdd |= FWL_STYLEEXT_EDT_VNear; } - } - if (dwStylExes & FWL_STYLEEXT_DTP_EditJustified) { - dwAdd |= FWL_STYLEEXT_EDT_Justified; - } - if (dwStylExes & FWL_STYLEEXT_DTP_EditDistributed) { - dwAdd |= FWL_STYLEEXT_EDT_Distributed; - } - m_pEdit->ModifyStylesEx(dwAdd, FWL_STYLEEXT_EDT_HAlignMask | - FWL_STYLEEXT_EDT_HAlignModeMask | - FWL_STYLEEXT_EDT_VAlignMask); -} -void CFWL_DateTimePickerImp::ProcessSelChanged(int32_t iYear, - int32_t iMonth, - int32_t iDay) { - m_iYear = iYear; - m_iMonth = iMonth; - m_iDay = iDay; - CFX_WideString wsText; - FormatDateString(m_iYear, m_iMonth, m_iDay, wsText); - m_pEdit->SetText(wsText); - m_pEdit->Update(); - Repaint(&m_rtClient); - CFWL_Event_DtpSelectChanged ev; - ev.m_pSrcTarget = m_pInterface; - ev.iYear = m_iYear; - ev.iMonth = m_iMonth; - ev.iDay = m_iDay; - DispatchEvent(&ev); -} -void CFWL_DateTimePickerImp::InitProxyForm() { - if (m_pForm) - return; - if (!m_pMonthCal) - return; - CFWL_WidgetImpProperties propForm; - propForm.m_dwStyles = FWL_WGTSTYLE_Popup; - propForm.m_dwStates = FWL_WGTSTATE_Invisible; - propForm.m_pOwner = m_pInterface; - m_pForm.reset(IFWL_DateTimeForm::Create(propForm, m_pMonthCal.get())); - m_pForm->Initialize(); - m_pMonthCal->SetParent(m_pForm.get()); -} -IFWL_DateTimeEdit* CFWL_DateTimePickerImp::GetDataTimeEdit() { - return m_pEdit.get(); -} -FWL_ERR CFWL_DateTimePickerImp::DisForm_Initialize() { - m_pProperties->m_dwStyleExes = FWL_STYLEEXT_DTP_ShortDateFormat; - DisForm_InitDateTimeCalendar(); - DisForm_InitDateTimeEdit(); - RegisterEventTarget(m_pMonthCal.get()); - RegisterEventTarget(m_pEdit.get()); - return FWL_ERR_Succeeded; -} -void CFWL_DateTimePickerImp::DisForm_InitDateTimeCalendar() { - if (m_pMonthCal) { - return; - } - CFWL_WidgetImpProperties propMonth; - propMonth.m_dwStyles = - FWL_WGTSTYLE_Popup | FWL_WGTSTYLE_Border | FWL_WGTSTYLE_EdgeSunken; - propMonth.m_dwStates = FWL_WGTSTATE_Invisible; - propMonth.m_pParent = m_pInterface; - propMonth.m_pDataProvider = &m_MonthCalendarDP; - propMonth.m_pThemeProvider = m_pProperties->m_pThemeProvider; - m_pMonthCal.reset(IFWL_DateTimeCalender::Create(propMonth, m_pInterface)); - m_pMonthCal->Initialize(); - CFX_RectF rtMonthCal; - m_pMonthCal->GetWidgetRect(rtMonthCal, TRUE); - rtMonthCal.Set(0, 0, rtMonthCal.width, rtMonthCal.height); - m_pMonthCal->SetWidgetRect(rtMonthCal); -} -void CFWL_DateTimePickerImp::DisForm_InitDateTimeEdit() { - if (m_pEdit) { - return; - } - CFWL_WidgetImpProperties propEdit; - propEdit.m_pParent = m_pInterface; - propEdit.m_pThemeProvider = m_pProperties->m_pThemeProvider; - m_pEdit.reset(IFWL_DateTimeEdit::Create(propEdit, m_pInterface)); - m_pEdit->Initialize(); -} -FX_BOOL CFWL_DateTimePickerImp::DisForm_IsMonthCalendarShowed() { - if (!m_pMonthCal) - return FALSE; - return !(m_pMonthCal->GetStates() & FWL_WGTSTATE_Invisible); -} -void CFWL_DateTimePickerImp::DisForm_ShowMonthCalendar(FX_BOOL bActivate) { - FX_BOOL bShowed = IsMonthCalendarShowed(); - if (bShowed == bActivate) { - return; - } - if (bActivate) { - CFX_RectF rtMonthCal; - m_pMonthCal->GetWidgetRect(rtMonthCal, TRUE); - FX_FLOAT fPopupMin = rtMonthCal.height; - FX_FLOAT fPopupMax = rtMonthCal.height; - CFX_RectF rtAnchor(m_pProperties->m_rtWidget); - rtAnchor.width = rtMonthCal.width; - rtMonthCal.left = m_rtClient.left; - rtMonthCal.top = rtAnchor.Height(); - GetPopupPos(fPopupMin, fPopupMax, rtAnchor, rtMonthCal); - m_pMonthCal->SetWidgetRect(rtMonthCal); - if (m_iYear > 0 && m_iMonth > 0 && m_iDay > 0) { - m_pMonthCal->SetSelect(m_iYear, m_iMonth, m_iDay); - } - m_pMonthCal->Update(); - } - m_pMonthCal->SetStates(FWL_WGTSTATE_Invisible, !bActivate); - if (bActivate) { - CFWL_MsgSetFocus msg; - msg.m_pDstTarget = m_pMonthCal.get(); - msg.m_pSrcTarget = m_pEdit.get(); - IFWL_WidgetDelegate* pDelegate = m_pEdit->SetDelegate(NULL); - pDelegate->OnProcessMessage(&msg); - } - CFX_RectF rtInvalidate, rtCal; - rtInvalidate.Set(0, 0, m_pProperties->m_rtWidget.width, - m_pProperties->m_rtWidget.height); - m_pMonthCal->GetWidgetRect(rtCal); - rtInvalidate.Union(rtCal); - rtInvalidate.Inflate(2, 2); - Repaint(&rtInvalidate); -} -FX_DWORD CFWL_DateTimePickerImp::DisForm_HitTest(FX_FLOAT fx, FX_FLOAT fy) { - CFX_RectF rect; - rect.Set(0, 0, m_pProperties->m_rtWidget.width, - m_pProperties->m_rtWidget.height); - if (rect.Contains(fx, fy)) { - return FWL_WGTHITTEST_Edit; - } - if (DisForm_IsNeedShowButton()) { - rect.width += m_fBtn; - } - if (rect.Contains(fx, fy)) { - return FWL_WGTHITTEST_Client; - } - if (IsMonthCalendarShowed()) { - m_pMonthCal->GetWidgetRect(rect); - if (rect.Contains(fx, fy)) { - return FWL_WGTHITTEST_Client; - } - } - return FWL_WGTHITTEST_Unknown; -} -FX_BOOL CFWL_DateTimePickerImp::DisForm_IsNeedShowButton() { - FX_BOOL bFocus = m_pProperties->m_dwStates & FWL_WGTSTATE_Focused || - m_pMonthCal->GetStates() & FWL_WGTSTATE_Focused || - m_pEdit->GetStates() & FWL_WGTSTATE_Focused; - return bFocus; -} -FWL_ERR CFWL_DateTimePickerImp::DisForm_Update() { - if (m_iLock) { - return FWL_ERR_Indefinite; - } - if (!m_pProperties->m_pThemeProvider) { - m_pProperties->m_pThemeProvider = GetAvailableTheme(); - } - m_pEdit->SetThemeProvider(m_pProperties->m_pThemeProvider); - GetClientRect(m_rtClient); - m_pEdit->SetWidgetRect(m_rtClient); - ReSetEditAlignment(); - m_pEdit->Update(); - if (m_pMonthCal->GetThemeProvider() == NULL) { - m_pMonthCal->SetThemeProvider(m_pProperties->m_pThemeProvider); - } - if (m_pProperties->m_pDataProvider) { - IFWL_DateTimePickerDP* pData = - static_cast<IFWL_DateTimePickerDP*>(m_pProperties->m_pDataProvider); - pData->GetToday(m_pInterface, m_MonthCalendarDP.m_iCurYear, - m_MonthCalendarDP.m_iCurMonth, m_MonthCalendarDP.m_iCurDay); - } - FX_FLOAT* pWidth = - static_cast<FX_FLOAT*>(GetThemeCapacity(FWL_WGTCAPACITY_ScrollBarWidth)); - if (!pWidth) - return 0; - m_fBtn = *pWidth; - CFX_RectF rtMonthCal; - m_pMonthCal->GetWidgetRect(rtMonthCal, TRUE); - CFX_RectF rtPopUp; - rtPopUp.Set(rtMonthCal.left, rtMonthCal.top + FWL_DTP_HEIGHT, - rtMonthCal.width, rtMonthCal.height); - m_pMonthCal->SetWidgetRect(rtPopUp); - m_pMonthCal->Update(); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_DateTimePickerImp::DisForm_GetWidgetRect(CFX_RectF& rect, - FX_BOOL bAutoSize) { - rect = m_pProperties->m_rtWidget; - if (DisForm_IsNeedShowButton()) { - rect.width += m_fBtn; - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_DateTimePickerImp::DisForm_GetBBox(CFX_RectF& rect) { - rect = m_pProperties->m_rtWidget; - if (DisForm_IsNeedShowButton()) { - rect.width += m_fBtn; - } - if (IsMonthCalendarShowed()) { - CFX_RectF rtMonth; - m_pMonthCal->GetWidgetRect(rtMonth); - rtMonth.Offset(m_pProperties->m_rtWidget.left, - m_pProperties->m_rtWidget.top); - rect.Union(rtMonth); - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_DateTimePickerImp::DisForm_DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - if (!pGraphics) - return FWL_ERR_Indefinite; - if (m_pEdit) { - CFX_RectF rtEdit; - m_pEdit->GetWidgetRect(rtEdit); - CFX_Matrix mt; - mt.Set(1, 0, 0, 1, rtEdit.left, rtEdit.top); - if (pMatrix) { - mt.Concat(*pMatrix); - } - m_pEdit->DrawWidget(pGraphics, &mt); - } - if (IsMonthCalendarShowed()) { - CFX_RectF rtMonth; - m_pMonthCal->GetWidgetRect(rtMonth); - CFX_Matrix mt; - mt.Set(1, 0, 0, 1, rtMonth.left, rtMonth.top); - if (pMatrix) { - mt.Concat(*pMatrix); - } - m_pMonthCal->DrawWidget(pGraphics, &mt); - } - return FWL_ERR_Succeeded; -} -CFWL_DateTimePickerImpDelegate::CFWL_DateTimePickerImpDelegate( - CFWL_DateTimePickerImp* pOwner) - : m_pOwner(pOwner) {} -int32_t CFWL_DateTimePickerImpDelegate::OnProcessMessage( - CFWL_Message* pMessage) { - if (!pMessage) - return 0; - FX_DWORD dwMsgCode = pMessage->GetClassID(); - switch (dwMsgCode) { - case FWL_MSGHASH_SetFocus: - case FWL_MSGHASH_KillFocus: { - OnFocusChanged(pMessage, dwMsgCode == FWL_MSGHASH_SetFocus); - break; - } - case FWL_MSGHASH_Mouse: { - CFWL_MsgMouse* pMouse = static_cast<CFWL_MsgMouse*>(pMessage); - FX_DWORD dwCmd = pMouse->m_dwCmd; - switch (dwCmd) { - case FWL_MSGMOUSECMD_LButtonDown: { - OnLButtonDown(pMouse); - break; - } - case FWL_MSGMOUSECMD_LButtonUp: { - OnLButtonUp(pMouse); - break; - } - case FWL_MSGMOUSECMD_MouseMove: { - OnMouseMove(pMouse); - break; - } - case FWL_MSGMOUSECMD_MouseLeave: { - OnMouseLeave(pMouse); - break; - } - default: {} - } - break; - } - default: - break; - } - if (dwMsgCode == FWL_MSGHASH_Key && - m_pOwner->m_pEdit->GetStates() & FWL_WGTSTATE_Focused) { - IFWL_WidgetDelegate* pDelegate = m_pOwner->m_pEdit->SetDelegate(NULL); - return pDelegate->OnProcessMessage(pMessage); - } - return CFWL_WidgetImpDelegate::OnProcessMessage(pMessage); -} -FWL_ERR CFWL_DateTimePickerImpDelegate::OnDrawWidget( - CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - return m_pOwner->DrawWidget(pGraphics, pMatrix); -} -void CFWL_DateTimePickerImpDelegate::OnFocusChanged(CFWL_Message* pMsg, - FX_BOOL bSet) { - if (!pMsg) - return; - if (m_pOwner->m_pWidgetMgr->IsFormDisabled()) { - return DisForm_OnFocusChanged(pMsg, bSet); - } - if (bSet) { - m_pOwner->m_pProperties->m_dwStates |= (FWL_WGTSTATE_Focused); - m_pOwner->Repaint(&m_pOwner->m_rtClient); - } else { - m_pOwner->m_pProperties->m_dwStates &= ~(FWL_WGTSTATE_Focused); - m_pOwner->Repaint(&m_pOwner->m_rtClient); - } - if (pMsg->m_pSrcTarget == m_pOwner->m_pMonthCal.get() && - m_pOwner->IsMonthCalendarShowed()) { - m_pOwner->ShowMonthCalendar(FALSE); - } - m_pOwner->Repaint(&m_pOwner->m_rtClient); -} -void CFWL_DateTimePickerImpDelegate::OnLButtonDown(CFWL_MsgMouse* pMsg) { - if (!pMsg) - return; - if ((m_pOwner->m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) == 0) { - m_pOwner->SetFocus(TRUE); - } - if (m_pOwner->m_rtBtn.Contains(pMsg->m_fx, pMsg->m_fy)) { - if (m_pOwner->IsMonthCalendarShowed()) { - m_pOwner->ShowMonthCalendar(FALSE); - CFWL_Event_DtpCloseUp ev; - m_pOwner->DispatchEvent(&ev); - } else { - if (!(m_pOwner->m_pProperties->m_dwStyleExes & - FWL_STYLEEXT_DTP_TimeFormat)) { - m_pOwner->ShowMonthCalendar(TRUE); - CFWL_Event_DtpDropDown ev; - m_pOwner->DispatchEvent(&ev); - } else { - } - m_pOwner->m_bLBtnDown = TRUE; - m_pOwner->Repaint(&m_pOwner->m_rtClient); - } - } -} -void CFWL_DateTimePickerImpDelegate::OnLButtonUp(CFWL_MsgMouse* pMsg) { - if (!pMsg) - return; - m_pOwner->m_bLBtnDown = FALSE; - if (m_pOwner->m_rtBtn.Contains(pMsg->m_fx, pMsg->m_fy)) { - m_pOwner->m_iBtnState = FWL_PARTSTATE_DTP_Hovered; - } else { - m_pOwner->m_iBtnState = FWL_PARTSTATE_DTP_Normal; - } - m_pOwner->Repaint(&m_pOwner->m_rtBtn); -} -void CFWL_DateTimePickerImpDelegate::OnMouseMove(CFWL_MsgMouse* pMsg) { - if (m_pOwner->m_rtBtn.Contains(pMsg->m_fx, pMsg->m_fy)) { - } else { - m_pOwner->m_iBtnState = FWL_PARTSTATE_DTP_Normal; - } - m_pOwner->Repaint(&m_pOwner->m_rtBtn); -} -void CFWL_DateTimePickerImpDelegate::OnMouseLeave(CFWL_MsgMouse* pMsg) { - if (!pMsg) - return; - m_pOwner->m_iBtnState = FWL_PARTSTATE_DTP_Normal; - m_pOwner->Repaint(&m_pOwner->m_rtBtn); -} -void CFWL_DateTimePickerImpDelegate::DisForm_OnFocusChanged(CFWL_Message* pMsg, - FX_BOOL bSet) { - CFX_RectF rtInvalidate(m_pOwner->m_rtBtn); - if (bSet) { - m_pOwner->m_pProperties->m_dwStates |= FWL_WGTSTATE_Focused; - if (m_pOwner->m_pEdit && - !(m_pOwner->m_pEdit->GetStylesEx() & FWL_STYLEEXT_EDT_ReadOnly)) { - m_pOwner->m_rtBtn.Set(m_pOwner->m_pProperties->m_rtWidget.width, 0, - m_pOwner->m_fBtn, - m_pOwner->m_pProperties->m_rtWidget.height - 1); - } - rtInvalidate = m_pOwner->m_rtBtn; - pMsg->m_pDstTarget = m_pOwner->m_pEdit.get(); - IFWL_WidgetDelegate* pDelegate = m_pOwner->m_pEdit->SetDelegate(NULL); - pDelegate->OnProcessMessage(pMsg); - } else { - m_pOwner->m_pProperties->m_dwStates &= ~FWL_WGTSTATE_Focused; - m_pOwner->m_rtBtn.Set(0, 0, 0, 0); - if (m_pOwner->DisForm_IsMonthCalendarShowed()) { - m_pOwner->ShowMonthCalendar(FALSE); - } - if (m_pOwner->m_pEdit->GetStates() & FWL_WGTSTATE_Focused) { - pMsg->m_pSrcTarget = m_pOwner->m_pEdit.get(); - IFWL_WidgetDelegate* pDelegate = m_pOwner->m_pEdit->SetDelegate(NULL); - pDelegate->OnProcessMessage(pMsg); - } - } - rtInvalidate.Inflate(2, 2); - m_pOwner->Repaint(&rtInvalidate); -} diff --git a/xfa/src/fwl/basewidget/fwl_datetimepickerimp.h b/xfa/src/fwl/basewidget/fwl_datetimepickerimp.h deleted file mode 100644 index 4bc1063db5..0000000000 --- a/xfa/src/fwl/basewidget/fwl_datetimepickerimp.h +++ /dev/null @@ -1,235 +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 - -#ifndef XFA_SRC_FWL_BASEWIDGET_FWL_DATETIMEPICKERIMP_H_ -#define XFA_SRC_FWL_BASEWIDGET_FWL_DATETIMEPICKERIMP_H_ - -#include <memory> - -#include "xfa/include/fwl/core/fwl_form.h" -#include "xfa/include/fwl/core/fwl_theme.h" -#include "xfa/include/fwl/basewidget/fwl_datetimepicker.h" -#include "xfa/include/fwl/basewidget/fwl_edit.h" -#include "xfa/include/fwl/basewidget/fwl_monthcalendar.h" -#include "xfa/src/fwl/basewidget/fwl_editimp.h" -#include "xfa/src/fwl/basewidget/fwl_monthcalendarimp.h" - -class CFWL_WidgetImp; -class CFWL_WidgetImpProperties; -class CFWL_WidgetImpDelegate; -class CFWL_DateTimeEdit; -class CFWL_DateTimeEditImpDelegate; -class CFWL_DateTimeCalendar; -class CFWL_DateTimeCalendarImpDelegate; -class CFWL_DateTimePickerImp; -class CFWL_DateTimePickerImpDelegate; - -class IFWL_DateTimeForm : public IFWL_Form { - public: - static IFWL_DateTimeForm* Create(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter); - - protected: - IFWL_DateTimeForm() {} -}; - -class IFWL_DateTimeCalender : public IFWL_MonthCalendar { - public: - static IFWL_DateTimeCalender* Create( - const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter); - - protected: - IFWL_DateTimeCalender() {} -}; - -class IFWL_DateTimeEdit : public IFWL_Edit { - public: - static IFWL_DateTimeEdit* Create(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter); - - protected: - IFWL_DateTimeEdit() {} -}; - -class CFWL_DateTimeEdit : public CFWL_EditImp { - public: - CFWL_DateTimeEdit(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter); - virtual FWL_ERR Initialize(); - virtual FWL_ERR Finalize(); - - protected: - friend class CFWL_DateTimeEditImpDelegate; -}; -class CFWL_DateTimeEditImpDelegate : public CFWL_EditImpDelegate { - public: - CFWL_DateTimeEditImpDelegate(CFWL_DateTimeEdit* pOwner); - int32_t OnProcessMessage(CFWL_Message* pMessage) override; - - private: - int32_t DisForm_OnProcessMessage(CFWL_Message* pMessage); - - protected: - CFWL_DateTimeEdit* m_pOwner; -}; -class CFWL_DateTimeCalendar : public CFWL_MonthCalendarImp { - public: - CFWL_DateTimeCalendar(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter); - virtual FWL_ERR Initialize(); - virtual FWL_ERR Finalize(); - - protected: - friend class CFWL_DateTimeCalendarImpDelegate; -}; -class CFWL_DateTimeCalendarImpDelegate : public CFWL_MonthCalendarImpDelegate { - public: - CFWL_DateTimeCalendarImpDelegate(CFWL_DateTimeCalendar* pOwner); - int32_t OnProcessMessage(CFWL_Message* pMessage) override; - - void OnLButtonDownEx(CFWL_MsgMouse* pMsg); - void OnLButtonUpEx(CFWL_MsgMouse* pMsg); - void OnMouseMoveEx(CFWL_MsgMouse* pMsg); - - private: - int32_t DisForm_OnProcessMessage(CFWL_Message* pMessage); - void DisForm_OnLButtonUpEx(CFWL_MsgMouse* pMsg); - - protected: - CFWL_DateTimeCalendar* m_pOwner; - FX_BOOL m_bFlag; -}; -class CFWL_DateTimePickerImp : public CFWL_WidgetImp { - public: - CFWL_DateTimePickerImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter); - virtual ~CFWL_DateTimePickerImp(); - virtual FWL_ERR GetClassName(CFX_WideString& wsClass) const; - virtual FX_DWORD GetClassID() const; - virtual FWL_ERR Initialize(); - virtual FWL_ERR Finalize(); - virtual FWL_ERR GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize = FALSE); - virtual FWL_ERR Update(); - virtual FX_DWORD HitTest(FX_FLOAT fx, FX_FLOAT fy); - virtual FWL_ERR DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL); - virtual FWL_ERR SetThemeProvider(IFWL_ThemeProvider* pTP); - virtual FWL_ERR GetCurSel(int32_t& iYear, int32_t& iMonth, int32_t& iDay); - virtual FWL_ERR SetCurSel(int32_t iYear, int32_t iMonth, int32_t iDay); - virtual FWL_ERR SetEditText(const CFX_WideString& wsText); - virtual FWL_ERR GetEditText(CFX_WideString& wsText, - int32_t nStart = 0, - int32_t nCount = -1) const; - - public: - virtual FX_BOOL CanUndo(); - virtual FX_BOOL CanRedo(); - virtual FX_BOOL Undo(); - virtual FX_BOOL Redo(); - virtual FX_BOOL CanCopy(); - virtual FX_BOOL CanCut(); - virtual FX_BOOL CanSelectAll(); - virtual FX_BOOL Copy(CFX_WideString& wsCopy); - virtual FX_BOOL Cut(CFX_WideString& wsCut); - virtual FX_BOOL Paste(const CFX_WideString& wsPaste); - virtual FX_BOOL SelectAll(); - virtual FX_BOOL Delete(); - virtual FX_BOOL DeSelect(); - virtual FWL_ERR GetBBox(CFX_RectF& rect); - virtual FWL_ERR SetEditLimit(int32_t nLimit); - virtual FWL_ERR ModifyEditStylesEx(FX_DWORD dwStylesExAdded, - FX_DWORD dwStylesExRemoved); - - public: - IFWL_DateTimeEdit* GetDataTimeEdit(); - - protected: - void DrawDropDownButton(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix); - void FormatDateString(int32_t iYear, - int32_t iMonth, - int32_t iDay, - CFX_WideString& wsText); - void ShowMonthCalendar(FX_BOOL bActivate); - FX_BOOL IsMonthCalendarShowed(); - void ReSetEditAlignment(); - void InitProxyForm(); - void ProcessSelChanged(int32_t iYear, int32_t iMonth, int32_t iDay); - - private: - FWL_ERR DisForm_Initialize(); - void DisForm_InitDateTimeCalendar(); - void DisForm_InitDateTimeEdit(); - FX_BOOL DisForm_IsMonthCalendarShowed(); - void DisForm_ShowMonthCalendar(FX_BOOL bActivate); - FX_DWORD DisForm_HitTest(FX_FLOAT fx, FX_FLOAT fy); - FX_BOOL DisForm_IsNeedShowButton(); - FWL_ERR DisForm_Update(); - FWL_ERR DisForm_GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize = FALSE); - FWL_ERR DisForm_GetBBox(CFX_RectF& rect); - FWL_ERR DisForm_DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL); - - protected: - CFX_RectF m_rtBtn; - CFX_RectF m_rtClient; - int32_t m_iBtnState; - int32_t m_iYear; - int32_t m_iMonth; - int32_t m_iDay; - FX_BOOL m_bLBtnDown; - std::unique_ptr<IFWL_DateTimeEdit> m_pEdit; - std::unique_ptr<IFWL_DateTimeCalender> m_pMonthCal; - std::unique_ptr<IFWL_DateTimeForm> m_pForm; - FX_FLOAT m_fBtn; - class CFWL_MonthCalendarImpDP : public IFWL_MonthCalendarDP { - public: - CFWL_MonthCalendarImpDP() { - m_iCurYear = 2010; - m_iCurMonth = 3; - m_iCurDay = 29; - } - virtual FWL_ERR GetCaption(IFWL_Widget* pWidget, - CFX_WideString& wsCaption) { - return FWL_ERR_Succeeded; - } - virtual int32_t GetCurDay(IFWL_Widget* pWidget) { return m_iCurDay; } - virtual int32_t GetCurMonth(IFWL_Widget* pWidget) { return m_iCurMonth; } - virtual int32_t GetCurYear(IFWL_Widget* pWidget) { return m_iCurYear; } - int32_t m_iCurDay; - int32_t m_iCurYear; - int32_t m_iCurMonth; - }; - - CFWL_MonthCalendarImpDP m_MonthCalendarDP; - friend class CFWL_DateTimeEditImpDelegate; - friend class CFWL_DateTimeCalendar; - friend class CFWL_DateTimeCalendarImpDelegate; - friend class CFWL_DateTimePickerImpDelegate; -}; -class CFWL_DateTimePickerImpDelegate : public CFWL_WidgetImpDelegate { - public: - CFWL_DateTimePickerImpDelegate(CFWL_DateTimePickerImp* pOwner); - int32_t OnProcessMessage(CFWL_Message* pMessage) override; - FWL_ERR OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL) override; - - protected: - void OnFocusChanged(CFWL_Message* pMsg, FX_BOOL bSet = TRUE); - void OnLButtonDown(CFWL_MsgMouse* pMsg); - void OnLButtonUp(CFWL_MsgMouse* pMsg); - void OnMouseMove(CFWL_MsgMouse* pMsg); - void OnMouseLeave(CFWL_MsgMouse* pMsg); - - CFWL_DateTimePickerImp* m_pOwner; - - private: - void DisForm_OnFocusChanged(CFWL_Message* pMsg, FX_BOOL bSet = TRUE); -}; - -#endif // XFA_SRC_FWL_BASEWIDGET_FWL_DATETIMEPICKERIMP_H_ diff --git a/xfa/src/fwl/basewidget/fwl_editimp.cpp b/xfa/src/fwl/basewidget/fwl_editimp.cpp deleted file mode 100644 index 662fa91ec1..0000000000 --- a/xfa/src/fwl/basewidget/fwl_editimp.cpp +++ /dev/null @@ -1,2152 +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/basewidget/fwl_editimp.h" - -#include <algorithm> -#include <vector> - -#include "xfa/include/fwl/basewidget/fwl_caret.h" -#include "xfa/include/fwl/basewidget/fwl_datetimepicker.h" -#include "xfa/include/fwl/core/fwl_theme.h" -#include "xfa/src/fde/fde_render.h" -#include "xfa/src/fde/fde_renderdevice.h" -#include "xfa/src/fee/ifde_txtedtpage.h" -#include "xfa/src/fwl/basewidget/fwl_caretimp.h" -#include "xfa/src/fwl/basewidget/fwl_comboboximp.h" -#include "xfa/src/fwl/basewidget/fwl_scrollbarimp.h" -#include "xfa/src/fwl/core/fwl_appimp.h" -#include "xfa/src/fwl/core/fwl_noteimp.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" - -// static -IFWL_Edit* IFWL_Edit::Create(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) { - IFWL_Edit* pEdit = new IFWL_Edit; - CFWL_EditImp* pEditImpl = new CFWL_EditImp(properties, pOuter); - pEdit->SetImpl(pEditImpl); - pEditImpl->SetInterface(pEdit); - return pEdit; -} -// static -IFWL_Edit* IFWL_Edit::CreateComboEdit( - const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) { - IFWL_Edit* pEdit = new IFWL_Edit; - CFWL_EditImp* pComboEditImpl = new CFWL_ComboEditImp(properties, pOuter); - pEdit->SetImpl(pComboEditImpl); - pComboEditImpl->SetInterface(pEdit); - return pEdit; -} -IFWL_Edit::IFWL_Edit() {} -FWL_ERR IFWL_Edit::SetText(const CFX_WideString& wsText) { - return static_cast<CFWL_EditImp*>(GetImpl())->SetText(wsText); -} -int32_t IFWL_Edit::GetTextLength() const { - return static_cast<CFWL_EditImp*>(GetImpl())->GetTextLength(); -} -FWL_ERR IFWL_Edit::GetText(CFX_WideString& wsText, - int32_t nStart, - int32_t nCount) const { - return static_cast<CFWL_EditImp*>(GetImpl())->GetText(wsText, nStart, nCount); -} -FWL_ERR IFWL_Edit::ClearText() { - return static_cast<CFWL_EditImp*>(GetImpl())->ClearText(); -} -int32_t IFWL_Edit::GetCaretPos() const { - return static_cast<CFWL_EditImp*>(GetImpl())->GetCaretPos(); -} -int32_t IFWL_Edit::SetCaretPos(int32_t nIndex, FX_BOOL bBefore) { - return static_cast<CFWL_EditImp*>(GetImpl())->SetCaretPos(nIndex, bBefore); -} -FWL_ERR IFWL_Edit::AddSelRange(int32_t nStart, int32_t nCount) { - return static_cast<CFWL_EditImp*>(GetImpl())->AddSelRange(nStart, nCount); -} -int32_t IFWL_Edit::CountSelRanges() { - return static_cast<CFWL_EditImp*>(GetImpl())->CountSelRanges(); -} -int32_t IFWL_Edit::GetSelRange(int32_t nIndex, int32_t& nStart) { - return static_cast<CFWL_EditImp*>(GetImpl())->GetSelRange(nIndex, nStart); -} -FWL_ERR IFWL_Edit::ClearSelections() { - return static_cast<CFWL_EditImp*>(GetImpl())->ClearSelections(); -} -int32_t IFWL_Edit::GetLimit() { - return static_cast<CFWL_EditImp*>(GetImpl())->GetLimit(); -} -FWL_ERR IFWL_Edit::SetLimit(int32_t nLimit) { - return static_cast<CFWL_EditImp*>(GetImpl())->SetLimit(nLimit); -} -FWL_ERR IFWL_Edit::SetAliasChar(FX_WCHAR wAlias) { - return static_cast<CFWL_EditImp*>(GetImpl())->SetAliasChar(wAlias); -} -FWL_ERR IFWL_Edit::Insert(int32_t nStart, - const FX_WCHAR* lpText, - int32_t nLen) { - return static_cast<CFWL_EditImp*>(GetImpl())->Insert(nStart, lpText, nLen); -} -FWL_ERR IFWL_Edit::DeleteSelections() { - return static_cast<CFWL_EditImp*>(GetImpl())->DeleteSelections(); -} -FWL_ERR IFWL_Edit::DeleteRange(int32_t nStart, int32_t nCount) { - return static_cast<CFWL_EditImp*>(GetImpl())->DeleteRange(nStart, nCount); -} -FWL_ERR IFWL_Edit::ReplaceSelections(const CFX_WideStringC& wsReplace) { - return static_cast<CFWL_EditImp*>(GetImpl())->ReplaceSelections(wsReplace); -} -FWL_ERR IFWL_Edit::Replace(int32_t nStart, - int32_t nLen, - const CFX_WideStringC& wsReplace) { - return static_cast<CFWL_EditImp*>(GetImpl()) - ->Replace(nStart, nLen, wsReplace); -} -FWL_ERR IFWL_Edit::DoClipboard(int32_t iCmd) { - return static_cast<CFWL_EditImp*>(GetImpl())->DoClipboard(iCmd); -} -FX_BOOL IFWL_Edit::Copy(CFX_WideString& wsCopy) { - return static_cast<CFWL_EditImp*>(GetImpl())->Copy(wsCopy); -} -FX_BOOL IFWL_Edit::Cut(CFX_WideString& wsCut) { - return static_cast<CFWL_EditImp*>(GetImpl())->Cut(wsCut); -} -FX_BOOL IFWL_Edit::Paste(const CFX_WideString& wsPaste) { - return static_cast<CFWL_EditImp*>(GetImpl())->Paste(wsPaste); -} -FX_BOOL IFWL_Edit::Delete() { - return static_cast<CFWL_EditImp*>(GetImpl())->Delete(); -} -FX_BOOL IFWL_Edit::Redo(const CFX_ByteStringC& bsRecord) { - return static_cast<CFWL_EditImp*>(GetImpl())->Redo(bsRecord); -} -FX_BOOL IFWL_Edit::Undo(const CFX_ByteStringC& bsRecord) { - return static_cast<CFWL_EditImp*>(GetImpl())->Undo(bsRecord); -} -FX_BOOL IFWL_Edit::Undo() { - return static_cast<CFWL_EditImp*>(GetImpl())->Undo(); -} -FX_BOOL IFWL_Edit::Redo() { - return static_cast<CFWL_EditImp*>(GetImpl())->Redo(); -} -FX_BOOL IFWL_Edit::CanUndo() { - return static_cast<CFWL_EditImp*>(GetImpl())->CanUndo(); -} -FX_BOOL IFWL_Edit::CanRedo() { - return static_cast<CFWL_EditImp*>(GetImpl())->CanRedo(); -} -FWL_ERR IFWL_Edit::SetTabWidth(FX_FLOAT fTabWidth, FX_BOOL bEquidistant) { - return static_cast<CFWL_EditImp*>(GetImpl()) - ->SetTabWidth(fTabWidth, bEquidistant); -} -FWL_ERR IFWL_Edit::SetOuter(IFWL_Widget* pOuter) { - return static_cast<CFWL_EditImp*>(GetImpl())->SetOuter(pOuter); -} -FWL_ERR IFWL_Edit::SetNumberRange(int32_t iMin, int32_t iMax) { - return static_cast<CFWL_EditImp*>(GetImpl())->SetNumberRange(iMin, iMax); -} -FWL_ERR IFWL_Edit::SetBackColor(FX_DWORD dwColor) { - return static_cast<CFWL_EditImp*>(GetImpl())->SetBackgroundColor(dwColor); -} -FWL_ERR IFWL_Edit::SetFont(const CFX_WideString& wsFont, FX_FLOAT fSize) { - return static_cast<CFWL_EditImp*>(GetImpl())->SetFont(wsFont, fSize); -} -void IFWL_Edit::SetScrollOffset(FX_FLOAT fScrollOffset) { - return static_cast<CFWL_EditImp*>(GetImpl())->SetScrollOffset(fScrollOffset); -} -FX_BOOL IFWL_Edit::GetSuggestWords(CFX_PointF pointf, - std::vector<CFX_ByteString>& sSuggest) { - return static_cast<CFWL_EditImp*>(GetImpl()) - ->GetSuggestWords(pointf, sSuggest); -} -FX_BOOL IFWL_Edit::ReplaceSpellCheckWord(CFX_PointF pointf, - const CFX_ByteStringC& bsReplace) { - return static_cast<CFWL_EditImp*>(GetImpl()) - ->ReplaceSpellCheckWord(pointf, bsReplace); -} -#define FWL_EDIT_Margin 3 -CFWL_EditImp::CFWL_EditImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) - : CFWL_WidgetImp(properties, pOuter), - m_fVAlignOffset(0.0f), - m_fScrollOffsetX(0.0f), - m_fScrollOffsetY(0.0f), - m_pEdtEngine(NULL), - m_bLButtonDown(FALSE), - m_nSelStart(0), - m_nLimit(-1), - m_fSpaceAbove(0), - m_fSpaceBelow(0), - m_fFontSize(0), - m_bSetRange(FALSE), - m_iMin(-1), - m_iMax(0xFFFFFFF), - m_backColor(0), - m_updateBackColor(FALSE), - m_iCurRecord(-1), - m_iMaxRecord(128) { - m_rtClient.Reset(); - m_rtEngine.Reset(); - m_rtStatic.Reset(); -} -CFWL_EditImp::~CFWL_EditImp() { - if (m_pEdtEngine) { - m_pEdtEngine->Release(); - m_pEdtEngine = NULL; - } - ClearRecord(); -} -FWL_ERR CFWL_EditImp::GetClassName(CFX_WideString& wsClass) const { - wsClass = FWL_CLASS_Edit; - return FWL_ERR_Succeeded; -} -FX_DWORD CFWL_EditImp::GetClassID() const { - return FWL_CLASSHASH_Edit; -} -FWL_ERR CFWL_EditImp::Initialize() { - if (CFWL_WidgetImp::Initialize() != FWL_ERR_Succeeded) - return FWL_ERR_Indefinite; - if (!m_pDelegate) { - m_pDelegate = new CFWL_EditImpDelegate(this); - } - InitCaret(); - if (!m_pEdtEngine) { - InitEngine(); - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_EditImp::Finalize() { - if (m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) { - ShowCaret(FALSE); - } - if (m_pHorzScrollBar) { - m_pHorzScrollBar->Finalize(); - } - if (m_pVertScrollBar) { - m_pVertScrollBar->Finalize(); - } - delete m_pDelegate; - m_pDelegate = nullptr; - return CFWL_WidgetImp::Finalize(); -} -FWL_ERR CFWL_EditImp::GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize) { - if (bAutoSize) { - rect.Set(0, 0, 0, 0); - if (m_pEdtEngine) { - int32_t iTextLen = m_pEdtEngine->GetTextLength(); - if (iTextLen > 0) { - CFX_WideString wsText; - m_pEdtEngine->GetText(wsText, 0); - CFX_SizeF sz = CalcTextSize( - wsText, m_pProperties->m_pThemeProvider, - m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_MultiLine); - rect.Set(0, 0, sz.x, sz.y); - } - } - CFWL_WidgetImp::GetWidgetRect(rect, TRUE); - } else { - rect = m_pProperties->m_rtWidget; - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_OuterScrollbar) { - if (IsShowScrollBar(TRUE)) { - FX_FLOAT* pfWidth = static_cast<FX_FLOAT*>( - GetThemeCapacity(FWL_WGTCAPACITY_ScrollBarWidth)); - rect.width += *pfWidth; - rect.width += FWL_EDIT_Margin; - } - if (IsShowScrollBar(FALSE)) { - FX_FLOAT* pfWidth = static_cast<FX_FLOAT*>( - GetThemeCapacity(FWL_WGTCAPACITY_ScrollBarWidth)); - rect.height += *pfWidth; - rect.height += FWL_EDIT_Margin; - } - } - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_EditImp::SetStates(FX_DWORD dwStates, FX_BOOL bSet) { - if ((m_pProperties->m_dwStates & FWL_WGTSTATE_Invisible) || - (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled)) { - ShowCaret(FALSE); - } - return CFWL_WidgetImp::SetStates(dwStates, bSet); -} -FWL_ERR CFWL_EditImp::SetWidgetRect(const CFX_RectF& rect) { - return CFWL_WidgetImp::SetWidgetRect(rect); -} -FWL_ERR CFWL_EditImp::Update() { - if (IsLocked()) { - return FWL_ERR_Indefinite; - } - if (!m_pProperties->m_pThemeProvider) { - m_pProperties->m_pThemeProvider = GetAvailableTheme(); - } - Layout(); - if (m_rtClient.IsEmpty()) { - return FWL_ERR_Indefinite; - } - UpdateEditEngine(); - UpdateVAlignment(); - UpdateScroll(); - InitCaret(); - return FWL_ERR_Succeeded; -} -FX_DWORD CFWL_EditImp::HitTest(FX_FLOAT fx, FX_FLOAT fy) { - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_OuterScrollbar) { - if (IsShowScrollBar(TRUE)) { - CFX_RectF rect; - m_pVertScrollBar->GetWidgetRect(rect); - if (rect.Contains(fx, fy)) { - return FWL_WGTHITTEST_VScrollBar; - } - } - if (IsShowScrollBar(FALSE)) { - CFX_RectF rect; - m_pHorzScrollBar->GetWidgetRect(rect); - if (rect.Contains(fx, fy)) { - return FWL_WGTHITTEST_HScrollBar; - } - } - } - if (m_rtClient.Contains(fx, fy)) { - return FWL_WGTHITTEST_Edit; - } - return FWL_WGTHITTEST_Unknown; -} -#define FX_EDIT_ISLATINWORD(u) \ - (u == 0x2D || (u <= 0x005A && u >= 0x0041) || \ - (u <= 0x007A && u >= 0x0061) || (u <= 0x02AF && u >= 0x00C0) || \ - u == 0x0027) -static void AddSquigglyPath(CFX_Path& PathData, - FX_FLOAT fStartX, - FX_FLOAT fEndX, - FX_FLOAT fY, - FX_FLOAT fStep) { - PathData.MoveTo(fStartX, fY); - FX_FLOAT fx; - int32_t i; - for (i = 1, fx = fStartX + fStep; fx < fEndX; fx += fStep, i++) { - PathData.LineTo(fx, fY + (i & 1) * fStep); - } -} -void CFWL_EditImp::AddSpellCheckObj(CFX_Path& PathData, - int32_t nStart, - int32_t nCount, - FX_FLOAT fOffSetX, - FX_FLOAT fOffSetY) { - FX_FLOAT fStartX = 0.0f; - FX_FLOAT fEndX = 0.0f; - FX_FLOAT fY = 0.0f; - FX_FLOAT fStep = 0.0f; - IFDE_TxtEdtPage* pPage = m_pEdtEngine->GetPage(0); - CFX_RectFArray rectArray; - CFX_RectF rectText; - const FDE_TXTEDTPARAMS* txtEdtParams = m_pEdtEngine->GetEditParams(); - FX_FLOAT fAsent = (FX_FLOAT)txtEdtParams->pFont->GetAscent() * - txtEdtParams->fFontSize / 1000; - pPage->CalcRangeRectArray(nStart, nCount, rectArray); - for (int i = 0; i < rectArray.GetSize(); i++) { - rectText = rectArray.GetAt(i); - fY = rectText.top + fAsent + fOffSetY; - fStep = txtEdtParams->fFontSize / 16.0f; - fStartX = rectText.left + fOffSetX; - fEndX = fStartX + rectText.Width(); - AddSquigglyPath(PathData, fStartX, fEndX, fY, fStep); - } -} -int32_t CFWL_EditImp::GetWordAtPoint(CFX_PointF pointf, int32_t& nCount) { - return 0; -} -FX_BOOL CFWL_EditImp::GetSuggestWords(CFX_PointF pointf, - std::vector<CFX_ByteString>& sSuggest) { - int32_t nWordCount = 0; - int32_t nWordStart = GetWordAtPoint(pointf, nWordCount); - if (nWordCount < 1) { - return FALSE; - } - CFX_WideString wsSpell; - GetText(wsSpell, nWordStart, nWordCount); - CFX_ByteString sLatinWord; - for (int i = 0; i < nWordCount; i++) { - if (!FX_EDIT_ISLATINWORD(wsSpell[i])) { - break; - } - sLatinWord += (FX_CHAR)wsSpell[i]; - } - if (sLatinWord.IsEmpty()) { - return FALSE; - } - CFWL_EvtEdtCheckWord checkWordEvent; - checkWordEvent.m_pSrcTarget = m_pInterface; - checkWordEvent.bsWord = sLatinWord; - checkWordEvent.bCheckWord = TRUE; - DispatchEvent(&checkWordEvent); - if (checkWordEvent.bCheckWord) { - return FALSE; - } - CFWL_EvtEdtGetSuggestWords suggestWordsEvent; - suggestWordsEvent.m_pSrcTarget = m_pInterface; - suggestWordsEvent.bsWord = sLatinWord; - suggestWordsEvent.bsArraySuggestWords = sSuggest; - suggestWordsEvent.bSuggestWords = FALSE; - DispatchEvent(&checkWordEvent); - return suggestWordsEvent.bSuggestWords; -} -FX_BOOL CFWL_EditImp::ReplaceSpellCheckWord(CFX_PointF pointf, - const CFX_ByteStringC& bsReplace) { - int32_t nWordCount = 0; - int32_t nWordStart = GetWordAtPoint(pointf, nWordCount); - if (nWordCount < 1) { - return FALSE; - } - CFX_WideString wsSpell; - GetText(wsSpell, nWordStart, nWordCount); - for (int i = 0; i < nWordCount; i++) { - if (!FX_EDIT_ISLATINWORD(wsSpell[i])) { - nWordCount = i; - break; - } - } - int32_t nDestLen = bsReplace.GetLength(); - CFX_WideString wsDest; - FX_WCHAR* pBuffer = wsDest.GetBuffer(nDestLen); - for (int32_t i = 0; i < nDestLen; i++) { - pBuffer[i] = bsReplace[i]; - } - wsDest.ReleaseBuffer(nDestLen); - Replace(nWordStart, nWordCount, wsDest); - return TRUE; -} -void CFWL_EditImp::DrawSpellCheck(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - pGraphics->SaveGraphState(); - if (pMatrix) { - pGraphics->ConcatMatrix(const_cast<CFX_Matrix*>(pMatrix)); - } - FX_ARGB cr = 0xFFFF0000; - CFX_Color crLine(cr); - CFWL_EvtEdtCheckWord checkWordEvent; - checkWordEvent.m_pSrcTarget = m_pInterface; - CFX_ByteString sLatinWord; - CFX_Path pathSpell; - pathSpell.Create(); - int32_t nStart = 0; - FX_FLOAT fOffSetX = m_rtEngine.left - m_fScrollOffsetX; - FX_FLOAT fOffSetY = m_rtEngine.top - m_fScrollOffsetY + m_fVAlignOffset; - CFX_WideString wsSpell; - GetText(wsSpell); - int32_t nContentLen = wsSpell.GetLength(); - for (int i = 0; i < nContentLen; i++) { - if (FX_EDIT_ISLATINWORD(wsSpell[i])) { - if (sLatinWord.IsEmpty()) { - nStart = i; - } - sLatinWord += (FX_CHAR)wsSpell[i]; - } else { - checkWordEvent.bsWord = sLatinWord; - checkWordEvent.bCheckWord = TRUE; - DispatchEvent(&checkWordEvent); - if (!sLatinWord.IsEmpty() && !checkWordEvent.bCheckWord) { - AddSpellCheckObj(pathSpell, nStart, sLatinWord.GetLength(), fOffSetX, - fOffSetY); - } - sLatinWord.Empty(); - } - } - checkWordEvent.bsWord = sLatinWord; - checkWordEvent.bCheckWord = TRUE; - DispatchEvent(&checkWordEvent); - if (!sLatinWord.IsEmpty() && !checkWordEvent.bCheckWord) { - AddSpellCheckObj(pathSpell, nStart, sLatinWord.GetLength(), fOffSetX, - fOffSetY); - } - if (!pathSpell.IsEmpty()) { - CFX_RectF rtClip = m_rtEngine; - CFX_Matrix mt; - mt.Set(1, 0, 0, 1, fOffSetX, fOffSetY); - if (pMatrix) { - pMatrix->TransformRect(rtClip); - mt.Concat(*pMatrix); - } - pGraphics->SetClipRect(rtClip); - pGraphics->SetStrokeColor(&crLine); - pGraphics->SetLineWidth(0); - pGraphics->StrokePath(&pathSpell, NULL); - } - pGraphics->RestoreGraphState(); -} -FWL_ERR CFWL_EditImp::DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - if (!pGraphics) - return FWL_ERR_Indefinite; - if (!m_pProperties->m_pThemeProvider) - return FWL_ERR_Indefinite; - if (m_rtClient.IsEmpty()) { - return FWL_ERR_Indefinite; - } - IFWL_ThemeProvider* pTheme = m_pProperties->m_pThemeProvider; - if (!m_pWidgetMgr->IsFormDisabled()) { - DrawTextBk(pGraphics, pTheme, pMatrix); - } - if (m_pEdtEngine) { - DrawContent(pGraphics, pTheme, pMatrix); - } - if ((m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) && - !(m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_ReadOnly)) { - DrawSpellCheck(pGraphics, pMatrix); - } - if (HasBorder()) { - DrawBorder(pGraphics, FWL_PART_EDT_Border, pTheme, pMatrix); - } - if (HasEdge()) { - DrawEdge(pGraphics, FWL_PART_EDT_Edge, pTheme, pMatrix); - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_EditImp::SetThemeProvider(IFWL_ThemeProvider* pThemeProvider) { - if (!pThemeProvider) - return FWL_ERR_Indefinite; - if (m_pHorzScrollBar) { - m_pHorzScrollBar->SetThemeProvider(pThemeProvider); - } - if (m_pVertScrollBar) { - m_pVertScrollBar->SetThemeProvider(pThemeProvider); - } - if (m_pCaret) { - m_pCaret->SetThemeProvider(pThemeProvider); - } - m_pProperties->m_pThemeProvider = pThemeProvider; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_EditImp::SetText(const CFX_WideString& wsText) { - m_pEdtEngine->SetText(wsText); - return FWL_ERR_Succeeded; -} -int32_t CFWL_EditImp::GetTextLength() const { - if (!m_pEdtEngine) - return -1; - return m_pEdtEngine->GetTextLength(); -} -FWL_ERR CFWL_EditImp::GetText(CFX_WideString& wsText, - int32_t nStart, - int32_t nCount) const { - if (!m_pEdtEngine) - return FWL_ERR_Succeeded; - m_pEdtEngine->GetText(wsText, nStart, nCount); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_EditImp::ClearText() { - if (!m_pEdtEngine) - return FWL_ERR_Succeeded; - m_pEdtEngine->ClearText(); - return FWL_ERR_Succeeded; -} -int32_t CFWL_EditImp::GetCaretPos() const { - if (!m_pEdtEngine) - return -1; - return m_pEdtEngine->GetCaretPos(); -} -int32_t CFWL_EditImp::SetCaretPos(int32_t nIndex, FX_BOOL bBefore) { - if (!m_pEdtEngine) - return -1; - return m_pEdtEngine->SetCaretPos(nIndex, bBefore); -} -FWL_ERR CFWL_EditImp::AddSelRange(int32_t nStart, int32_t nCount) { - if (!m_pEdtEngine) - return FWL_ERR_Succeeded; - m_pEdtEngine->AddSelRange(nStart, nCount); - return FWL_ERR_Succeeded; -} -int32_t CFWL_EditImp::CountSelRanges() { - if (!m_pEdtEngine) - return 0; - return m_pEdtEngine->CountSelRanges(); - return FWL_ERR_Succeeded; -} -int32_t CFWL_EditImp::GetSelRange(int32_t nIndex, int32_t& nStart) { - if (!m_pEdtEngine) - return -1; - return m_pEdtEngine->GetSelRange(nIndex, nStart); -} -FWL_ERR CFWL_EditImp::ClearSelections() { - if (!m_pEdtEngine) - return FWL_ERR_Succeeded; - m_pEdtEngine->ClearSelection(); - return FWL_ERR_Succeeded; -} -int32_t CFWL_EditImp::GetLimit() { - return m_nLimit; -} -FWL_ERR CFWL_EditImp::SetLimit(int32_t nLimit) { - m_nLimit = nLimit; - if (!m_pEdtEngine) - return FWL_ERR_Succeeded; - m_pEdtEngine->SetLimit(nLimit); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_EditImp::SetAliasChar(FX_WCHAR wAlias) { - if (!m_pEdtEngine) - return FWL_ERR_Indefinite; - m_pEdtEngine->SetAliasChar(wAlias); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_EditImp::Insert(int32_t nStart, - const FX_WCHAR* lpText, - int32_t nLen) { - if (!m_pEdtEngine) - return FWL_ERR_Succeeded; - if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_ReadOnly) || - (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled)) { - return FWL_ERR_Indefinite; - } - m_pEdtEngine->Insert(nStart, lpText, nLen); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_EditImp::DeleteSelections() { - if (!m_pEdtEngine) - return FWL_ERR_Succeeded; - int32_t iCount = m_pEdtEngine->CountSelRanges(); - if (iCount > 0) { - m_pEdtEngine->Delete(-1); - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_EditImp::DeleteRange(int32_t nStart, int32_t nCount) { - if (!m_pEdtEngine) - return FWL_ERR_Succeeded; - m_pEdtEngine->DeleteRange(nStart, nCount); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_EditImp::ReplaceSelections(const CFX_WideStringC& wsReplace) { - if (!m_pEdtEngine) - return FWL_ERR_Succeeded; - int32_t iCount = m_pEdtEngine->CountSelRanges(); - for (int i = 0; i < iCount; i++) { - int32_t nStart; - int32_t nCount = m_pEdtEngine->GetSelRange(i, nStart); - m_pEdtEngine->Replace(nStart, nCount, wsReplace); - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_EditImp::Replace(int32_t nStart, - int32_t nLen, - const CFX_WideStringC& wsReplace) { - if (!m_pEdtEngine) - return FWL_ERR_Succeeded; - m_pEdtEngine->Replace(nStart, nLen, wsReplace); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_EditImp::DoClipboard(int32_t iCmd) { - if (!m_pEdtEngine) - return FWL_ERR_Succeeded; - if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_ReadOnly) || - (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled)) { - return FWL_ERR_Succeeded; - } - return FWL_ERR_Indefinite; -} -FX_BOOL CFWL_EditImp::Copy(CFX_WideString& wsCopy) { - if (!m_pEdtEngine) - return FALSE; - int32_t nCount = m_pEdtEngine->CountSelRanges(); - if (nCount == 0) { - return FALSE; - } - wsCopy.Empty(); - CFX_WideString wsTemp; - int32_t nStart, nLength; - for (int32_t i = 0; i < nCount; i++) { - nLength = m_pEdtEngine->GetSelRange(i, nStart); - m_pEdtEngine->GetText(wsTemp, nStart, nLength); - wsCopy += wsTemp; - wsTemp.Empty(); - } - return TRUE; -} -FX_BOOL CFWL_EditImp::Cut(CFX_WideString& wsCut) { - if (!m_pEdtEngine) - return FALSE; - int32_t nCount = m_pEdtEngine->CountSelRanges(); - if (nCount == 0) { - return FALSE; - } - wsCut.Empty(); - CFX_WideString wsTemp; - int32_t nStart, nLength; - for (int32_t i = 0; i < nCount; i++) { - nLength = m_pEdtEngine->GetSelRange(i, nStart); - m_pEdtEngine->GetText(wsTemp, nStart, nLength); - wsCut += wsTemp; - wsTemp.Empty(); - } - m_pEdtEngine->Delete(0); - return TRUE; -} -FX_BOOL CFWL_EditImp::Paste(const CFX_WideString& wsPaste) { - if (!m_pEdtEngine) - return FALSE; - int32_t nCaret = m_pEdtEngine->GetCaretPos(); - int32_t iError = - m_pEdtEngine->Insert(nCaret, wsPaste.c_str(), wsPaste.GetLength()); - if (iError < 0) { - ProcessInsertError(iError); - return FALSE; - } - return TRUE; -} -FX_BOOL CFWL_EditImp::Delete() { - if (!m_pEdtEngine) - return FALSE; - int32_t nCount = m_pEdtEngine->CountSelRanges(); - if (nCount < 1) { - return FALSE; - } - m_pEdtEngine->Delete(0); - return TRUE; -} -FX_BOOL CFWL_EditImp::Redo(const CFX_ByteStringC& bsRecord) { - if (!m_pEdtEngine) - return FALSE; - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_NoRedoUndo) { - return TRUE; - } - return m_pEdtEngine->Redo(bsRecord); -} -FX_BOOL CFWL_EditImp::Undo(const CFX_ByteStringC& bsRecord) { - if (!m_pEdtEngine) - return FALSE; - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_NoRedoUndo) { - return TRUE; - } - return m_pEdtEngine->Undo(bsRecord); -} -FX_BOOL CFWL_EditImp::Undo() { - if (!CanUndo()) { - return FALSE; - } - CFX_ByteString bsRecord = m_RecordArr[m_iCurRecord--]; - return Undo(bsRecord); -} -FX_BOOL CFWL_EditImp::Redo() { - if (!CanRedo()) { - return FALSE; - } - CFX_ByteString bsRecord = m_RecordArr[++m_iCurRecord]; - return Redo(bsRecord); -} -FX_BOOL CFWL_EditImp::CanUndo() { - return m_iCurRecord >= 0; -} -FX_BOOL CFWL_EditImp::CanRedo() { - return m_iCurRecord < m_RecordArr.GetSize() - 1; -} -FWL_ERR CFWL_EditImp::SetTabWidth(FX_FLOAT fTabWidth, FX_BOOL bEquidistant) { - if (!m_pEdtEngine) - return FWL_ERR_Succeeded; - FDE_LPTXTEDTPARAMS pParams = - (FDE_LPTXTEDTPARAMS)m_pEdtEngine->GetEditParams(); - pParams->fTabWidth = fTabWidth; - pParams->bTabEquidistant = bEquidistant; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_EditImp::SetOuter(IFWL_Widget* pOuter) { - m_pOuter = pOuter; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_EditImp::SetNumberRange(int32_t iMin, int32_t iMax) { - m_iMin = iMin; - m_iMax = iMax; - m_bSetRange = TRUE; - return FWL_ERR_Succeeded; -} -void CFWL_EditImp::On_CaretChanged(IFDE_TxtEdtEngine* pEdit, - int32_t nPage, - FX_BOOL bVisible) { - if (m_rtEngine.IsEmpty()) { - return; - } - if ((m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) == 0) { - return; - } - FX_BOOL bRepaintContent = UpdateOffset(); - UpdateCaret(); - CFX_RectF rtInvalid; - rtInvalid.Set(0, 0, 0, 0); - FX_BOOL bRepaintScroll = FALSE; - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_MultiLine) { - IFWL_ScrollBar* pScroll = UpdateScroll(); - if (pScroll) { - pScroll->GetWidgetRect(rtInvalid); - bRepaintScroll = TRUE; - } - } - if (bRepaintContent || bRepaintScroll) { - if (bRepaintContent) { - rtInvalid.Union(m_rtEngine); - } - Repaint(&rtInvalid); - } -} -void CFWL_EditImp::On_TextChanged(IFDE_TxtEdtEngine* pEdit, - FDE_TXTEDT_TEXTCHANGE_INFO& ChangeInfo) { - FX_DWORD dwStyleEx = m_pProperties->m_dwStyleExes; - if (dwStyleEx & FWL_STYLEEXT_EDT_VAlignMask) { - UpdateVAlignment(); - } - IFDE_TxtEdtPage* page = m_pEdtEngine->GetPage(0); - FX_FLOAT fContentWidth = page->GetContentsBox().width; - FX_FLOAT fContentHeight = page->GetContentsBox().height; - CFX_RectF rtTemp; - GetClientRect(rtTemp); - FX_BOOL bHSelfAdaption = - m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_HSelfAdaption; - FX_BOOL bVSelfAdaption = - m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_VSelfAdaption; - FX_BOOL bNeedUpdate = FALSE; - if (bHSelfAdaption || bVSelfAdaption) { - CFWL_EvtEdtPreSelfAdaption evt; - evt.m_pSrcTarget = m_pInterface; - evt.bHSelfAdaption = TRUE; - evt.bVSelfAdaption = TRUE; - FX_FLOAT fWidth; - FX_FLOAT fHight; - fWidth = bHSelfAdaption ? fContentWidth : m_pProperties->m_rtWidget.width; - fHight = bVSelfAdaption ? fContentHeight : m_pProperties->m_rtWidget.height; - evt.rtAfterChange.Set(0, 0, fWidth, fHight); - DispatchEvent(&evt); - if (!evt.bHSelfAdaption) { - ModifyStylesEx( - 0, FWL_STYLEEXT_EDT_HSelfAdaption | FWL_STYLEEXT_EDT_AutoHScroll); - } - if (!evt.bVSelfAdaption) { - ModifyStylesEx( - 0, FWL_STYLEEXT_EDT_VSelfAdaption | FWL_STYLEEXT_EDT_AutoVScroll); - } - bNeedUpdate = (bHSelfAdaption && !evt.bHSelfAdaption) || - (bVSelfAdaption && !evt.bVSelfAdaption); - } - FX_FLOAT fContentWidth1 = fContentWidth; - FX_FLOAT fContentHeight1 = fContentHeight; - if (bNeedUpdate) { - UpdateEditParams(); - UpdateEditLayout(); - IFDE_TxtEdtPage* page1 = m_pEdtEngine->GetPage(0); - fContentWidth1 = page1->GetContentsBox().width; - fContentHeight1 = page1->GetContentsBox().height; - } - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_HSelfAdaption) { - rtTemp.width = std::max(m_pProperties->m_rtWidget.width, fContentWidth1); - m_pProperties->m_rtWidget.width = fContentWidth1; - } - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_VSelfAdaption) { - rtTemp.height = std::max(m_pProperties->m_rtWidget.height, fContentHeight1); - m_pProperties->m_rtWidget.height = fContentHeight1; - } - CFWL_EvtEdtTextChanged event; - event.m_pSrcTarget = m_pInterface; - event.nChangeType = ChangeInfo.nChangeType; - event.wsInsert = ChangeInfo.wsInsert; - event.wsDelete = ChangeInfo.wsDelete; - event.wsPrevText = ChangeInfo.wsPrevText; - DispatchEvent(&event); - LayoutScrollBar(); - Repaint(&rtTemp); -} -void CFWL_EditImp::On_SelChanged(IFDE_TxtEdtEngine* pEdit) { - CFX_RectF rtTemp; - GetClientRect(rtTemp); - Repaint(&rtTemp); -} -FX_BOOL CFWL_EditImp::On_PageLoad(IFDE_TxtEdtEngine* pEdit, - int32_t nPageIndex, - int32_t nPurpose) { - IFDE_TxtEdtEngine* pEdtEngine = m_pEdtEngine; - IFDE_TxtEdtPage* pPage = pEdtEngine->GetPage(nPageIndex); - if (!pPage) - return FALSE; - pPage->LoadPage(nullptr, nullptr); - return TRUE; -} -FX_BOOL CFWL_EditImp::On_PageUnload(IFDE_TxtEdtEngine* pEdit, - int32_t nPageIndex, - int32_t nPurpose) { - IFDE_TxtEdtEngine* pEdtEngine = m_pEdtEngine; - IFDE_TxtEdtPage* pPage = pEdtEngine->GetPage(nPageIndex); - if (!pPage) - return FALSE; - pPage->UnloadPage(nullptr); - return TRUE; -} - -void CFWL_EditImp::On_AddDoRecord(IFDE_TxtEdtEngine* pEdit, - const CFX_ByteStringC& bsDoRecord) { - AddDoRecord(bsDoRecord); -} - -FX_BOOL CFWL_EditImp::On_ValidateField(IFDE_TxtEdtEngine* pEdit, - int32_t nBlockIndex, - int32_t nFieldIndex, - const CFX_WideString& wsFieldText, - int32_t nCharIndex) { - return TRUE; -} -FX_BOOL CFWL_EditImp::On_ValidateBlock(IFDE_TxtEdtEngine* pEdit, - int32_t nBlockIndex) { - return TRUE; -} -FX_BOOL CFWL_EditImp::On_GetBlockFormatText(IFDE_TxtEdtEngine* pEdit, - int32_t nBlockIndex, - CFX_WideString& wsBlockText) { - return FALSE; -} -FX_BOOL CFWL_EditImp::On_Validate(IFDE_TxtEdtEngine* pEdit, - CFX_WideString& wsText) { - IFWL_Widget* pDst = GetOuter(); - if (!pDst) { - pDst = m_pInterface; - } - CFWL_EvtEdtValidate event; - event.pDstWidget = pDst; - event.m_pSrcTarget = m_pInterface; - event.wsInsert = wsText; - event.bValidate = TRUE; - DispatchEvent(&event); - return event.bValidate; -} -FWL_ERR CFWL_EditImp::SetBackgroundColor(FX_DWORD color) { - m_backColor = color; - m_updateBackColor = TRUE; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_EditImp::SetFont(const CFX_WideString& wsFont, FX_FLOAT fSize) { - m_wsFont = wsFont; - m_fFontSize = fSize; - return FWL_ERR_Succeeded; -} -void CFWL_EditImp::SetScrollOffset(FX_FLOAT fScrollOffset) { - m_fScrollOffsetY = fScrollOffset; -} -void CFWL_EditImp::DrawTextBk(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - CFWL_ThemeBackground param; - param.m_pWidget = m_pInterface; - param.m_iPart = FWL_PART_EDT_Background; - param.m_dwData = FWL_PARTDATA_EDT_Background; - param.m_dwStates = m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_ReadOnly - ? FWL_PARTSTATE_EDT_ReadOnly - : FWL_PARTSTATE_EDT_Normal; - FX_DWORD dwStates = (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled); - if (dwStates) { - param.m_dwStates = FWL_PARTSTATE_EDT_Disable; - } - param.m_pGraphics = pGraphics; - param.m_matrix = *pMatrix; - param.m_rtPart = m_rtClient; - pTheme->DrawBackground(¶m); - if (!IsShowScrollBar(TRUE) || !IsShowScrollBar(FALSE)) { - return; - } - CFX_RectF rtScorll; - m_pHorzScrollBar->GetWidgetRect(rtScorll); - CFX_RectF rtStatic; - rtStatic.Set(m_rtClient.right() - rtScorll.height, - m_rtClient.bottom() - rtScorll.height, rtScorll.height, - rtScorll.height); - param.m_dwData = FWL_PARTDATA_EDT_StaticBackground; - param.m_rtPart = rtStatic; - pTheme->DrawBackground(¶m); -} -void CFWL_EditImp::DrawContent(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - if (!m_pEdtEngine) - return; - IFDE_TxtEdtPage* pPage = m_pEdtEngine->GetPage(0); - if (!pPage) - return; - pGraphics->SaveGraphState(); - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_CombText) { - pGraphics->SaveGraphState(); - } - CFX_RectF rtClip = m_rtEngine; - FX_FLOAT fOffSetX = m_rtEngine.left - m_fScrollOffsetX; - FX_FLOAT fOffSetY = m_rtEngine.top - m_fScrollOffsetY + m_fVAlignOffset; - CFX_Matrix mt; - mt.Set(1, 0, 0, 1, fOffSetX, fOffSetY); - if (pMatrix) { - pMatrix->TransformRect(rtClip); - mt.Concat(*pMatrix); - } - FX_BOOL bShowSel = - (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_NoHideSel) || - (m_pProperties->m_dwStates & FWL_WGTSTATE_Focused); - if (bShowSel) { - IFWL_Widget* pForm = - m_pWidgetMgr->GetWidget(m_pInterface, FWL_WGTRELATION_SystemForm); - if (pForm) { - bShowSel = (pForm->GetStates() & FWL_WGTSTATE_Deactivated) != - FWL_WGTSTATE_Deactivated; - } - } - int32_t nSelCount = m_pEdtEngine->CountSelRanges(); - if (bShowSel && nSelCount > 0) { - int32_t nPageCharStart = pPage->GetCharStart(); - int32_t nPageCharCount = pPage->GetCharCount(); - int32_t nPageCharEnd = nPageCharStart + nPageCharCount - 1; - int32_t nCharCount; - int32_t nCharStart; - CFX_RectFArray rectArr; - int32_t i = 0; - for (i = 0; i < nSelCount; i++) { - nCharCount = m_pEdtEngine->GetSelRange(i, nCharStart); - int32_t nCharEnd = nCharStart + nCharCount - 1; - if (nCharEnd < nPageCharStart || nCharStart > nPageCharEnd) { - continue; - } - int32_t nBgn = std::max(nCharStart, nPageCharStart); - int32_t nEnd = std::min(nCharEnd, nPageCharEnd); - pPage->CalcRangeRectArray(nBgn - nPageCharStart, nEnd - nBgn + 1, - rectArr); - } - int32_t nCount = rectArr.GetSize(); - CFX_Path path; - path.Create(); - for (i = 0; i < nCount; i++) { - rectArr[i].left += fOffSetX; - rectArr[i].top += fOffSetY; - path.AddRectangle(rectArr[i].left, rectArr[i].top, rectArr[i].width, - rectArr[i].height); - } - pGraphics->SetClipRect(rtClip); - CFWL_ThemeBackground param; - param.m_pGraphics = pGraphics; - param.m_matrix = *pMatrix; - param.m_pWidget = m_pInterface; - param.m_iPart = FWL_PART_EDT_Background; - param.m_pPath = &path; - pTheme->DrawBackground(¶m); - } - CFX_RenderDevice* pRenderDev = pGraphics->GetRenderDevice(); - if (!pRenderDev) - return; - IFDE_RenderDevice* pRenderDevice = IFDE_RenderDevice::Create(pRenderDev); - if (!pRenderDevice) - return; - IFDE_RenderContext* pRenderContext = IFDE_RenderContext::Create(); - if (!pRenderContext) - return; - pRenderDevice->SetClipRect(rtClip); - pRenderContext->StartRender(pRenderDevice, pPage, mt); - pRenderContext->DoRender(NULL); - pRenderContext->Release(); - pRenderDevice->Release(); - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_CombText) { - pGraphics->RestoreGraphState(); - CFX_Path path; - path.Create(); - int32_t iLimit = m_nLimit > 0 ? m_nLimit : 1; - FX_FLOAT fStep = m_rtEngine.width / iLimit; - FX_FLOAT fLeft = m_rtEngine.left + 1; - for (int32_t i = 1; i < iLimit; i++) { - fLeft += fStep; - path.AddLine(fLeft, m_rtClient.top, fLeft, m_rtClient.bottom()); - } - CFWL_ThemeBackground param; - param.m_pGraphics = pGraphics; - param.m_matrix = *pMatrix; - param.m_pWidget = m_pInterface; - param.m_iPart = FWL_PART_EDT_CombTextLine; - param.m_pPath = &path; - pTheme->DrawBackground(¶m); - } - pGraphics->RestoreGraphState(); -} -void CFWL_EditImp::UpdateEditEngine() { - UpdateEditParams(); - UpdateEditLayout(); - if (m_nLimit > -1) { - m_pEdtEngine->SetLimit(m_nLimit); - } -} -void CFWL_EditImp::UpdateEditParams() { - FDE_TXTEDTPARAMS params; - params.nHorzScale = 100; - params.fPlateWidth = m_rtEngine.width; - params.fPlateHeight = m_rtEngine.height; - if (m_pProperties->m_dwStyles & FWL_WGTSTYLE_RTLLayout) { - params.dwLayoutStyles |= FDE_TEXTEDITLAYOUT_RTL; - } - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_VerticalLayout) { - params.dwLayoutStyles |= FDE_TEXTEDITLAYOUT_DocVertical; - } - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_VerticalChars) { - params.dwLayoutStyles |= FDE_TEXTEDITLAYOUT_CharVertial; - } - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_ReverseLine) { - params.dwLayoutStyles |= FDE_TEXTEDITLAYOUT_LineReserve; - } - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_ArabicShapes) { - params.dwLayoutStyles |= FDE_TEXTEDITLAYOUT_ArabicShapes; - } - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_ExpandTab) { - params.dwLayoutStyles |= FDE_TEXTEDITLAYOUT_ExpandTab; - } - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_CombText) { - params.dwLayoutStyles |= FDE_TEXTEDITLAYOUT_CombText; - } - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_LastLineHeight) { - params.dwLayoutStyles |= FDE_TEXTEDITLAYOUT_LastLineHeight; - } - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_Validate) { - params.dwMode |= FDE_TEXTEDITMODE_Validate; - } - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_Password) { - params.dwMode |= FDE_TEXTEDITMODE_Password; - } - switch (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_HAlignMask) { - case FWL_STYLEEXT_EDT_HNear: { - params.dwAlignment |= FDE_TEXTEDITALIGN_Left; - break; - } - case FWL_STYLEEXT_EDT_HCenter: { - params.dwAlignment |= FDE_TEXTEDITALIGN_Center; - break; - } - case FWL_STYLEEXT_EDT_HFar: { - params.dwAlignment |= FDE_TEXTEDITALIGN_Right; - break; - } - default: {} - } - switch (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_HAlignModeMask) { - case FWL_STYLEEXT_EDT_Justified: { - params.dwAlignment |= FDE_TEXTEDITALIGN_Justified; - break; - } - case FWL_STYLEEXT_EDT_Distributed: { - params.dwAlignment |= FDE_TEXTEDITALIGN_Distributed; - break; - } - default: { params.dwAlignment |= FDE_TEXTEDITALIGN_Normal; } - } - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_MultiLine) { - params.dwMode |= FDE_TEXTEDITMODE_MultiLines; - if ((m_pProperties->m_dwStyles & FWL_WGTSTYLE_HScroll) == 0 && - (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_AutoHScroll) == 0) { - params.dwMode |= - FDE_TEXTEDITMODE_AutoLineWrap | FDE_TEXTEDITMODE_LimitArea_Horz; - } - if ((m_pProperties->m_dwStyles & FWL_WGTSTYLE_VScroll) == 0 && - (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_AutoVScroll) == 0) { - params.dwMode |= FDE_TEXTEDITMODE_LimitArea_Vert; - } else { - params.fPlateHeight = 0x00FFFFFF; - } - } else { - if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_AutoHScroll) == 0) { - params.dwMode |= FDE_TEXTEDITMODE_LimitArea_Horz; - } - } - if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_ReadOnly) || - (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled)) { - params.dwMode |= FDE_TEXTEDITMODE_ReadOnly; - } - FX_FLOAT* pFontSize = - static_cast<FX_FLOAT*>(GetThemeCapacity(FWL_WGTCAPACITY_FontSize)); - if (!pFontSize) - return; - m_fFontSize = *pFontSize; - FX_DWORD* pFontColor = - static_cast<FX_DWORD*>(GetThemeCapacity(FWL_WGTCAPACITY_TextColor)); - if (!pFontColor) - return; - params.dwFontColor = *pFontColor; - FX_FLOAT* pLineHeight = - static_cast<FX_FLOAT*>(GetThemeCapacity(FWL_WGTCAPACITY_LineHeight)); - if (!pLineHeight) - return; - params.fLineSpace = *pLineHeight; - IFX_Font* pFont = - static_cast<IFX_Font*>(GetThemeCapacity(FWL_WGTCAPACITY_Font)); - if (!pFont) - return; - params.pFont = pFont; - params.fFontSize = m_fFontSize; - params.nLineCount = (int32_t)(params.fPlateHeight / params.fLineSpace); - if (params.nLineCount <= 0) { - params.nLineCount = 1; - } - params.fTabWidth = params.fFontSize * 1; - params.bTabEquidistant = TRUE; - params.wLineBreakChar = L'\n'; - params.nCharRotation = 0; - params.pEventSink = this; - m_pEdtEngine->SetEditParams(params); -} - -void CFWL_EditImp::UpdateEditLayout() { - if (m_pEdtEngine->GetTextLength() <= 0) - m_pEdtEngine->SetTextByStream(nullptr); - - IFDE_TxtEdtPage* pPage = m_pEdtEngine->GetPage(0); - if (pPage) - pPage->UnloadPage(nullptr); - - m_pEdtEngine->StartLayout(); - m_pEdtEngine->DoLayout(nullptr); - m_pEdtEngine->EndLayout(); - pPage = m_pEdtEngine->GetPage(0); - if (pPage) - pPage->LoadPage(nullptr, nullptr); -} - -FX_BOOL CFWL_EditImp::UpdateOffset() { - CFX_RectF rtCaret; - m_pEdtEngine->GetCaretRect(rtCaret); - FX_FLOAT fOffSetX = m_rtEngine.left - m_fScrollOffsetX; - FX_FLOAT fOffSetY = m_rtEngine.top - m_fScrollOffsetY + m_fVAlignOffset; - rtCaret.Offset(fOffSetX, fOffSetY); - const CFX_RectF& rtEidt = m_rtEngine; - if (rtEidt.Contains(rtCaret)) { - IFDE_TxtEdtPage* pPage = m_pEdtEngine->GetPage(0); - if (!pPage) - return FALSE; - CFX_RectF rtFDE = pPage->GetContentsBox(); - rtFDE.Offset(fOffSetX, fOffSetY); - if (rtFDE.right() < rtEidt.right() && m_fScrollOffsetX > 0) { - m_fScrollOffsetX += rtFDE.right() - rtEidt.right(); - if (m_fScrollOffsetX < 0) { - m_fScrollOffsetX = 0; - } - } - if (rtFDE.bottom() < rtEidt.bottom() && m_fScrollOffsetY > 0) { - m_fScrollOffsetY += rtFDE.bottom() - rtEidt.bottom(); - if (m_fScrollOffsetY < 0) { - m_fScrollOffsetY = 0; - } - } - return FALSE; - } else { - FX_FLOAT offsetX = 0.0; - FX_FLOAT offsetY = 0.0; - if (rtCaret.left < rtEidt.left) { - offsetX = rtCaret.left - rtEidt.left; - } - if (rtCaret.right() > rtEidt.right()) { - offsetX = rtCaret.right() - rtEidt.right(); - } - if (rtCaret.top < rtEidt.top) { - offsetY = rtCaret.top - rtEidt.top; - } - if (rtCaret.bottom() > rtEidt.bottom()) { - offsetY = rtCaret.bottom() - rtEidt.bottom(); - } - if (!(m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_HSelfAdaption)) { - m_fScrollOffsetX += offsetX; - } - if (!(m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_VSelfAdaption)) { - m_fScrollOffsetY += offsetY; - } - if (m_fFontSize > m_rtEngine.height) { - m_fScrollOffsetY = 0; - } - return TRUE; - } -} -FX_BOOL CFWL_EditImp::UpdateOffset(IFWL_ScrollBar* pScrollBar, - FX_FLOAT fPosChanged) { - if (pScrollBar == m_pHorzScrollBar.get()) { - m_fScrollOffsetX += fPosChanged; - } else { - m_fScrollOffsetY += fPosChanged; - } - return TRUE; -} -void CFWL_EditImp::UpdateVAlignment() { - IFDE_TxtEdtPage* pPage = m_pEdtEngine->GetPage(0); - if (!pPage) - return; - const CFX_RectF& rtFDE = pPage->GetContentsBox(); - FX_FLOAT fOffsetY = 0.0f; - FX_FLOAT fSpaceAbove = 0.0f; - FX_FLOAT fSpaceBelow = 0.0f; - CFX_SizeF* pSpace = static_cast<CFX_SizeF*>( - GetThemeCapacity(FWL_WGTCAPACITY_SpaceAboveBelow)); - if (pSpace) { - fSpaceAbove = pSpace->x; - fSpaceBelow = pSpace->y; - } - if (fSpaceAbove < 0.1f) { - fSpaceAbove = 0; - } - if (fSpaceBelow < 0.1f) { - fSpaceBelow = 0; - } - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_VCenter) { - fOffsetY = (m_rtEngine.height - rtFDE.height) / 2; - if (fOffsetY < (fSpaceAbove + fSpaceBelow) / 2 && - fSpaceAbove < fSpaceBelow) { - return; - } - fOffsetY += (fSpaceAbove - fSpaceBelow) / 2; - } else if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_VFar) { - fOffsetY = (m_rtEngine.height - rtFDE.height); - fOffsetY -= fSpaceBelow; - } else { - fOffsetY += fSpaceAbove; - } - m_fVAlignOffset = fOffsetY; - if (m_fVAlignOffset < 0) { - m_fVAlignOffset = 0; - } -} -void CFWL_EditImp::UpdateCaret() { - CFX_RectF rtFDE; - m_pEdtEngine->GetCaretRect(rtFDE); - rtFDE.Offset(m_rtEngine.left - m_fScrollOffsetX, - m_rtEngine.top - m_fScrollOffsetY + m_fVAlignOffset); - CFX_RectF rtCaret; - rtCaret.Set(rtFDE.left, rtFDE.top, rtFDE.width, rtFDE.height); - CFX_RectF temp = rtCaret; - CFX_RectF rtClient; - GetClientRect(rtClient); - rtCaret.Intersect(rtClient); - if (rtCaret.left > rtClient.right()) { - FX_FLOAT right = rtCaret.right(); - rtCaret.left = rtClient.right() - 1; - rtCaret.width = right - rtCaret.left; - } - FX_BOOL bIntersect = !rtCaret.IsEmpty(); - FX_BOOL bShow = TRUE; - FX_BOOL bShowWhole = FALSE; - if (!(m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) || !bIntersect) { - bShow = FALSE; - } - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_HSelfAdaption && - temp.right() > m_rtEngine.right()) { - bShowWhole = TRUE; - } - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_VSelfAdaption && - temp.bottom() > m_rtEngine.bottom()) { - bShowWhole = TRUE; - } else { - bShow = (m_pProperties->m_dwStates & FWL_WGTSTATE_Focused && bIntersect); - } - if (bShowWhole) { - rtCaret = temp; - } - ShowCaret(bShow, &rtCaret); -} -IFWL_ScrollBar* CFWL_EditImp::UpdateScroll() { - FX_BOOL bShowHorz = - m_pHorzScrollBar && - ((m_pHorzScrollBar->GetStates() & FWL_WGTSTATE_Invisible) == 0); - FX_BOOL bShowVert = - m_pVertScrollBar && - ((m_pVertScrollBar->GetStates() & FWL_WGTSTATE_Invisible) == 0); - if (!bShowHorz && !bShowVert) { - return NULL; - } - IFDE_TxtEdtPage* pPage = m_pEdtEngine->GetPage(0); - if (!pPage) - return NULL; - const CFX_RectF& rtFDE = pPage->GetContentsBox(); - IFWL_ScrollBar* pRepaint = NULL; - if (bShowHorz) { - CFX_RectF rtScroll; - m_pHorzScrollBar->GetWidgetRect(rtScroll); - if (rtScroll.width < rtFDE.width) { - m_pHorzScrollBar->LockUpdate(); - FX_FLOAT fRange = rtFDE.width - rtScroll.width; - m_pHorzScrollBar->SetRange(0.0f, fRange); - FX_FLOAT fPos = m_fScrollOffsetX; - if (fPos < 0.0f) { - fPos = 0.0f; - } - if (fPos > fRange) { - fPos = fRange; - } - m_pHorzScrollBar->SetPos(fPos); - m_pHorzScrollBar->SetTrackPos(fPos); - m_pHorzScrollBar->SetPageSize(rtScroll.width); - m_pHorzScrollBar->SetStepSize(rtScroll.width / 10); - m_pHorzScrollBar->SetStates(FWL_WGTSTATE_Disabled, FALSE); - m_pHorzScrollBar->UnlockUpdate(); - m_pHorzScrollBar->Update(); - pRepaint = m_pHorzScrollBar.get(); - } else if ((m_pHorzScrollBar->GetStates() & FWL_WGTSTATE_Disabled) == 0) { - m_pHorzScrollBar->LockUpdate(); - m_pHorzScrollBar->SetRange(0, -1); - m_pHorzScrollBar->SetStates(FWL_WGTSTATE_Disabled, TRUE); - m_pHorzScrollBar->UnlockUpdate(); - m_pHorzScrollBar->Update(); - pRepaint = m_pHorzScrollBar.get(); - } - } - if (bShowVert) { - CFX_RectF rtScroll; - m_pVertScrollBar->GetWidgetRect(rtScroll); - if (rtScroll.height < rtFDE.height) { - m_pVertScrollBar->LockUpdate(); - FX_FLOAT fStep = m_pEdtEngine->GetEditParams()->fLineSpace; - FX_FLOAT fRange = rtFDE.height - m_rtEngine.height; - if (fRange < fStep) { - fRange = fStep; - } - m_pVertScrollBar->SetRange(0.0f, fRange); - FX_FLOAT fPos = m_fScrollOffsetY; - if (fPos < 0.0f) { - fPos = 0.0f; - } - if (fPos > fRange) { - fPos = fRange; - } - m_pVertScrollBar->SetPos(fPos); - m_pVertScrollBar->SetTrackPos(fPos); - m_pVertScrollBar->SetPageSize(rtScroll.height); - m_pVertScrollBar->SetStepSize(fStep); - m_pVertScrollBar->SetStates(FWL_WGTSTATE_Disabled, FALSE); - m_pVertScrollBar->UnlockUpdate(); - m_pVertScrollBar->Update(); - pRepaint = m_pVertScrollBar.get(); - } else if ((m_pVertScrollBar->GetStates() & FWL_WGTSTATE_Disabled) == 0) { - m_pVertScrollBar->LockUpdate(); - m_pVertScrollBar->SetRange(0, -1); - m_pVertScrollBar->SetStates(FWL_WGTSTATE_Disabled, TRUE); - m_pVertScrollBar->UnlockUpdate(); - m_pVertScrollBar->Update(); - pRepaint = m_pVertScrollBar.get(); - } - } - return pRepaint; -} -FX_BOOL CFWL_EditImp::IsShowScrollBar(FX_BOOL bVert) { - FX_BOOL bShow = - (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_ShowScrollbarFocus) - ? (m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) == - FWL_WGTSTATE_Focused - : TRUE; - if (bVert) { - return bShow && (m_pProperties->m_dwStyles & FWL_WGTSTYLE_VScroll) && - (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_MultiLine) && - IsContentHeightOverflow(); - } - return bShow && (m_pProperties->m_dwStyles & FWL_WGTSTYLE_HScroll) && - (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_MultiLine); -} -FX_BOOL CFWL_EditImp::IsContentHeightOverflow() { - if (!m_pEdtEngine) - return FALSE; - IFDE_TxtEdtPage* pPage = m_pEdtEngine->GetPage(0); - if (!pPage) - return FALSE; - return pPage->GetContentsBox().height > m_rtEngine.height + 1.0f; -} -int32_t CFWL_EditImp::AddDoRecord(const CFX_ByteStringC& bsDoRecord) { - int32_t nCount = m_RecordArr.GetSize(); - if (m_iCurRecord == nCount - 1) { - if (nCount == m_iMaxRecord) { - m_RecordArr.RemoveAt(0); - m_iCurRecord--; - } - } else { - for (int32_t i = nCount - 1; i > m_iCurRecord; i--) { - m_RecordArr.RemoveAt(i); - } - } - m_RecordArr.Add(bsDoRecord); - return m_iCurRecord = m_RecordArr.GetSize() - 1; -} -void CFWL_EditImp::Layout() { - GetClientRect(m_rtClient); - m_rtEngine = m_rtClient; - FX_FLOAT* pfWidth = - static_cast<FX_FLOAT*>(GetThemeCapacity(FWL_WGTCAPACITY_ScrollBarWidth)); - if (!pfWidth) - return; - FX_FLOAT fWidth = *pfWidth; - if (!m_pOuter) { - CFX_RectF* pUIMargin = - static_cast<CFX_RectF*>(GetThemeCapacity(FWL_WGTCAPACITY_UIMargin)); - if (pUIMargin) { - m_rtEngine.Deflate(pUIMargin->left, pUIMargin->top, pUIMargin->width, - pUIMargin->height); - } - } else if (m_pOuter->GetClassID() == FWL_CLASSHASH_DateTimePicker) { - CFWL_ThemePart part; - part.m_pWidget = m_pOuter; - CFX_RectF* pUIMargin = - static_cast<CFX_RectF*>(m_pOuter->GetThemeProvider()->GetCapacity( - &part, FWL_WGTCAPACITY_UIMargin)); - if (pUIMargin) { - m_rtEngine.Deflate(pUIMargin->left, pUIMargin->top, pUIMargin->width, - pUIMargin->height); - } - } - FX_BOOL bShowVertScrollbar = IsShowScrollBar(TRUE); - FX_BOOL bShowHorzScrollbar = IsShowScrollBar(FALSE); - if (bShowVertScrollbar) { - InitScrollBar(); - CFX_RectF rtVertScr; - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_OuterScrollbar) { - rtVertScr.Set(m_rtClient.right() + FWL_EDIT_Margin, m_rtClient.top, - fWidth, m_rtClient.height); - } else { - rtVertScr.Set(m_rtClient.right() - fWidth, m_rtClient.top, fWidth, - m_rtClient.height); - if (bShowHorzScrollbar) { - rtVertScr.height -= fWidth; - } - m_rtEngine.width -= fWidth; - } - m_pVertScrollBar->SetWidgetRect(rtVertScr); - m_pVertScrollBar->SetStates(FWL_WGTSTATE_Invisible, FALSE); - m_pVertScrollBar->Update(); - } else if (m_pVertScrollBar) { - m_pVertScrollBar->SetStates(FWL_WGTSTATE_Invisible, TRUE); - } - if (bShowHorzScrollbar) { - InitScrollBar(FALSE); - CFX_RectF rtHoriScr; - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_OuterScrollbar) { - rtHoriScr.Set(m_rtClient.left, m_rtClient.bottom() + FWL_EDIT_Margin, - m_rtClient.width, fWidth); - } else { - rtHoriScr.Set(m_rtClient.left, m_rtClient.bottom() - fWidth, - m_rtClient.width, fWidth); - if (bShowVertScrollbar) { - rtHoriScr.width -= fWidth; - } - m_rtEngine.height -= fWidth; - } - m_pHorzScrollBar->SetWidgetRect(rtHoriScr); - m_pHorzScrollBar->SetStates(FWL_WGTSTATE_Invisible, FALSE); - m_pHorzScrollBar->Update(); - } else if (m_pHorzScrollBar) { - m_pHorzScrollBar->SetStates(FWL_WGTSTATE_Invisible, TRUE); - } -} -void CFWL_EditImp::LayoutScrollBar() { - if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_ShowScrollbarFocus) == - 0) { - return; - } - FX_FLOAT* pfWidth = NULL; - FX_BOOL bShowVertScrollbar = IsShowScrollBar(TRUE); - FX_BOOL bShowHorzScrollbar = IsShowScrollBar(FALSE); - if (bShowVertScrollbar) { - if (!m_pVertScrollBar) { - pfWidth = static_cast<FX_FLOAT*>( - GetThemeCapacity(FWL_WGTCAPACITY_ScrollBarWidth)); - FX_FLOAT fWidth = pfWidth ? *pfWidth : 0; - InitScrollBar(); - CFX_RectF rtVertScr; - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_OuterScrollbar) { - rtVertScr.Set(m_rtClient.right() + FWL_EDIT_Margin, m_rtClient.top, - fWidth, m_rtClient.height); - } else { - rtVertScr.Set(m_rtClient.right() - fWidth, m_rtClient.top, fWidth, - m_rtClient.height); - if (bShowHorzScrollbar) { - rtVertScr.height -= fWidth; - } - } - m_pVertScrollBar->SetWidgetRect(rtVertScr); - m_pVertScrollBar->Update(); - } - m_pVertScrollBar->SetStates(FWL_WGTSTATE_Invisible, FALSE); - } else if (m_pVertScrollBar) { - m_pVertScrollBar->SetStates(FWL_WGTSTATE_Invisible, TRUE); - } - if (bShowHorzScrollbar) { - if (!m_pHorzScrollBar) { - if (!pfWidth) { - pfWidth = static_cast<FX_FLOAT*>( - GetThemeCapacity(FWL_WGTCAPACITY_ScrollBarWidth)); - } - FX_FLOAT fWidth = pfWidth ? *pfWidth : 0; - InitScrollBar(FALSE); - CFX_RectF rtHoriScr; - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_OuterScrollbar) { - rtHoriScr.Set(m_rtClient.left, m_rtClient.bottom() + FWL_EDIT_Margin, - m_rtClient.width, fWidth); - } else { - rtHoriScr.Set(m_rtClient.left, m_rtClient.bottom() - fWidth, - m_rtClient.width, fWidth); - if (bShowVertScrollbar) { - rtHoriScr.width -= (fWidth); - } - } - m_pHorzScrollBar->SetWidgetRect(rtHoriScr); - m_pHorzScrollBar->Update(); - } - m_pHorzScrollBar->SetStates(FWL_WGTSTATE_Invisible, FALSE); - } else if (m_pHorzScrollBar) { - m_pHorzScrollBar->SetStates(FWL_WGTSTATE_Invisible, TRUE); - } - if (bShowVertScrollbar || bShowHorzScrollbar) { - UpdateScroll(); - } -} -void CFWL_EditImp::DeviceToEngine(CFX_PointF& pt) { - pt.x += -m_rtEngine.left + m_fScrollOffsetX; - pt.y += -m_rtEngine.top - m_fVAlignOffset + m_fScrollOffsetY; -} -void CFWL_EditImp::InitScrollBar(FX_BOOL bVert) { - if ((bVert && m_pVertScrollBar) || (!bVert && m_pHorzScrollBar)) { - return; - } - CFWL_WidgetImpProperties prop; - prop.m_dwStyleExes = bVert ? FWL_STYLEEXT_SCB_Vert : FWL_STYLEEXT_SCB_Horz; - prop.m_dwStates = FWL_WGTSTATE_Disabled | FWL_WGTSTATE_Invisible; - prop.m_pParent = m_pInterface; - prop.m_pThemeProvider = m_pProperties->m_pThemeProvider; - IFWL_ScrollBar* pScrollBar = IFWL_ScrollBar::Create(prop, m_pInterface); - pScrollBar->Initialize(); - (bVert ? &m_pVertScrollBar : &m_pHorzScrollBar)->reset(pScrollBar); -} -void CFWL_EditImp::InitEngine() { - if (m_pEdtEngine) { - return; - } - m_pEdtEngine = IFDE_TxtEdtEngine::Create(); -} -extern FX_BOOL FWL_ShowCaret(IFWL_Widget* pWidget, - FX_BOOL bVisible, - const CFX_RectF* pRtAnchor); -void CFWL_EditImp::ShowCaret(FX_BOOL bVisible, CFX_RectF* pRect) { - if (m_pCaret) { - m_pCaret->ShowCaret(bVisible); - if (bVisible && !pRect->IsEmpty()) { - m_pCaret->SetWidgetRect(*pRect); - } - Repaint(&m_rtEngine); - } else { - IFWL_Widget* pOuter = m_pInterface; - if (bVisible) { - pRect->Offset(m_pProperties->m_rtWidget.left, - m_pProperties->m_rtWidget.top); - } - while (pOuter->GetOuter()) { - pOuter = pOuter->GetOuter(); - if (bVisible) { - CFX_RectF rtOuter; - pOuter->GetWidgetRect(rtOuter); - pRect->Offset(rtOuter.left, rtOuter.top); - } - } - FWL_ShowCaret(pOuter, bVisible, pRect); - } -} -FX_BOOL CFWL_EditImp::ValidateNumberChar(FX_WCHAR cNum) { - if (!m_pEdtEngine) { - return FALSE; - } - if (!m_bSetRange) { - return TRUE; - } - CFX_WideString wsOld, wsText; - m_pEdtEngine->GetText(wsText, 0); - if (wsText.IsEmpty()) { - if (cNum == L'0') { - return FALSE; - } - return TRUE; - } - int32_t caretPos = m_pEdtEngine->GetCaretPos(); - int32_t iSel = CountSelRanges(); - if (iSel == 0) { - if (cNum == L'0' && caretPos == 0) { - return FALSE; - } - int32_t nLen = wsText.GetLength(); - CFX_WideString l = wsText.Mid(0, caretPos); - CFX_WideString r = wsText.Mid(caretPos, nLen - caretPos); - CFX_WideString wsNew = l + cNum + r; - if (wsNew.GetInteger() <= m_iMax) { - return TRUE; - } - } else { - if (wsText.GetInteger() <= m_iMax) { - return TRUE; - } - } - return FALSE; -} -void CFWL_EditImp::InitCaret() { - if (!m_pCaret) { - if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_InnerCaret)) { - CFWL_WidgetImpProperties prop; - m_pCaret.reset(IFWL_Caret::Create(prop, m_pInterface)); - m_pCaret->Initialize(); - m_pCaret->SetParent(m_pInterface); - m_pCaret->SetStates(m_pProperties->m_dwStates); - } - } else if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_InnerCaret) == - 0) { - m_pCaret.reset(); - } -} -void CFWL_EditImp::ClearRecord() { - m_iCurRecord = -1; - m_RecordArr.RemoveAll(); -} -void CFWL_EditImp::ProcessInsertError(int32_t iError) { - switch (iError) { - case -2: { - CFWL_EvtEdtTextFull textFullEvent; - textFullEvent.m_pSrcTarget = m_pInterface; - DispatchEvent(&textFullEvent); - break; - } - default: {} - } -} -CFWL_EditImpDelegate::CFWL_EditImpDelegate(CFWL_EditImp* pOwner) - : m_pOwner(pOwner) {} -int32_t CFWL_EditImpDelegate::OnProcessMessage(CFWL_Message* pMessage) { - if (!pMessage) - return 0; - FX_DWORD dwMsgCode = pMessage->GetClassID(); - int32_t iRet = 1; - switch (dwMsgCode) { - case FWL_MSGHASH_Activate: { - DoActivate(static_cast<CFWL_MsgActivate*>(pMessage)); - break; - } - case FWL_MSGHASH_Deactivate: { - DoDeactivate(static_cast<CFWL_MsgDeactivate*>(pMessage)); - break; - } - case FWL_MSGHASH_SetFocus: - case FWL_MSGHASH_KillFocus: { - OnFocusChanged(pMessage, dwMsgCode == FWL_MSGHASH_SetFocus); - break; - } - case FWL_MSGHASH_Mouse: { - CFWL_MsgMouse* pMsg = static_cast<CFWL_MsgMouse*>(pMessage); - FX_DWORD dwCmd = pMsg->m_dwCmd; - switch (dwCmd) { - case FWL_MSGMOUSECMD_LButtonDown: { - OnLButtonDown(pMsg); - break; - } - case FWL_MSGMOUSECMD_LButtonUp: { - OnLButtonUp(pMsg); - break; - } - case FWL_MSGMOUSECMD_LButtonDblClk: { - OnButtonDblClk(pMsg); - break; - } - case FWL_MSGMOUSECMD_MouseMove: { - OnMouseMove(pMsg); - break; - } - case FWL_MSGMOUSECMD_RButtonDown: { - DoButtonDown(pMsg); - break; - } - default: {} - } - break; - } - case FWL_MSGHASH_Key: { - CFWL_MsgKey* pKey = static_cast<CFWL_MsgKey*>(pMessage); - FX_DWORD dwCmd = pKey->m_dwCmd; - if (dwCmd == FWL_MSGKEYCMD_KeyDown) { - OnKeyDown(pKey); - } else if (dwCmd == FWL_MSGKEYCMD_Char) { - OnChar(pKey); - } - break; - } - default: { iRet = 0; } - } - CFWL_WidgetImpDelegate::OnProcessMessage(pMessage); - return iRet; -} -FWL_ERR CFWL_EditImpDelegate::OnProcessEvent(CFWL_Event* pEvent) { - if (!pEvent) - return FWL_ERR_Indefinite; - FX_DWORD dwHashCode = pEvent->GetClassID(); - if (dwHashCode != FWL_EVTHASH_Scroll) { - return FWL_ERR_Succeeded; - } - IFWL_Widget* pSrcTarget = pEvent->m_pSrcTarget; - if ((pSrcTarget == m_pOwner->m_pVertScrollBar.get() && - m_pOwner->m_pVertScrollBar) || - (pSrcTarget == m_pOwner->m_pHorzScrollBar.get() && - m_pOwner->m_pHorzScrollBar)) { - CFWL_EvtScroll* pScrollEvent = static_cast<CFWL_EvtScroll*>(pEvent); - OnScroll(static_cast<IFWL_ScrollBar*>(pSrcTarget), - pScrollEvent->m_iScrollCode, pScrollEvent->m_fPos); - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_EditImpDelegate::OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - return m_pOwner->DrawWidget(pGraphics, pMatrix); -} -void CFWL_EditImpDelegate::DoActivate(CFWL_MsgActivate* pMsg) { - m_pOwner->m_pProperties->m_dwStates |= ~FWL_WGTSTATE_Deactivated; - m_pOwner->Repaint(&m_pOwner->m_rtClient); -} -void CFWL_EditImpDelegate::DoDeactivate(CFWL_MsgDeactivate* pMsg) { - m_pOwner->m_pProperties->m_dwStates &= FWL_WGTSTATE_Deactivated; - m_pOwner->Repaint(&m_pOwner->m_rtClient); -} -void CFWL_EditImpDelegate::DoButtonDown(CFWL_MsgMouse* pMsg) { - if ((m_pOwner->m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) == 0) { - m_pOwner->SetFocus(TRUE); - } - if (!m_pOwner->m_pEdtEngine) { - m_pOwner->UpdateEditEngine(); - } - IFDE_TxtEdtPage* pPage = m_pOwner->m_pEdtEngine->GetPage(0); - if (!pPage) - return; - CFX_PointF pt(pMsg->m_fx, pMsg->m_fy); - m_pOwner->DeviceToEngine(pt); - FX_BOOL bBefore = TRUE; - int32_t nIndex = pPage->GetCharIndex(pt, bBefore); - if (nIndex < 0) { - nIndex = 0; - } - m_pOwner->m_pEdtEngine->SetCaretPos(nIndex, bBefore); -} -void CFWL_EditImpDelegate::OnFocusChanged(CFWL_Message* pMsg, FX_BOOL bSet) { - FX_DWORD dwStyleEx = m_pOwner->GetStylesEx(); - FX_BOOL bRepaint = dwStyleEx & FWL_STYLEEXT_EDT_InnerCaret; - if (bSet) { - m_pOwner->m_pProperties->m_dwStates |= FWL_WGTSTATE_Focused; - if (!m_pOwner->m_pEdtEngine) { - m_pOwner->UpdateEditEngine(); - } - m_pOwner->UpdateVAlignment(); - m_pOwner->UpdateOffset(); - m_pOwner->UpdateCaret(); - } else if (m_pOwner->m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) { - m_pOwner->m_pProperties->m_dwStates &= ~FWL_WGTSTATE_Focused; - m_pOwner->ShowCaret(FALSE); - if (m_pOwner->m_pEdtEngine && - (dwStyleEx & FWL_STYLEEXT_EDT_NoHideSel) == 0) { - int32_t nSel = m_pOwner->CountSelRanges(); - if (nSel > 0) { - m_pOwner->ClearSelections(); - bRepaint = TRUE; - } - m_pOwner->SetCaretPos(0); - m_pOwner->UpdateOffset(); - } - m_pOwner->ClearRecord(); - } - m_pOwner->LayoutScrollBar(); - if (bRepaint) { - CFX_RectF rtInvalidate; - rtInvalidate.Set(0, 0, m_pOwner->m_pProperties->m_rtWidget.width, - m_pOwner->m_pProperties->m_rtWidget.height); - m_pOwner->Repaint(&rtInvalidate); - } -} -void CFWL_EditImpDelegate::OnLButtonDown(CFWL_MsgMouse* pMsg) { - DoCursor(pMsg); - if (m_pOwner->m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled) { - return; - } - m_pOwner->m_bLButtonDown = TRUE; - m_pOwner->SetGrab(TRUE); - DoButtonDown(pMsg); - int32_t nIndex = m_pOwner->m_pEdtEngine->GetCaretPos(); - FX_BOOL bRepaint = FALSE; - int32_t iCount = m_pOwner->m_pEdtEngine->CountSelRanges(); - if (iCount > 0) { - m_pOwner->m_pEdtEngine->ClearSelection(); - bRepaint = TRUE; - } - FX_BOOL bShift = pMsg->m_dwFlags & FWL_KEYFLAG_Shift; - if (bShift && m_pOwner->m_nSelStart != nIndex) { - int32_t iStart = std::min(m_pOwner->m_nSelStart, nIndex); - int32_t iEnd = std::max(m_pOwner->m_nSelStart, nIndex); - m_pOwner->m_pEdtEngine->AddSelRange(iStart, iEnd - iStart); - bRepaint = TRUE; - } else { - m_pOwner->m_nSelStart = nIndex; - } - if (bRepaint) { - m_pOwner->Repaint(&m_pOwner->m_rtEngine); - } -} -void CFWL_EditImpDelegate::OnLButtonUp(CFWL_MsgMouse* pMsg) { - DoCursor(pMsg); - m_pOwner->m_bLButtonDown = FALSE; - m_pOwner->SetGrab(FALSE); -} -void CFWL_EditImpDelegate::OnButtonDblClk(CFWL_MsgMouse* pMsg) { - if (!m_pOwner->m_pEdtEngine) - return; - DoCursor(pMsg); - IFDE_TxtEdtPage* pPage = m_pOwner->m_pEdtEngine->GetPage(0); - if (!pPage) - return; - CFX_PointF pt(pMsg->m_fx, pMsg->m_fy); - m_pOwner->DeviceToEngine(pt); - int32_t nCount = 0; - int32_t nIndex = pPage->SelectWord(pt, nCount); - if (nIndex < 0) { - return; - } - m_pOwner->m_pEdtEngine->AddSelRange(nIndex, nCount); - m_pOwner->m_pEdtEngine->SetCaretPos(nIndex + nCount - 1, FALSE); - m_pOwner->Repaint(&m_pOwner->m_rtEngine); -} -void CFWL_EditImpDelegate::OnMouseMove(CFWL_MsgMouse* pMsg) { - if (!m_pOwner->m_pEdtEngine) - return; - DoCursor(pMsg); - if (m_pOwner->m_nSelStart == -1 || !m_pOwner->m_bLButtonDown) { - return; - } - IFDE_TxtEdtPage* pPage = m_pOwner->m_pEdtEngine->GetPage(0); - if (!pPage) - return; - CFX_PointF pt(pMsg->m_fx, pMsg->m_fy); - m_pOwner->DeviceToEngine(pt); - FX_BOOL bBefore = TRUE; - int32_t nIndex = pPage->GetCharIndex(pt, bBefore); - m_pOwner->m_pEdtEngine->SetCaretPos(nIndex, bBefore); - nIndex = m_pOwner->m_pEdtEngine->GetCaretPos(); - m_pOwner->m_pEdtEngine->ClearSelection(); - if (nIndex != m_pOwner->m_nSelStart) { - int32_t nLen = m_pOwner->m_pEdtEngine->GetTextLength(); - if (m_pOwner->m_nSelStart >= nLen) { - m_pOwner->m_nSelStart = nLen; - } - m_pOwner->m_pEdtEngine->AddSelRange( - std::min(m_pOwner->m_nSelStart, nIndex), - FXSYS_abs(nIndex - m_pOwner->m_nSelStart)); - } -} -void CFWL_EditImpDelegate::OnKeyDown(CFWL_MsgKey* pMsg) { - if (!m_pOwner->m_pEdtEngine) - return; - FDE_TXTEDTMOVECARET MoveCaret = MC_MoveNone; - FX_BOOL bShift = pMsg->m_dwFlags & FWL_KEYFLAG_Shift; - FX_BOOL bCtrl = pMsg->m_dwFlags & FWL_KEYFLAG_Ctrl; - FX_DWORD dwKeyCode = pMsg->m_dwKeyCode; - switch (dwKeyCode) { - case FWL_VKEY_Left: { - MoveCaret = MC_Left; - break; - } - case FWL_VKEY_Right: { - MoveCaret = MC_Right; - break; - } - case FWL_VKEY_Up: { - MoveCaret = MC_Up; - break; - } - case FWL_VKEY_Down: { - MoveCaret = MC_Down; - break; - } - case FWL_VKEY_Home: { - if (bCtrl) { - MoveCaret = MC_Home; - } else { - MoveCaret = MC_LineStart; - } - break; - } - case FWL_VKEY_End: { - if (bCtrl) { - MoveCaret = MC_End; - } else { - MoveCaret = MC_LineEnd; - } - break; - } - case FWL_VKEY_Insert: { - break; - } - case FWL_VKEY_Delete: { - if ((m_pOwner->m_pProperties->m_dwStyleExes & - FWL_STYLEEXT_EDT_ReadOnly) || - (m_pOwner->m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled)) { - break; - } - int32_t nCaret = m_pOwner->m_pEdtEngine->GetCaretPos(); -#if (_FX_OS_ == _FX_MACOSX_) - m_pOwner->m_pEdtEngine->Delete(nCaret, TRUE); -#else - m_pOwner->m_pEdtEngine->Delete(nCaret); -#endif - break; - } - case FWL_VKEY_F2: { - break; - } - case FWL_VKEY_Tab: { - m_pOwner->DispatchKeyEvent(pMsg); - break; - } - default: { -#if (_FX_OS_ == _FX_MACOSX_) - if (pMsg->m_dwFlags & FWL_KEYFLAG_Command) { -#else - if (pMsg->m_dwFlags & FWL_KEYFLAG_Ctrl) { -#endif - if (dwKeyCode == 0x43 || dwKeyCode == 0x63) { - m_pOwner->DoClipboard(1); - return; - } - if (dwKeyCode == 0x58 || dwKeyCode == 0x78) { - m_pOwner->DoClipboard(2); - return; - } - if (dwKeyCode == 0x56 || dwKeyCode == 0x76) { - m_pOwner->DoClipboard(3); - return; - } - } - } - } - if (MoveCaret != MC_MoveNone) { - m_pOwner->m_pEdtEngine->MoveCaretPos(MoveCaret, bShift, bCtrl); - } -} -void CFWL_EditImpDelegate::OnChar(CFWL_MsgKey* pMsg) { - if ((m_pOwner->m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_ReadOnly) || - (m_pOwner->m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled)) { - return; - } - if (!m_pOwner->m_pEdtEngine) - return; - int32_t iError = 0; - FX_WCHAR c = (FX_WCHAR)pMsg->m_dwKeyCode; - int32_t nCaret = m_pOwner->m_pEdtEngine->GetCaretPos(); - switch (c) { - case FWL_VKEY_Back: { - m_pOwner->m_pEdtEngine->Delete(nCaret, TRUE); - break; - } - case 0x0A: { - break; - } - case FWL_VKEY_Escape: { - break; - } - case FWL_VKEY_Tab: { - iError = m_pOwner->m_pEdtEngine->Insert(nCaret, L"\t", 1); - break; - } - case FWL_VKEY_Return: { - if (m_pOwner->m_pProperties->m_dwStyleExes & - FWL_STYLEEXT_EDT_WantReturn) { - iError = m_pOwner->m_pEdtEngine->Insert(nCaret, L"\n", 1); - } - break; - } - default: { - if (!m_pOwner->m_pWidgetMgr->IsFormDisabled()) { - if (m_pOwner->m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_Number) { - if (((pMsg->m_dwKeyCode < FWL_VKEY_0) && - (pMsg->m_dwKeyCode != 0x2E && pMsg->m_dwKeyCode != 0x2D)) || - pMsg->m_dwKeyCode > FWL_VKEY_9) { - break; - } - if (!m_pOwner->ValidateNumberChar(c)) { - break; - } - } - } -#if (_FX_OS_ == _FX_MACOSX_) - if (pMsg->m_dwFlags & FWL_KEYFLAG_Command) -#else - if (pMsg->m_dwFlags & FWL_KEYFLAG_Ctrl) -#endif - { - break; - } - iError = m_pOwner->m_pEdtEngine->Insert(nCaret, &c, 1); - break; - } - } - if (iError < 0) { - m_pOwner->ProcessInsertError(iError); - } -} -FX_BOOL CFWL_EditImpDelegate::OnScroll(IFWL_ScrollBar* pScrollBar, - FX_DWORD dwCode, - FX_FLOAT fPos) { - CFX_SizeF fs; - pScrollBar->GetRange(fs.x, fs.y); - FX_FLOAT iCurPos = pScrollBar->GetPos(); - FX_FLOAT fStep = pScrollBar->GetStepSize(); - switch (dwCode) { - case FWL_SCBCODE_Min: { - fPos = fs.x; - break; - } - case FWL_SCBCODE_Max: { - fPos = fs.y; - break; - } - case FWL_SCBCODE_StepBackward: { - fPos -= fStep; - if (fPos < fs.x + fStep / 2) { - fPos = fs.x; - } - break; - } - case FWL_SCBCODE_StepForward: { - fPos += fStep; - if (fPos > fs.y - fStep / 2) { - fPos = fs.y; - } - break; - } - case FWL_SCBCODE_PageBackward: { - fPos -= pScrollBar->GetPageSize(); - if (fPos < fs.x) { - fPos = fs.x; - } - break; - } - case FWL_SCBCODE_PageForward: { - fPos += pScrollBar->GetPageSize(); - if (fPos > fs.y) { - fPos = fs.y; - } - break; - } - case FWL_SCBCODE_Pos: - case FWL_SCBCODE_TrackPos: { - break; - } - case FWL_SCBCODE_EndScroll: { - return FALSE; - } - default: {} - } - if (iCurPos != fPos) { - pScrollBar->SetPos(fPos); - pScrollBar->SetTrackPos(fPos); - m_pOwner->UpdateOffset(pScrollBar, fPos - iCurPos); - if (m_pOwner->m_pEdtEngine) { - m_pOwner->UpdateCaret(); - } - CFX_RectF rect; - m_pOwner->GetWidgetRect(rect); - CFX_RectF rtInvalidate; - rtInvalidate.Set(0, 0, rect.width + 2, rect.height + 2); - m_pOwner->Repaint(&rtInvalidate); - } - return TRUE; -} -void CFWL_EditImpDelegate::DoCursor(CFWL_MsgMouse* pMsg) {} diff --git a/xfa/src/fwl/basewidget/fwl_editimp.h b/xfa/src/fwl/basewidget/fwl_editimp.h deleted file mode 100644 index 6e6b35c947..0000000000 --- a/xfa/src/fwl/basewidget/fwl_editimp.h +++ /dev/null @@ -1,208 +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 - -#ifndef XFA_SRC_FWL_BASEWIDGET_FWL_EDITIMP_H_ -#define XFA_SRC_FWL_BASEWIDGET_FWL_EDITIMP_H_ - -#include <memory> -#include <vector> - -#include "xfa/include/fwl/basewidget/fwl_scrollbar.h" -#include "xfa/src/fee/ifde_txtedtengine.h" -#include "xfa/src/fwl/core/fwl_widgetimp.h" - -class CFWL_WidgetImpProperties; -class CFWL_WidgetImpDelegate; -class IFWL_Caret; -class CFWL_EditImp; -class CFWL_EditImpDelegate; - -class CFWL_EditImp : public CFWL_WidgetImp, public IFDE_TxtEdtEventSink { - public: - CFWL_EditImp(const CFWL_WidgetImpProperties& properties, IFWL_Widget* pOuter); - ~CFWL_EditImp() override; - - // CFWL_WidgetImp: - FWL_ERR GetClassName(CFX_WideString& wsClass) const override; - FX_DWORD GetClassID() const override; - FWL_ERR Initialize() override; - FWL_ERR Finalize() override; - FWL_ERR GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize = FALSE) override; - FWL_ERR SetWidgetRect(const CFX_RectF& rect) override; - FWL_ERR Update() override; - FX_DWORD HitTest(FX_FLOAT fx, FX_FLOAT fy) override; - FWL_ERR SetStates(FX_DWORD dwStates, FX_BOOL bSet = TRUE) override; - FWL_ERR DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL) override; - FWL_ERR SetThemeProvider(IFWL_ThemeProvider* pThemeProvider) override; - - virtual FWL_ERR SetText(const CFX_WideString& wsText); - virtual int32_t GetTextLength() const; - virtual FWL_ERR GetText(CFX_WideString& wsText, - int32_t nStart = 0, - int32_t nCount = -1) const; - virtual FWL_ERR ClearText(); - virtual int32_t GetCaretPos() const; - virtual int32_t SetCaretPos(int32_t nIndex, FX_BOOL bBefore = TRUE); - virtual FWL_ERR AddSelRange(int32_t nStart, int32_t nCount = -1); - virtual int32_t CountSelRanges(); - virtual int32_t GetSelRange(int32_t nIndex, int32_t& nStart); - virtual FWL_ERR ClearSelections(); - virtual int32_t GetLimit(); - virtual FWL_ERR SetLimit(int32_t nLimit); - virtual FWL_ERR SetAliasChar(FX_WCHAR wAlias); - virtual FWL_ERR Insert(int32_t nStart, const FX_WCHAR* lpText, int32_t nLen); - virtual FWL_ERR DeleteSelections(); - virtual FWL_ERR DeleteRange(int32_t nStart, int32_t nCount = -1); - virtual FWL_ERR ReplaceSelections(const CFX_WideStringC& wsReplace); - virtual FWL_ERR Replace(int32_t nStart, - int32_t nLen, - const CFX_WideStringC& wsReplace); - virtual FWL_ERR DoClipboard(int32_t iCmd); - virtual FX_BOOL Copy(CFX_WideString& wsCopy); - virtual FX_BOOL Cut(CFX_WideString& wsCut); - virtual FX_BOOL Paste(const CFX_WideString& wsPaste); - virtual FX_BOOL Delete(); - virtual FX_BOOL Redo(const CFX_ByteStringC& bsRecord); - virtual FX_BOOL Undo(const CFX_ByteStringC& bsRecord); - virtual FX_BOOL Undo(); - virtual FX_BOOL Redo(); - virtual FX_BOOL CanUndo(); - virtual FX_BOOL CanRedo(); - virtual FWL_ERR SetTabWidth(FX_FLOAT fTabWidth, FX_BOOL bEquidistant); - virtual FWL_ERR SetOuter(IFWL_Widget* pOuter); - virtual FWL_ERR SetNumberRange(int32_t iMin, int32_t iMax); - void On_CaretChanged(IFDE_TxtEdtEngine* pEdit, - int32_t nPage, - FX_BOOL bVisible = true) override; - void On_TextChanged(IFDE_TxtEdtEngine* pEdit, - FDE_TXTEDT_TEXTCHANGE_INFO& ChangeInfo) override; - void On_PageCountChanged(IFDE_TxtEdtEngine* pEdit) override {} - void On_SelChanged(IFDE_TxtEdtEngine* pEdit) override; - FX_BOOL On_PageLoad(IFDE_TxtEdtEngine* pEdit, - int32_t nPageIndex, - int32_t nPurpose) override; - FX_BOOL On_PageUnload(IFDE_TxtEdtEngine* pEdit, - int32_t nPageIndex, - int32_t nPurpose) override; - FX_BOOL On_PageChange(IFDE_TxtEdtEngine* pEdit, int32_t nPageIndex) override { - return TRUE; - } - void On_AddDoRecord(IFDE_TxtEdtEngine* pEdit, - const CFX_ByteStringC& bsDoRecord) override; - FX_BOOL On_ValidateField(IFDE_TxtEdtEngine* pEdit, - int32_t nBlockIndex, - int32_t nFieldIndex, - const CFX_WideString& wsFieldText, - int32_t nCharIndex) override; - FX_BOOL On_ValidateBlock(IFDE_TxtEdtEngine* pEdit, - int32_t nBlockIndex) override; - FX_BOOL On_GetBlockFormatText(IFDE_TxtEdtEngine* pEdit, - int32_t nBlockIndex, - CFX_WideString& wsBlockText) override; - FX_BOOL On_Validate(IFDE_TxtEdtEngine* pEdit, - CFX_WideString& wsText) override; - virtual FWL_ERR SetBackgroundColor(FX_DWORD color); - virtual FWL_ERR SetFont(const CFX_WideString& wsFont, FX_FLOAT fSize); - void SetScrollOffset(FX_FLOAT fScrollOffset); - FX_BOOL GetSuggestWords(CFX_PointF pointf, - std::vector<CFX_ByteString>& sSuggest); - FX_BOOL ReplaceSpellCheckWord(CFX_PointF pointf, - const CFX_ByteStringC& bsReplace); - - protected: - void DrawTextBk(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix = NULL); - void DrawContent(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix = NULL); - void UpdateEditEngine(); - void UpdateEditParams(); - void UpdateEditLayout(); - FX_BOOL UpdateOffset(); - FX_BOOL UpdateOffset(IFWL_ScrollBar* pScrollBar, FX_FLOAT fPosChanged); - void UpdateVAlignment(); - void UpdateCaret(); - IFWL_ScrollBar* UpdateScroll(); - void Layout(); - void LayoutScrollBar(); - void DeviceToEngine(CFX_PointF& pt); - void InitScrollBar(FX_BOOL bVert = TRUE); - void InitEngine(); - virtual void ShowCaret(FX_BOOL bVisible, CFX_RectF* pRect = NULL); - FX_BOOL ValidateNumberChar(FX_WCHAR cNum); - void InitCaret(); - void ClearRecord(); - FX_BOOL IsShowScrollBar(FX_BOOL bVert); - FX_BOOL IsContentHeightOverflow(); - int32_t AddDoRecord(const CFX_ByteStringC& bsDoRecord); - void ProcessInsertError(int32_t iError); - - void DrawSpellCheck(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL); - void AddSpellCheckObj(CFX_Path& PathData, - int32_t nStart, - int32_t nCount, - FX_FLOAT fOffSetX, - FX_FLOAT fOffSetY); - int32_t GetWordAtPoint(CFX_PointF pointf, int32_t& nCount); - CFX_RectF m_rtClient; - CFX_RectF m_rtEngine; - CFX_RectF m_rtStatic; - FX_FLOAT m_fVAlignOffset; - FX_FLOAT m_fScrollOffsetX; - FX_FLOAT m_fScrollOffsetY; - IFDE_TxtEdtEngine* m_pEdtEngine; - FX_BOOL m_bLButtonDown; - int32_t m_nSelStart; - int32_t m_nLimit; - FX_FLOAT m_fSpaceAbove; - FX_FLOAT m_fSpaceBelow; - FX_FLOAT m_fFontSize; - FX_ARGB m_argbSel; - FX_BOOL m_bSetRange; - int32_t m_iMin; - int32_t m_iMax; - std::unique_ptr<IFWL_ScrollBar> m_pVertScrollBar; - std::unique_ptr<IFWL_ScrollBar> m_pHorzScrollBar; - std::unique_ptr<IFWL_Caret> m_pCaret; - CFX_WideString m_wsCache; - friend class CFWL_TxtEdtEventSink; - friend class CFWL_EditImpDelegate; - FX_DWORD m_backColor; - FX_BOOL m_updateBackColor; - CFX_WideString m_wsFont; - CFX_ByteStringArray m_RecordArr; - int32_t m_iCurRecord; - int32_t m_iMaxRecord; -}; - -class CFWL_EditImpDelegate : public CFWL_WidgetImpDelegate { - public: - CFWL_EditImpDelegate(CFWL_EditImp* pOwner); - int32_t OnProcessMessage(CFWL_Message* pMessage) override; - FWL_ERR OnProcessEvent(CFWL_Event* pEvent) override; - FWL_ERR OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL) override; - - protected: - void DoActivate(CFWL_MsgActivate* pMsg); - void DoDeactivate(CFWL_MsgDeactivate* pMsg); - void DoButtonDown(CFWL_MsgMouse* pMsg); - void OnFocusChanged(CFWL_Message* pMsg, FX_BOOL bSet = TRUE); - void OnLButtonDown(CFWL_MsgMouse* pMsg); - void OnLButtonUp(CFWL_MsgMouse* pMsg); - void OnButtonDblClk(CFWL_MsgMouse* pMsg); - void OnMouseMove(CFWL_MsgMouse* pMsg); - void OnKeyDown(CFWL_MsgKey* pMsg); - void OnChar(CFWL_MsgKey* pMsg); - FX_BOOL OnScroll(IFWL_ScrollBar* pScrollBar, FX_DWORD dwCode, FX_FLOAT fPos); - void DoCursor(CFWL_MsgMouse* pMsg); - CFWL_EditImp* m_pOwner; -}; - -#endif // XFA_SRC_FWL_BASEWIDGET_FWL_EDITIMP_H_ diff --git a/xfa/src/fwl/basewidget/fwl_formproxyimp.cpp b/xfa/src/fwl/basewidget/fwl_formproxyimp.cpp deleted file mode 100644 index 3985f00b77..0000000000 --- a/xfa/src/fwl/basewidget/fwl_formproxyimp.cpp +++ /dev/null @@ -1,55 +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/basewidget/fwl_formproxyimp.h" - -#include "xfa/src/fwl/core/fwl_formimp.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_widgetimp.h" - -CFWL_FormProxyImp::CFWL_FormProxyImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) - : CFWL_FormImp(properties, pOuter) {} -CFWL_FormProxyImp::~CFWL_FormProxyImp() {} -FWL_ERR CFWL_FormProxyImp::GetClassName(CFX_WideString& wsClass) const { - wsClass = FWL_CLASS_FormProxy; - return FWL_ERR_Succeeded; -} -FX_DWORD CFWL_FormProxyImp::GetClassID() const { - return FWL_CLASSHASH_FormProxy; -} -FX_BOOL CFWL_FormProxyImp::IsInstance(const CFX_WideStringC& wsClass) const { - if (wsClass == CFX_WideStringC(FWL_CLASS_FormProxy)) { - return TRUE; - } - return CFWL_FormImp::IsInstance(wsClass); -} -FWL_ERR CFWL_FormProxyImp::Initialize() { - if (CFWL_WidgetImp::Initialize() != FWL_ERR_Succeeded) - return FWL_ERR_Indefinite; - m_pDelegate = new CFWL_FormProxyImpDelegate(this); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_FormProxyImp::Finalize() { - delete m_pDelegate; - m_pDelegate = nullptr; - return CFWL_WidgetImp::Finalize(); -} -FWL_ERR CFWL_FormProxyImp::Update() { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_FormProxyImp::DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - return FWL_ERR_Succeeded; -} -CFWL_FormProxyImpDelegate::CFWL_FormProxyImpDelegate(CFWL_FormProxyImp* pOwner) - : m_pOwner(pOwner) {} -int32_t CFWL_FormProxyImpDelegate::OnProcessMessage(CFWL_Message* pMessage) { - IFWL_WidgetDelegate* pDelegate = m_pOwner->m_pOuter->SetDelegate(NULL); - return pDelegate->OnProcessMessage(pMessage); -} diff --git a/xfa/src/fwl/basewidget/fwl_formproxyimp.h b/xfa/src/fwl/basewidget/fwl_formproxyimp.h deleted file mode 100644 index 56ef05360c..0000000000 --- a/xfa/src/fwl/basewidget/fwl_formproxyimp.h +++ /dev/null @@ -1,42 +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 - -#ifndef XFA_SRC_FWL_BASEWIDGET_FWL_FORMPROXYIMP_H_ -#define XFA_SRC_FWL_BASEWIDGET_FWL_FORMPROXYIMP_H_ - -#include "xfa/src/fwl/core/fwl_formimp.h" -#include "xfa/src/fwl/core/fwl_widgetimp.h" - -class CFWL_WidgetImpProperties; -class CFWL_FormProxyImpDelegate; - -class CFWL_FormProxyImp : public CFWL_FormImp { - public: - CFWL_FormProxyImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter); - ~CFWL_FormProxyImp(); - virtual FWL_ERR GetClassName(CFX_WideString& wsClass) const; - virtual FX_DWORD GetClassID() const; - virtual FX_BOOL IsInstance(const CFX_WideStringC& wsClass) const; - virtual FWL_ERR Initialize(); - virtual FWL_ERR Finalize(); - virtual FWL_ERR Update(); - virtual FWL_ERR DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL); - - protected: - friend class CFWL_FormProxyImpDelegate; -}; -class CFWL_FormProxyImpDelegate : public CFWL_WidgetImpDelegate { - public: - CFWL_FormProxyImpDelegate(CFWL_FormProxyImp* pOwner); - int32_t OnProcessMessage(CFWL_Message* pMessage) override; - - protected: - CFWL_FormProxyImp* m_pOwner; -}; - -#endif // XFA_SRC_FWL_BASEWIDGET_FWL_FORMPROXYIMP_H_ diff --git a/xfa/src/fwl/basewidget/fwl_listboximp.cpp b/xfa/src/fwl/basewidget/fwl_listboximp.cpp deleted file mode 100644 index aac2d27bdf..0000000000 --- a/xfa/src/fwl/basewidget/fwl_listboximp.cpp +++ /dev/null @@ -1,1241 +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/basewidget/fwl_listboximp.h" - -#include "xfa/include/fwl/core/fwl_theme.h" -#include "xfa/src/fde/tto/fde_textout.h" -#include "xfa/src/fwl/basewidget/fwl_comboboximp.h" -#include "xfa/src/fwl/basewidget/fwl_scrollbarimp.h" -#include "xfa/src/fwl/core/fwl_noteimp.h" -#include "xfa/src/fwl/core/fwl_targetimp.h" -#include "xfa/src/fwl/core/fwl_widgetimp.h" - -#define FWL_LISTBOX_ItemTextMargin 2 - -// static -IFWL_ListBox* IFWL_ListBox::Create(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) { - IFWL_ListBox* pListBox = new IFWL_ListBox; - CFWL_ListBoxImp* pListBoxImpl = new CFWL_ListBoxImp(properties, pOuter); - pListBox->SetImpl(pListBoxImpl); - pListBoxImpl->SetInterface(pListBox); - return pListBox; -} -// static -IFWL_ListBox* IFWL_ListBox::CreateComboList( - const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) { - IFWL_ListBox* pListBox = new IFWL_ListBox; - CFWL_ListBoxImp* pComboListImpl = new CFWL_ComboListImp(properties, pOuter); - pListBox->SetImpl(pComboListImpl); - pComboListImpl->SetInterface(pListBox); - return pListBox; -} -IFWL_ListBox::IFWL_ListBox() {} -int32_t IFWL_ListBox::CountSelItems() { - return static_cast<CFWL_ListBoxImp*>(GetImpl())->CountSelItems(); -} -FWL_HLISTITEM IFWL_ListBox::GetSelItem(int32_t nIndexSel) { - return static_cast<CFWL_ListBoxImp*>(GetImpl())->GetSelItem(nIndexSel); -} -int32_t IFWL_ListBox::GetSelIndex(int32_t nIndex) { - return static_cast<CFWL_ListBoxImp*>(GetImpl())->GetSelIndex(nIndex); -} -FWL_ERR IFWL_ListBox::SetSelItem(FWL_HLISTITEM hItem, FX_BOOL bSelect) { - return static_cast<CFWL_ListBoxImp*>(GetImpl())->SetSelItem(hItem, bSelect); -} -FWL_ERR IFWL_ListBox::GetItemText(FWL_HLISTITEM hItem, CFX_WideString& wsText) { - return static_cast<CFWL_ListBoxImp*>(GetImpl())->GetItemText(hItem, wsText); -} -FWL_ERR IFWL_ListBox::GetScrollPos(FX_FLOAT& fPos, FX_BOOL bVert) { - return static_cast<CFWL_ListBoxImp*>(GetImpl())->GetScrollPos(fPos, bVert); -} -FWL_ERR* IFWL_ListBox::Sort(IFWL_ListBoxCompare* pCom) { - return static_cast<CFWL_ListBoxImp*>(GetImpl())->Sort(pCom); -} - -CFWL_ListBoxImp::CFWL_ListBoxImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) - : CFWL_WidgetImp(properties, pOuter), - m_dwTTOStyles(0), - m_iTTOAligns(0), - m_hAnchor(NULL), - m_fScorllBarWidth(0), - m_bLButtonDown(FALSE), - m_pScrollBarTP(NULL) { - m_rtClient.Reset(); - m_rtConent.Reset(); - m_rtStatic.Reset(); -} -CFWL_ListBoxImp::~CFWL_ListBoxImp() {} -FWL_ERR CFWL_ListBoxImp::GetClassName(CFX_WideString& wsClass) const { - wsClass = FWL_CLASS_ListBox; - return FWL_ERR_Succeeded; -} -FX_DWORD CFWL_ListBoxImp::GetClassID() const { - return FWL_CLASSHASH_ListBox; -} -FWL_ERR CFWL_ListBoxImp::Initialize() { - if (CFWL_WidgetImp::Initialize() != FWL_ERR_Succeeded) - return FWL_ERR_Indefinite; - m_pDelegate = new CFWL_ListBoxImpDelegate(this); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ListBoxImp::Finalize() { - if (m_pVertScrollBar) { - m_pVertScrollBar->Finalize(); - } - if (m_pHorzScrollBar) { - m_pHorzScrollBar->Finalize(); - } - delete m_pDelegate; - m_pDelegate = nullptr; - return CFWL_WidgetImp::Finalize(); -} -FWL_ERR CFWL_ListBoxImp::GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize) { - if (bAutoSize) { - rect.Set(0, 0, 0, 0); - if (!m_pProperties->m_pThemeProvider) { - m_pProperties->m_pThemeProvider = GetAvailableTheme(); - } - CFX_SizeF fs = CalcSize(TRUE); - rect.Set(0, 0, fs.x, fs.y); - CFWL_WidgetImp::GetWidgetRect(rect, TRUE); - } else { - rect = m_pProperties->m_rtWidget; - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ListBoxImp::Update() { - if (IsLocked()) { - return FWL_ERR_Indefinite; - } - if (!m_pProperties->m_pThemeProvider) { - m_pProperties->m_pThemeProvider = GetAvailableTheme(); - } - m_iTTOAligns = FDE_TTOALIGNMENT_Center; - switch (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_LTB_AlignMask) { - case FWL_STYLEEXT_LTB_LeftAlign: { - m_iTTOAligns = FDE_TTOALIGNMENT_CenterLeft; - break; - } - case FWL_STYLEEXT_LTB_RightAlign: { - m_iTTOAligns = FDE_TTOALIGNMENT_CenterRight; - break; - } - case FWL_STYLEEXT_LTB_CenterAlign: - default: { m_iTTOAligns = FDE_TTOALIGNMENT_Center; } - } - if (m_pProperties->m_dwStyleExes & FWL_WGTSTYLE_RTLReading) { - m_dwTTOStyles |= FDE_TTOSTYLE_RTL; - } - m_dwTTOStyles |= FDE_TTOSTYLE_SingleLine; - m_fScorllBarWidth = GetScrollWidth(); - SortItem(); - CalcSize(); - return FWL_ERR_Succeeded; -} -FX_DWORD CFWL_ListBoxImp::HitTest(FX_FLOAT fx, FX_FLOAT fy) { - if (IsShowScrollBar(FALSE)) { - CFX_RectF rect; - m_pHorzScrollBar->GetWidgetRect(rect); - if (rect.Contains(fx, fy)) { - return FWL_WGTHITTEST_HScrollBar; - } - } - if (IsShowScrollBar(TRUE)) { - CFX_RectF rect; - m_pVertScrollBar->GetWidgetRect(rect); - if (rect.Contains(fx, fy)) { - return FWL_WGTHITTEST_VScrollBar; - } - } - if (m_rtClient.Contains(fx, fy)) { - return FWL_WGTHITTEST_Client; - } - return FWL_WGTHITTEST_Unknown; -} -FWL_ERR CFWL_ListBoxImp::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; - pGraphics->SaveGraphState(); - if (HasBorder()) { - DrawBorder(pGraphics, FWL_PART_LTB_Border, pTheme, pMatrix); - } - if (HasEdge()) { - DrawEdge(pGraphics, FWL_PART_LTB_Edge, pTheme, pMatrix); - } - CFX_RectF rtClip(m_rtConent); - if (IsShowScrollBar(FALSE)) { - rtClip.height -= m_fScorllBarWidth; - } - if (IsShowScrollBar(TRUE)) { - rtClip.width -= m_fScorllBarWidth; - } - if (pMatrix) { - pMatrix->TransformRect(rtClip); - } - pGraphics->SetClipRect(rtClip); - if ((m_pProperties->m_dwStyles & FWL_WGTSTYLE_NoBackground) == 0) { - DrawBkground(pGraphics, pTheme, pMatrix); - } - DrawItems(pGraphics, pTheme, pMatrix); - pGraphics->RestoreGraphState(); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ListBoxImp::SetThemeProvider(IFWL_ThemeProvider* pThemeProvider) { - if (!pThemeProvider) - return FWL_ERR_Indefinite; - if (!pThemeProvider->IsValidWidget(m_pInterface)) { - m_pScrollBarTP = pThemeProvider; - return FWL_ERR_Succeeded; - } - m_pProperties->m_pThemeProvider = pThemeProvider; - return FWL_ERR_Succeeded; -} -int32_t CFWL_ListBoxImp::CountSelItems() { - if (!m_pProperties->m_pDataProvider) - return 0; - int32_t iRet = 0; - IFWL_ListBoxDP* pData = - static_cast<IFWL_ListBoxDP*>(m_pProperties->m_pDataProvider); - int32_t iCount = pData->CountItems(m_pInterface); - for (int32_t i = 0; i < iCount; i++) { - FWL_HLISTITEM hItem = pData->GetItem(m_pInterface, i); - if (!hItem) { - continue; - } - FX_DWORD dwStyle = pData->GetItemStyles(m_pInterface, hItem); - if (dwStyle & FWL_ITEMSTATE_LTB_Selected) { - iRet++; - } - } - return iRet; -} -FWL_HLISTITEM CFWL_ListBoxImp::GetSelItem(int32_t nIndexSel) { - if (!m_pProperties->m_pDataProvider) - return NULL; - int32_t index = 0; - IFWL_ListBoxDP* pData = - static_cast<IFWL_ListBoxDP*>(m_pProperties->m_pDataProvider); - int32_t iCount = pData->CountItems(m_pInterface); - for (int32_t i = 0; i < iCount; i++) { - FWL_HLISTITEM hItem = pData->GetItem(m_pInterface, i); - if (!hItem) { - return NULL; - } - FX_DWORD dwStyle = pData->GetItemStyles(m_pInterface, hItem); - if (dwStyle & FWL_ITEMSTATE_LTB_Selected) { - if (index == nIndexSel) { - return hItem; - } else { - index++; - } - } - } - return NULL; -} -int32_t CFWL_ListBoxImp::GetSelIndex(int32_t nIndex) { - if (!m_pProperties->m_pDataProvider) - return -1; - int32_t index = 0; - IFWL_ListBoxDP* pData = - static_cast<IFWL_ListBoxDP*>(m_pProperties->m_pDataProvider); - int32_t iCount = pData->CountItems(m_pInterface); - for (int32_t i = 0; i < iCount; i++) { - FWL_HLISTITEM hItem = pData->GetItem(m_pInterface, i); - if (!hItem) { - return -1; - } - FX_DWORD dwStyle = pData->GetItemStyles(m_pInterface, hItem); - if (dwStyle & FWL_ITEMSTATE_LTB_Selected) { - if (index == nIndex) { - return i; - } else { - index++; - } - } - } - return -1; -} -FWL_ERR CFWL_ListBoxImp::SetSelItem(FWL_HLISTITEM hItem, FX_BOOL bSelect) { - if (!m_pProperties->m_pDataProvider) - return FWL_ERR_Indefinite; - if (!hItem) { - if (bSelect) { - SelectAll(); - } else { - ClearSelection(); - SetFocusItem(NULL); - } - return FWL_ERR_Indefinite; - } - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_LTB_MultiSelection) { - SetSelectionDirect(hItem, bSelect); - } else { - SetSelection(hItem, hItem, bSelect); - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ListBoxImp::GetItemText(FWL_HLISTITEM hItem, - CFX_WideString& wsText) { - if (!m_pProperties->m_pDataProvider) - return FWL_ERR_Indefinite; - IFWL_ListBoxDP* pData = - static_cast<IFWL_ListBoxDP*>(m_pProperties->m_pDataProvider); - if (!hItem) - return FWL_ERR_Indefinite; - pData->GetItemText(m_pInterface, hItem, wsText); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ListBoxImp::GetScrollPos(FX_FLOAT& fPos, FX_BOOL bVert) { - if ((bVert && IsShowScrollBar(TRUE)) || (!bVert && IsShowScrollBar(FALSE))) { - IFWL_ScrollBar* pScrollBar = - bVert ? m_pVertScrollBar.get() : m_pHorzScrollBar.get(); - fPos = pScrollBar->GetPos(); - return FWL_ERR_Succeeded; - } - return FWL_ERR_Indefinite; -} -FWL_ERR* CFWL_ListBoxImp::Sort(IFWL_ListBoxCompare* pCom) { - FWL_HLISTITEM hTemp; - IFWL_ListBoxDP* pData = - static_cast<IFWL_ListBoxDP*>(m_pProperties->m_pDataProvider); - int32_t sz = pData->CountItems(m_pInterface); - for (int32_t i = 0; i < sz - 1; i++) { - for (int32_t j = i + 1; j < sz; j++) { - if (pCom->Compare(pData->GetItem(m_pInterface, i), - pData->GetItem(m_pInterface, j)) > 0) { - hTemp = pData->GetItem(m_pInterface, i); - pData->SetItemIndex(m_pInterface, pData->GetItem(m_pInterface, j), i); - pData->SetItemIndex(m_pInterface, hTemp, j); - } - } - } - return FWL_ERR_Succeeded; -} -FWL_HLISTITEM CFWL_ListBoxImp::GetItem(FWL_HLISTITEM hItem, - FX_DWORD dwKeyCode) { - FWL_HLISTITEM hRet = NULL; - switch (dwKeyCode) { - case FWL_VKEY_Up: - case FWL_VKEY_Down: - case FWL_VKEY_Home: - case FWL_VKEY_End: { - const bool bUp = dwKeyCode == FWL_VKEY_Up; - const bool bDown = dwKeyCode == FWL_VKEY_Down; - const bool bHome = dwKeyCode == FWL_VKEY_Home; - IFWL_ListBoxDP* pData = - static_cast<IFWL_ListBoxDP*>(m_pProperties->m_pDataProvider); - int32_t iDstItem = -1; - if (bUp || bDown) { - int32_t index = pData->GetItemIndex(m_pInterface, hItem); - iDstItem = dwKeyCode == FWL_VKEY_Up ? index - 1 : index + 1; - } else if (bHome) { - iDstItem = 0; - } else { - int32_t iCount = pData->CountItems(m_pInterface); - iDstItem = iCount - 1; - } - hRet = pData->GetItem(m_pInterface, iDstItem); - break; - } - default: {} - } - return hRet; -} -void CFWL_ListBoxImp::SetSelection(FWL_HLISTITEM hStart, - FWL_HLISTITEM hEnd, - FX_BOOL bSelected) { - IFWL_ListBoxDP* pData = - static_cast<IFWL_ListBoxDP*>(m_pProperties->m_pDataProvider); - int32_t iStart = pData->GetItemIndex(m_pInterface, hStart); - int32_t iEnd = pData->GetItemIndex(m_pInterface, hEnd); - if (iStart > iEnd) { - int32_t iTemp = iStart; - iStart = iEnd; - iEnd = iTemp; - } - if (bSelected) { - int32_t iCount = pData->CountItems(m_pInterface); - for (int32_t i = 0; i < iCount; i++) { - FWL_HLISTITEM hItem = pData->GetItem(m_pInterface, i); - SetSelectionDirect(hItem, FALSE); - } - } - for (; iStart <= iEnd; iStart++) { - FWL_HLISTITEM hItem = pData->GetItem(m_pInterface, iStart); - SetSelectionDirect(hItem, bSelected); - } -} -void CFWL_ListBoxImp::SetSelectionDirect(FWL_HLISTITEM hItem, FX_BOOL bSelect) { - IFWL_ListBoxDP* pData = - static_cast<IFWL_ListBoxDP*>(m_pProperties->m_pDataProvider); - FX_DWORD dwOldStyle = pData->GetItemStyles(m_pInterface, hItem); - bSelect ? dwOldStyle |= FWL_ITEMSTATE_LTB_Selected - : dwOldStyle &= ~FWL_ITEMSTATE_LTB_Selected; - pData->SetItemStyles(m_pInterface, hItem, dwOldStyle); -} -FX_BOOL CFWL_ListBoxImp::IsItemSelected(FWL_HLISTITEM hItem) { - IFWL_ListBoxDP* pData = - static_cast<IFWL_ListBoxDP*>(m_pProperties->m_pDataProvider); - FX_DWORD dwState = pData->GetItemStyles(m_pInterface, hItem); - return (dwState & FWL_ITEMSTATE_LTB_Selected) != 0; -} -void CFWL_ListBoxImp::ClearSelection() { - FX_BOOL bMulti = - m_pProperties->m_dwStyleExes & FWL_STYLEEXT_LTB_MultiSelection; - IFWL_ListBoxDP* pData = - static_cast<IFWL_ListBoxDP*>(m_pProperties->m_pDataProvider); - int32_t iCount = pData->CountItems(m_pInterface); - for (int32_t i = 0; i < iCount; i++) { - FWL_HLISTITEM hItem = pData->GetItem(m_pInterface, i); - FX_DWORD dwState = pData->GetItemStyles(m_pInterface, hItem); - FX_BOOL bFindSel = dwState & FWL_ITEMSTATE_LTB_Selected; - if (!bFindSel) { - continue; - } - SetSelectionDirect(hItem, FALSE); - if (!bMulti) { - return; - } - } -} -void CFWL_ListBoxImp::SelectAll() { - FX_BOOL bMulti = - m_pProperties->m_dwStyleExes & FWL_STYLEEXT_LTB_MultiSelection; - if (!bMulti) { - return; - } - IFWL_ListBoxDP* pData = - static_cast<IFWL_ListBoxDP*>(m_pProperties->m_pDataProvider); - int32_t iCount = pData->CountItems(m_pInterface); - if (iCount > 0) { - FWL_HLISTITEM hItemStart = pData->GetItem(m_pInterface, 0); - FWL_HLISTITEM hItemEnd = pData->GetItem(m_pInterface, iCount - 1); - SetSelection(hItemStart, hItemEnd, FALSE); - } -} -FWL_HLISTITEM CFWL_ListBoxImp::GetFocusedItem() { - IFWL_ListBoxDP* pData = - static_cast<IFWL_ListBoxDP*>(m_pProperties->m_pDataProvider); - int32_t iCount = pData->CountItems(m_pInterface); - for (int32_t i = 0; i < iCount; i++) { - FWL_HLISTITEM hItem = pData->GetItem(m_pInterface, i); - if (!hItem) - return NULL; - if (pData->GetItemStyles(m_pInterface, hItem) & FWL_ITEMSTATE_LTB_Focused) { - return hItem; - } - } - return NULL; -} -void CFWL_ListBoxImp::SetFocusItem(FWL_HLISTITEM hItem) { - IFWL_ListBoxDP* pData = - static_cast<IFWL_ListBoxDP*>(m_pProperties->m_pDataProvider); - FWL_HLISTITEM hFocus = GetFocusedItem(); - if (hItem != hFocus) { - if (hFocus) { - FX_DWORD dwStyle = pData->GetItemStyles(m_pInterface, hFocus); - dwStyle &= ~FWL_ITEMSTATE_LTB_Focused; - pData->SetItemStyles(m_pInterface, hFocus, dwStyle); - } - if (hItem) { - FX_DWORD dwStyle = pData->GetItemStyles(m_pInterface, hItem); - dwStyle |= FWL_ITEMSTATE_LTB_Focused; - pData->SetItemStyles(m_pInterface, hItem, dwStyle); - } - } -} -FWL_HLISTITEM CFWL_ListBoxImp::GetItemAtPoint(FX_FLOAT fx, FX_FLOAT fy) { - fx -= m_rtConent.left, fy -= m_rtConent.top; - FX_FLOAT fPosX = 0.0f; - if (m_pHorzScrollBar) { - fPosX = m_pHorzScrollBar->GetPos(); - } - FX_FLOAT fPosY = 0.0; - if (m_pVertScrollBar) { - fPosY = m_pVertScrollBar->GetPos(); - } - IFWL_ListBoxDP* pData = - static_cast<IFWL_ListBoxDP*>(m_pProperties->m_pDataProvider); - int32_t nCount = pData->CountItems(m_pInterface); - for (int32_t i = 0; i < nCount; i++) { - FWL_HLISTITEM hItem = pData->GetItem(m_pInterface, i); - if (!hItem) { - continue; - } - CFX_RectF rtItem; - pData->GetItemRect(m_pInterface, hItem, rtItem); - rtItem.Offset(-fPosX, -fPosY); - if (rtItem.Contains(fx, fy)) { - return hItem; - } - } - return NULL; -} -FX_BOOL CFWL_ListBoxImp::GetItemCheckRect(FWL_HLISTITEM hItem, - CFX_RectF& rtCheck) { - if (!m_pProperties->m_pDataProvider) - return FALSE; - if (!(m_pProperties->m_dwStyleExes & FWL_STYLEEXT_LTB_Check)) { - return FALSE; - } - IFWL_ListBoxDP* pData = - static_cast<IFWL_ListBoxDP*>(m_pProperties->m_pDataProvider); - pData->GetItemCheckRect(m_pInterface, hItem, rtCheck); - return TRUE; -} -FX_BOOL CFWL_ListBoxImp::GetItemChecked(FWL_HLISTITEM hItem) { - if (!m_pProperties->m_pDataProvider) - return FALSE; - if (!(m_pProperties->m_dwStyleExes & FWL_STYLEEXT_LTB_Check)) { - return FALSE; - } - IFWL_ListBoxDP* pData = - static_cast<IFWL_ListBoxDP*>(m_pProperties->m_pDataProvider); - return (pData->GetItemCheckState(m_pInterface, hItem) & - FWL_ITEMSTATE_LTB_Checked); -} -FX_BOOL CFWL_ListBoxImp::SetItemChecked(FWL_HLISTITEM hItem, FX_BOOL bChecked) { - if (!m_pProperties->m_pDataProvider) - return FALSE; - if (!(m_pProperties->m_dwStyleExes & FWL_STYLEEXT_LTB_Check)) { - return FALSE; - } - IFWL_ListBoxDP* pData = - static_cast<IFWL_ListBoxDP*>(m_pProperties->m_pDataProvider); - pData->SetItemCheckState(m_pInterface, hItem, - bChecked ? FWL_ITEMSTATE_LTB_Checked : 0); - return TRUE; -} -FX_BOOL CFWL_ListBoxImp::ScrollToVisible(FWL_HLISTITEM hItem) { - if (!m_pVertScrollBar) - return FALSE; - CFX_RectF rtItem; - IFWL_ListBoxDP* pData = - static_cast<IFWL_ListBoxDP*>(m_pProperties->m_pDataProvider); - pData->GetItemRect(m_pInterface, hItem, rtItem); - FX_BOOL bScroll = FALSE; - FX_FLOAT fPosY = m_pVertScrollBar->GetPos(); - rtItem.Offset(0, -fPosY + m_rtConent.top); - if (rtItem.top < m_rtConent.top) { - fPosY += rtItem.top - m_rtConent.top; - bScroll = TRUE; - } else if (rtItem.bottom() > m_rtConent.bottom()) { - fPosY += rtItem.bottom() - m_rtConent.bottom(); - bScroll = TRUE; - } - if (!bScroll) { - return FALSE; - } - m_pVertScrollBar->SetPos(fPosY); - m_pVertScrollBar->SetTrackPos(fPosY); - Repaint(&m_rtClient); - return TRUE; -} -void CFWL_ListBoxImp::DrawBkground(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - if (!pGraphics) - return; - if (!pTheme) - return; - CFWL_ThemeBackground param; - param.m_pWidget = m_pInterface; - param.m_iPart = FWL_PART_LTB_Background; - param.m_dwStates = 0; - param.m_pGraphics = pGraphics; - param.m_matrix.Concat(*pMatrix); - param.m_rtPart = m_rtClient; - if (IsShowScrollBar(FALSE) && IsShowScrollBar(TRUE)) { - param.m_pData = &m_rtStatic; - } - if (!IsEnabled()) { - param.m_dwStates = FWL_PARTSTATE_LTB_Disabled; - } - pTheme->DrawBackground(¶m); -} -void CFWL_ListBoxImp::DrawItems(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - FX_FLOAT fPosX = 0.0f; - if (m_pHorzScrollBar) { - fPosX = m_pHorzScrollBar->GetPos(); - } - FX_FLOAT fPosY = 0.0f; - if (m_pVertScrollBar) { - fPosY = m_pVertScrollBar->GetPos(); - } - CFX_RectF rtView(m_rtConent); - if (m_pHorzScrollBar) { - rtView.height -= m_fScorllBarWidth; - } - if (m_pVertScrollBar) { - rtView.width -= m_fScorllBarWidth; - } - FX_BOOL bMultiCol = - m_pProperties->m_dwStyleExes & FWL_STYLEEXT_LTB_MultiColumn; - IFWL_ListBoxDP* pData = - static_cast<IFWL_ListBoxDP*>(m_pProperties->m_pDataProvider); - int32_t iCount = pData->CountItems(m_pInterface); - for (int32_t i = 0; i < iCount; i++) { - FWL_HLISTITEM hItem = pData->GetItem(m_pInterface, i); - if (!hItem) { - continue; - } - CFX_RectF rtItem; - pData->GetItemRect(m_pInterface, hItem, rtItem); - rtItem.Offset(m_rtConent.left - fPosX, m_rtConent.top - fPosY); - if (rtItem.bottom() < m_rtConent.top) { - continue; - } - if (rtItem.top >= m_rtConent.bottom()) { - break; - } - if (bMultiCol && rtItem.left > m_rtConent.right()) { - break; - } - if (GetStylesEx() & FWL_STYLEEXT_LTB_OwnerDraw) { - CFWL_EvtLtbDrawItem ev; - ev.m_pSrcTarget = m_pInterface; - ev.m_pGraphics = pGraphics; - ev.m_matrix = *pMatrix; - ev.m_index = i; - ev.m_rect = rtItem; - DispatchEvent(&ev); - } else { - DrawItem(pGraphics, pTheme, hItem, i, rtItem, pMatrix); - } - } -} -void CFWL_ListBoxImp::DrawItem(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - FWL_HLISTITEM hItem, - int32_t Index, - const CFX_RectF& rtItem, - const CFX_Matrix* pMatrix) { - IFWL_ListBoxDP* pData = - static_cast<IFWL_ListBoxDP*>(m_pProperties->m_pDataProvider); - FX_DWORD dwItemStyles = pData->GetItemStyles(m_pInterface, hItem); - FX_DWORD dwPartStates = FWL_PARTSTATE_LTB_Normal; - if (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled) { - dwPartStates = FWL_PARTSTATE_LTB_Disabled; - } else if (dwItemStyles & FWL_ITEMSTATE_LTB_Selected) { - dwPartStates = FWL_PARTSTATE_LTB_Selected; - } - if (m_pProperties->m_dwStates & FWL_WGTSTATE_Focused && - dwItemStyles & FWL_ITEMSTATE_LTB_Focused) { - dwPartStates |= FWL_PARTSTATE_LTB_Focused; - } - FWL_ListBoxItemData itemData; - itemData.pDataProvider = pData; - itemData.iIndex = Index; - { - CFWL_ThemeBackground param; - param.m_pWidget = m_pInterface; - param.m_iPart = FWL_PART_LTB_ListItem; - param.m_dwStates = dwPartStates; - param.m_pGraphics = pGraphics; - param.m_matrix.Concat(*pMatrix); - param.m_rtPart = rtItem; - param.m_dwData = (FX_DWORD)(uintptr_t)(&itemData); - CFX_RectF rtFocus(rtItem); - param.m_pData = &rtFocus; - if (m_pVertScrollBar && !m_pHorzScrollBar && - (dwPartStates & FWL_PARTSTATE_LTB_Focused)) { - param.m_rtPart.left += 1; - param.m_rtPart.width -= (m_fScorllBarWidth + 1); - rtFocus.Deflate(0.5, 0.5, 1 + m_fScorllBarWidth, 1); - } - pTheme->DrawBackground(¶m); - } - { - FX_BOOL bHasIcon = GetStylesEx() & FWL_STYLEEXT_LTB_Icon; - if (bHasIcon) { - CFX_RectF rtDIB; - CFX_DIBitmap* pDib = pData->GetItemIcon(m_pInterface, hItem); - rtDIB.Set(rtItem.left, rtItem.top, rtItem.height, rtItem.height); - if (pDib) { - CFWL_ThemeBackground param; - param.m_pWidget = m_pInterface; - param.m_iPart = FWL_PART_LTB_Icon; - param.m_pGraphics = pGraphics; - param.m_matrix.Concat(*pMatrix); - param.m_rtPart = rtDIB; - param.m_dwData = (FX_DWORD)(uintptr_t)(&itemData); - param.m_pImage = pDib; - pTheme->DrawBackground(¶m); - } - } - FX_BOOL bHasCheck = GetStylesEx() & FWL_STYLEEXT_LTB_Check; - if (bHasCheck) { - CFX_RectF rtCheck; - rtCheck.Set(rtItem.left, rtItem.top, rtItem.height, rtItem.height); - rtCheck.Deflate(2, 2, 2, 2); - pData->SetItemCheckRect(m_pInterface, hItem, rtCheck); - CFWL_ThemeBackground param; - param.m_pWidget = m_pInterface; - param.m_iPart = FWL_PART_LTB_Check; - param.m_pGraphics = pGraphics; - if (GetItemChecked(hItem)) { - param.m_dwStates = FWL_PARTSTATE_LTB_Checked; - } else { - param.m_dwStates = FWL_PARTSTATE_LTB_UnChecked; - } - param.m_matrix.Concat(*pMatrix); - param.m_rtPart = rtCheck; - param.m_dwData = (FX_DWORD)(uintptr_t)(&itemData); - pTheme->DrawBackground(¶m); - } - CFX_WideString wsText; - pData->GetItemText(m_pInterface, hItem, wsText); - if (wsText.GetLength() <= 0) { - return; - } - CFX_RectF rtText(rtItem); - rtText.Deflate(FWL_LISTBOX_ItemTextMargin, FWL_LISTBOX_ItemTextMargin); - if (bHasIcon || bHasCheck) { - rtText.Deflate(rtItem.height, 0, 0, 0); - } - CFWL_ThemeText textParam; - textParam.m_pWidget = m_pInterface; - textParam.m_iPart = FWL_PART_LTB_ListItem; - textParam.m_dwStates = dwPartStates; - textParam.m_pGraphics = pGraphics; - textParam.m_matrix.Concat(*pMatrix); - textParam.m_rtPart = rtText; - textParam.m_wsText = wsText; - textParam.m_dwTTOStyles = m_dwTTOStyles; - textParam.m_iTTOAlign = m_iTTOAligns; - textParam.m_dwData = (FX_DWORD)(uintptr_t)(&itemData); - pTheme->DrawText(&textParam); - } -} -CFX_SizeF CFWL_ListBoxImp::CalcSize(FX_BOOL bAutoSize) { - CFX_SizeF fs; - if (!m_pProperties->m_pThemeProvider) - return fs; - - GetClientRect(m_rtClient); - m_rtConent = m_rtClient; - CFX_RectF rtUIMargin; - rtUIMargin.Set(0, 0, 0, 0); - if (!m_pOuter) { - CFX_RectF* pUIMargin = - static_cast<CFX_RectF*>(GetThemeCapacity(FWL_WGTCAPACITY_UIMargin)); - if (pUIMargin) { - m_rtConent.Deflate(pUIMargin->left, pUIMargin->top, pUIMargin->width, - pUIMargin->height); - } - } - FX_FLOAT fWidth = 0; - if (m_pProperties->m_pThemeProvider->IsCustomizedLayout(m_pInterface)) { - IFWL_ListBoxDP* pData = - static_cast<IFWL_ListBoxDP*>(m_pProperties->m_pDataProvider); - if (!bAutoSize) { - } - int32_t iCount = pData->CountItems(m_pInterface); - for (int32_t i = 0; i < iCount; i++) { - FWL_HLISTITEM hItem = pData->GetItem(m_pInterface, i); - CFWL_ThemePart itemPart; - itemPart.m_pWidget = m_pInterface; - itemPart.m_iPart = FWL_PART_LTB_ListItem; - itemPart.m_pData = m_pProperties->m_pDataProvider; - itemPart.m_dwData = i; - CFX_RectF r; - m_pProperties->m_pThemeProvider->GetPartRect(&itemPart, r); - if (!bAutoSize) { - CFX_RectF rtItem; - rtItem.Set(m_rtClient.left, m_rtClient.top + fs.y, r.width, r.height); - IFWL_ListBoxDP* pData = - static_cast<IFWL_ListBoxDP*>(m_pProperties->m_pDataProvider); - pData->SetItemRect(m_pInterface, hItem, rtItem); - } - fs.y += r.height; - if (fs.x < r.width) { - fs.x = r.width; - fWidth = r.width; - } - } - } else { - fWidth = GetMaxTextWidth(); - fWidth += 2 * FWL_LISTBOX_ItemTextMargin; - if (!bAutoSize) { - FX_FLOAT fActualWidth = - m_rtClient.width - rtUIMargin.left - rtUIMargin.width; - if (fWidth < fActualWidth) { - fWidth = fActualWidth; - } - } - IFWL_ListBoxDP* pData = - static_cast<IFWL_ListBoxDP*>(m_pProperties->m_pDataProvider); - m_fItemHeight = GetItemHeigt(); - FX_BOOL bHasIcon; - bHasIcon = GetStylesEx() & FWL_STYLEEXT_LTB_Icon; - if (bHasIcon) { - fWidth += m_fItemHeight; - } - int32_t iCount = pData->CountItems(m_pInterface); - for (int32_t i = 0; i < iCount; i++) { - FWL_HLISTITEM htem = pData->GetItem(m_pInterface, i); - GetItemSize(fs, htem, fWidth, m_fItemHeight, bAutoSize); - } - } - if (bAutoSize) { - return fs; - } - FX_FLOAT iWidth = m_rtClient.width - rtUIMargin.left - rtUIMargin.width; - FX_FLOAT iHeight = m_rtClient.height; - FX_BOOL bShowVertScr = - (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_LTB_ShowScrollBarAlaways) && - (m_pProperties->m_dwStyles & FWL_WGTSTYLE_VScroll); - FX_BOOL bShowHorzScr = - (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_LTB_ShowScrollBarAlaways) && - (m_pProperties->m_dwStyles & FWL_WGTSTYLE_HScroll); - if (!bShowVertScr && m_pProperties->m_dwStyles & FWL_WGTSTYLE_VScroll && - (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_LTB_MultiColumn) == 0) { - bShowVertScr = (fs.y > iHeight); - } - if (!bShowHorzScr && m_pProperties->m_dwStyles & FWL_WGTSTYLE_HScroll) { - bShowHorzScr = (fs.x > iWidth); - } - CFX_SizeF szRange; - if (bShowVertScr) { - if (!m_pVertScrollBar) { - InitScrollBar(); - } - CFX_RectF rtScrollBar; - rtScrollBar.Set(m_rtClient.right() - m_fScorllBarWidth, m_rtClient.top, - m_fScorllBarWidth, m_rtClient.height - 1); - if (bShowHorzScr) { - rtScrollBar.height -= m_fScorllBarWidth; - } - m_pVertScrollBar->SetWidgetRect(rtScrollBar); - szRange.x = 0, szRange.y = fs.y - m_rtConent.height; - if (szRange.y < m_fItemHeight) { - szRange.y = m_fItemHeight; - } - m_pVertScrollBar->SetRange(szRange.x, szRange.y); - m_pVertScrollBar->SetPageSize(rtScrollBar.height * 9 / 10); - m_pVertScrollBar->SetStepSize(m_fItemHeight); - FX_FLOAT fPos = m_pVertScrollBar->GetPos(); - if (fPos < 0) { - fPos = 0; - } - if (fPos > szRange.y) { - fPos = szRange.y; - } - m_pVertScrollBar->SetPos(fPos); - m_pVertScrollBar->SetTrackPos(fPos); - if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_LTB_ShowScrollBarFocus) == - 0 || - (m_pProperties->m_dwStates & FWL_WGTSTATE_Focused)) { - m_pVertScrollBar->SetStates(FWL_WGTSTATE_Invisible, FALSE); - } - m_pVertScrollBar->Update(); - } else if (m_pVertScrollBar) { - m_pVertScrollBar->SetPos(0); - m_pVertScrollBar->SetTrackPos(0); - m_pVertScrollBar->SetStates(FWL_WGTSTATE_Invisible, TRUE); - } - if (bShowHorzScr) { - if (!m_pHorzScrollBar) { - InitScrollBar(FALSE); - } - CFX_RectF rtScrollBar; - rtScrollBar.Set(m_rtClient.left, m_rtClient.bottom() - m_fScorllBarWidth, - m_rtClient.width, m_fScorllBarWidth); - if (bShowVertScr) { - rtScrollBar.width -= m_fScorllBarWidth; - } - m_pHorzScrollBar->SetWidgetRect(rtScrollBar); - szRange.x = 0, szRange.y = fs.x - rtScrollBar.width; - m_pHorzScrollBar->SetRange(szRange.x, szRange.y); - m_pHorzScrollBar->SetPageSize(fWidth * 9 / 10); - m_pHorzScrollBar->SetStepSize(fWidth / 10); - FX_FLOAT fPos = m_pHorzScrollBar->GetPos(); - if (fPos < 0) { - fPos = 0; - } - if (fPos > szRange.y) { - fPos = szRange.y; - } - m_pHorzScrollBar->SetPos(fPos); - m_pHorzScrollBar->SetTrackPos(fPos); - if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_LTB_ShowScrollBarFocus) == - 0 || - (m_pProperties->m_dwStates & FWL_WGTSTATE_Focused)) { - m_pHorzScrollBar->SetStates(FWL_WGTSTATE_Invisible, FALSE); - } - m_pHorzScrollBar->Update(); - } else if (m_pHorzScrollBar) { - m_pHorzScrollBar->SetPos(0); - m_pHorzScrollBar->SetTrackPos(0); - m_pHorzScrollBar->SetStates(FWL_WGTSTATE_Invisible, TRUE); - } - if (bShowVertScr && bShowHorzScr) { - m_rtStatic.Set(m_rtClient.right() - m_fScorllBarWidth, - m_rtClient.bottom() - m_fScorllBarWidth, m_fScorllBarWidth, - m_fScorllBarWidth); - } - return fs; -} -void CFWL_ListBoxImp::GetItemSize(CFX_SizeF& size, - FWL_HLISTITEM hItem, - FX_FLOAT fWidth, - FX_FLOAT m_fItemHeight, - FX_BOOL bAutoSize) { - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_LTB_MultiColumn) { - } else { - if (!bAutoSize) { - CFX_RectF rtItem; - rtItem.Set(0, size.y, fWidth, m_fItemHeight); - IFWL_ListBoxDP* pData = - static_cast<IFWL_ListBoxDP*>(m_pProperties->m_pDataProvider); - pData->SetItemRect(m_pInterface, hItem, rtItem); - } - size.x = fWidth; - size.y += m_fItemHeight; - } -} -FX_FLOAT CFWL_ListBoxImp::GetMaxTextWidth() { - FX_FLOAT fRet = 0.0f; - IFWL_ListBoxDP* pData = - static_cast<IFWL_ListBoxDP*>(m_pProperties->m_pDataProvider); - int32_t iCount = pData->CountItems(m_pInterface); - for (int32_t i = 0; i < iCount; i++) { - FWL_HLISTITEM hItem = pData->GetItem(m_pInterface, i); - if (!hItem) { - continue; - } - CFX_WideString wsText; - pData->GetItemText(m_pInterface, hItem, wsText); - CFX_SizeF sz = CalcTextSize(wsText, m_pProperties->m_pThemeProvider); - if (sz.x > fRet) { - fRet = sz.x; - } - } - return fRet; -} -FX_FLOAT CFWL_ListBoxImp::GetScrollWidth() { - FX_FLOAT* pfWidth = - static_cast<FX_FLOAT*>(GetThemeCapacity(FWL_WGTCAPACITY_ScrollBarWidth)); - if (!pfWidth) - return 0; - return *pfWidth; -} -FX_FLOAT CFWL_ListBoxImp::GetItemHeigt() { - FX_FLOAT* pfFont = - static_cast<FX_FLOAT*>(GetThemeCapacity(FWL_WGTCAPACITY_FontSize)); - if (!pfFont) - return 20; - return *pfFont + 2 * FWL_LISTBOX_ItemTextMargin; -} -void CFWL_ListBoxImp::InitScrollBar(FX_BOOL bVert) { - if ((bVert && m_pVertScrollBar) || (!bVert && m_pHorzScrollBar)) { - return; - } - CFWL_WidgetImpProperties prop; - prop.m_dwStyleExes = bVert ? FWL_STYLEEXT_SCB_Vert : FWL_STYLEEXT_SCB_Horz; - prop.m_dwStates = FWL_WGTSTATE_Invisible; - prop.m_pParent = m_pInterface; - prop.m_pThemeProvider = m_pScrollBarTP; - IFWL_ScrollBar* pScrollBar = IFWL_ScrollBar::Create(prop, m_pInterface); - pScrollBar->Initialize(); - (bVert ? &m_pVertScrollBar : &m_pHorzScrollBar)->reset(pScrollBar); -} -void CFWL_ListBoxImp::SortItem() {} -FX_BOOL CFWL_ListBoxImp::IsShowScrollBar(FX_BOOL bVert) { - IFWL_ScrollBar* pScrollbar = - bVert ? m_pVertScrollBar.get() : m_pHorzScrollBar.get(); - if (!pScrollbar || (pScrollbar->GetStates() & FWL_WGTSTATE_Invisible)) { - return FALSE; - } - return !(m_pProperties->m_dwStyleExes & - FWL_STYLEEXT_LTB_ShowScrollBarFocus) || - (m_pProperties->m_dwStates & FWL_WGTSTATE_Focused); -} -void CFWL_ListBoxImp::ProcessSelChanged() { - CFWL_EvtLtbSelChanged selEvent; - selEvent.m_pSrcTarget = m_pInterface; - CFX_Int32Array arrSels; - int32_t iCount = CountSelItems(); - for (int32_t i = 0; i < iCount; i++) { - FWL_HLISTITEM item = GetSelItem(i); - if (item == NULL) { - continue; - } - selEvent.iarraySels.Add(i); - } - DispatchEvent(&selEvent); -} -CFWL_ListBoxImpDelegate::CFWL_ListBoxImpDelegate(CFWL_ListBoxImp* pOwner) - : m_pOwner(pOwner) {} -int32_t CFWL_ListBoxImpDelegate::OnProcessMessage(CFWL_Message* pMessage) { - if (!pMessage) - return 0; - if (!m_pOwner->IsEnabled()) { - return 1; - } - FX_DWORD dwMsgCode = pMessage->GetClassID(); - int32_t iRet = 1; - switch (dwMsgCode) { - case FWL_MSGHASH_SetFocus: - case FWL_MSGHASH_KillFocus: { - OnFocusChanged(pMessage, dwMsgCode == FWL_MSGHASH_SetFocus); - break; - } - case FWL_MSGHASH_Mouse: { - CFWL_MsgMouse* pMsg = static_cast<CFWL_MsgMouse*>(pMessage); - FX_DWORD dwCmd = pMsg->m_dwCmd; - switch (dwCmd) { - case FWL_MSGMOUSECMD_LButtonDown: { - OnLButtonDown(pMsg); - break; - } - case FWL_MSGMOUSECMD_LButtonUp: { - OnLButtonUp(pMsg); - break; - } - default: {} - } - break; - } - case FWL_MSGHASH_MouseWheel: { - OnMouseWheel(static_cast<CFWL_MsgMouseWheel*>(pMessage)); - break; - } - case FWL_MSGHASH_Key: { - CFWL_MsgKey* pMsg = static_cast<CFWL_MsgKey*>(pMessage); - if (pMsg->m_dwCmd == FWL_MSGKEYCMD_KeyDown) - OnKeyDown(pMsg); - break; - } - default: { iRet = 0; } - } - CFWL_WidgetImpDelegate::OnProcessMessage(pMessage); - return iRet; -} -FWL_ERR CFWL_ListBoxImpDelegate::OnProcessEvent(CFWL_Event* pEvent) { - if (!pEvent) - return FWL_ERR_Indefinite; - if (pEvent->GetClassID() != FWL_EVTHASH_Scroll) { - return FWL_ERR_Succeeded; - } - IFWL_Widget* pSrcTarget = pEvent->m_pSrcTarget; - if ((pSrcTarget == m_pOwner->m_pVertScrollBar.get() && - m_pOwner->m_pVertScrollBar) || - (pSrcTarget == m_pOwner->m_pHorzScrollBar.get() && - m_pOwner->m_pHorzScrollBar)) { - CFWL_EvtScroll* pScrollEvent = static_cast<CFWL_EvtScroll*>(pEvent); - OnScroll(static_cast<IFWL_ScrollBar*>(pSrcTarget), - pScrollEvent->m_iScrollCode, pScrollEvent->m_fPos); - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ListBoxImpDelegate::OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - return m_pOwner->DrawWidget(pGraphics, pMatrix); -} -void CFWL_ListBoxImpDelegate::OnFocusChanged(CFWL_Message* pMsg, FX_BOOL bSet) { - if (m_pOwner->GetStylesEx() & FWL_STYLEEXT_LTB_ShowScrollBarFocus) { - if (m_pOwner->m_pVertScrollBar) { - m_pOwner->m_pVertScrollBar->SetStates(FWL_WGTSTATE_Invisible, !bSet); - } - if (m_pOwner->m_pHorzScrollBar) { - m_pOwner->m_pHorzScrollBar->SetStates(FWL_WGTSTATE_Invisible, !bSet); - } - } - if (bSet) { - m_pOwner->m_pProperties->m_dwStates |= (FWL_WGTSTATE_Focused); - } else { - m_pOwner->m_pProperties->m_dwStates &= ~(FWL_WGTSTATE_Focused); - } - m_pOwner->Repaint(&m_pOwner->m_rtClient); -} -void CFWL_ListBoxImpDelegate::OnLButtonDown(CFWL_MsgMouse* pMsg) { - m_pOwner->m_bLButtonDown = TRUE; - if ((m_pOwner->m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) == 0) { - m_pOwner->SetFocus(TRUE); - } - FWL_HLISTITEM hItem = m_pOwner->GetItemAtPoint(pMsg->m_fx, pMsg->m_fy); - if (!hItem) { - return; - } - if (m_pOwner->m_pProperties->m_dwStyleExes & - FWL_STYLEEXT_LTB_MultiSelection) { - if (pMsg->m_dwFlags & FWL_KEYFLAG_Ctrl) { - FX_BOOL bSelected = m_pOwner->IsItemSelected(hItem); - m_pOwner->SetSelectionDirect(hItem, !bSelected); - m_pOwner->m_hAnchor = hItem; - } else if (pMsg->m_dwFlags & FWL_KEYFLAG_Shift) { - if (m_pOwner->m_hAnchor) { - m_pOwner->SetSelection(m_pOwner->m_hAnchor, hItem, TRUE); - } else { - m_pOwner->SetSelectionDirect(hItem, TRUE); - } - } else { - m_pOwner->SetSelection(hItem, hItem, TRUE); - m_pOwner->m_hAnchor = hItem; - } - } else { - m_pOwner->SetSelection(hItem, hItem, TRUE); - } - if (m_pOwner->m_pProperties->m_dwStyleExes & FWL_STYLEEXT_LTB_Check) { - FWL_HLISTITEM hSelectedItem = - m_pOwner->GetItemAtPoint(pMsg->m_fx, pMsg->m_fy); - CFX_RectF rtCheck; - m_pOwner->GetItemCheckRect(hSelectedItem, rtCheck); - FX_BOOL bChecked = m_pOwner->GetItemChecked(hItem); - if (rtCheck.Contains(pMsg->m_fx, pMsg->m_fy)) { - if (bChecked) { - m_pOwner->SetItemChecked(hItem, FALSE); - } else { - m_pOwner->SetItemChecked(hItem, TRUE); - } - m_pOwner->Update(); - } - } - m_pOwner->SetFocusItem(hItem); - m_pOwner->ScrollToVisible(hItem); - m_pOwner->SetGrab(TRUE); - m_pOwner->ProcessSelChanged(); - m_pOwner->Repaint(&m_pOwner->m_rtClient); -} -void CFWL_ListBoxImpDelegate::OnLButtonUp(CFWL_MsgMouse* pMsg) { - if (m_pOwner->m_bLButtonDown) { - m_pOwner->m_bLButtonDown = FALSE; - m_pOwner->SetGrab(FALSE); - DispatchSelChangedEv(); - } -} -void CFWL_ListBoxImpDelegate::OnMouseWheel(CFWL_MsgMouseWheel* pMsg) { - if (!m_pOwner->IsShowScrollBar(TRUE)) { - return; - } - IFWL_WidgetDelegate* pDelegate = - m_pOwner->m_pVertScrollBar->SetDelegate(NULL); - pDelegate->OnProcessMessage(pMsg); -} -void CFWL_ListBoxImpDelegate::OnKeyDown(CFWL_MsgKey* pMsg) { - FX_DWORD dwKeyCode = pMsg->m_dwKeyCode; - switch (dwKeyCode) { - case FWL_VKEY_Tab: - case FWL_VKEY_Up: - case FWL_VKEY_Down: - case FWL_VKEY_Home: - case FWL_VKEY_End: { - FWL_HLISTITEM hItem = m_pOwner->GetFocusedItem(); - hItem = m_pOwner->GetItem(hItem, dwKeyCode); - FX_BOOL bShift = pMsg->m_dwFlags & FWL_KEYFLAG_Shift; - FX_BOOL bCtrl = pMsg->m_dwFlags & FWL_KEYFLAG_Ctrl; - OnVK(hItem, bShift, bCtrl); - DispatchSelChangedEv(); - m_pOwner->ProcessSelChanged(); - break; - } - default: {} - } -} -void CFWL_ListBoxImpDelegate::OnVK(FWL_HLISTITEM hItem, - FX_BOOL bShift, - FX_BOOL bCtrl) { - if (!hItem) { - return; - } - if (m_pOwner->m_pProperties->m_dwStyleExes & - FWL_STYLEEXT_LTB_MultiSelection) { - if (bCtrl) { - } else if (bShift) { - if (m_pOwner->m_hAnchor) { - m_pOwner->SetSelection(m_pOwner->m_hAnchor, hItem, TRUE); - } else { - m_pOwner->SetSelectionDirect(hItem, TRUE); - } - } else { - m_pOwner->SetSelection(hItem, hItem, TRUE); - m_pOwner->m_hAnchor = hItem; - } - } else { - m_pOwner->SetSelection(hItem, hItem, TRUE); - } - m_pOwner->SetFocusItem(hItem); - m_pOwner->ScrollToVisible(hItem); - { - CFX_RectF rtInvalidate; - rtInvalidate.Set(0, 0, m_pOwner->m_pProperties->m_rtWidget.width, - m_pOwner->m_pProperties->m_rtWidget.height); - m_pOwner->Repaint(&rtInvalidate); - } -} -FX_BOOL CFWL_ListBoxImpDelegate::OnScroll(IFWL_ScrollBar* pScrollBar, - FX_DWORD dwCode, - FX_FLOAT fPos) { - CFX_SizeF fs; - pScrollBar->GetRange(fs.x, fs.y); - FX_FLOAT iCurPos = pScrollBar->GetPos(); - FX_FLOAT fStep = pScrollBar->GetStepSize(); - switch (dwCode) { - case FWL_SCBCODE_Min: { - fPos = fs.x; - break; - } - case FWL_SCBCODE_Max: { - fPos = fs.y; - break; - } - case FWL_SCBCODE_StepBackward: { - fPos -= fStep; - if (fPos < fs.x + fStep / 2) { - fPos = fs.x; - } - break; - } - case FWL_SCBCODE_StepForward: { - fPos += fStep; - if (fPos > fs.y - fStep / 2) { - fPos = fs.y; - } - break; - } - case FWL_SCBCODE_PageBackward: { - fPos -= pScrollBar->GetPageSize(); - if (fPos < fs.x) { - fPos = fs.x; - } - break; - } - case FWL_SCBCODE_PageForward: { - fPos += pScrollBar->GetPageSize(); - if (fPos > fs.y) { - fPos = fs.y; - } - break; - } - case FWL_SCBCODE_Pos: - case FWL_SCBCODE_TrackPos: - break; - case FWL_SCBCODE_EndScroll: - return FALSE; - } - if (iCurPos != fPos) { - pScrollBar->SetPos(fPos); - pScrollBar->SetTrackPos(fPos); - m_pOwner->Repaint(&m_pOwner->m_rtClient); - } - return TRUE; -} -void CFWL_ListBoxImpDelegate::DispatchSelChangedEv() { - CFWL_EvtLtbSelChanged ev; - ev.m_pSrcTarget = m_pOwner->m_pInterface; - m_pOwner->DispatchEvent(&ev); -} diff --git a/xfa/src/fwl/basewidget/fwl_listboximp.h b/xfa/src/fwl/basewidget/fwl_listboximp.h deleted file mode 100644 index 614b76c495..0000000000 --- a/xfa/src/fwl/basewidget/fwl_listboximp.h +++ /dev/null @@ -1,121 +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 - -#ifndef XFA_SRC_FWL_BASEWIDGET_FWL_LISTBOXIMP_H_ -#define XFA_SRC_FWL_BASEWIDGET_FWL_LISTBOXIMP_H_ - -#include <memory> - -#include "xfa/include/fwl/basewidget/fwl_combobox.h" -#include "xfa/include/fwl/basewidget/fwl_edit.h" -#include "xfa/include/fwl/basewidget/fwl_listbox.h" -#include "xfa/include/fwl/basewidget/fwl_scrollbar.h" -#include "xfa/src/fwl/core/fwl_widgetimp.h" - -class CFWL_ListBoxImpDelegate; - -class CFWL_ListBoxImp : public CFWL_WidgetImp { - public: - CFWL_ListBoxImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter); - ~CFWL_ListBoxImp(); - virtual FWL_ERR GetClassName(CFX_WideString& wsClass) const; - virtual FX_DWORD GetClassID() const; - virtual FWL_ERR Initialize(); - virtual FWL_ERR Finalize(); - virtual FWL_ERR GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize = FALSE); - virtual FWL_ERR Update(); - virtual FX_DWORD HitTest(FX_FLOAT fx, FX_FLOAT fy); - virtual FWL_ERR DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL); - virtual FWL_ERR SetThemeProvider(IFWL_ThemeProvider* pThemeProvider); - virtual int32_t CountSelItems(); - virtual FWL_HLISTITEM GetSelItem(int32_t nIndexSel); - virtual int32_t GetSelIndex(int32_t nIndex); - virtual FWL_ERR SetSelItem(FWL_HLISTITEM hItem, FX_BOOL bSelect = TRUE); - virtual FWL_ERR GetItemText(FWL_HLISTITEM hItem, CFX_WideString& wsText); - virtual FWL_ERR GetScrollPos(FX_FLOAT& fPos, FX_BOOL bVert = TRUE); - virtual FWL_ERR* Sort(IFWL_ListBoxCompare* pCom); - - protected: - FWL_HLISTITEM GetItem(FWL_HLISTITEM hItem, FX_DWORD dwKeyCode); - void SetSelection(FWL_HLISTITEM hStart, - FWL_HLISTITEM hEnd, - FX_BOOL bSelected); - void SetSelectionDirect(FWL_HLISTITEM hItem, FX_BOOL bSelect); - FX_BOOL IsItemSelected(FWL_HLISTITEM hItem); - void ClearSelection(); - void SelectAll(); - FWL_HLISTITEM GetFocusedItem(); - void SetFocusItem(FWL_HLISTITEM hItem); - FWL_HLISTITEM GetItemAtPoint(FX_FLOAT fx, FX_FLOAT fy); - FX_BOOL GetItemCheckRect(FWL_HLISTITEM hItem, CFX_RectF& rtCheck); - FX_BOOL SetItemChecked(FWL_HLISTITEM hItem, FX_BOOL bChecked); - FX_BOOL GetItemChecked(FWL_HLISTITEM hItem); - FX_BOOL ScrollToVisible(FWL_HLISTITEM hItem); - void DrawBkground(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix = NULL); - void DrawItems(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix = NULL); - void DrawItem(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - FWL_HLISTITEM hItem, - int32_t Index, - const CFX_RectF& rtItem, - const CFX_Matrix* pMatrix = NULL); - void DrawStatic(CFX_Graphics* pGraphics, IFWL_ThemeProvider* pTheme); - CFX_SizeF CalcSize(FX_BOOL bAutoSize = FALSE); - void GetItemSize(CFX_SizeF& size, - FWL_HLISTITEM hItem, - FX_FLOAT fWidth, - FX_FLOAT fHeight, - FX_BOOL bAutoSize = FALSE); - FX_FLOAT GetMaxTextWidth(); - FX_FLOAT GetScrollWidth(); - FX_FLOAT GetItemHeigt(); - void InitScrollBar(FX_BOOL bVert = TRUE); - void SortItem(); - FX_BOOL IsShowScrollBar(FX_BOOL bVert); - void ProcessSelChanged(); - - protected: - CFX_RectF m_rtClient; - CFX_RectF m_rtStatic; - CFX_RectF m_rtConent; - std::unique_ptr<IFWL_ScrollBar> m_pHorzScrollBar; - std::unique_ptr<IFWL_ScrollBar> m_pVertScrollBar; - FX_DWORD m_dwTTOStyles; - int32_t m_iTTOAligns; - FWL_HLISTITEM m_hAnchor; - FX_FLOAT m_fItemHeight; - FX_FLOAT m_fScorllBarWidth; - FX_BOOL m_bLButtonDown; - IFWL_ThemeProvider* m_pScrollBarTP; - friend class CFWL_ListBoxImpDelegate; -}; -class CFWL_ListBoxImpDelegate : public CFWL_WidgetImpDelegate { - public: - CFWL_ListBoxImpDelegate(CFWL_ListBoxImp* pOwner); - int32_t OnProcessMessage(CFWL_Message* pMessage) override; - FWL_ERR OnProcessEvent(CFWL_Event* pEvent) override; - FWL_ERR OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL) override; - - protected: - void OnFocusChanged(CFWL_Message* pMsg, FX_BOOL bSet = TRUE); - void OnLButtonDown(CFWL_MsgMouse* pMsg); - void OnLButtonUp(CFWL_MsgMouse* pMsg); - void OnMouseWheel(CFWL_MsgMouseWheel* pMsg); - void OnKeyDown(CFWL_MsgKey* pMsg); - void OnVK(FWL_HLISTITEM hItem, FX_BOOL bShift, FX_BOOL bCtrl); - FX_BOOL OnScroll(IFWL_ScrollBar* pScrollBar, FX_DWORD dwCode, FX_FLOAT fPos); - void DispatchSelChangedEv(); - CFWL_ListBoxImp* m_pOwner; -}; - -#endif // XFA_SRC_FWL_BASEWIDGET_FWL_LISTBOXIMP_H_ diff --git a/xfa/src/fwl/basewidget/fwl_monthcalendarimp.cpp b/xfa/src/fwl/basewidget/fwl_monthcalendarimp.cpp deleted file mode 100644 index 8bea9f1a11..0000000000 --- a/xfa/src/fwl/basewidget/fwl_monthcalendarimp.cpp +++ /dev/null @@ -1,1098 +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/basewidget/fwl_monthcalendarimp.h" - -#include <algorithm> - -#include "xfa/include/fwl/basewidget/fwl_monthcalendar.h" -#include "xfa/include/fwl/core/fwl_theme.h" -#include "xfa/src/fde/tto/fde_textout.h" -#include "xfa/src/fwl/core/fwl_noteimp.h" -#include "xfa/src/fwl/core/fwl_targetimp.h" -#include "xfa/src/fwl/core/fwl_widgetimp.h" - -#define MONTHCAL_HSEP_HEIGHT 1 -#define MONTHCAL_VSEP_WIDTH 1 -#define MONTHCAL_HMARGIN 3 -#define MONTHCAL_VMARGIN 2 -#define MONTHCAL_ROWS 9 -#define MONTHCAL_COLUMNS 7 -#define MONTHCAL_HEADER_BTN_VMARGIN 7 -#define MONTHCAL_HEADER_BTN_HMARGIN 5 - -// static -IFWL_MonthCalendar* IFWL_MonthCalendar::Create( - const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) { - IFWL_MonthCalendar* pMonthCalendar = new IFWL_MonthCalendar; - CFWL_MonthCalendarImp* pMonthCalendarImpl = - new CFWL_MonthCalendarImp(properties, pOuter); - pMonthCalendar->SetImpl(pMonthCalendarImpl); - pMonthCalendarImpl->SetInterface(pMonthCalendar); - return pMonthCalendar; -} -IFWL_MonthCalendar::IFWL_MonthCalendar() {} -int32_t IFWL_MonthCalendar::CountSelect() { - return static_cast<CFWL_MonthCalendarImp*>(GetImpl())->CountSelect(); -} -FX_BOOL IFWL_MonthCalendar::GetSelect(int32_t& iYear, - int32_t& iMonth, - int32_t& iDay, - int32_t nIndex) { - return static_cast<CFWL_MonthCalendarImp*>(GetImpl()) - ->GetSelect(iYear, iMonth, iDay, nIndex); -} -FX_BOOL IFWL_MonthCalendar::SetSelect(int32_t iYear, - int32_t iMonth, - int32_t iDay) { - return static_cast<CFWL_MonthCalendarImp*>(GetImpl()) - ->SetSelect(iYear, iMonth, iDay); -} - -CFWL_MonthCalendarImp::CFWL_MonthCalendarImp( - const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) - : CFWL_WidgetImp(properties, pOuter), - m_iCurYear(2011), - m_iCurMonth(1), - m_iYear(2011), - m_iMonth(1), - m_iDay(1), - m_iHovered(-1), - m_iLBtnPartStates(FWL_PARTSTATE_MCD_Normal), - m_iRBtnPartStates(FWL_PARTSTATE_MCD_Normal) { - m_rtHead.Reset(); - m_rtWeek.Reset(); - m_rtLBtn.Reset(); - m_rtRBtn.Reset(); - m_rtDates.Reset(); - m_rtHSep.Reset(); - m_rtHeadText.Reset(); - m_rtToday.Reset(); - m_rtTodayFlag.Reset(); - m_rtClient.Reset(); - m_rtWeekNum.Reset(); - m_rtWeekNumSep.Reset(); - m_pDateTime = new CFX_DateTime; - m_bInit = FALSE; - m_iMaxSel = 1; -} -CFWL_MonthCalendarImp::~CFWL_MonthCalendarImp() { - ClearDateItem(); - delete m_pDateTime; - m_arrSelDays.RemoveAll(); -} -FWL_ERR CFWL_MonthCalendarImp::GetClassName(CFX_WideString& wsClass) const { - wsClass = FWL_CLASS_MonthCalendar; - return FWL_ERR_Succeeded; -} -FX_DWORD CFWL_MonthCalendarImp::GetClassID() const { - return FWL_CLASSHASH_MonthCalendar; -} -FWL_ERR CFWL_MonthCalendarImp::Initialize() { - if (CFWL_WidgetImp::Initialize() != FWL_ERR_Succeeded) - return FWL_ERR_Indefinite; - m_pDelegate = new CFWL_MonthCalendarImpDelegate(this); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_MonthCalendarImp::Finalize() { - delete m_pDelegate; - m_pDelegate = nullptr; - return CFWL_WidgetImp::Finalize(); -} -FWL_ERR CFWL_MonthCalendarImp::GetWidgetRect(CFX_RectF& rect, - FX_BOOL bAutoSize) { - if (bAutoSize) { - CFX_SizeF fs = CalcSize(TRUE); - rect.Set(0, 0, fs.x, fs.y); - CFWL_WidgetImp::GetWidgetRect(rect, TRUE); - } else { - rect = m_pProperties->m_rtWidget; - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_MonthCalendarImp::Update() { - if (IsLocked()) { - return FWL_ERR_Indefinite; - } - if (!m_pProperties->m_pThemeProvider) { - m_pProperties->m_pThemeProvider = GetAvailableTheme(); - } - GetCapValue(); - if (!m_bInit) { - m_bInit = InitDate(); - } - ClearDateItem(); - ReSetDateItem(); - LayOut(); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_MonthCalendarImp::DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - if (!pGraphics) - return FWL_ERR_Indefinite; - if (m_pProperties->m_pThemeProvider == NULL) { - m_pProperties->m_pThemeProvider = GetAvailableTheme(); - } - IFWL_ThemeProvider* pTheme = m_pProperties->m_pThemeProvider; - if (HasBorder()) { - DrawBorder(pGraphics, FWL_PART_MCD_Border, pTheme, pMatrix); - } - if (HasEdge()) { - DrawEdge(pGraphics, FWL_PART_MCD_Edge, pTheme, pMatrix); - } - DrawBkground(pGraphics, pTheme, pMatrix); - DrawHeadBK(pGraphics, pTheme, pMatrix); - DrawLButton(pGraphics, pTheme, pMatrix); - DrawRButton(pGraphics, pTheme, pMatrix); - DrawSeperator(pGraphics, pTheme, pMatrix); - DrawDatesInBK(pGraphics, pTheme, pMatrix); - DrawDatesInCircle(pGraphics, pTheme, pMatrix); - DrawCaption(pGraphics, pTheme, pMatrix); - DrawWeek(pGraphics, pTheme, pMatrix); - DrawDatesIn(pGraphics, pTheme, pMatrix); - DrawDatesOut(pGraphics, pTheme, pMatrix); - DrawToday(pGraphics, pTheme, pMatrix); - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_MCD_WeekNumbers) { - DrawWeekNumberSep(pGraphics, pTheme, pMatrix); - DrawWeekNumber(pGraphics, pTheme, pMatrix); - } - return FWL_ERR_Succeeded; -} -int32_t CFWL_MonthCalendarImp::CountSelect() { - return m_arrSelDays.GetSize(); -} -FX_BOOL CFWL_MonthCalendarImp::GetSelect(int32_t& iYear, - int32_t& iMonth, - int32_t& iDay, - int32_t nIndex) { - if (nIndex >= m_arrSelDays.GetSize()) { - return FALSE; - } - iYear = m_iCurYear; - iMonth = m_iCurMonth; - iDay = m_arrSelDays[nIndex]; - return TRUE; -} -FX_BOOL CFWL_MonthCalendarImp::SetSelect(int32_t iYear, - int32_t iMonth, - int32_t iDay) { - ChangeToMonth(iYear, iMonth); - return AddSelDay(iDay); -} -void CFWL_MonthCalendarImp::DrawBkground(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - CFWL_ThemeBackground params; - params.m_pWidget = m_pInterface; - params.m_iPart = FWL_PART_MCD_Background; - params.m_pGraphics = pGraphics; - params.m_dwStates = FWL_PARTSTATE_MCD_Normal; - params.m_rtPart = m_rtClient; - if (pMatrix) { - params.m_matrix.Concat(*pMatrix); - } - pTheme->DrawBackground(¶ms); -} -void CFWL_MonthCalendarImp::DrawHeadBK(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - CFWL_ThemeBackground params; - params.m_pWidget = m_pInterface; - params.m_iPart = FWL_PART_MCD_Header; - params.m_pGraphics = pGraphics; - params.m_dwStates = FWL_PARTSTATE_MCD_Normal; - params.m_rtPart = m_rtHead; - if (pMatrix) { - params.m_matrix.Concat(*pMatrix); - } - pTheme->DrawBackground(¶ms); -} -void CFWL_MonthCalendarImp::DrawLButton(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - CFWL_ThemeBackground params; - params.m_pWidget = m_pInterface; - params.m_iPart = FWL_PART_MCD_LBtn; - params.m_pGraphics = pGraphics; - params.m_dwStates = m_iLBtnPartStates; - params.m_rtPart = m_rtLBtn; - if (pMatrix) { - params.m_matrix.Concat(*pMatrix); - } - pTheme->DrawBackground(¶ms); -} -void CFWL_MonthCalendarImp::DrawRButton(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - CFWL_ThemeBackground params; - params.m_pWidget = m_pInterface; - params.m_iPart = FWL_PART_MCD_RBtn; - params.m_pGraphics = pGraphics; - params.m_dwStates = m_iRBtnPartStates; - params.m_rtPart = m_rtRBtn; - if (pMatrix) { - params.m_matrix.Concat(*pMatrix); - } - pTheme->DrawBackground(¶ms); -} -void CFWL_MonthCalendarImp::DrawCaption(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - CFWL_ThemeText textParam; - textParam.m_pWidget = m_pInterface; - textParam.m_iPart = FWL_PART_MCD_Caption; - textParam.m_dwStates = FWL_PARTSTATE_MCD_Normal; - textParam.m_pGraphics = pGraphics; - int32_t iYear; - int32_t iMonth; - iYear = m_iCurYear; - iMonth = m_iCurMonth; - CFX_WideString wsCation; - GetHeadText(iYear, iMonth, wsCation); - textParam.m_wsText = wsCation; - m_szHead = CalcTextSize(textParam.m_wsText, m_pProperties->m_pThemeProvider); - CalcHeadSize(); - textParam.m_rtPart = m_rtHeadText; - textParam.m_dwTTOStyles = FDE_TTOSTYLE_SingleLine; - textParam.m_iTTOAlign = FDE_TTOALIGNMENT_Center; - if (pMatrix) { - textParam.m_matrix.Concat(*pMatrix); - } - pTheme->DrawText(&textParam); -} -void CFWL_MonthCalendarImp::DrawSeperator(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - CFWL_ThemeBackground params; - params.m_pWidget = m_pInterface; - params.m_iPart = FWL_PART_MCD_HSeparator; - params.m_pGraphics = pGraphics; - params.m_dwStates = FWL_PARTSTATE_MCD_Normal; - params.m_rtPart = m_rtHSep; - if (pMatrix) { - params.m_matrix.Concat(*pMatrix); - } - pTheme->DrawBackground(¶ms); -} -void CFWL_MonthCalendarImp::DrawDatesInBK(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - CFWL_ThemeBackground params; - params.m_pWidget = m_pInterface; - params.m_iPart = FWL_PART_MCD_DateInBK; - params.m_pGraphics = pGraphics; - if (pMatrix) { - params.m_matrix.Concat(*pMatrix); - } - int32_t iCount = m_arrDates.GetSize(); - for (int32_t j = 0; j < iCount; j++) { - FWL_DATEINFO* pDataInfo = (FWL_DATEINFO*)m_arrDates.GetAt(j); - if (pDataInfo->dwStates & FWL_ITEMSTATE_MCD_Selected) { - params.m_dwStates |= FWL_PARTSTATE_MCD_Selected; - if (((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_MCD_NoTodayCircle) == - 0) && - pDataInfo->dwStates & FWL_ITEMSTATE_MCD_Flag) { - params.m_dwStates |= FWL_PARTSTATE_MCD_Flagged; - } - if (pDataInfo->dwStates & FWL_ITEMSTATE_MCD_Focused) { - params.m_dwStates |= FWL_PARTSTATE_MCD_Focused; - } - } else if (j == m_iHovered - 1) { - params.m_dwStates |= FWL_PARTSTATE_MCD_Hovered; - } else if (pDataInfo->dwStates & FWL_ITEMSTATE_MCD_Flag) { - params.m_dwStates = FWL_PARTSTATE_MCD_Flagged; - pTheme->DrawBackground(¶ms); - } - params.m_rtPart = pDataInfo->rect; - pTheme->DrawBackground(¶ms); - params.m_dwStates = 0; - } -} -void CFWL_MonthCalendarImp::DrawWeek(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - CFWL_ThemeText params; - params.m_pWidget = m_pInterface; - params.m_iPart = FWL_PART_MCD_Week; - params.m_pGraphics = pGraphics; - params.m_dwStates = FWL_PARTSTATE_MCD_Normal; - params.m_iTTOAlign = FDE_TTOALIGNMENT_Center; - CFX_RectF rtDayOfWeek; - if (pMatrix) { - params.m_matrix.Concat(*pMatrix); - } - for (int32_t i = 0; i < 7; i++) { - rtDayOfWeek.Set(m_rtWeek.left + i * (m_szCell.x + MONTHCAL_HMARGIN * 2), - m_rtWeek.top, m_szCell.x, m_szCell.y); - CFX_WideString* wsWeekDay = static_cast<CFX_WideString*>( - pTheme->GetCapacity(¶ms, i + FWL_MCCAPACITY_Sun)); - params.m_rtPart = rtDayOfWeek; - params.m_wsText = *wsWeekDay; - params.m_dwTTOStyles = FDE_TTOSTYLE_SingleLine; - pTheme->DrawText(¶ms); - } -} -void CFWL_MonthCalendarImp::DrawWeekNumber(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - CFWL_ThemeText params; - params.m_pWidget = m_pInterface; - params.m_iPart = FWL_PART_MCD_WeekNum; - params.m_pGraphics = pGraphics; - params.m_dwStates = FWL_PARTSTATE_MCD_Normal; - params.m_iTTOAlign = FDE_TTOALIGNMENT_CenterLeft; - CFX_WideString wsWeekNum; - params.m_dwTTOStyles = FDE_TTOSTYLE_SingleLine; - params.m_iTTOAlign = FDE_TTOALIGNMENT_Center; - if (pMatrix) { - params.m_matrix.Concat(*pMatrix); - } - int32_t iWeekNum = 0; - int32_t iMonthNum = m_pDateTime->GetMonth(); - int32_t iDayNum = FX_DaysInMonth(m_iCurYear, iMonthNum); - int32_t iTemp = 0; - FX_FLOAT fVStartPos = m_rtClient.top + m_fHeadHei + m_fHSepHei; - FX_FLOAT fHStartPos = m_rtClient.left; - for (int32_t i = 1; i <= iDayNum; i += 7) { - iTemp++; - iWeekNum = CalWeekNumber(m_iCurYear, iMonthNum, i); - m_rtWeekNum.Set(fHStartPos, fVStartPos + m_fDateCellHei * iTemp, - m_fWeekNumWid, m_fDateCellHei); - wsWeekNum.Format(L"%d", iWeekNum); - params.m_wsText = wsWeekNum; - params.m_rtPart = m_rtWeekNum; - pTheme->DrawText(¶ms); - } -} -void CFWL_MonthCalendarImp::DrawWeekNumberSep(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - CFWL_ThemeBackground params; - params.m_pWidget = m_pInterface; - params.m_iPart = FWL_PART_MCD_WeekNumSep; - params.m_pGraphics = pGraphics; - params.m_dwStates = FWL_PARTSTATE_MCD_Normal; - params.m_rtPart = m_rtWeekNumSep; - if (pMatrix) { - params.m_matrix.Concat(*pMatrix); - } - pTheme->DrawBackground(¶ms); -} -void CFWL_MonthCalendarImp::DrawToday(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_MCD_NoToday) { - return; - } - CFWL_ThemeText params; - params.m_pWidget = m_pInterface; - params.m_iPart = FWL_PART_MCD_Today; - params.m_pGraphics = pGraphics; - params.m_dwStates = FWL_PARTSTATE_MCD_Normal; - params.m_iTTOAlign = FDE_TTOALIGNMENT_CenterLeft; - CFX_WideString* wsDay = static_cast<CFX_WideString*>( - pTheme->GetCapacity(¶ms, FWL_MCCAPACITY_Today)); - CFX_WideString wsText; - GetTodayText(m_iYear, m_iMonth, m_iDay, wsText); - params.m_wsText = *wsDay + wsText; - m_szToday = CalcTextSize(params.m_wsText, m_pProperties->m_pThemeProvider); - CalcTodaySize(); - params.m_rtPart = m_rtToday; - params.m_dwTTOStyles = FDE_TTOSTYLE_SingleLine; - if (pMatrix) { - params.m_matrix.Concat(*pMatrix); - } - pTheme->DrawText(¶ms); -} -void CFWL_MonthCalendarImp::DrawDatesIn(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - CFWL_ThemeText params; - params.m_pWidget = m_pInterface; - params.m_iPart = FWL_PART_MCD_DatesIn; - params.m_pGraphics = pGraphics; - params.m_dwStates = FWL_PARTSTATE_MCD_Normal; - params.m_iTTOAlign = FDE_TTOALIGNMENT_Center; - if (pMatrix) { - params.m_matrix.Concat(*pMatrix); - } - int32_t iCount = m_arrDates.GetSize(); - for (int32_t j = 0; j < iCount; j++) { - FWL_DATEINFO* pDataInfo = (FWL_DATEINFO*)m_arrDates.GetAt(j); - params.m_wsText = pDataInfo->wsDay; - params.m_rtPart = pDataInfo->rect; - params.m_dwStates = pDataInfo->dwStates; - if (j + 1 == m_iHovered) { - params.m_dwStates |= FWL_PARTSTATE_MCD_Hovered; - } - params.m_dwTTOStyles = FDE_TTOSTYLE_SingleLine; - pTheme->DrawText(¶ms); - } -} -void CFWL_MonthCalendarImp::DrawDatesOut(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - CFWL_ThemeText params; - params.m_pWidget = m_pInterface; - params.m_iPart = FWL_PART_MCD_DatesOut; - params.m_pGraphics = pGraphics; - params.m_dwStates = FWL_PARTSTATE_MCD_Normal; - params.m_iTTOAlign = FDE_TTOALIGNMENT_Center; - if (pMatrix) { - params.m_matrix.Concat(*pMatrix); - } - pTheme->DrawText(¶ms); -} -void CFWL_MonthCalendarImp::DrawDatesInCircle(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_MCD_NoTodayCircle) { - return; - } - if (m_iMonth != m_iCurMonth || m_iYear != m_iCurYear) { - return; - } - if (m_iDay < 1 || m_iDay > m_arrDates.GetSize()) { - return; - } - FWL_DATEINFO* pDate = (FWL_DATEINFO*)m_arrDates[m_iDay - 1]; - if (!pDate) - return; - CFWL_ThemeBackground params; - params.m_pWidget = m_pInterface; - params.m_iPart = FWL_PART_MCD_DateInCircle; - params.m_pGraphics = pGraphics; - params.m_rtPart = pDate->rect; - params.m_dwStates = FWL_PARTSTATE_MCD_Normal; - if (pMatrix) { - params.m_matrix.Concat(*pMatrix); - } - pTheme->DrawBackground(¶ms); -} -void CFWL_MonthCalendarImp::DrawTodayCircle(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_MCD_NoToday) { - return; - } - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_MCD_NoTodayCircle) { - return; - } - CFWL_ThemeBackground params; - params.m_pWidget = m_pInterface; - params.m_iPart = FWL_PART_MCD_TodayCircle; - params.m_pGraphics = pGraphics; - params.m_dwStates = FWL_PARTSTATE_MCD_Normal; - params.m_rtPart = m_rtTodayFlag; - if (pMatrix) { - params.m_matrix.Concat(*pMatrix); - } - pTheme->DrawBackground(¶ms); -} -CFX_SizeF CFWL_MonthCalendarImp::CalcSize(FX_BOOL bAutoSize) { - if (!m_pProperties->m_pThemeProvider) - return CFX_SizeF(); - - if (!bAutoSize) { - GetClientRect(m_rtClient); - return CFX_SizeF(m_rtClient.width, m_rtClient.height); - } - - CFX_SizeF fs; - CFWL_ThemePart params; - params.m_pWidget = m_pInterface; - IFWL_ThemeProvider* pTheme = m_pProperties->m_pThemeProvider; - CFX_WideString* wsText = NULL; - FX_FLOAT fMaxWeekW = 0.0f; - FX_FLOAT fMaxWeekH = 0.0f; - for (FX_DWORD week = FWL_MCCAPACITY_Sun; week <= FWL_MCCAPACITY_Sat; week++) { - wsText = static_cast<CFX_WideString*>(pTheme->GetCapacity(¶ms, week)); - CFX_SizeF sz = CalcTextSize(*wsText, m_pProperties->m_pThemeProvider); - fMaxWeekW = (fMaxWeekW >= sz.x) ? fMaxWeekW : sz.x; - fMaxWeekH = (fMaxWeekH >= sz.y) ? fMaxWeekH : sz.y; - } - FX_FLOAT fDayMaxW = 0.0f; - FX_FLOAT fDayMaxH = 0.0f; - for (int day = 10; day <= 31; day++) { - CFX_WideString wsDay; - wsDay.Format(L"%d", day); - CFX_SizeF sz = CalcTextSize(wsDay, m_pProperties->m_pThemeProvider); - fDayMaxW = (fDayMaxW >= sz.x) ? fDayMaxW : sz.x; - fDayMaxH = (fDayMaxH >= sz.y) ? fDayMaxH : sz.y; - } - m_szCell.x = FX_FLOAT((fMaxWeekW >= fDayMaxW) ? (int)(fMaxWeekW + 0.5) - : (int)(fDayMaxW + 0.5)); - m_szCell.y = (fMaxWeekH >= fDayMaxH) ? fMaxWeekH : fDayMaxH; - fs.x = m_szCell.x * MONTHCAL_COLUMNS + - MONTHCAL_HMARGIN * MONTHCAL_COLUMNS * 2 + - MONTHCAL_HEADER_BTN_HMARGIN * 2; - FX_FLOAT fMonthMaxW = 0.0f; - FX_FLOAT fMonthMaxH = 0.0f; - for (FX_DWORD month = FWL_MCCAPACITY_January; - month <= FWL_MCCAPACITY_December; month++) { - wsText = static_cast<CFX_WideString*>(pTheme->GetCapacity(¶ms, month)); - CFX_SizeF sz = CalcTextSize(*wsText, m_pProperties->m_pThemeProvider); - fMonthMaxW = (fMonthMaxW >= sz.x) ? fMonthMaxW : sz.x; - fMonthMaxH = (fMonthMaxH >= sz.y) ? fMonthMaxH : sz.y; - } - CFX_WideString wsYear; - GetHeadText(m_iYear, m_iMonth, wsYear); - CFX_SizeF szYear = CalcTextSize(wsYear, m_pProperties->m_pThemeProvider); - fMonthMaxH = std::max(fMonthMaxH, szYear.y); - m_szHead = CFX_SizeF(fMonthMaxW + szYear.x, fMonthMaxH); - fMonthMaxW = m_szHead.x + MONTHCAL_HEADER_BTN_HMARGIN * 2 + m_szCell.x * 2; - fs.x = std::max(fs.x, fMonthMaxW); - CFX_WideString wsToday; - GetTodayText(m_iYear, m_iMonth, m_iDay, wsToday); - wsText = static_cast<CFX_WideString*>( - pTheme->GetCapacity(¶ms, FWL_MCCAPACITY_Today)); - m_wsToday = *wsText + wsToday; - m_szToday = CalcTextSize(wsToday, m_pProperties->m_pThemeProvider); - m_szToday.y = (m_szToday.y >= m_szCell.y) ? m_szToday.y : m_szCell.y; - fs.y = m_szCell.x + m_szCell.y * (MONTHCAL_ROWS - 2) + m_szToday.y + - MONTHCAL_VMARGIN * MONTHCAL_ROWS * 2 + MONTHCAL_HEADER_BTN_VMARGIN * 4; - return fs; -} - -void CFWL_MonthCalendarImp::CalcHeadSize() { - FX_FLOAT fHeadHMargin = (m_rtClient.width - m_szHead.x) / 2; - FX_FLOAT fHeadVMargin = (m_szCell.x - m_szHead.y) / 2; - m_rtHeadText.Set(m_rtClient.left + fHeadHMargin, - m_rtClient.top + MONTHCAL_HEADER_BTN_VMARGIN + - MONTHCAL_VMARGIN + fHeadVMargin, - m_szHead.x, m_szHead.y); -} -void CFWL_MonthCalendarImp::CalcTodaySize() { - m_rtTodayFlag.Set( - m_rtClient.left + MONTHCAL_HEADER_BTN_HMARGIN + MONTHCAL_HMARGIN, - m_rtDates.bottom() + MONTHCAL_HEADER_BTN_VMARGIN + MONTHCAL_VMARGIN, - m_szCell.x, m_szToday.y); - m_rtToday.Set( - m_rtClient.left + MONTHCAL_HEADER_BTN_HMARGIN + m_szCell.x + - MONTHCAL_HMARGIN * 2, - m_rtDates.bottom() + MONTHCAL_HEADER_BTN_VMARGIN + MONTHCAL_VMARGIN, - m_szToday.x, m_szToday.y); -} -void CFWL_MonthCalendarImp::LayOut() { - GetClientRect(m_rtClient); - { - m_rtHead.Set( - m_rtClient.left + MONTHCAL_HEADER_BTN_HMARGIN, m_rtClient.top, - m_rtClient.width - MONTHCAL_HEADER_BTN_HMARGIN * 2, - m_szCell.x + (MONTHCAL_HEADER_BTN_VMARGIN + MONTHCAL_VMARGIN) * 2); - m_rtWeek.Set(m_rtClient.left + MONTHCAL_HEADER_BTN_HMARGIN, - m_rtHead.bottom(), - m_rtClient.width - MONTHCAL_HEADER_BTN_HMARGIN * 2, - m_szCell.y + MONTHCAL_VMARGIN * 2); - m_rtLBtn.Set(m_rtClient.left + MONTHCAL_HEADER_BTN_HMARGIN, - m_rtClient.top + MONTHCAL_HEADER_BTN_VMARGIN, m_szCell.x, - m_szCell.x); - m_rtRBtn.Set(m_rtClient.left + m_rtClient.width - - MONTHCAL_HEADER_BTN_HMARGIN - m_szCell.x, - m_rtClient.top + MONTHCAL_HEADER_BTN_VMARGIN, m_szCell.x, - m_szCell.x); - m_rtHSep.Set( - m_rtClient.left + MONTHCAL_HEADER_BTN_HMARGIN + MONTHCAL_HMARGIN, - m_rtWeek.bottom() - MONTHCAL_VMARGIN, - m_rtClient.width - (MONTHCAL_HEADER_BTN_HMARGIN + MONTHCAL_HMARGIN) * 2, - MONTHCAL_HSEP_HEIGHT); - m_rtDates.Set(m_rtClient.left + MONTHCAL_HEADER_BTN_HMARGIN, - m_rtWeek.bottom(), - m_rtClient.width - MONTHCAL_HEADER_BTN_HMARGIN * 2, - m_szCell.y * (MONTHCAL_ROWS - 3) + - MONTHCAL_VMARGIN * (MONTHCAL_ROWS - 3) * 2); - } - CalDateItem(); -} -void CFWL_MonthCalendarImp::CalDateItem() { - FX_BOOL bNewWeek = FALSE; - int32_t iWeekOfMonth = 0; - FX_FLOAT fLeft = m_rtDates.left; - FX_FLOAT fTop = m_rtDates.top; - int32_t iCount = m_arrDates.GetSize(); - for (int32_t i = 0; i < iCount; i++) { - FWL_DATEINFO* pDateInfo = (FWL_DATEINFO*)m_arrDates.GetAt(i); - if (bNewWeek) { - iWeekOfMonth++; - bNewWeek = FALSE; - } - pDateInfo->rect.Set( - fLeft + pDateInfo->iDayOfWeek * (m_szCell.x + (MONTHCAL_HMARGIN * 2)), - fTop + iWeekOfMonth * (m_szCell.y + (MONTHCAL_VMARGIN * 2)), - m_szCell.x + (MONTHCAL_HMARGIN * 2), - m_szCell.y + (MONTHCAL_VMARGIN * 2)); - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_MCD_WeekNumbers) { - pDateInfo->rect.Offset(m_fWeekNumWid, 0); - } - if (pDateInfo->iDayOfWeek >= 6) { - bNewWeek = TRUE; - } - } -} -void CFWL_MonthCalendarImp::GetCapValue() { - if (!m_pProperties->m_pThemeProvider) { - m_pProperties->m_pThemeProvider = GetAvailableTheme(); - } - IFWL_ThemeProvider* pTheme = m_pProperties->m_pThemeProvider; - CFWL_ThemePart part; - part.m_pWidget = m_pInterface; - m_fHeadWid = *static_cast<FX_FLOAT*>( - pTheme->GetCapacity(&part, FWL_WGTCAPACITY_MC_HEADER_WIDTH)); - m_fHeadHei = *static_cast<FX_FLOAT*>( - pTheme->GetCapacity(&part, FWL_WGTCAPACITY_MC_HEADER_Height)); - m_fHeadBtnWid = *static_cast<FX_FLOAT*>( - pTheme->GetCapacity(&part, FWL_WGTCAPACITY_MC_HEADER_BTN_WIDTH)); - m_fHeadBtnHei = *static_cast<FX_FLOAT*>( - pTheme->GetCapacity(&part, FWL_WGTCAPACITY_MC_HEADER_BTN_HEIGHT)); - m_fHeadBtnHMargin = *static_cast<FX_FLOAT*>( - pTheme->GetCapacity(&part, FWL_WGTCAPACITY_MC_HEADER_BTN_HMARGIN)); - m_fHeadBtnVMargin = *static_cast<FX_FLOAT*>( - pTheme->GetCapacity(&part, FWL_WGTCAPACITY_MC_HEADER_BTN_VMARGIN)); - m_fHeadTextWid = *static_cast<FX_FLOAT*>( - pTheme->GetCapacity(&part, FWL_WGTCAPACITY_MC_HEADER_TEXTWIDHT)); - m_fHeadTextHei = *static_cast<FX_FLOAT*>( - pTheme->GetCapacity(&part, FWL_WGTCAPACITY_MC_HEADER_TEXTHEIGHT)); - m_fHeadTextHMargin = *static_cast<FX_FLOAT*>( - pTheme->GetCapacity(&part, FWL_WGTCAPACITY_MC_HEADER_TEXT_HMARGIN)); - m_fHeadTextVMargin = *static_cast<FX_FLOAT*>( - pTheme->GetCapacity(&part, FWL_WGTCAPACITY_MC_HEADER_TEXT_VMARGIN)); - m_fHSepWid = *static_cast<FX_FLOAT*>( - pTheme->GetCapacity(&part, FWL_WGTCAPACITY_MC_HSEP_WIDTH)); - m_fHSepHei = *static_cast<FX_FLOAT*>( - pTheme->GetCapacity(&part, FWL_WGTCAPACITY_MC_HSEP_HEIGHT)); - m_fWeekNumWid = *static_cast<FX_FLOAT*>( - pTheme->GetCapacity(&part, FWL_WGTCAPACITY_MC_WEEKNUM_WIDTH)); - m_fSepDOffset = *static_cast<FX_FLOAT*>( - pTheme->GetCapacity(&part, FWL_WGTCAPACITY_MC_SEP_DOFFSET)); - m_fSepX = *static_cast<FX_FLOAT*>( - pTheme->GetCapacity(&part, FWL_WGTCAPACITY_MC_SEP_X)); - m_fSepY = *static_cast<FX_FLOAT*>( - pTheme->GetCapacity(&part, FWL_WGTCAPACITY_MC_SEP_Y)); - m_fWeekNumHeigh = *static_cast<FX_FLOAT*>( - pTheme->GetCapacity(&part, FWL_WGTCAPACITY_MC_WEEKNUM_HEIGHT)); - m_fWeekWid = *static_cast<FX_FLOAT*>( - pTheme->GetCapacity(&part, FWL_WGTCAPACITY_MC_WEEK_WIDTH)); - m_fWeekHei = *static_cast<FX_FLOAT*>( - pTheme->GetCapacity(&part, FWL_WGTCAPACITY_MC_WEEK_HEIGHT)); - m_fDateCellWid = *static_cast<FX_FLOAT*>( - pTheme->GetCapacity(&part, FWL_WGTCAPACITY_MC_DATES_CELL_WIDTH)); - m_fDateCellHei = *static_cast<FX_FLOAT*>( - pTheme->GetCapacity(&part, FWL_WGTCAPACITY_MC_DATES_CELL_HEIGHT)); - m_fTodayWid = *static_cast<FX_FLOAT*>( - pTheme->GetCapacity(&part, FWL_WGTCAPACITY_MC_TODAY_WIDHT)); - m_fTodayHei = *static_cast<FX_FLOAT*>( - pTheme->GetCapacity(&part, FWL_WGTCAPACITY_MC_TODAY_HEIGHT)); - m_fTodayFlagWid = *static_cast<FX_FLOAT*>( - pTheme->GetCapacity(&part, FWL_WGTCAPACITY_MC_TODAY_FLAG_WIDHT)); - m_fMCWid = *static_cast<FX_FLOAT*>( - pTheme->GetCapacity(&part, FWL_WGTCAPACITY_MC_WIDTH)); - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_MCD_WeekNumbers) { - m_fMCWid += m_fWeekNumWid; - } - m_fMCHei = *static_cast<FX_FLOAT*>( - pTheme->GetCapacity(&part, FWL_WGTCAPACITY_MC_HEIGHT)); -} -int32_t CFWL_MonthCalendarImp::CalWeekNumber(int32_t iYear, - int32_t iMonth, - int32_t iDay) { - return 0; -} -FX_BOOL CFWL_MonthCalendarImp::GetMinDate(int32_t& iYear, - int32_t& iMonth, - int32_t& iDay) { - iYear = m_dtMin.iYear; - iMonth = m_dtMin.iMonth; - iDay = m_dtMin.iDay; - return TRUE; -} -FX_BOOL CFWL_MonthCalendarImp::SetMinDate(int32_t iYear, - int32_t iMonth, - int32_t iDay) { - m_dtMin = DATE(iYear, iMonth, iDay); - return TRUE; -} -FX_BOOL CFWL_MonthCalendarImp::GetMaxDate(int32_t& iYear, - int32_t& iMonth, - int32_t& iDay) { - iYear = m_dtMax.iYear; - iMonth = m_dtMax.iMonth; - iDay = m_dtMax.iDay; - return TRUE; -} -FX_BOOL CFWL_MonthCalendarImp::SetMaxDate(int32_t iYear, - int32_t iMonth, - int32_t iDay) { - m_dtMax = DATE(iYear, iMonth, iDay); - return TRUE; -} -FX_BOOL CFWL_MonthCalendarImp::InitDate() { - if (m_pProperties->m_pDataProvider) { - IFWL_MonthCalendarDP* pDateProv = - static_cast<IFWL_MonthCalendarDP*>(m_pProperties->m_pDataProvider); - m_iYear = pDateProv->GetCurYear(m_pInterface); - m_iMonth = pDateProv->GetCurMonth(m_pInterface); - m_iDay = pDateProv->GetCurDay(m_pInterface); - m_iCurYear = m_iYear; - m_iCurMonth = m_iMonth; - } else { - m_iDay = 1; - m_iMonth = 1; - m_iYear = 1; - m_iCurYear = m_iYear; - m_iCurMonth = m_iMonth; - } - GetTodayText(m_iYear, m_iMonth, m_iDay, m_wsToday); - GetHeadText(m_iCurYear, m_iCurMonth, m_wsHead); - m_dtMin = DATE(1500, 12, 1); - m_dtMax = DATE(2200, 1, 1); - return TRUE; -} -void CFWL_MonthCalendarImp::ClearDateItem() { - int32_t iCount = m_arrDates.GetSize(); - for (int32_t i = 0; i < iCount; i++) { - FWL_DATEINFO* pData = (FWL_DATEINFO*)m_arrDates.GetAt(i); - delete pData; - } - m_arrDates.RemoveAll(); -} -void CFWL_MonthCalendarImp::ReSetDateItem() { - m_pDateTime->Set(m_iCurYear, m_iCurMonth, 1); - int32_t iDays = FX_DaysInMonth(m_iCurYear, m_iCurMonth); - int32_t iDayOfWeek = m_pDateTime->GetDayOfWeek(); - for (int32_t i = 0; i < iDays; i++) { - if (iDayOfWeek >= 7) { - iDayOfWeek = 0; - } - CFX_WideString wsDay; - wsDay.Format(L"%d", i + 1); - FX_DWORD dwStates = 0; - if (m_iYear == m_iCurYear && m_iMonth == m_iCurMonth && m_iDay == (i + 1)) { - dwStates |= FWL_ITEMSTATE_MCD_Flag; - } - if (m_arrSelDays.Find(i + 1) != -1) { - dwStates |= FWL_ITEMSTATE_MCD_Selected; - } - CFX_RectF rtDate; - rtDate.Set(0, 0, 0, 0); - m_arrDates.Add( - new FWL_DATEINFO(i + 1, iDayOfWeek, dwStates, rtDate, wsDay)); - iDayOfWeek++; - } -} -FX_BOOL CFWL_MonthCalendarImp::NextMonth() { - int32_t iYear = m_iCurYear, iMonth = m_iCurMonth; - if (iMonth >= 12) { - iMonth = 1; - iYear++; - } else { - iMonth++; - } - DATE dt(m_iCurYear, m_iCurMonth, 1); - if (!(dt < m_dtMax)) { - return FALSE; - } - m_iCurYear = iYear, m_iCurMonth = iMonth; - ChangeToMonth(m_iCurYear, m_iCurMonth); - return TRUE; -} -FX_BOOL CFWL_MonthCalendarImp::PrevMonth() { - int32_t iYear = m_iCurYear, iMonth = m_iCurMonth; - if (iMonth <= 1) { - iMonth = 12; - iYear--; - } else { - iMonth--; - } - DATE dt(m_iCurYear, m_iCurMonth, 1); - if (!(dt > m_dtMin)) { - return FALSE; - } - m_iCurYear = iYear, m_iCurMonth = iMonth; - ChangeToMonth(m_iCurYear, m_iCurMonth); - return TRUE; -} -void CFWL_MonthCalendarImp::ChangeToMonth(int32_t iYear, int32_t iMonth) { - m_iCurYear = iYear; - m_iCurMonth = iMonth; - m_iHovered = -1; - ClearDateItem(); - ReSetDateItem(); - CalDateItem(); - GetHeadText(m_iCurYear, m_iCurMonth, m_wsHead); -} -FX_BOOL CFWL_MonthCalendarImp::RemoveSelDay(int32_t iDay, FX_BOOL bAll) { - if (iDay == -1 && !bAll) { - return FALSE; - } - if (bAll) { - int32_t iCount = m_arrSelDays.GetSize(); - int32_t iDatesCount = m_arrDates.GetSize(); - for (int32_t i = 0; i < iCount; i++) { - int32_t iSelDay = m_arrSelDays.GetAt(i); - if (iSelDay <= iDatesCount) { - FWL_DATEINFO* pDateInfo = (FWL_DATEINFO*)m_arrDates.GetAt(iSelDay - 1); - pDateInfo->dwStates &= ~FWL_ITEMSTATE_MCD_Selected; - } - } - m_arrSelDays.RemoveAll(); - } else { - int32_t index = m_arrSelDays.Find(iDay); - if (index == -1) { - return FALSE; - } - int32_t iSelDay = m_arrSelDays.GetAt(iDay); - int32_t iDatesCount = m_arrDates.GetSize(); - if (iSelDay <= iDatesCount) { - FWL_DATEINFO* pDateInfo = (FWL_DATEINFO*)m_arrDates.GetAt(iSelDay - 1); - pDateInfo->dwStates &= ~FWL_ITEMSTATE_MCD_Selected; - } - m_arrSelDays.RemoveAt(index); - } - return TRUE; -} -FX_BOOL CFWL_MonthCalendarImp::AddSelDay(int32_t iDay) { - FXSYS_assert(iDay > 0); - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_MCD_MultiSelect) { - } else { - if (m_arrSelDays.Find(iDay) == -1) { - RemoveSelDay(-1, TRUE); - if (iDay <= m_arrDates.GetSize()) { - FWL_DATEINFO* pDateInfo = (FWL_DATEINFO*)m_arrDates.GetAt(iDay - 1); - pDateInfo->dwStates |= FWL_ITEMSTATE_MCD_Selected; - } - m_arrSelDays.Add(iDay); - } - } - return TRUE; -} -FX_BOOL CFWL_MonthCalendarImp::JumpToToday() { - if (m_iYear != m_iCurYear || m_iMonth != m_iCurMonth) { - m_iCurYear = m_iYear; - m_iCurMonth = m_iMonth; - ChangeToMonth(m_iYear, m_iMonth); - AddSelDay(m_iDay); - } else { - if (m_arrSelDays.Find(m_iDay) == -1) { - AddSelDay(m_iDay); - } - } - return TRUE; -} -void CFWL_MonthCalendarImp::GetHeadText(int32_t iYear, - int32_t iMonth, - CFX_WideString& wsHead) { - FXSYS_assert(iMonth > 0 && iMonth < 13); - static const FX_WCHAR* const pMonth[] = { - L"January", L"February", L"March", L"April", - L"May", L"June", L"July", L"August", - L"September", L"October", L"November", L"December"}; - wsHead.Format(L"%s, %d", pMonth[iMonth - 1], iYear); -} -void CFWL_MonthCalendarImp::GetTodayText(int32_t iYear, - int32_t iMonth, - int32_t iDay, - CFX_WideString& wsToday) { - wsToday.Format(L", %d/%d/%d", iDay, iMonth, iYear); -} -int32_t CFWL_MonthCalendarImp::GetDayAtPoint(FX_FLOAT x, FX_FLOAT y) { - int32_t iCount = m_arrDates.GetSize(); - for (int32_t i = 0; i < iCount; i++) { - FWL_DATEINFO* pDateInfo = (FWL_DATEINFO*)m_arrDates.GetAt(i); - if (pDateInfo->rect.Contains(x, y)) { - return ++i; - } - } - return -1; -} -FX_BOOL CFWL_MonthCalendarImp::GetDayRect(int32_t iDay, CFX_RectF& rtDay) { - if (iDay <= 0 || iDay > m_arrDates.GetSize()) { - return FALSE; - } - FWL_DATEINFO* pDateInfo = (FWL_DATEINFO*)m_arrDates[iDay - 1]; - if (!pDateInfo) - return FALSE; - rtDay = pDateInfo->rect; - return TRUE; -} -CFWL_MonthCalendarImpDelegate::CFWL_MonthCalendarImpDelegate( - CFWL_MonthCalendarImp* pOwner) - : m_pOwner(pOwner) {} -int32_t CFWL_MonthCalendarImpDelegate::OnProcessMessage( - CFWL_Message* pMessage) { - if (!pMessage) - return 0; - FX_DWORD dwMsgCode = pMessage->GetClassID(); - int32_t iRet = 1; - switch (dwMsgCode) { - case FWL_MSGHASH_SetFocus: - case FWL_MSGHASH_KillFocus: { - OnFocusChanged(pMessage, dwMsgCode == FWL_MSGHASH_SetFocus); - break; - } - case FWL_MSGHASH_Key: { - break; - } - case FWL_MSGHASH_Mouse: { - CFWL_MsgMouse* pMouse = static_cast<CFWL_MsgMouse*>(pMessage); - FX_DWORD dwCmd = pMouse->m_dwCmd; - switch (dwCmd) { - case FWL_MSGMOUSECMD_LButtonDown: { - OnLButtonDown(pMouse); - break; - } - case FWL_MSGMOUSECMD_LButtonUp: { - OnLButtonUp(pMouse); - break; - } - case FWL_MSGMOUSECMD_MouseMove: { - OnMouseMove(pMouse); - break; - } - case FWL_MSGMOUSECMD_MouseLeave: { - OnMouseLeave(pMouse); - break; - } - default: { break; } - } - break; - } - default: { - iRet = 0; - break; - } - } - CFWL_WidgetImpDelegate::OnProcessMessage(pMessage); - return iRet; -} -FWL_ERR CFWL_MonthCalendarImpDelegate::OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - return m_pOwner->DrawWidget(pGraphics, pMatrix); -} - -void CFWL_MonthCalendarImpDelegate::OnActivate(CFWL_Message* pMsg) {} - -void CFWL_MonthCalendarImpDelegate::OnFocusChanged(CFWL_Message* pMsg, - FX_BOOL bSet) { - if (bSet) { - m_pOwner->m_pProperties->m_dwStates |= FWL_WGTSTATE_Focused; - } else { - m_pOwner->m_pProperties->m_dwStates &= ~FWL_WGTSTATE_Focused; - } - m_pOwner->Repaint(&m_pOwner->m_rtClient); -} -void CFWL_MonthCalendarImpDelegate::OnLButtonDown(CFWL_MsgMouse* pMsg) { - if (m_pOwner->m_rtLBtn.Contains(pMsg->m_fx, pMsg->m_fy)) { - m_pOwner->m_iLBtnPartStates = FWL_PARTSTATE_MCD_Pressed; - m_pOwner->PrevMonth(); - m_pOwner->Repaint(&m_pOwner->m_rtClient); - } else if (m_pOwner->m_rtRBtn.Contains(pMsg->m_fx, pMsg->m_fy)) { - m_pOwner->m_iRBtnPartStates |= FWL_PARTSTATE_MCD_Pressed; - m_pOwner->NextMonth(); - m_pOwner->Repaint(&m_pOwner->m_rtClient); - } else if (m_pOwner->m_rtToday.Contains(pMsg->m_fx, pMsg->m_fy)) { - if ((m_pOwner->m_pProperties->m_dwStyleExes & FWL_STYLEEXT_MCD_NoToday) == - 0) { - m_pOwner->JumpToToday(); - m_pOwner->Repaint(&m_pOwner->m_rtClient); - } - } else { - if (m_pOwner->m_pProperties->m_dwStyleExes & FWL_STYLEEXT_MCD_MultiSelect) { - } else { - int32_t iOldSel = 0; - if (m_pOwner->m_arrSelDays.GetSize() > 0) { - iOldSel = m_pOwner->m_arrSelDays[0]; - } else { - return; - } - int32_t iCurSel = m_pOwner->GetDayAtPoint(pMsg->m_fx, pMsg->m_fy); - FX_BOOL bSelChanged = iCurSel > 0 && iCurSel != iOldSel; - if (bSelChanged) { - FWL_DATEINFO* lpDatesInfo = - (FWL_DATEINFO*)m_pOwner->m_arrDates.GetAt(iCurSel - 1); - CFX_RectF rtInvalidate(lpDatesInfo->rect); - if (iOldSel > 0) { - lpDatesInfo = (FWL_DATEINFO*)m_pOwner->m_arrDates.GetAt(iOldSel - 1); - rtInvalidate.Union(lpDatesInfo->rect); - } - m_pOwner->AddSelDay(iCurSel); - CFWL_EvtClick wmClick; - wmClick.m_pSrcTarget = m_pOwner->m_pInterface; - m_pOwner->DispatchEvent(&wmClick); - CFWL_EventMcdDateChanged wmDateSelected; - wmDateSelected.m_iStartDay = iCurSel; - wmDateSelected.m_iEndDay = iCurSel; - wmDateSelected.m_iOldMonth = m_pOwner->m_iCurMonth; - wmDateSelected.m_iOldYear = m_pOwner->m_iCurYear; - wmDateSelected.m_pSrcTarget = m_pOwner->m_pInterface; - m_pOwner->DispatchEvent(&wmDateSelected); - m_pOwner->Repaint(&rtInvalidate); - } - } - } -} -void CFWL_MonthCalendarImpDelegate::OnLButtonUp(CFWL_MsgMouse* pMsg) { - if (m_pOwner->m_rtLBtn.Contains(pMsg->m_fx, pMsg->m_fy)) { - m_pOwner->m_iLBtnPartStates = 0; - m_pOwner->Repaint(&m_pOwner->m_rtLBtn); - } else if (m_pOwner->m_rtRBtn.Contains(pMsg->m_fx, pMsg->m_fy)) { - m_pOwner->m_iRBtnPartStates = 0; - m_pOwner->Repaint(&m_pOwner->m_rtRBtn); - } else if (m_pOwner->m_rtDates.Contains(pMsg->m_fx, pMsg->m_fy)) { - int32_t iDay = m_pOwner->GetDayAtPoint(pMsg->m_fx, pMsg->m_fy); - if (iDay != -1) { - m_pOwner->AddSelDay(iDay); - } - } -} -void CFWL_MonthCalendarImpDelegate::OnMouseMove(CFWL_MsgMouse* pMsg) { - if (m_pOwner->m_pProperties->m_dwStyleExes & FWL_STYLEEXT_MCD_MultiSelect) { - return; - } - FX_BOOL bRepaint = FALSE; - CFX_RectF rtInvalidate; - rtInvalidate.Set(0, 0, 0, 0); - if (m_pOwner->m_rtDates.Contains(pMsg->m_fx, pMsg->m_fy)) { - int32_t iHover = m_pOwner->GetDayAtPoint(pMsg->m_fx, pMsg->m_fy); - bRepaint = m_pOwner->m_iHovered != iHover; - if (bRepaint) { - if (m_pOwner->m_iHovered > 0) { - m_pOwner->GetDayRect(m_pOwner->m_iHovered, rtInvalidate); - } - if (iHover > 0) { - CFX_RectF rtDay; - m_pOwner->GetDayRect(iHover, rtDay); - if (rtInvalidate.IsEmpty()) { - rtInvalidate = rtDay; - } else { - rtInvalidate.Union(rtDay); - } - } - } - m_pOwner->m_iHovered = iHover; - } else { - bRepaint = m_pOwner->m_iHovered > 0; - if (bRepaint) { - m_pOwner->GetDayRect(m_pOwner->m_iHovered, rtInvalidate); - } - m_pOwner->m_iHovered = -1; - } - if (bRepaint && !rtInvalidate.IsEmpty()) { - m_pOwner->Repaint(&rtInvalidate); - } -} -void CFWL_MonthCalendarImpDelegate::OnMouseLeave(CFWL_MsgMouse* pMsg) { - if (m_pOwner->m_iHovered > 0) { - CFX_RectF rtInvalidate; - rtInvalidate.Set(0, 0, 0, 0); - m_pOwner->GetDayRect(m_pOwner->m_iHovered, rtInvalidate); - m_pOwner->m_iHovered = -1; - if (!rtInvalidate.IsEmpty()) { - m_pOwner->Repaint(&rtInvalidate); - } - } -} diff --git a/xfa/src/fwl/basewidget/fwl_monthcalendarimp.h b/xfa/src/fwl/basewidget/fwl_monthcalendarimp.h deleted file mode 100644 index b2a21dc72a..0000000000 --- a/xfa/src/fwl/basewidget/fwl_monthcalendarimp.h +++ /dev/null @@ -1,243 +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 - -#ifndef XFA_SRC_FWL_BASEWIDGET_FWL_MONTHCALENDARIMP_H_ -#define XFA_SRC_FWL_BASEWIDGET_FWL_MONTHCALENDARIMP_H_ - -#include "xfa/src/fgas/localization/fgas_datetime.h" -#include "xfa/src/fwl/core/fwl_widgetimp.h" - -class CFWL_WidgetImpProperties; -class IFWL_Widget; -class CFWL_MonthCalendarImpDelegate; - -extern uint8_t FX_DaysInMonth(int32_t iYear, uint8_t iMonth); - -class CFWL_MonthCalendarImp : public CFWL_WidgetImp { - public: - CFWL_MonthCalendarImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter); - ~CFWL_MonthCalendarImp(); - virtual FWL_ERR GetClassName(CFX_WideString& wsClass) const; - virtual FX_DWORD GetClassID() const; - virtual FWL_ERR Initialize(); - virtual FWL_ERR Finalize(); - virtual FWL_ERR GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize = FALSE); - virtual FWL_ERR Update(); - virtual FWL_ERR DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL); - virtual int32_t CountSelect(); - virtual FX_BOOL GetSelect(int32_t& iYear, - int32_t& iMonth, - int32_t& iDay, - int32_t nIndex = 0); - virtual FX_BOOL SetSelect(int32_t iYear, int32_t iMonth, int32_t iDay); - - protected: - struct DATE { - DATE() : iYear(0), iMonth(0), iDay(0) {} - DATE(int32_t year, int32_t month, int32_t day) - : iYear(year), iMonth(month), iDay(day) {} - FX_BOOL operator<(const DATE& right) { - if (iYear < right.iYear) { - return TRUE; - } else if (iYear == right.iYear) { - if (iMonth < right.iMonth) { - return TRUE; - } else if (iMonth == right.iMonth) { - return iDay < right.iDay; - } - } - return FALSE; - } - FX_BOOL operator>(const DATE& right) { - if (iYear > right.iYear) { - return TRUE; - } else if (iYear == right.iYear) { - if (iMonth > right.iMonth) { - return TRUE; - } else if (iMonth == right.iMonth) { - return iDay > right.iDay; - } - } - return FALSE; - } - int32_t iYear; - int32_t iMonth; - int32_t iDay; - }; - - void DrawBkground(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix); - void DrawHeadBK(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix); - void DrawLButton(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix); - void DrawRButton(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix); - void DrawCaption(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix); - void DrawSeperator(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix); - void DrawDatesInBK(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix); - void DrawWeek(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix); - void DrawWeekNumber(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix); - void DrawWeekNumberSep(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix); - void DrawToday(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix); - void DrawDatesIn(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix); - void DrawDatesOut(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix); - void DrawDatesInCircle(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix); - void DrawTodayCircle(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix); - CFX_SizeF CalcSize(FX_BOOL bAutoSize = FALSE); - void LayOut(); - void CalcHeadSize(); - void CalcTodaySize(); - void CalDateItem(); - void GetCapValue(); - int32_t CalWeekNumber(int32_t iYear, int32_t iMonth, int32_t iDay); - FX_BOOL GetMinDate(int32_t& iYear, int32_t& iMonth, int32_t& iDay); - FX_BOOL SetMinDate(int32_t iYear, int32_t iMonth, int32_t iDay); - FX_BOOL GetMaxDate(int32_t& iYear, int32_t& iMonth, int32_t& iDay); - FX_BOOL SetMaxDate(int32_t iYear, int32_t iMonth, int32_t iDay); - FX_BOOL InitDate(); - void ClearDateItem(); - void ReSetDateItem(); - FX_BOOL NextMonth(); - FX_BOOL PrevMonth(); - void ChangeToMonth(int32_t iYear, int32_t iMonth); - FX_BOOL RemoveSelDay(int32_t iDay, FX_BOOL bAll = FALSE); - FX_BOOL AddSelDay(int32_t iDay); - FX_BOOL JumpToToday(); - void GetHeadText(int32_t iYear, int32_t iMonth, CFX_WideString& wsHead); - void GetTodayText(int32_t iYear, - int32_t iMonth, - int32_t iDay, - CFX_WideString& wsToday); - int32_t GetDayAtPoint(FX_FLOAT x, FX_FLOAT y); - FX_BOOL GetDayRect(int32_t iDay, CFX_RectF& rtDay); - - FX_BOOL m_bInit; - CFX_RectF m_rtHead; - CFX_RectF m_rtWeek; - CFX_RectF m_rtLBtn; - CFX_RectF m_rtRBtn; - CFX_RectF m_rtDates; - CFX_RectF m_rtHSep; - CFX_RectF m_rtHeadText; - CFX_RectF m_rtToday; - CFX_RectF m_rtTodayFlag; - CFX_RectF m_rtWeekNum; - CFX_RectF m_rtWeekNumSep; - CFX_RectF m_rtTemp; - CFX_WideString m_wsHead; - CFX_WideString m_wsToday; - CFX_DateTime* m_pDateTime; - CFX_PtrArray m_arrDates; - int32_t m_iCurYear; - int32_t m_iCurMonth; - int32_t m_iYear; - int32_t m_iMonth; - int32_t m_iDay; - int32_t m_iHovered; - int32_t m_iLBtnPartStates; - int32_t m_iRBtnPartStates; - DATE m_dtMin; - DATE m_dtMax; - CFX_SizeF m_szHead; - CFX_SizeF m_szCell; - CFX_SizeF m_szToday; - CFX_ArrayTemplate<int32_t> m_arrSelDays; - int32_t m_iMaxSel; - CFX_RectF m_rtClient; - FX_FLOAT m_fHeadWid; - FX_FLOAT m_fHeadHei; - FX_FLOAT m_fHeadBtnWid; - FX_FLOAT m_fHeadBtnHei; - FX_FLOAT m_fHeadBtnHMargin; - FX_FLOAT m_fHeadBtnVMargin; - FX_FLOAT m_fHeadTextWid; - FX_FLOAT m_fHeadTextHei; - FX_FLOAT m_fHeadTextHMargin; - FX_FLOAT m_fHeadTextVMargin; - FX_FLOAT m_fHSepWid; - FX_FLOAT m_fHSepHei; - FX_FLOAT m_fWeekNumWid; - FX_FLOAT m_fSepDOffset; - FX_FLOAT m_fSepX; - FX_FLOAT m_fSepY; - FX_FLOAT m_fWeekNumHeigh; - FX_FLOAT m_fWeekWid; - FX_FLOAT m_fWeekHei; - FX_FLOAT m_fDateCellWid; - FX_FLOAT m_fDateCellHei; - FX_FLOAT m_fTodayWid; - FX_FLOAT m_fTodayHei; - FX_FLOAT m_fTodayFlagWid; - FX_FLOAT m_fMCWid; - FX_FLOAT m_fMCHei; - friend class CFWL_MonthCalendarImpDelegate; -}; - -struct FWL_DATEINFO { - FWL_DATEINFO(int32_t day, - int32_t dayofweek, - FX_DWORD dwSt, - CFX_RectF rc, - CFX_WideString& wsday) - : iDay(day), - iDayOfWeek(dayofweek), - dwStates(dwSt), - rect(rc), - wsDay(wsday) {} - int32_t iDay; - int32_t iDayOfWeek; - FX_DWORD dwStates; - CFX_RectF rect; - CFX_WideString wsDay; -}; - -class CFWL_MonthCalendarImpDelegate : public CFWL_WidgetImpDelegate { - public: - CFWL_MonthCalendarImpDelegate(CFWL_MonthCalendarImp* pOwner); - int32_t OnProcessMessage(CFWL_Message* pMessage) override; - FWL_ERR OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL) override; - - protected: - void OnActivate(CFWL_Message* pMsg); - void OnFocusChanged(CFWL_Message* pMsg, FX_BOOL bSet = TRUE); - void OnLButtonDown(CFWL_MsgMouse* pMsg); - void OnLButtonUp(CFWL_MsgMouse* pMsg); - void OnMouseMove(CFWL_MsgMouse* pMsg); - void OnMouseLeave(CFWL_MsgMouse* pMsg); - CFWL_MonthCalendarImp* m_pOwner; -}; - -#endif // XFA_SRC_FWL_BASEWIDGET_FWL_MONTHCALENDARIMP_H_ diff --git a/xfa/src/fwl/basewidget/fwl_pictureboximp.cpp b/xfa/src/fwl/basewidget/fwl_pictureboximp.cpp deleted file mode 100644 index d0efaf3d2a..0000000000 --- a/xfa/src/fwl/basewidget/fwl_pictureboximp.cpp +++ /dev/null @@ -1,151 +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/basewidget/fwl_pictureboximp.h" - -#include "xfa/include/fwl/lightwidget/picturebox.h" -#include "xfa/src/fwl/core/fwl_noteimp.h" -#include "xfa/src/fwl/core/fwl_targetimp.h" -#include "xfa/src/fwl/core/fwl_widgetimp.h" - -// static -IFWL_PictureBox* IFWL_PictureBox::Create( - const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) { - IFWL_PictureBox* pPictureBox = new IFWL_PictureBox; - CFWL_PictureBoxImp* pPictureBoxImpl = - new CFWL_PictureBoxImp(properties, pOuter); - pPictureBox->SetImpl(pPictureBoxImpl); - pPictureBoxImpl->SetInterface(pPictureBox); - return pPictureBox; -} -IFWL_PictureBox::IFWL_PictureBox() {} - -CFWL_PictureBoxImp::CFWL_PictureBoxImp( - const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) - : CFWL_WidgetImp(properties, pOuter), - m_bTop(FALSE), - m_bVCenter(FALSE), - m_bButton(FALSE) { - m_rtClient.Reset(); - m_rtImage.Reset(); - m_matrix.SetIdentity(); -} -CFWL_PictureBoxImp::~CFWL_PictureBoxImp() {} -FWL_ERR CFWL_PictureBoxImp::GetClassName(CFX_WideString& wsClass) const { - wsClass = FWL_CLASS_PictureBox; - return FWL_ERR_Succeeded; -} -FX_DWORD CFWL_PictureBoxImp::GetClassID() const { - return FWL_CLASSHASH_PictureBox; -} -FWL_ERR CFWL_PictureBoxImp::Initialize() { - if (CFWL_WidgetImp::Initialize() != FWL_ERR_Succeeded) - return FWL_ERR_Indefinite; - m_pDelegate = new CFWL_PictureBoxImpDelegate(this); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_PictureBoxImp::Finalize() { - delete m_pDelegate; - m_pDelegate = nullptr; - return CFWL_WidgetImp::Finalize(); -} -FWL_ERR CFWL_PictureBoxImp::GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize) { - if (bAutoSize) { - rect.Set(0, 0, 0, 0); - if (!m_pProperties->m_pDataProvider) - return FWL_ERR_Indefinite; - CFX_DIBitmap* pBitmap = - static_cast<IFWL_PictureBoxDP*>(m_pProperties->m_pDataProvider) - ->GetPicture(m_pInterface); - if (pBitmap) { - rect.Set(0, 0, (FX_FLOAT)pBitmap->GetWidth(), - (FX_FLOAT)pBitmap->GetHeight()); - } - CFWL_WidgetImp::GetWidgetRect(rect, TRUE); - } else { - rect = m_pProperties->m_rtWidget; - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_PictureBoxImp::Update() { - if (IsLocked()) { - return FWL_ERR_Succeeded; - } - if (!m_pProperties->m_pThemeProvider) { - m_pProperties->m_pThemeProvider = GetAvailableTheme(); - } - GetClientRect(m_rtClient); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_PictureBoxImp::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 = GetAvailableTheme(); - if (HasBorder()) { - DrawBorder(pGraphics, FWL_PART_PTB_Border, pTheme, pMatrix); - } - if (HasEdge()) { - DrawEdge(pGraphics, FWL_PART_PTB_Edge, pTheme, pMatrix); - } - DrawBkground(pGraphics, pTheme, pMatrix); - return FWL_ERR_Succeeded; -} -void CFWL_PictureBoxImp::DrawBkground(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - IFWL_PictureBoxDP* pPictureDP = - static_cast<IFWL_PictureBoxDP*>(m_pProperties->m_pDataProvider); - if (!pPictureDP) - return; - - CFX_DIBitmap* pPicture = pPictureDP->GetPicture(m_pInterface); - CFX_Matrix matrix; - pPictureDP->GetMatrix(m_pInterface, matrix); - if (!pPicture) - return; - - matrix.Concat(*pMatrix); - FX_FLOAT fx = (FX_FLOAT)pPicture->GetWidth(); - FX_FLOAT fy = (FX_FLOAT)pPicture->GetHeight(); - if (fx > m_rtClient.width) { - fx = m_rtClient.width; - } - if (fy > m_rtClient.height) { - fy = m_rtClient.height; - } - pGraphics->DrawImage(pPicture, CFX_PointF((m_rtClient.width - fx) / 2, - (m_rtClient.height - fy) / 2), - &matrix); -} -FX_BOOL CFWL_PictureBoxImp::VStyle(FX_BOOL dwStyle) { - switch (dwStyle & FWL_STYLEEXT_PTB_VAlignMask) { - case FWL_STYLEEXT_PTB_Top: { - return m_bTop = TRUE; - break; - } - case FWL_STYLEEXT_PTB_Vcenter: { - return m_bVCenter = TRUE; - break; - } - case FWL_STYLEEXT_PTB_Bottom: { - return m_bButton = TRUE; - break; - } - } - return FALSE; -} -CFWL_PictureBoxImpDelegate::CFWL_PictureBoxImpDelegate( - CFWL_PictureBoxImp* pOwner) - : m_pOwner(pOwner) {} -FWL_ERR CFWL_PictureBoxImpDelegate::OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - return m_pOwner->DrawWidget(pGraphics, pMatrix); -} diff --git a/xfa/src/fwl/basewidget/fwl_pictureboximp.h b/xfa/src/fwl/basewidget/fwl_pictureboximp.h deleted file mode 100644 index cfa50afb70..0000000000 --- a/xfa/src/fwl/basewidget/fwl_pictureboximp.h +++ /dev/null @@ -1,53 +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 - -#ifndef XFA_SRC_FWL_BASEWIDGET_FWL_PICTUREBOXIMP_H_ -#define XFA_SRC_FWL_BASEWIDGET_FWL_PICTUREBOXIMP_H_ - -#include "xfa/src/fwl/core/fwl_widgetimp.h" - -class CFWL_WidgetImpProperties; -class IFWL_Widget; -class CFWL_PictureBoxImpDelegate; - -class CFWL_PictureBoxImp : public CFWL_WidgetImp { - public: - CFWL_PictureBoxImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter); - ~CFWL_PictureBoxImp(); - virtual FWL_ERR GetClassName(CFX_WideString& wsClass) const; - virtual FX_DWORD GetClassID() const; - virtual FWL_ERR Initialize(); - virtual FWL_ERR Finalize(); - virtual FWL_ERR GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize = FALSE); - virtual FWL_ERR Update(); - virtual FWL_ERR DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL); - - protected: - void DrawBkground(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix = NULL); - FX_BOOL VStyle(FX_BOOL dwStyle); - CFX_RectF m_rtClient; - CFX_RectF m_rtImage; - CFX_Matrix m_matrix; - FX_BOOL m_bTop; - FX_BOOL m_bVCenter; - FX_BOOL m_bButton; - friend class CFWL_PictureBoxImpDelegate; -}; -class CFWL_PictureBoxImpDelegate : public CFWL_WidgetImpDelegate { - public: - CFWL_PictureBoxImpDelegate(CFWL_PictureBoxImp* pOwner); - FWL_ERR OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL) override; - - protected: - CFWL_PictureBoxImp* m_pOwner; -}; - -#endif // XFA_SRC_FWL_BASEWIDGET_FWL_PICTUREBOXIMP_H_ diff --git a/xfa/src/fwl/basewidget/fwl_pushbuttonimp.cpp b/xfa/src/fwl/basewidget/fwl_pushbuttonimp.cpp deleted file mode 100644 index 4ed0e3bfec..0000000000 --- a/xfa/src/fwl/basewidget/fwl_pushbuttonimp.cpp +++ /dev/null @@ -1,550 +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/basewidget/fwl_pushbuttonimp.h" - -#include "xfa/include/fwl/basewidget/fwl_pushbutton.h" -#include "xfa/src/fde/tto/fde_textout.h" -#include "xfa/src/fwl/core/fwl_noteimp.h" -#include "xfa/src/fwl/core/fwl_targetimp.h" -#include "xfa/src/fwl/core/fwl_widgetimp.h" - -// static -IFWL_PushButton* IFWL_PushButton::Create( - const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) { - IFWL_PushButton* pPushButton = new IFWL_PushButton; - CFWL_PushButtonImp* pPushButtonImpl = - new CFWL_PushButtonImp(properties, pOuter); - pPushButton->SetImpl(pPushButtonImpl); - pPushButtonImpl->SetInterface(pPushButton); - return pPushButton; -} -IFWL_PushButton::IFWL_PushButton() {} - -CFWL_PushButtonImp::CFWL_PushButtonImp( - const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) - : CFWL_WidgetImp(properties, pOuter), - m_bBtnDown(FALSE), - m_dwTTOStyles(FDE_TTOSTYLE_SingleLine), - m_iTTOAlign(FDE_TTOALIGNMENT_Center) { - m_rtClient.Set(0, 0, 0, 0); - m_rtCaption.Set(0, 0, 0, 0); -} -CFWL_PushButtonImp::~CFWL_PushButtonImp() {} -FWL_ERR CFWL_PushButtonImp::GetClassName(CFX_WideString& wsClass) const { - wsClass = FWL_CLASS_PushButton; - return FWL_ERR_Succeeded; -} -FX_DWORD CFWL_PushButtonImp::GetClassID() const { - return FWL_CLASSHASH_PushButton; -} -FWL_ERR CFWL_PushButtonImp::Initialize() { - if (CFWL_WidgetImp::Initialize() != FWL_ERR_Succeeded) - return FWL_ERR_Indefinite; - m_pDelegate = new CFWL_PushButtonImpDelegate(this); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_PushButtonImp::Finalize() { - delete m_pDelegate; - m_pDelegate = nullptr; - return CFWL_WidgetImp::Finalize(); -} -FWL_ERR CFWL_PushButtonImp::GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize) { - if (bAutoSize) { - rect.Set(0, 0, 0, 0); - if (m_pProperties->m_pThemeProvider == NULL) { - m_pProperties->m_pThemeProvider = GetAvailableTheme(); - } - CFX_WideString wsCaption; - IFWL_PushButtonDP* pData = - static_cast<IFWL_PushButtonDP*>(m_pProperties->m_pDataProvider); - if (pData) { - pData->GetCaption(m_pInterface, wsCaption); - } - int32_t iLen = wsCaption.GetLength(); - if (iLen > 0) { - CFX_SizeF sz = CalcTextSize(wsCaption, m_pProperties->m_pThemeProvider); - rect.Set(0, 0, sz.x, sz.y); - } - FX_FLOAT* fcaption = - static_cast<FX_FLOAT*>(GetThemeCapacity(FWL_WGTCAPACITY_PSB_Margin)); - rect.Inflate(*fcaption, *fcaption); - CFWL_WidgetImp::GetWidgetRect(rect, TRUE); - } else { - rect = m_pProperties->m_rtWidget; - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_PushButtonImp::SetStates(FX_DWORD dwStates, FX_BOOL bSet) { - if ((dwStates & FWL_WGTSTATE_Disabled) && bSet) { - m_pProperties->m_dwStates = FWL_WGTSTATE_Disabled; - return FWL_ERR_Succeeded; - } - return CFWL_WidgetImp::SetStates(dwStates, bSet); -} -FWL_ERR CFWL_PushButtonImp::Update() { - if (IsLocked()) { - return FWL_ERR_Indefinite; - } - if (!m_pProperties->m_pThemeProvider) { - m_pProperties->m_pThemeProvider = GetAvailableTheme(); - } - UpdateTextOutStyles(); - GetClientRect(m_rtClient); - m_rtCaption = m_rtClient; - FX_FLOAT* fcaption = - static_cast<FX_FLOAT*>(GetThemeCapacity(FWL_WGTCAPACITY_PSB_Margin)); - m_rtCaption.Inflate(-*fcaption, -*fcaption); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_PushButtonImp::DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - if (!pGraphics) - return FWL_ERR_Indefinite; - if (!m_pProperties->m_pThemeProvider) - return FWL_ERR_Indefinite; - IFWL_PushButtonDP* pData = - static_cast<IFWL_PushButtonDP*>(m_pProperties->m_pDataProvider); - CFX_DIBitmap* pPicture = NULL; - IFWL_ThemeProvider* pTheme = m_pProperties->m_pThemeProvider; - if (HasBorder()) { - DrawBorder(pGraphics, FWL_PART_PSB_Border, m_pProperties->m_pThemeProvider, - pMatrix); - } - if (HasEdge()) { - DrawEdge(pGraphics, FWL_PART_PSB_Edge, m_pProperties->m_pThemeProvider, - pMatrix); - } - DrawBkground(pGraphics, m_pProperties->m_pThemeProvider, pMatrix); - CFX_Matrix matrix; - matrix.Concat(*pMatrix); - FX_FLOAT iPicwidth = 0; - FX_FLOAT ipicheight = 0; - CFX_WideString wsCaption; - if (pData) { - pData->GetCaption(m_pInterface, wsCaption); - } - CFX_RectF rtText; - rtText.Set(0, 0, 0, 0); - if (!wsCaption.IsEmpty()) { - CalcTextRect(wsCaption, pTheme, 0, m_iTTOAlign, rtText); - } - switch (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_PSB_ModeMask) { - case FWL_STYLEEXT_PSB_TextOnly: - DrawText(pGraphics, m_pProperties->m_pThemeProvider, &matrix); - break; - case FWL_STYLEEXT_PSB_IconOnly: - if (pData) { - pPicture = pData->GetPicture(m_pInterface); - } - if (pPicture) { - CFX_PointF point; - switch (m_iTTOAlign) { - case 0: { - point.x = m_rtClient.left; - point.y = m_rtClient.top; - break; - } - case 1: { - point.x = m_rtClient.left + - (m_rtClient.width / 2 - pPicture->GetWidth() / 2); - point.y = m_rtClient.top; - break; - } - case 2: - point.x = m_rtClient.left + m_rtClient.width - pPicture->GetWidth(); - point.y = m_rtClient.top; - break; - case 4: - point.x = m_rtClient.left; - point.y = m_rtClient.top + m_rtClient.height / 2 - - pPicture->GetHeight() / 2; - break; - case 5: - point.x = m_rtClient.left + - (m_rtClient.width / 2 - pPicture->GetWidth() / 2); - point.y = m_rtClient.top + m_rtClient.height / 2 - - pPicture->GetHeight() / 2; - break; - case 6: - point.x = m_rtClient.left + m_rtClient.width - pPicture->GetWidth(); - point.y = m_rtClient.top + m_rtClient.height / 2 - - pPicture->GetHeight() / 2; - break; - case 8: - point.x = m_rtClient.left; - point.y = - m_rtClient.top + m_rtClient.height - pPicture->GetHeight(); - break; - case 9: - point.x = m_rtClient.left + - (m_rtClient.width / 2 - pPicture->GetWidth() / 2); - point.y = - m_rtClient.top + m_rtClient.height - pPicture->GetHeight(); - break; - case 10: - point.x = m_rtClient.left + m_rtClient.width - pPicture->GetWidth(); - point.y = - m_rtClient.top + m_rtClient.height - pPicture->GetHeight(); - break; - } - pGraphics->DrawImage(pPicture, point, &matrix); - } - break; - case FWL_STYLEEXT_PSB_TextIcon: - if (pPicture) { - CFX_PointF point; - switch (m_iTTOAlign) { - case 0: { - point.x = m_rtClient.left; - point.y = m_rtClient.top; - iPicwidth = (FX_FLOAT)(pPicture->GetWidth() - 7); - ipicheight = - pPicture->GetHeight() / 2 - m_rtCaption.top - rtText.height / 2; - break; - } - case 1: { - point.x = - m_rtClient.left + (m_rtClient.width / 2 - - (pPicture->GetWidth() + rtText.width) / 2); - point.y = m_rtClient.top; - iPicwidth = pPicture->GetWidth() - - ((m_rtClient.width) / 2 - rtText.width / 2 - point.x) + - rtText.width / 2 - 7; - ipicheight = - pPicture->GetHeight() / 2 - m_rtCaption.top - rtText.height / 2; - break; - } - case 2: - point.x = m_rtClient.left + m_rtClient.width - - pPicture->GetWidth() - rtText.width; - point.y = m_rtClient.top; - iPicwidth = m_rtClient.left + m_rtClient.width - point.x - - pPicture->GetWidth() - rtText.width + 7; - ipicheight = - pPicture->GetHeight() / 2 - m_rtCaption.top - rtText.height / 2; - break; - case 4: - point.x = m_rtClient.left; - point.y = m_rtClient.top + m_rtClient.height / 2 - - pPicture->GetHeight() / 2; - iPicwidth = m_rtClient.left + pPicture->GetWidth() - 7; - break; - case 5: - point.x = - m_rtClient.left + (m_rtClient.width / 2 - - (pPicture->GetWidth() + rtText.width) / 2); - point.y = m_rtClient.top + m_rtClient.height / 2 - - pPicture->GetHeight() / 2; - iPicwidth = pPicture->GetWidth() - - ((m_rtClient.width) / 2 - rtText.width / 2 - point.x) + - rtText.width / 2 - 7; - break; - case 6: - point.x = m_rtClient.left + m_rtClient.width - - pPicture->GetWidth() - rtText.width; - point.y = m_rtClient.top + m_rtClient.height / 2 - - pPicture->GetHeight() / 2; - iPicwidth = m_rtClient.left + m_rtClient.width - point.x - - pPicture->GetWidth() - rtText.width + 7; - break; - case 8: - point.x = m_rtClient.left; - point.y = - m_rtClient.top + m_rtClient.height - pPicture->GetHeight(); - iPicwidth = (FX_FLOAT)(pPicture->GetWidth() - 7); - ipicheight -= rtText.height / 2; - break; - case 9: - point.x = - m_rtClient.left + (m_rtClient.width / 2 - - (pPicture->GetWidth() + rtText.width) / 2); - point.y = - m_rtClient.top + m_rtClient.height - pPicture->GetHeight(); - iPicwidth = pPicture->GetWidth() - - ((m_rtClient.width) / 2 - rtText.width / 2 - point.x) + - rtText.width / 2 - 7; - ipicheight -= rtText.height / 2; - break; - case 10: - point.x = m_rtClient.left + m_rtClient.width - - pPicture->GetWidth() - rtText.width; - point.y = - m_rtClient.top + m_rtClient.height - pPicture->GetHeight(); - iPicwidth = m_rtClient.left + m_rtClient.width - point.x - - pPicture->GetWidth() - rtText.width + 7; - ipicheight -= rtText.height / 2; - break; - } - pGraphics->DrawImage(pPicture, point, &matrix); - } - matrix.e += m_rtClient.left + iPicwidth; - matrix.f += m_rtClient.top + ipicheight; - DrawText(pGraphics, m_pProperties->m_pThemeProvider, &matrix); - break; - } - return FWL_ERR_Succeeded; -} -void CFWL_PushButtonImp::DrawBkground(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - CFWL_ThemeBackground param; - param.m_pWidget = m_pInterface; - param.m_iPart = FWL_PART_PSB_Background; - param.m_dwStates = GetPartStates(); - param.m_pGraphics = pGraphics; - if (pMatrix) { - param.m_matrix.Concat(*pMatrix); - } - param.m_rtPart = m_rtClient; - if (m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) { - param.m_pData = &m_rtCaption; - } - pTheme->DrawBackground(¶m); -} -void CFWL_PushButtonImp::DrawText(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - if (!m_pProperties->m_pDataProvider) - return; - CFX_WideString wsCaption; - m_pProperties->m_pDataProvider->GetCaption(m_pInterface, wsCaption); - if (wsCaption.IsEmpty()) { - return; - } - CFWL_ThemeText param; - param.m_pWidget = m_pInterface; - param.m_iPart = FWL_PART_PSB_Caption; - param.m_dwStates = GetPartStates(); - param.m_pGraphics = pGraphics; - if (pMatrix) { - param.m_matrix.Concat(*pMatrix); - } - param.m_rtPart = m_rtCaption; - param.m_wsText = wsCaption; - param.m_dwTTOStyles = m_dwTTOStyles; - param.m_iTTOAlign = m_iTTOAlign; - pTheme->DrawText(¶m); -} -FX_DWORD CFWL_PushButtonImp::GetPartStates() { - FX_DWORD dwStates = FWL_PARTSTATE_PSB_Normal; - if (m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) { - dwStates |= FWL_PARTSTATE_PSB_Focused; - } - if (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled) { - dwStates = FWL_PARTSTATE_PSB_Disabled; - } else if (m_pProperties->m_dwStates & FWL_STATE_PSB_Pressed) { - dwStates |= FWL_PARTSTATE_PSB_Pressed; - } else if (m_pProperties->m_dwStates & FWL_STATE_PSB_Hovered) { - dwStates |= FWL_PARTSTATE_PSB_Hovered; - } else if (m_pProperties->m_dwStates & FWL_STATE_PSB_Default) { - dwStates |= FWL_PARTSTATE_PSB_Default; - } - return dwStates; -} -void CFWL_PushButtonImp::UpdateTextOutStyles() { - m_iTTOAlign = FDE_TTOALIGNMENT_Center; - switch (m_pProperties->m_dwStyleExes & - (FWL_STYLEEXT_PSB_HLayoutMask | FWL_STYLEEXT_PSB_VLayoutMask)) { - case FWL_STYLEEXT_PSB_Left | FWL_STYLEEXT_PSB_Top: { - m_iTTOAlign = FDE_TTOALIGNMENT_TopLeft; - break; - } - case FWL_STYLEEXT_PSB_Center | FWL_STYLEEXT_PSB_Top: { - m_iTTOAlign = FDE_TTOALIGNMENT_TopCenter; - break; - } - case FWL_STYLEEXT_PSB_Right | FWL_STYLEEXT_PSB_Top: { - m_iTTOAlign = FDE_TTOALIGNMENT_TopRight; - break; - } - case FWL_STYLEEXT_PSB_Left | FWL_STYLEEXT_PSB_VCenter: { - m_iTTOAlign = FDE_TTOALIGNMENT_CenterLeft; - break; - } - case FWL_STYLEEXT_PSB_Center | FWL_STYLEEXT_PSB_VCenter: { - m_iTTOAlign = FDE_TTOALIGNMENT_Center; - break; - } - case FWL_STYLEEXT_PSB_Right | FWL_STYLEEXT_PSB_VCenter: { - m_iTTOAlign = FDE_TTOALIGNMENT_CenterRight; - break; - } - case FWL_STYLEEXT_PSB_Left | FWL_STYLEEXT_PSB_Bottom: { - m_iTTOAlign = FDE_TTOALIGNMENT_BottomLeft; - break; - } - case FWL_STYLEEXT_PSB_Center | FWL_STYLEEXT_PSB_Bottom: { - m_iTTOAlign = FDE_TTOALIGNMENT_BottomCenter; - break; - } - case FWL_STYLEEXT_PSB_Right | FWL_STYLEEXT_PSB_Bottom: { - m_iTTOAlign = FDE_TTOALIGNMENT_BottomRight; - break; - } - default: {} - } - m_dwTTOStyles = FDE_TTOSTYLE_SingleLine; - if (m_pProperties->m_dwStyleExes & FWL_WGTSTYLE_RTLReading) { - m_dwTTOStyles |= FDE_TTOSTYLE_RTL; - } -} -CFWL_PushButtonImpDelegate::CFWL_PushButtonImpDelegate( - CFWL_PushButtonImp* pOwner) - : m_pOwner(pOwner) {} -int32_t CFWL_PushButtonImpDelegate::OnProcessMessage(CFWL_Message* pMessage) { - if (!pMessage) - return 0; - if (!m_pOwner->IsEnabled()) { - return 1; - } - int32_t iRet = 1; - FX_DWORD dwMsgCode = pMessage->GetClassID(); - switch (dwMsgCode) { - case FWL_MSGHASH_SetFocus: - case FWL_MSGHASH_KillFocus: { - OnFocusChanged(pMessage, dwMsgCode == FWL_MSGHASH_SetFocus); - break; - } - case FWL_MSGHASH_Mouse: { - CFWL_MsgMouse* pMsg = static_cast<CFWL_MsgMouse*>(pMessage); - FX_DWORD dwCmd = pMsg->m_dwCmd; - switch (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_MouseLeave: { - OnMouseLeave(pMsg); - break; - } - default: {} - } - break; - } - case FWL_MSGHASH_Key: { - CFWL_MsgKey* pKey = static_cast<CFWL_MsgKey*>(pMessage); - if (pKey->m_dwCmd == FWL_MSGKEYCMD_KeyDown) { - OnKeyDown(pKey); - } - break; - } - default: { - iRet = 0; - break; - } - } - CFWL_WidgetImpDelegate::OnProcessMessage(pMessage); - return iRet; -} -FWL_ERR CFWL_PushButtonImpDelegate::OnProcessEvent(CFWL_Event* pEvent) { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_PushButtonImpDelegate::OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - return m_pOwner->DrawWidget(pGraphics, pMatrix); -} -void CFWL_PushButtonImpDelegate::OnFocusChanged(CFWL_Message* pMsg, - FX_BOOL bSet) { - if (bSet) { - m_pOwner->m_pProperties->m_dwStates |= FWL_WGTSTATE_Focused; - } else { - m_pOwner->m_pProperties->m_dwStates &= ~FWL_WGTSTATE_Focused; - } - m_pOwner->Repaint(&m_pOwner->m_rtClient); -} -void CFWL_PushButtonImpDelegate::OnLButtonDown(CFWL_MsgMouse* pMsg) { - if ((m_pOwner->m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) == 0) { - m_pOwner->SetFocus(TRUE); - } - m_pOwner->m_bBtnDown = TRUE; - m_pOwner->m_pProperties->m_dwStates |= FWL_STATE_PSB_Hovered; - m_pOwner->m_pProperties->m_dwStates |= FWL_STATE_PSB_Pressed; - m_pOwner->Repaint(&m_pOwner->m_rtClient); -} -void CFWL_PushButtonImpDelegate::OnLButtonUp(CFWL_MsgMouse* pMsg) { - m_pOwner->m_bBtnDown = FALSE; - if (m_pOwner->m_rtClient.Contains(pMsg->m_fx, pMsg->m_fy)) { - m_pOwner->m_pProperties->m_dwStates &= ~FWL_STATE_PSB_Pressed; - m_pOwner->m_pProperties->m_dwStates |= FWL_STATE_PSB_Hovered; - } else { - m_pOwner->m_pProperties->m_dwStates &= ~FWL_STATE_PSB_Hovered; - m_pOwner->m_pProperties->m_dwStates &= ~FWL_STATE_PSB_Pressed; - } - if (m_pOwner->m_rtClient.Contains(pMsg->m_fx, pMsg->m_fy)) { - CFWL_EvtClick wmClick; - wmClick.m_pSrcTarget = m_pOwner->m_pInterface; - m_pOwner->DispatchEvent(&wmClick); - } - m_pOwner->Repaint(&m_pOwner->m_rtClient); -} -void CFWL_PushButtonImpDelegate::OnMouseMove(CFWL_MsgMouse* pMsg) { - FX_BOOL bRepaint = FALSE; - if (m_pOwner->m_bBtnDown) { - if (m_pOwner->m_rtClient.Contains(pMsg->m_fx, pMsg->m_fy)) { - if ((m_pOwner->m_pProperties->m_dwStates & FWL_STATE_PSB_Pressed) == 0) { - m_pOwner->m_pProperties->m_dwStates |= FWL_STATE_PSB_Pressed; - bRepaint = TRUE; - } - if (m_pOwner->m_pProperties->m_dwStates & FWL_STATE_PSB_Hovered) { - m_pOwner->m_pProperties->m_dwStates &= ~FWL_STATE_PSB_Hovered; - bRepaint = TRUE; - } - } else { - if (m_pOwner->m_pProperties->m_dwStates & FWL_STATE_PSB_Pressed) { - m_pOwner->m_pProperties->m_dwStates &= ~FWL_STATE_PSB_Pressed; - bRepaint = TRUE; - } - if ((m_pOwner->m_pProperties->m_dwStates & FWL_STATE_PSB_Hovered) == 0) { - m_pOwner->m_pProperties->m_dwStates |= FWL_STATE_PSB_Hovered; - bRepaint = TRUE; - } - } - } else { - if (!m_pOwner->m_rtClient.Contains(pMsg->m_fx, pMsg->m_fy)) { - return; - } - if ((m_pOwner->m_pProperties->m_dwStates & FWL_STATE_PSB_Hovered) == 0) { - m_pOwner->m_pProperties->m_dwStates |= FWL_STATE_PSB_Hovered; - bRepaint = TRUE; - } - } - if (bRepaint) { - m_pOwner->Repaint(&m_pOwner->m_rtClient); - } -} -void CFWL_PushButtonImpDelegate::OnMouseLeave(CFWL_MsgMouse* pMsg) { - m_pOwner->m_bBtnDown = FALSE; - m_pOwner->m_pProperties->m_dwStates &= ~FWL_STATE_PSB_Hovered; - m_pOwner->m_pProperties->m_dwStates &= ~FWL_STATE_PSB_Pressed; - m_pOwner->Repaint(&m_pOwner->m_rtClient); -} -void CFWL_PushButtonImpDelegate::OnKeyDown(CFWL_MsgKey* pMsg) { - if (pMsg->m_dwKeyCode == FWL_VKEY_Return) { - CFWL_EvtMouse wmMouse; - wmMouse.m_pSrcTarget = m_pOwner->m_pInterface; - wmMouse.m_dwCmd = FWL_MSGMOUSECMD_LButtonUp; - m_pOwner->DispatchEvent(&wmMouse); - CFWL_EvtClick wmClick; - wmClick.m_pSrcTarget = m_pOwner->m_pInterface; - m_pOwner->DispatchEvent(&wmClick); - return; - } - if (pMsg->m_dwKeyCode != FWL_VKEY_Tab) { - return; - } - m_pOwner->DispatchKeyEvent(pMsg); -} diff --git a/xfa/src/fwl/basewidget/fwl_pushbuttonimp.h b/xfa/src/fwl/basewidget/fwl_pushbuttonimp.h deleted file mode 100644 index 5869074ba7..0000000000 --- a/xfa/src/fwl/basewidget/fwl_pushbuttonimp.h +++ /dev/null @@ -1,65 +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 - -#ifndef XFA_SRC_FWL_BASEWIDGET_FWL_PUSHBUTTONIMP_H_ -#define XFA_SRC_FWL_BASEWIDGET_FWL_PUSHBUTTONIMP_H_ - -#include "xfa/src/fwl/core/fwl_widgetimp.h" - -class CFWL_WidgetImpProperties; -class IFWL_Widget; -class CFWL_PushButtonImpDelegate; - -class CFWL_PushButtonImp : public CFWL_WidgetImp { - public: - CFWL_PushButtonImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter); - virtual ~CFWL_PushButtonImp(); - virtual FWL_ERR GetClassName(CFX_WideString& wsClass) const; - virtual FX_DWORD GetClassID() const; - virtual FWL_ERR Initialize(); - virtual FWL_ERR Finalize(); - virtual FWL_ERR GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize = FALSE); - virtual FWL_ERR SetStates(FX_DWORD dwStates, FX_BOOL bSet = TRUE); - virtual FWL_ERR Update(); - virtual FWL_ERR DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL); - - protected: - void DrawBkground(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix); - void DrawText(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix); - FX_DWORD GetPartStates(); - void UpdateTextOutStyles(); - CFX_RectF m_rtClient; - CFX_RectF m_rtCaption; - FX_BOOL m_bBtnDown; - FX_DWORD m_dwTTOStyles; - int32_t m_iTTOAlign; - friend class CFWL_PushButtonImpDelegate; -}; -class CFWL_PushButtonImpDelegate : public CFWL_WidgetImpDelegate { - public: - CFWL_PushButtonImpDelegate(CFWL_PushButtonImp* pOwner); - int32_t OnProcessMessage(CFWL_Message* pMessage) override; - FWL_ERR OnProcessEvent(CFWL_Event* pEvent) override; - FWL_ERR OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL) override; - - protected: - void OnFocusChanged(CFWL_Message* pMsg, FX_BOOL bSet = TRUE); - void OnLButtonDown(CFWL_MsgMouse* pMsg); - void OnLButtonUp(CFWL_MsgMouse* pMsg); - void OnMouseMove(CFWL_MsgMouse* pMsg); - void OnMouseLeave(CFWL_MsgMouse* pMsg); - void OnKeyDown(CFWL_MsgKey* pMsg); - CFWL_PushButtonImp* m_pOwner; -}; - -#endif // XFA_SRC_FWL_BASEWIDGET_FWL_PUSHBUTTONIMP_H_ diff --git a/xfa/src/fwl/basewidget/fwl_scrollbarimp.cpp b/xfa/src/fwl/basewidget/fwl_scrollbarimp.cpp deleted file mode 100644 index c43ebbbc85..0000000000 --- a/xfa/src/fwl/basewidget/fwl_scrollbarimp.cpp +++ /dev/null @@ -1,805 +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/basewidget/fwl_scrollbarimp.h" - -#include "xfa/include/fwl/basewidget/fwl_scrollbar.h" -#include "xfa/include/fwl/core/fwl_theme.h" -#include "xfa/src/fwl/core/fwl_noteimp.h" -#include "xfa/src/fwl/core/fwl_targetimp.h" -#include "xfa/src/fwl/core/fwl_widgetimp.h" - -#define FWL_SCROLLBAR_Elapse 500 -#define FWL_SCROLLBAR_MinThumb 5 - -// static -IFWL_ScrollBar* IFWL_ScrollBar::Create( - const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) { - IFWL_ScrollBar* pScrollBar = new IFWL_ScrollBar; - CFWL_ScrollBarImp* pScrollBarImpl = new CFWL_ScrollBarImp(properties, pOuter); - pScrollBar->SetImpl(pScrollBarImpl); - pScrollBarImpl->SetInterface(pScrollBar); - return pScrollBar; -} -IFWL_ScrollBar::IFWL_ScrollBar() {} -FX_BOOL IFWL_ScrollBar::IsVertical() { - return static_cast<CFWL_ScrollBarImp*>(GetImpl())->IsVertical(); -} -FWL_ERR IFWL_ScrollBar::GetRange(FX_FLOAT& fMin, FX_FLOAT& fMax) { - return static_cast<CFWL_ScrollBarImp*>(GetImpl())->GetRange(fMin, fMax); -} -FWL_ERR IFWL_ScrollBar::SetRange(FX_FLOAT fMin, FX_FLOAT fMax) { - return static_cast<CFWL_ScrollBarImp*>(GetImpl())->SetRange(fMin, fMax); -} -FX_FLOAT IFWL_ScrollBar::GetPageSize() { - return static_cast<CFWL_ScrollBarImp*>(GetImpl())->GetPageSize(); -} -FWL_ERR IFWL_ScrollBar::SetPageSize(FX_FLOAT fPageSize) { - return static_cast<CFWL_ScrollBarImp*>(GetImpl())->SetPageSize(fPageSize); -} -FX_FLOAT IFWL_ScrollBar::GetStepSize() { - return static_cast<CFWL_ScrollBarImp*>(GetImpl())->GetStepSize(); -} -FWL_ERR IFWL_ScrollBar::SetStepSize(FX_FLOAT fStepSize) { - return static_cast<CFWL_ScrollBarImp*>(GetImpl())->SetStepSize(fStepSize); -} -FX_FLOAT IFWL_ScrollBar::GetPos() { - return static_cast<CFWL_ScrollBarImp*>(GetImpl())->GetPos(); -} -FWL_ERR IFWL_ScrollBar::SetPos(FX_FLOAT fPos) { - return static_cast<CFWL_ScrollBarImp*>(GetImpl())->SetPos(fPos); -} -FX_FLOAT IFWL_ScrollBar::GetTrackPos() { - return static_cast<CFWL_ScrollBarImp*>(GetImpl())->GetTrackPos(); -} -FWL_ERR IFWL_ScrollBar::SetTrackPos(FX_FLOAT fTrackPos) { - return static_cast<CFWL_ScrollBarImp*>(GetImpl())->SetTrackPos(fTrackPos); -} -FX_BOOL IFWL_ScrollBar::DoScroll(FX_DWORD dwCode, FX_FLOAT fPos) { - return static_cast<CFWL_ScrollBarImp*>(GetImpl())->DoScroll(dwCode, fPos); -} -CFWL_ScrollBarImp::CFWL_ScrollBarImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) - : CFWL_WidgetImp(properties, pOuter), - m_hTimer(nullptr), - m_fRangeMin(0), - m_fRangeMax(-1), - m_fPageSize(0), - m_fStepSize(0), - m_fPos(0), - m_fTrackPos(0), - m_iMinButtonState(FWL_PARTSTATE_SCB_Normal), - m_iMaxButtonState(FWL_PARTSTATE_SCB_Normal), - m_iThumbButtonState(FWL_PARTSTATE_SCB_Normal), - m_iMinTrackState(FWL_PARTSTATE_SCB_Normal), - m_iMaxTrackState(FWL_PARTSTATE_SCB_Normal), - m_fLastTrackPos(0), - m_cpTrackPointX(0), - m_cpTrackPointY(0), - m_iMouseWheel(0), - m_bTrackMouseLeave(FALSE), - m_bMouseHover(FALSE), - m_bMouseDown(FALSE), - m_bRepaintThumb(FALSE), - m_fButtonLen(0), - m_bMinSize(FALSE), - m_bCustomLayout(FALSE), - m_fMinThumb(FWL_SCROLLBAR_MinThumb) { - m_rtClient.Reset(); - m_rtThumb.Reset(); - m_rtMinBtn.Reset(); - m_rtMaxBtn.Reset(); - m_rtMinTrack.Reset(); - m_rtMaxTrack.Reset(); -} -CFWL_ScrollBarImp::~CFWL_ScrollBarImp() {} -FWL_ERR CFWL_ScrollBarImp::GetClassName(CFX_WideString& wsClass) const { - wsClass = FWL_CLASS_ScrollBar; - return FWL_ERR_Succeeded; -} -FX_DWORD CFWL_ScrollBarImp::GetClassID() const { - return FWL_CLASSHASH_ScrollBar; -} -FWL_ERR CFWL_ScrollBarImp::Initialize() { - if (CFWL_WidgetImp::Initialize() != FWL_ERR_Succeeded) - return FWL_ERR_Indefinite; - m_pDelegate = new CFWL_ScrollBarImpDelegate(this); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ScrollBarImp::Finalize() { - delete m_pDelegate; - m_pDelegate = nullptr; - return CFWL_WidgetImp::Finalize(); -} -FWL_ERR CFWL_ScrollBarImp::GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize) { - if (bAutoSize) { - rect.Set(0, 0, 0, 0); - FX_FLOAT* pfMinWidth = static_cast<FX_FLOAT*>( - GetThemeCapacity(FWL_WGTCAPACITY_ScrollBarWidth)); - if (!pfMinWidth) - return FWL_ERR_Indefinite; - if (IsVertical()) { - rect.Set(0, 0, (*pfMinWidth), (*pfMinWidth) * 3); - } else { - rect.Set(0, 0, (*pfMinWidth) * 3, (*pfMinWidth)); - } - CFWL_WidgetImp::GetWidgetRect(rect, TRUE); - } else { - rect = m_pProperties->m_rtWidget; - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ScrollBarImp::Update() { - if (IsLocked()) { - return FWL_ERR_Indefinite; - } - if (!m_pProperties->m_pThemeProvider) { - m_pProperties->m_pThemeProvider = GetAvailableTheme(); - } - Layout(); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ScrollBarImp::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; - if (HasBorder()) { - DrawBorder(pGraphics, FWL_PART_SCB_Border, pTheme, pMatrix); - } - if (HasEdge()) { - DrawEdge(pGraphics, FWL_PART_SCB_Edge, pTheme, pMatrix); - } - DrawTrack(pGraphics, pTheme, TRUE, pMatrix); - DrawTrack(pGraphics, pTheme, FALSE, pMatrix); - DrawArrowBtn(pGraphics, pTheme, TRUE, pMatrix); - DrawArrowBtn(pGraphics, pTheme, FALSE, pMatrix); - DrawThumb(pGraphics, pTheme, pMatrix); - return FWL_ERR_Succeeded; -} -inline FX_BOOL CFWL_ScrollBarImp::IsVertical() { - return m_pProperties->m_dwStyleExes & FWL_STYLEEXT_SCB_Vert; -} -FWL_ERR CFWL_ScrollBarImp::GetRange(FX_FLOAT& fMin, FX_FLOAT& fMax) { - fMin = m_fRangeMin; - fMax = m_fRangeMax; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ScrollBarImp::SetRange(FX_FLOAT fMin, FX_FLOAT fMax) { - m_fRangeMin = fMin; - m_fRangeMax = fMax; - return FWL_ERR_Succeeded; -} -FX_FLOAT CFWL_ScrollBarImp::GetPageSize() { - return m_fPageSize; -} -FWL_ERR CFWL_ScrollBarImp::SetPageSize(FX_FLOAT fPageSize) { - m_fPageSize = fPageSize; - return FWL_ERR_Succeeded; -} -FX_FLOAT CFWL_ScrollBarImp::GetStepSize() { - return m_fStepSize; -} -FWL_ERR CFWL_ScrollBarImp::SetStepSize(FX_FLOAT fStepSize) { - m_fStepSize = fStepSize; - return FWL_ERR_Succeeded; -} -FX_FLOAT CFWL_ScrollBarImp::GetPos() { - return m_fPos; -} -FWL_ERR CFWL_ScrollBarImp::SetPos(FX_FLOAT fPos) { - m_fPos = fPos; - return FWL_ERR_Succeeded; -} -FX_FLOAT CFWL_ScrollBarImp::GetTrackPos() { - return m_fTrackPos; -} -FWL_ERR CFWL_ScrollBarImp::SetTrackPos(FX_FLOAT fTrackPos) { - m_fTrackPos = fTrackPos; - CalcThumbButtonRect(m_rtThumb); - CalcMinTrackRect(m_rtMinTrack); - CalcMaxTrackRect(m_rtMaxTrack); - return FWL_ERR_Succeeded; -} -FX_BOOL CFWL_ScrollBarImp::DoScroll(FX_DWORD dwCode, FX_FLOAT fPos) { - switch (dwCode) { - case FWL_SCBCODE_Min: - case FWL_SCBCODE_Max: - case FWL_SCBCODE_PageBackward: - case FWL_SCBCODE_PageForward: - case FWL_SCBCODE_StepBackward: - break; - case FWL_SCBCODE_StepForward: - break; - case FWL_SCBCODE_Pos: - case FWL_SCBCODE_TrackPos: - case FWL_SCBCODE_EndScroll: - break; - default: { return FALSE; } - } - return OnScroll(dwCode, fPos); -} -int32_t CFWL_ScrollBarImp::Run(FWL_HTIMER hTimer) { - if (m_hTimer) { - FWL_StopTimer(m_hTimer); - } - if (!SendEvent()) { - m_hTimer = FWL_StartTimer(this, 0); - } - return 1; -} -FWL_ERR CFWL_ScrollBarImp::SetOuter(IFWL_Widget* pOuter) { - m_pOuter = pOuter; - return FWL_ERR_Succeeded; -} -void CFWL_ScrollBarImp::DrawTrack(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - FX_BOOL bLower, - const CFX_Matrix* pMatrix) { - CFWL_ThemeBackground param; - param.m_pWidget = m_pInterface; - param.m_iPart = bLower ? FWL_PART_SCB_LowerTrack : FWL_PART_SCB_UpperTrack; - param.m_dwStates = (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled) - ? FWL_PARTSTATE_SCB_Disabled - : (bLower ? m_iMinTrackState : m_iMaxTrackState); - param.m_pGraphics = pGraphics; - param.m_matrix.Concat(*pMatrix); - param.m_rtPart = bLower ? m_rtMinTrack : m_rtMaxTrack; - pTheme->DrawBackground(¶m); -} -void CFWL_ScrollBarImp::DrawArrowBtn(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - FX_BOOL bMinBtn, - const CFX_Matrix* pMatrix) { - CFWL_ThemeBackground param; - param.m_pWidget = m_pInterface; - param.m_iPart = bMinBtn ? FWL_PART_SCB_ForeArrow : FWL_PART_SCB_BackArrow; - param.m_dwStates = (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled) - ? FWL_PARTSTATE_SCB_Disabled - : (bMinBtn ? m_iMinButtonState : m_iMaxButtonState); - param.m_pGraphics = pGraphics; - param.m_matrix.Concat(*pMatrix); - param.m_rtPart = bMinBtn ? m_rtMinBtn : m_rtMaxBtn; - if (param.m_rtPart.height > 0 && param.m_rtPart.width > 0) { - pTheme->DrawBackground(¶m); - } -} -void CFWL_ScrollBarImp::DrawThumb(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - if (!IsEnabled()) { - } - CFWL_ThemeBackground param; - param.m_pWidget = m_pInterface; - param.m_iPart = FWL_PART_SCB_Thumb; - param.m_dwStates = (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled) - ? FWL_PARTSTATE_SCB_Disabled - : m_iThumbButtonState; - param.m_pGraphics = pGraphics; - param.m_matrix.Concat(*pMatrix); - param.m_rtPart = m_rtThumb; - pTheme->DrawBackground(¶m); -} -void CFWL_ScrollBarImp::Layout() { - IFWL_ThemeProvider* pTheme = m_pProperties->m_pThemeProvider; - CFWL_ThemePart part; - part.m_pWidget = m_pInterface; - m_fMinThumb = *static_cast<FX_FLOAT*>( - pTheme->GetCapacity(&part, FWL_CAPACITY_SCB_Size)); - m_bCustomLayout = pTheme->IsCustomizedLayout(m_pInterface); - GetClientRect(m_rtClient); - CalcButtonLen(); - CalcMinButtonRect(m_rtMinBtn); - CalcMaxButtonRect(m_rtMaxBtn); - CalcThumbButtonRect(m_rtThumb); - CalcMinTrackRect(m_rtMinTrack); - CalcMaxTrackRect(m_rtMaxTrack); -} -void CFWL_ScrollBarImp::CalcButtonLen() { - m_fButtonLen = IsVertical() ? m_rtClient.width : m_rtClient.height; - FX_FLOAT fLength = IsVertical() ? m_rtClient.height : m_rtClient.width; - if (fLength < m_fButtonLen * 2) { - m_fButtonLen = fLength / 2; - m_bMinSize = TRUE; - } else { - m_bMinSize = FALSE; - } -} -void CFWL_ScrollBarImp::CalcMinButtonRect(CFX_RectF& rect) { - if (m_bCustomLayout) { - IFWL_ThemeProvider* pTheme = m_pProperties->m_pThemeProvider; - CFWL_ThemePart pPart; - pPart.m_rtPart = m_rtMinBtn; - pPart.m_pWidget = m_pInterface; - pPart.m_iPart = FWL_PART_SCB_ForeArrow; - pPart.m_dwStates = (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled) - ? FWL_PARTSTATE_SCB_Disabled - : m_iMinButtonState; - pTheme->GetPartRect(&pPart, rect); - } else { - rect.left = m_rtClient.left; - rect.top = m_rtClient.top; - rect.width = IsVertical() ? m_rtClient.width : m_fButtonLen; - rect.height = IsVertical() ? m_fButtonLen : m_rtClient.height; - } -} -void CFWL_ScrollBarImp::CalcMaxButtonRect(CFX_RectF& rect) { - if (m_bCustomLayout) { - IFWL_ThemeProvider* pTheme = m_pProperties->m_pThemeProvider; - CFWL_ThemePart pPart; - pPart.m_rtPart = m_rtMaxBtn; - pPart.m_pWidget = m_pInterface; - pPart.m_iPart = FWL_PART_SCB_BackArrow; - pPart.m_dwStates = (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled) - ? FWL_PARTSTATE_SCB_Disabled - : m_iMaxButtonState; - pTheme->GetPartRect(&pPart, rect); - } else { - rect.left = - IsVertical() ? m_rtClient.left : m_rtClient.right() - m_fButtonLen; - rect.top = - IsVertical() ? m_rtClient.bottom() - m_fButtonLen : m_rtClient.top; - rect.width = IsVertical() ? m_rtClient.width : m_fButtonLen; - rect.height = IsVertical() ? m_fButtonLen : m_rtClient.height; - } -} -void CFWL_ScrollBarImp::CalcThumbButtonRect(CFX_RectF& rect) { - if (!IsEnabled()) { - m_rtThumb.Reset(); - return; - } - if (m_bMinSize) { - m_rtThumb.Empty(); - return; - } - FX_FLOAT fRange = m_fRangeMax - m_fRangeMin; - memset(&rect, 0, sizeof(CFX_Rect)); - if (fRange < 0) { - if (IsVertical()) { - rect.Set(m_rtClient.left, m_rtMaxBtn.bottom(), m_rtClient.width, 0); - } else { - rect.Set(m_rtMaxBtn.right(), m_rtClient.top, 0, m_rtClient.height); - } - return; - } - CFX_RectF rtClient = m_rtClient; - FX_FLOAT fLength = IsVertical() ? rtClient.height : rtClient.width; - FX_FLOAT fSize = m_fButtonLen; - if (m_bCustomLayout) { - if (IsVertical()) { - fLength = fLength - m_rtMinBtn.height - m_rtMaxBtn.height; - if (fLength < m_rtMinBtn.height || fLength < m_rtMaxBtn.height) { - fLength = 0.0f; - } - } else { - fLength = fLength - m_rtMinBtn.width - m_rtMaxBtn.width; - if (fLength < m_rtMinBtn.width || fLength < m_rtMaxBtn.width) { - fLength = 0.0f; - } - } - } else { - fLength -= fSize * 2.0f; - if (fLength < fSize) { - fLength = 0.0f; - } - } - FX_FLOAT fThumbSize = fLength * fLength / (fRange + fLength); - if (fThumbSize < m_fMinThumb) { - fThumbSize = m_fMinThumb; - } - FX_FLOAT fDiff = fLength - fThumbSize; - if (fDiff < 0.0f) { - fDiff = 0.0f; - } - FX_FLOAT fTrackPos = m_fTrackPos; - if (fTrackPos > m_fRangeMax) { - fTrackPos = m_fRangeMax; - } - if (fTrackPos < m_fRangeMin) { - fTrackPos = m_fRangeMin; - } - if (!fRange) - return; - if (m_bCustomLayout) { - FX_FLOAT iPos = fDiff * (fTrackPos - m_fRangeMin) / fRange; - rect.left = rtClient.left; - if (!IsVertical()) { - if ((m_rtMinBtn.right() == m_rtMaxBtn.left && m_rtMinBtn.width > 0 && - m_rtMaxBtn.width > 0) || - (0 == m_rtMinBtn.width && 0 == m_rtMaxBtn.width)) { - rect.left += iPos; - } else { - rect.left += m_rtMinBtn.right() + iPos; - } - } - rect.top = rtClient.top; - if (IsVertical()) { - if ((m_rtMinBtn.bottom() == m_rtMaxBtn.top && m_rtMinBtn.height > 0 && - m_rtMaxBtn.height > 0) || - (0 == m_rtMinBtn.height && 0 == m_rtMaxBtn.height)) { - rect.top += iPos; - } else { - rect.top += m_rtMinBtn.bottom() + iPos; - } - } - rect.width = IsVertical() ? rtClient.width : fThumbSize; - rect.height = IsVertical() ? fThumbSize : rtClient.height; - } else { - FX_FLOAT iPos = fSize + fDiff * (fTrackPos - m_fRangeMin) / fRange; - rect.left = rtClient.left; - if (!IsVertical()) { - rect.left += iPos; - } - rect.top = rtClient.top; - if (IsVertical()) { - rect.top += iPos; - } - rect.width = IsVertical() ? rtClient.width : fThumbSize; - rect.height = IsVertical() ? fThumbSize : rtClient.height; - } -} -void CFWL_ScrollBarImp::CalcMinTrackRect(CFX_RectF& rect) { - if (m_bMinSize) { - rect.Empty(); - return; - } - FX_FLOAT fBottom = m_rtThumb.bottom(); - FX_FLOAT fRight = m_rtThumb.right(); - FX_FLOAT ix = (m_rtThumb.left + fRight) / 2; - FX_FLOAT iy = (m_rtThumb.top + fBottom) / 2; - rect.left = m_rtClient.left; - rect.top = m_rtClient.top; - FX_BOOL bVertical = IsVertical(); - rect.width = bVertical ? m_rtClient.width : ix; - rect.height = bVertical ? iy : m_rtClient.height; - if (m_bCustomLayout) { - if (bVertical) { - if (0 == m_rtMinBtn.height && 0 == m_rtMaxBtn.height) { - rect.top = m_rtClient.top; - } else if (m_rtMinBtn.top < m_rtThumb.top) { - rect.top = m_rtMinBtn.bottom(); - rect.height -= (m_rtMinBtn.bottom() - m_rtClient.top); - } - } else { - if (0 == m_rtMinBtn.width && 0 == m_rtMaxBtn.width) { - rect.left = m_rtClient.left; - } else if (m_rtMinBtn.left < m_rtThumb.left) { - rect.left = m_rtMinBtn.right(); - rect.width -= (m_rtMinBtn.right() - m_rtClient.left); - } - } - } -} -void CFWL_ScrollBarImp::CalcMaxTrackRect(CFX_RectF& rect) { - if (m_bMinSize) { - rect.Empty(); - return; - } - FX_FLOAT ix = (m_rtThumb.left + m_rtThumb.right()) / 2; - FX_FLOAT iy = (m_rtThumb.top + m_rtThumb.bottom()) / 2; - FX_BOOL bVertical = IsVertical(); - rect.left = bVertical ? m_rtClient.left : ix; - rect.top = bVertical ? iy : m_rtClient.top; - rect.width = bVertical ? m_rtClient.width : m_rtClient.right() - ix; - rect.height = bVertical ? m_rtClient.bottom() - iy : m_rtClient.height; - if (m_bCustomLayout) { - if (bVertical) { - if (m_rtMinBtn.top > m_rtThumb.top && m_rtMinBtn.height > 0 && - m_rtMaxBtn.height > 0) { - rect.height -= (m_rtClient.bottom() - m_rtMinBtn.top); - } else if (m_rtMinBtn.height > 0 && m_rtMaxBtn.height > 0) { - rect.height -= (m_rtClient.bottom() - m_rtMaxBtn.top); - } - } else { - if (m_rtMinBtn.left > m_rtThumb.left && m_rtMinBtn.width > 0 && - m_rtMaxBtn.width > 0) { - rect.width -= (m_rtClient.right() - m_rtMinBtn.left); - } else if (m_rtMinBtn.width > 0 && m_rtMaxBtn.width > 0) { - rect.width -= (m_rtClient.right() - m_rtMaxBtn.left); - } - } - } -} -FX_FLOAT CFWL_ScrollBarImp::GetTrackPointPos(FX_FLOAT fx, FX_FLOAT fy) { - FX_FLOAT fDiffX = fx - m_cpTrackPointX; - FX_FLOAT fDiffY = fy - m_cpTrackPointY; - FX_FLOAT fRange = m_fRangeMax - m_fRangeMin; - FX_FLOAT fPos; - if (m_bCustomLayout) { - if (IsVertical()) { - if (0 == m_rtMinBtn.height && 0 == m_rtMaxBtn.height) { - fPos = fRange * fDiffY / (m_rtClient.height - m_rtThumb.height); - } else if (m_rtMinBtn.bottom() == m_rtMaxBtn.top) { - fPos = fRange * fDiffY / - (m_rtMinBtn.top - m_rtClient.top - m_rtThumb.height); - } else { - fPos = fRange * fDiffY / - (m_rtMaxBtn.top - m_rtMinBtn.bottom() - m_rtThumb.height); - } - } else { - if (0 == m_rtMinBtn.width && 0 == m_rtMaxBtn.width) { - fPos = fRange * fDiffX / (m_rtClient.width - m_rtThumb.width); - } else if (m_rtMinBtn.right() == m_rtMaxBtn.left) { - fPos = fRange * fDiffX / - (m_rtMinBtn.left - m_rtClient.left - m_rtThumb.width); - } else { - fPos = fRange * fDiffX / - (m_rtMaxBtn.left - m_rtMinBtn.right() - m_rtThumb.width); - } - } - } else { - if (IsVertical()) { - fPos = fRange * fDiffY / - (m_rtMaxBtn.top - m_rtMinBtn.bottom() - m_rtThumb.height); - } else { - fPos = fRange * fDiffX / - (m_rtMaxBtn.left - m_rtMinBtn.right() - m_rtThumb.width); - } - } - fPos += m_fLastTrackPos; - if (fPos < m_fRangeMin) { - fPos = m_fRangeMin; - } - if (fPos > m_fRangeMax) { - fPos = m_fRangeMax; - } - return fPos; -} -void CFWL_ScrollBarImp::GetTrackRect(CFX_RectF& rect, FX_BOOL bLower) { - FX_BOOL bDisabled = m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled; - if (bDisabled || m_bCustomLayout) { - rect = bLower ? m_rtMinTrack : m_rtMaxTrack; - } else { - FX_FLOAT fW = m_rtThumb.width / 2; - FX_FLOAT fH = m_rtThumb.height / 2; - FX_BOOL bVert = IsVertical(); - if (bLower) { - if (bVert) { - FX_FLOAT fMinTrackHeight = m_rtMinTrack.height - fH - m_rtMinBtn.height; - fMinTrackHeight = (fMinTrackHeight >= 0.0f) ? fMinTrackHeight : 0.0f; - rect.Set(m_rtMinTrack.left, m_rtMinTrack.top + m_rtMinBtn.height, - m_rtMinTrack.width, fMinTrackHeight); - } else { - FX_FLOAT fMinTrackWidth = - m_rtMinTrack.width - fW - m_rtMinBtn.width + 2; - fMinTrackWidth = (fMinTrackWidth >= 0.0f) ? fMinTrackWidth : 0.0f; - rect.Set(m_rtMinTrack.left + m_rtMinBtn.width - 1, m_rtMinTrack.top, - fMinTrackWidth, m_rtMinTrack.height); - } - } else { - if (bVert) { - FX_FLOAT fMaxTrackHeight = m_rtMaxTrack.height - fH - m_rtMaxBtn.height; - fMaxTrackHeight = (fMaxTrackHeight >= 0.0f) ? fMaxTrackHeight : 0.0f; - rect.Set(m_rtMaxTrack.left, m_rtMaxTrack.top + fH, m_rtMaxTrack.width, - fMaxTrackHeight); - } else { - FX_FLOAT fMaxTrackWidth = - m_rtMaxTrack.width - fW - m_rtMaxBtn.width + 2; - fMaxTrackWidth = (fMaxTrackWidth >= 0.0f) ? fMaxTrackWidth : 0.0f; - rect.Set(m_rtMaxTrack.left + fW, m_rtMaxTrack.top, fMaxTrackWidth, - m_rtMaxTrack.height); - } - } - } -} -FX_BOOL CFWL_ScrollBarImp::SendEvent() { - if (m_iMinButtonState == FWL_PARTSTATE_SCB_Pressed) { - DoScroll(FWL_SCBCODE_StepBackward, m_fTrackPos); - return FALSE; - } - if (m_iMaxButtonState == FWL_PARTSTATE_SCB_Pressed) { - DoScroll(FWL_SCBCODE_StepForward, m_fTrackPos); - return FALSE; - } - if (m_iMinTrackState == FWL_PARTSTATE_SCB_Pressed) { - DoScroll(FWL_SCBCODE_PageBackward, m_fTrackPos); - return m_rtThumb.Contains(m_cpTrackPointX, m_cpTrackPointY); - } - if (m_iMaxTrackState == FWL_PARTSTATE_SCB_Pressed) { - DoScroll(FWL_SCBCODE_PageForward, m_fTrackPos); - return m_rtThumb.Contains(m_cpTrackPointX, m_cpTrackPointY); - } - if (m_iMouseWheel) { - FX_WORD dwCode = - m_iMouseWheel < 0 ? FWL_SCBCODE_StepForward : FWL_SCBCODE_StepBackward; - DoScroll(dwCode, m_fTrackPos); - } - return TRUE; -} -FX_BOOL CFWL_ScrollBarImp::OnScroll(FX_DWORD dwCode, FX_FLOAT fPos) { - FX_BOOL bRet = TRUE; - CFWL_EvtScroll ev; - ev.m_iScrollCode = dwCode; - ev.m_pSrcTarget = m_pInterface; - ev.m_fPos = fPos; - ev.m_pRet = &bRet; - DispatchEvent(&ev); - return bRet; -} -CFWL_ScrollBarImpDelegate::CFWL_ScrollBarImpDelegate(CFWL_ScrollBarImp* pOwner) - : m_pOwner(pOwner) {} -int32_t CFWL_ScrollBarImpDelegate::OnProcessMessage(CFWL_Message* pMessage) { - if (!pMessage) - return 0; - int32_t iRet = 1; - FX_DWORD dwMsgCode = pMessage->GetClassID(); - if (dwMsgCode == FWL_MSGHASH_Mouse) { - CFWL_MsgMouse* pMsg = static_cast<CFWL_MsgMouse*>(pMessage); - FX_DWORD dwCmd = pMsg->m_dwCmd; - switch (dwCmd) { - case FWL_MSGMOUSECMD_LButtonDown: { - OnLButtonDown(pMsg->m_dwFlags, pMsg->m_fx, pMsg->m_fy); - break; - } - case FWL_MSGMOUSECMD_LButtonUp: { - OnLButtonUp(pMsg->m_dwFlags, pMsg->m_fx, pMsg->m_fy); - break; - } - case FWL_MSGMOUSECMD_MouseMove: { - OnMouseMove(pMsg->m_dwFlags, pMsg->m_fx, pMsg->m_fy); - break; - } - case FWL_MSGMOUSECMD_MouseLeave: { - OnMouseLeave(); - break; - } - default: { iRet = 0; } - } - } else if (dwMsgCode == FWL_MSGHASH_MouseWheel) { - CFWL_MsgMouseWheel* pMsg = static_cast<CFWL_MsgMouseWheel*>(pMessage); - OnMouseWheel(pMsg->m_fx, pMsg->m_fy, pMsg->m_dwFlags, pMsg->m_fDeltaX, - pMsg->m_fDeltaY); - } else { - iRet = 0; - } - return iRet; -} -FWL_ERR CFWL_ScrollBarImpDelegate::OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - return m_pOwner->DrawWidget(pGraphics, pMatrix); -} -void CFWL_ScrollBarImpDelegate::OnLButtonDown(FX_DWORD dwFlags, - FX_FLOAT fx, - FX_FLOAT fy) { - if (!m_pOwner->IsEnabled()) { - return; - } - m_pOwner->m_bMouseDown = TRUE; - m_pOwner->SetGrab(TRUE); - m_pOwner->m_cpTrackPointX = fx; - m_pOwner->m_cpTrackPointY = fy; - m_pOwner->m_fLastTrackPos = m_pOwner->m_fTrackPos; - if (m_pOwner->m_rtMinBtn.Contains(fx, fy)) { - DoMouseDown(0, m_pOwner->m_rtMinBtn, m_pOwner->m_iMinButtonState, fx, fy); - } else { - if (m_pOwner->m_rtThumb.Contains(fx, fy)) { - DoMouseDown(1, m_pOwner->m_rtThumb, m_pOwner->m_iThumbButtonState, fx, - fy); - } else { - if (m_pOwner->m_rtMaxBtn.Contains(fx, fy)) { - DoMouseDown(2, m_pOwner->m_rtMaxBtn, m_pOwner->m_iMaxButtonState, fx, - fy); - } else { - if (m_pOwner->m_rtMinTrack.Contains(fx, fy)) { - DoMouseDown(3, m_pOwner->m_rtMinTrack, m_pOwner->m_iMinTrackState, fx, - fy); - } else { - DoMouseDown(4, m_pOwner->m_rtMaxTrack, m_pOwner->m_iMaxTrackState, fx, - fy); - } - } - } - } - if (!m_pOwner->SendEvent()) { - m_pOwner->m_hTimer = FWL_StartTimer(m_pOwner, FWL_SCROLLBAR_Elapse); - } -} -void CFWL_ScrollBarImpDelegate::OnLButtonUp(FX_DWORD dwFlags, - FX_FLOAT fx, - FX_FLOAT fy) { - FWL_StopTimer(m_pOwner->m_hTimer); - m_pOwner->m_bMouseDown = FALSE; - DoMouseUp(0, m_pOwner->m_rtMinBtn, m_pOwner->m_iMinButtonState, fx, fy); - DoMouseUp(1, m_pOwner->m_rtThumb, m_pOwner->m_iThumbButtonState, fx, fy); - DoMouseUp(2, m_pOwner->m_rtMaxBtn, m_pOwner->m_iMaxButtonState, fx, fy); - DoMouseUp(3, m_pOwner->m_rtMinTrack, m_pOwner->m_iMinTrackState, fx, fy); - DoMouseUp(4, m_pOwner->m_rtMaxTrack, m_pOwner->m_iMaxTrackState, fx, fy); - m_pOwner->SetGrab(FALSE); -} -void CFWL_ScrollBarImpDelegate::OnMouseMove(FX_DWORD dwFlags, - FX_FLOAT fx, - FX_FLOAT fy) { - DoMouseMove(0, m_pOwner->m_rtMinBtn, m_pOwner->m_iMinButtonState, fx, fy); - DoMouseMove(1, m_pOwner->m_rtThumb, m_pOwner->m_iThumbButtonState, fx, fy); - DoMouseMove(2, m_pOwner->m_rtMaxBtn, m_pOwner->m_iMaxButtonState, fx, fy); - DoMouseMove(3, m_pOwner->m_rtMinTrack, m_pOwner->m_iMinTrackState, fx, fy); - DoMouseMove(4, m_pOwner->m_rtMaxTrack, m_pOwner->m_iMaxTrackState, fx, fy); -} -void CFWL_ScrollBarImpDelegate::OnMouseLeave() { - DoMouseLeave(0, m_pOwner->m_rtMinBtn, m_pOwner->m_iMinButtonState); - DoMouseLeave(1, m_pOwner->m_rtThumb, m_pOwner->m_iThumbButtonState); - DoMouseLeave(2, m_pOwner->m_rtMaxBtn, m_pOwner->m_iMaxButtonState); - DoMouseLeave(3, m_pOwner->m_rtMinTrack, m_pOwner->m_iMinTrackState); - DoMouseLeave(4, m_pOwner->m_rtMaxTrack, m_pOwner->m_iMaxTrackState); -} -void CFWL_ScrollBarImpDelegate::OnMouseWheel(FX_FLOAT fx, - FX_FLOAT fy, - FX_DWORD dwFlags, - FX_FLOAT fDeltaX, - FX_FLOAT fDeltaY) { - m_pOwner->m_iMouseWheel = (int32_t)fDeltaX; - m_pOwner->SendEvent(); - m_pOwner->m_iMouseWheel = 0; -} -void CFWL_ScrollBarImpDelegate::DoMouseDown(int32_t iItem, - const CFX_RectF& rtItem, - int32_t& iState, - FX_FLOAT fx, - FX_FLOAT fy) { - if (!rtItem.Contains(fx, fy)) { - return; - } - if (iState == FWL_PARTSTATE_SCB_Pressed) { - return; - } - iState = FWL_PARTSTATE_SCB_Pressed; - m_pOwner->Repaint(&rtItem); -} -void CFWL_ScrollBarImpDelegate::DoMouseUp(int32_t iItem, - const CFX_RectF& rtItem, - int32_t& iState, - FX_FLOAT fx, - FX_FLOAT fy) { - int32_t iNewState = rtItem.Contains(fx, fy) ? FWL_PARTSTATE_SCB_Hovered - : FWL_PARTSTATE_SCB_Normal; - if (iState == iNewState) { - return; - } - iState = iNewState; - m_pOwner->Repaint(&rtItem); - m_pOwner->OnScroll(FWL_SCBCODE_EndScroll, m_pOwner->m_fTrackPos); -} -void CFWL_ScrollBarImpDelegate::DoMouseMove(int32_t iItem, - const CFX_RectF& rtItem, - int32_t& iState, - FX_FLOAT fx, - FX_FLOAT fy) { - if (!m_pOwner->m_bMouseDown) { - int32_t iNewState = rtItem.Contains(fx, fy) ? FWL_PARTSTATE_SCB_Hovered - : FWL_PARTSTATE_SCB_Normal; - if (iState == iNewState) { - return; - } - iState = iNewState; - m_pOwner->Repaint(&rtItem); - } else if ((2 == iItem) && - (m_pOwner->m_iThumbButtonState == FWL_PARTSTATE_SCB_Pressed)) { - FX_FLOAT fPos = m_pOwner->GetTrackPointPos(fx, fy); - m_pOwner->m_fTrackPos = fPos; - m_pOwner->OnScroll(FWL_SCBCODE_TrackPos, fPos); - } -} -void CFWL_ScrollBarImpDelegate::DoMouseLeave(int32_t iItem, - const CFX_RectF& rtItem, - int32_t& iState) { - if (iState == FWL_PARTSTATE_SCB_Normal) { - return; - } - iState = FWL_PARTSTATE_SCB_Normal; - m_pOwner->Repaint(&rtItem); -} -void CFWL_ScrollBarImpDelegate::DoMouseHover(int32_t iItem, - const CFX_RectF& rtItem, - int32_t& iState) { - if (iState == FWL_PARTSTATE_SCB_Hovered) { - return; - } - iState = FWL_PARTSTATE_SCB_Hovered; - m_pOwner->Repaint(&rtItem); -} diff --git a/xfa/src/fwl/basewidget/fwl_scrollbarimp.h b/xfa/src/fwl/basewidget/fwl_scrollbarimp.h deleted file mode 100644 index be1f25470e..0000000000 --- a/xfa/src/fwl/basewidget/fwl_scrollbarimp.h +++ /dev/null @@ -1,139 +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 - -#ifndef XFA_SRC_FWL_BASEWIDGET_FWL_SCROLLBARIMP_H_ -#define XFA_SRC_FWL_BASEWIDGET_FWL_SCROLLBARIMP_H_ - -#include "xfa/include/fwl/core/fwl_timer.h" -#include "xfa/src/fwl/core/fwl_widgetimp.h" - -class CFWL_WidgetImpProperties; -class IFWL_Widget; -class CFWL_ScrollBarImpDelegate; - -class CFWL_ScrollBarImp : public CFWL_WidgetImp, public IFWL_Timer { - public: - CFWL_ScrollBarImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter); - ~CFWL_ScrollBarImp(); - virtual FWL_ERR GetClassName(CFX_WideString& wsClass) const; - virtual FX_DWORD GetClassID() const; - virtual FWL_ERR Initialize(); - virtual FWL_ERR Finalize(); - virtual FWL_ERR GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize = FALSE); - virtual FWL_ERR Update(); - virtual FWL_ERR DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL); - virtual FX_BOOL IsVertical(); - virtual FWL_ERR GetRange(FX_FLOAT& fMin, FX_FLOAT& fMax); - virtual FWL_ERR SetRange(FX_FLOAT fMin, FX_FLOAT fMax); - virtual FX_FLOAT GetPageSize(); - virtual FWL_ERR SetPageSize(FX_FLOAT fPageSize); - virtual FX_FLOAT GetStepSize(); - virtual FWL_ERR SetStepSize(FX_FLOAT fStepSize); - virtual FX_FLOAT GetPos(); - virtual FWL_ERR SetPos(FX_FLOAT fPos); - virtual FX_FLOAT GetTrackPos(); - virtual FWL_ERR SetTrackPos(FX_FLOAT fTrackPos); - virtual FX_BOOL DoScroll(FX_DWORD dwCode, FX_FLOAT fPos = 0.0f); - virtual FWL_ERR SetOuter(IFWL_Widget* pOuter); - virtual int32_t Run(FWL_HTIMER hTimer); - - protected: - void DrawTrack(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - FX_BOOL bLower = TRUE, - const CFX_Matrix* pMatrix = NULL); - void DrawArrowBtn(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - FX_BOOL bMinBtn = TRUE, - const CFX_Matrix* pMatrix = NULL); - void DrawThumb(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix = NULL); - void Layout(); - void CalcButtonLen(); - void CalcMinButtonRect(CFX_RectF& rect); - void CalcMaxButtonRect(CFX_RectF& rect); - void CalcThumbButtonRect(CFX_RectF& rect); - void CalcMinTrackRect(CFX_RectF& rect); - void CalcMaxTrackRect(CFX_RectF& rect); - FX_FLOAT GetTrackPointPos(FX_FLOAT fx, FX_FLOAT fy); - void GetTrackRect(CFX_RectF& rect, FX_BOOL bLower = TRUE); - FX_BOOL SendEvent(); - FX_BOOL OnScroll(FX_DWORD dwCode, FX_FLOAT fPos); - - FWL_HTIMER m_hTimer; - FX_FLOAT m_fRangeMin; - FX_FLOAT m_fRangeMax; - FX_FLOAT m_fPageSize; - FX_FLOAT m_fStepSize; - FX_FLOAT m_fPos; - FX_FLOAT m_fTrackPos; - int32_t m_iMinButtonState; - int32_t m_iMaxButtonState; - int32_t m_iThumbButtonState; - int32_t m_iMinTrackState; - int32_t m_iMaxTrackState; - FX_FLOAT m_fLastTrackPos; - FX_FLOAT m_cpTrackPointX; - FX_FLOAT m_cpTrackPointY; - int32_t m_iMouseWheel; - FX_BOOL m_bTrackMouseLeave; - FX_BOOL m_bMouseHover; - FX_BOOL m_bMouseDown; - FX_BOOL m_bRepaintThumb; - FX_FLOAT m_fButtonLen; - FX_BOOL m_bMinSize; - CFX_RectF m_rtClient; - CFX_RectF m_rtThumb; - CFX_RectF m_rtMinBtn; - CFX_RectF m_rtMaxBtn; - CFX_RectF m_rtMinTrack; - CFX_RectF m_rtMaxTrack; - FX_BOOL m_bCustomLayout; - FX_FLOAT m_fMinThumb; - friend class CFWL_ScrollBarImpDelegate; -}; -class CFWL_ScrollBarImpDelegate : public CFWL_WidgetImpDelegate { - public: - CFWL_ScrollBarImpDelegate(CFWL_ScrollBarImp* pOwner); - int32_t OnProcessMessage(CFWL_Message* pMessage) override; - FWL_ERR OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL) override; - - protected: - void OnLButtonDown(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy); - void OnLButtonUp(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy); - void OnMouseMove(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy); - void OnMouseLeave(); - void OnMouseWheel(FX_FLOAT fx, - FX_FLOAT fy, - FX_DWORD dwFlags, - FX_FLOAT fDeltaX, - FX_FLOAT fDeltaY); - void DoMouseDown(int32_t iItem, - const CFX_RectF& rtItem, - int32_t& iState, - FX_FLOAT fx, - FX_FLOAT fy); - void DoMouseUp(int32_t iItem, - const CFX_RectF& rtItem, - int32_t& iState, - FX_FLOAT fx, - FX_FLOAT fy); - void DoMouseMove(int32_t iItem, - const CFX_RectF& rtItem, - int32_t& iState, - FX_FLOAT fx, - FX_FLOAT fy); - void DoMouseLeave(int32_t iItem, const CFX_RectF& rtItem, int32_t& iState); - void DoMouseHover(int32_t iItem, const CFX_RectF& rtItem, int32_t& iState); - - CFWL_ScrollBarImp* m_pOwner; -}; - -#endif // XFA_SRC_FWL_BASEWIDGET_FWL_SCROLLBARIMP_H_ diff --git a/xfa/src/fwl/basewidget/fwl_spinbuttonimp.cpp b/xfa/src/fwl/basewidget/fwl_spinbuttonimp.cpp deleted file mode 100644 index fd7c226102..0000000000 --- a/xfa/src/fwl/basewidget/fwl_spinbuttonimp.cpp +++ /dev/null @@ -1,429 +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/basewidget/fwl_spinbuttonimp.h" - -#include "xfa/include/fwl/basewidget/fwl_spinbutton.h" -#include "xfa/include/fwl/core/fwl_theme.h" -#include "xfa/include/fwl/core/fwl_timer.h" -#include "xfa/src/fwl/core/fwl_noteimp.h" -#include "xfa/src/fwl/core/fwl_targetimp.h" -#include "xfa/src/fwl/core/fwl_widgetimp.h" - -#define FWL_SPN_MinWidth 18 -#define FWL_SPN_MinHeight 32 -#define FWL_SPIN_Elapse 200 - -// static -IFWL_SpinButton* IFWL_SpinButton::Create( - const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) { - IFWL_SpinButton* pSpinButton = new IFWL_SpinButton; - CFWL_SpinButtonImp* pSpinButtonImpl = - new CFWL_SpinButtonImp(properties, nullptr); - pSpinButton->SetImpl(pSpinButtonImpl); - pSpinButtonImpl->SetInterface(pSpinButton); - return pSpinButton; -} -IFWL_SpinButton::IFWL_SpinButton() {} -FWL_ERR IFWL_SpinButton::EnableButton(FX_BOOL bEnable, FX_BOOL bUp) { - return static_cast<CFWL_SpinButtonImp*>(GetImpl()) - ->EnableButton(bEnable, bUp); -} -FX_BOOL IFWL_SpinButton::IsButtonEnable(FX_BOOL bUp) { - return static_cast<CFWL_SpinButtonImp*>(GetImpl())->IsButtonEnable(bUp); -} - -CFWL_SpinButtonImp::CFWL_SpinButtonImp( - const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) - : CFWL_WidgetImp(properties, pOuter), - m_dwUpState(FWL_PARTSTATE_SPB_Normal), - m_dwDnState(FWL_PARTSTATE_SPB_Normal), - m_iButtonIndex(0), - m_bLButtonDwn(FALSE), - m_hTimer(NULL) { - m_rtClient.Reset(); - m_rtUpButton.Reset(); - m_rtDnButton.Reset(); - m_pProperties->m_dwStyleExes |= FWL_STYLEEXE_SPB_Vert; -} -CFWL_SpinButtonImp::~CFWL_SpinButtonImp() {} -FWL_ERR CFWL_SpinButtonImp::GetClassName(CFX_WideString& wsClass) const { - wsClass = FWL_CLASS_SpinButton; - return FWL_ERR_Succeeded; -} -FX_DWORD CFWL_SpinButtonImp::GetClassID() const { - return FWL_CLASSHASH_SpinButton; -} -FWL_ERR CFWL_SpinButtonImp::Initialize() { - if (CFWL_WidgetImp::Initialize() != FWL_ERR_Succeeded) - return FWL_ERR_Indefinite; - m_pDelegate = new CFWL_SpinButtonImpDelegate(this); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_SpinButtonImp::Finalize() { - delete m_pDelegate; - m_pDelegate = nullptr; - return CFWL_WidgetImp::Finalize(); -} -FWL_ERR CFWL_SpinButtonImp::GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize) { - if (bAutoSize) { - rect.Set(0, 0, FWL_SPN_MinWidth, FWL_SPN_MinHeight); - CFWL_WidgetImp::GetWidgetRect(rect, TRUE); - } else { - rect = m_pProperties->m_rtWidget; - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_SpinButtonImp::Update() { - if (IsLocked()) { - return FWL_ERR_Indefinite; - } - GetClientRect(m_rtClient); - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXE_SPB_Vert) { - m_rtUpButton.Set(m_rtClient.top, m_rtClient.left, m_rtClient.width, - m_rtClient.height / 2); - m_rtDnButton.Set(m_rtClient.left, m_rtClient.top + m_rtClient.height / 2, - m_rtClient.width, m_rtClient.height / 2); - } else { - m_rtUpButton.Set(m_rtClient.left, m_rtClient.top, m_rtClient.width / 2, - m_rtClient.height); - m_rtDnButton.Set(m_rtClient.left + m_rtClient.width / 2, m_rtClient.top, - m_rtClient.width / 2, m_rtClient.height); - } - return FWL_ERR_Succeeded; -} -FX_DWORD CFWL_SpinButtonImp::HitTest(FX_FLOAT fx, FX_FLOAT fy) { - if (m_rtClient.Contains(fx, fy)) { - return FWL_WGTHITTEST_Client; - } - if (HasBorder() && (m_rtClient.Contains(fx, fy))) { - return FWL_WGTHITTEST_Border; - } - if (HasEdge()) { - CFX_RectF rtEdge; - GetEdgeRect(rtEdge); - if (rtEdge.Contains(fx, fy)) { - return FWL_PART_SPB_Edge; - } - } - if (m_rtUpButton.Contains(fx, fy)) { - return FWL_WGTHITTEST_SPB_UpButton; - } - if (m_rtDnButton.Contains(fx, fy)) { - return FWL_WGTHITTEST_SPB_DownButton; - } - return FWL_WGTHITTEST_Unknown; -} -FWL_ERR CFWL_SpinButtonImp::DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - if (!pGraphics) - return FWL_ERR_Indefinite; - CFX_RectF rtClip(m_rtClient); - if (pMatrix != NULL) { - pMatrix->TransformRect(rtClip); - } - IFWL_ThemeProvider* pTheme = GetAvailableTheme(); - if (HasBorder()) { - DrawBorder(pGraphics, FWL_PART_SPB_Border, pTheme, pMatrix); - } - if (HasEdge()) { - DrawEdge(pGraphics, FWL_PART_SPB_Edge, pTheme, pMatrix); - } - DrawUpButton(pGraphics, pTheme, pMatrix); - DrawDownButton(pGraphics, pTheme, pMatrix); - return FWL_ERR_Succeeded; -} -int32_t CFWL_SpinButtonImp::Run(FWL_HTIMER hTimer) { - if (m_hTimer) { - CFWL_EvtSpbClick wmPosChanged; - wmPosChanged.m_pSrcTarget = m_pInterface; - wmPosChanged.m_bUp = m_iButtonIndex == 0; - DispatchEvent(&wmPosChanged); - } - return 1; -} -FWL_ERR CFWL_SpinButtonImp::EnableButton(FX_BOOL bEnable, FX_BOOL bUp) { - if (bUp) { - if (bEnable) { - m_dwUpState = FWL_PARTSTATE_SPB_Normal; - } else { - m_dwUpState = FWL_PARTSTATE_SPB_Disabled; - } - } else { - if (bEnable) { - m_dwDnState = FWL_PARTSTATE_SPB_Normal; - } else { - m_dwDnState = FWL_PARTSTATE_SPB_Disabled; - } - } - return FWL_ERR_Succeeded; -} -FX_BOOL CFWL_SpinButtonImp::IsButtonEnable(FX_BOOL bUp) { - if (bUp) { - return (m_dwUpState != FWL_PARTSTATE_SPB_Disabled); - } - return (m_dwDnState != FWL_PARTSTATE_SPB_Disabled); -} -void CFWL_SpinButtonImp::DrawUpButton(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - CFWL_ThemeBackground params; - params.m_pWidget = m_pInterface; - params.m_iPart = FWL_PART_SPB_UpButton; - params.m_pGraphics = pGraphics; - params.m_dwStates = m_dwUpState + 1; - if (pMatrix) { - params.m_matrix.Concat(*pMatrix); - } - params.m_rtPart = m_rtUpButton; - pTheme->DrawBackground(¶ms); -} -void CFWL_SpinButtonImp::DrawDownButton(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - CFWL_ThemeBackground params; - params.m_pWidget = m_pInterface; - params.m_iPart = FWL_PART_SPB_DownButton; - params.m_pGraphics = pGraphics; - params.m_dwStates = m_dwDnState + 1; - if (pMatrix) { - params.m_matrix.Concat(*pMatrix); - } - params.m_rtPart = m_rtDnButton; - pTheme->DrawBackground(¶ms); -} -CFWL_SpinButtonImpDelegate::CFWL_SpinButtonImpDelegate( - CFWL_SpinButtonImp* pOwner) - : m_pOwner(pOwner) {} -int32_t CFWL_SpinButtonImpDelegate::OnProcessMessage(CFWL_Message* pMessage) { - if (!pMessage) - return 0; - int32_t iRet = 1; - FX_DWORD dwMsgCode = pMessage->GetClassID(); - switch (dwMsgCode) { - case FWL_MSGHASH_SetFocus: - case FWL_MSGHASH_KillFocus: { - OnFocusChanged(pMessage, dwMsgCode == FWL_MSGHASH_SetFocus); - break; - } - case FWL_MSGHASH_Mouse: { - CFWL_MsgMouse* pMsg = static_cast<CFWL_MsgMouse*>(pMessage); - FX_DWORD dwCmd = pMsg->m_dwCmd; - switch (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_MouseLeave: { - OnMouseLeave(pMsg); - break; - } - default: {} - } - break; - } - case FWL_MSGHASH_Key: { - CFWL_MsgKey* pKey = static_cast<CFWL_MsgKey*>(pMessage); - if (pKey->m_dwCmd == FWL_MSGKEYCMD_KeyDown) { - OnKeyDown(pKey); - } - break; - } - default: { - iRet = 0; - break; - } - } - CFWL_WidgetImpDelegate::OnProcessMessage(pMessage); - return iRet; -} -FWL_ERR CFWL_SpinButtonImpDelegate::OnProcessEvent(CFWL_Event* pEvent) { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_SpinButtonImpDelegate::OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - return m_pOwner->DrawWidget(pGraphics, pMatrix); -} -void CFWL_SpinButtonImpDelegate::OnFocusChanged(CFWL_Message* pMsg, - FX_BOOL bSet) { - if (bSet) { - m_pOwner->m_pProperties->m_dwStates |= (FWL_WGTSTATE_Focused); - } else { - m_pOwner->m_pProperties->m_dwStates &= ~(FWL_WGTSTATE_Focused); - } - m_pOwner->Repaint(&m_pOwner->m_rtClient); -} -void CFWL_SpinButtonImpDelegate::OnLButtonDown(CFWL_MsgMouse* pMsg) { - m_pOwner->m_bLButtonDwn = TRUE; - m_pOwner->SetGrab(TRUE); - m_pOwner->SetFocus(TRUE); - if (!m_pOwner->m_pProperties->m_pDataProvider) - return; - FX_BOOL bUpPress = (m_pOwner->m_rtUpButton.Contains(pMsg->m_fx, pMsg->m_fy) && - m_pOwner->IsButtonEnable(TRUE)); - FX_BOOL bDnPress = (m_pOwner->m_rtDnButton.Contains(pMsg->m_fx, pMsg->m_fy) && - m_pOwner->IsButtonEnable(FALSE)); - if (!bUpPress && !bDnPress) { - return; - } - if (bUpPress) { - m_pOwner->m_iButtonIndex = 0; - m_pOwner->m_dwUpState = FWL_PARTSTATE_SPB_Pressed; - } - if (bDnPress) { - m_pOwner->m_iButtonIndex = 1; - m_pOwner->m_dwDnState = FWL_PARTSTATE_SPB_Pressed; - } - CFWL_EvtSpbClick wmPosChanged; - wmPosChanged.m_pSrcTarget = m_pOwner->m_pInterface; - wmPosChanged.m_bUp = bUpPress; - m_pOwner->DispatchEvent(&wmPosChanged); - m_pOwner->Repaint(bUpPress ? &m_pOwner->m_rtUpButton - : &m_pOwner->m_rtDnButton); - m_pOwner->m_hTimer = FWL_StartTimer(m_pOwner, FWL_SPIN_Elapse); -} -void CFWL_SpinButtonImpDelegate::OnLButtonUp(CFWL_MsgMouse* pMsg) { - if (m_pOwner->m_pProperties->m_dwStates & FWL_PARTSTATE_SPB_Disabled) { - return; - } - m_pOwner->m_bLButtonDwn = FALSE; - m_pOwner->SetGrab(FALSE); - m_pOwner->SetFocus(FALSE); - if (m_pOwner->m_hTimer) { - FWL_StopTimer(m_pOwner->m_hTimer); - m_pOwner->m_hTimer = NULL; - } - FX_BOOL bRepaint = FALSE; - CFX_RectF rtInvalidate; - if (m_pOwner->m_dwUpState == FWL_PARTSTATE_SPB_Pressed && - m_pOwner->IsButtonEnable(TRUE)) { - m_pOwner->m_dwUpState = FWL_PARTSTATE_SPB_Normal; - bRepaint = TRUE; - rtInvalidate = m_pOwner->m_rtUpButton; - } else if (m_pOwner->m_dwDnState == FWL_PARTSTATE_SPB_Pressed && - m_pOwner->IsButtonEnable(FALSE)) { - m_pOwner->m_dwDnState = FWL_PARTSTATE_SPB_Normal; - bRepaint = TRUE; - rtInvalidate = m_pOwner->m_rtDnButton; - } - if (bRepaint) { - m_pOwner->Repaint(&rtInvalidate); - } -} -void CFWL_SpinButtonImpDelegate::OnMouseMove(CFWL_MsgMouse* pMsg) { - if (!m_pOwner->m_pProperties->m_pDataProvider) - return; - if (m_pOwner->m_bLButtonDwn) { - return; - } - FX_BOOL bRepaint = FALSE; - CFX_RectF rtInvlidate; - rtInvlidate.Reset(); - if (m_pOwner->m_rtUpButton.Contains(pMsg->m_fx, pMsg->m_fy)) { - if (m_pOwner->IsButtonEnable(TRUE)) { - if (m_pOwner->m_dwUpState == FWL_PARTSTATE_SPB_Hovered) { - m_pOwner->m_dwUpState = FWL_PARTSTATE_SPB_Hovered; - bRepaint = TRUE; - rtInvlidate = m_pOwner->m_rtUpButton; - } - if (m_pOwner->m_dwDnState != FWL_PARTSTATE_SPB_Normal && - m_pOwner->IsButtonEnable(FALSE)) { - m_pOwner->m_dwDnState = FWL_PARTSTATE_SPB_Normal; - if (bRepaint) { - rtInvlidate.Union(m_pOwner->m_rtDnButton); - } else { - rtInvlidate = m_pOwner->m_rtDnButton; - } - bRepaint = TRUE; - } - } - if (!m_pOwner->IsButtonEnable(FALSE)) { - m_pOwner->EnableButton(FALSE, FALSE); - } - } else if (m_pOwner->m_rtDnButton.Contains(pMsg->m_fx, pMsg->m_fy)) { - if (m_pOwner->IsButtonEnable(FALSE)) { - if (m_pOwner->m_dwDnState != FWL_PARTSTATE_SPB_Hovered) { - m_pOwner->m_dwDnState = FWL_PARTSTATE_SPB_Hovered; - bRepaint = TRUE; - rtInvlidate = m_pOwner->m_rtDnButton; - } - if (m_pOwner->m_dwUpState != FWL_PARTSTATE_SPB_Normal && - m_pOwner->IsButtonEnable(TRUE)) { - m_pOwner->m_dwUpState = FWL_PARTSTATE_SPB_Normal; - if (bRepaint) { - rtInvlidate.Union(m_pOwner->m_rtUpButton); - } else { - rtInvlidate = m_pOwner->m_rtUpButton; - } - bRepaint = TRUE; - } - } - } else if (m_pOwner->m_dwUpState != FWL_PARTSTATE_SPB_Normal || - m_pOwner->m_dwDnState != FWL_PARTSTATE_SPB_Normal) { - if (m_pOwner->m_dwUpState != FWL_PARTSTATE_SPB_Normal) { - m_pOwner->m_dwUpState = FWL_PARTSTATE_SPB_Normal; - bRepaint = TRUE; - rtInvlidate = m_pOwner->m_rtUpButton; - } - if (m_pOwner->m_dwDnState != FWL_PARTSTATE_SPB_Normal) { - m_pOwner->m_dwDnState = FWL_PARTSTATE_SPB_Normal; - if (bRepaint) { - rtInvlidate.Union(m_pOwner->m_rtDnButton); - } else { - rtInvlidate = m_pOwner->m_rtDnButton; - } - bRepaint = TRUE; - } - } - if (bRepaint) { - m_pOwner->Repaint(&rtInvlidate); - } -} -void CFWL_SpinButtonImpDelegate::OnMouseLeave(CFWL_MsgMouse* pMsg) { - if (!pMsg) - return; - if (m_pOwner->m_dwUpState != FWL_PARTSTATE_SPB_Normal && - m_pOwner->IsButtonEnable(TRUE)) { - m_pOwner->m_dwUpState = FWL_PARTSTATE_SPB_Normal; - } - if (m_pOwner->m_dwDnState != FWL_PARTSTATE_SPB_Normal && - m_pOwner->IsButtonEnable(FALSE)) { - m_pOwner->m_dwDnState = FWL_PARTSTATE_SPB_Normal; - } - m_pOwner->Repaint(&m_pOwner->m_rtClient); -} -void CFWL_SpinButtonImpDelegate::OnKeyDown(CFWL_MsgKey* pMsg) { - if (!m_pOwner->m_pProperties->m_pDataProvider) - return; - FX_BOOL bUp = - pMsg->m_dwKeyCode == FWL_VKEY_Up || pMsg->m_dwKeyCode == FWL_VKEY_Left; - FX_BOOL bDown = - pMsg->m_dwKeyCode == FWL_VKEY_Down || pMsg->m_dwKeyCode == FWL_VKEY_Right; - if (!bUp && !bDown) { - return; - } - FX_BOOL bUpEnable = m_pOwner->IsButtonEnable(TRUE); - FX_BOOL bDownEnable = m_pOwner->IsButtonEnable(FALSE); - if (!bUpEnable && !bDownEnable) { - return; - } - CFWL_EvtSpbClick wmPosChanged; - wmPosChanged.m_pSrcTarget = m_pOwner->m_pInterface; - wmPosChanged.m_bUp = bUpEnable; - m_pOwner->DispatchEvent(&wmPosChanged); - m_pOwner->Repaint(bUpEnable ? &m_pOwner->m_rtUpButton - : &m_pOwner->m_rtDnButton); -} diff --git a/xfa/src/fwl/basewidget/fwl_spinbuttonimp.h b/xfa/src/fwl/basewidget/fwl_spinbuttonimp.h deleted file mode 100644 index 769db28c30..0000000000 --- a/xfa/src/fwl/basewidget/fwl_spinbuttonimp.h +++ /dev/null @@ -1,69 +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 - -#ifndef XFA_SRC_FWL_BASEWIDGET_FWL_SPINBUTTONIMP_H_ -#define XFA_SRC_FWL_BASEWIDGET_FWL_SPINBUTTONIMP_H_ - -#include "xfa/include/fwl/core/fwl_timer.h" -#include "xfa/src/fwl/core/fwl_widgetimp.h" - -class CFWL_WidgetImpProperties; -class CFWL_SpinButtonImpDelegate; - -class CFWL_SpinButtonImp : public CFWL_WidgetImp, public IFWL_Timer { - public: - CFWL_SpinButtonImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter); - ~CFWL_SpinButtonImp(); - virtual FWL_ERR GetClassName(CFX_WideString& wsClass) const; - virtual FX_DWORD GetClassID() const; - virtual FWL_ERR Initialize(); - virtual FWL_ERR Finalize(); - virtual FWL_ERR GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize = FALSE); - virtual FWL_ERR Update(); - virtual FX_DWORD HitTest(FX_FLOAT fx, FX_FLOAT fy); - virtual FWL_ERR DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL); - virtual int32_t Run(FWL_HTIMER hTimer); - FWL_ERR EnableButton(FX_BOOL bEnable, FX_BOOL bUp = TRUE); - FX_BOOL IsButtonEnable(FX_BOOL bUp = TRUE); - - protected: - void DrawUpButton(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix); - void DrawDownButton(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix); - CFX_RectF m_rtClient; - CFX_RectF m_rtUpButton; - CFX_RectF m_rtDnButton; - FX_DWORD m_dwUpState; - FX_DWORD m_dwDnState; - int32_t m_iButtonIndex; - FX_BOOL m_bLButtonDwn; - FWL_HTIMER m_hTimer; - friend class CFWL_SpinButtonImpDelegate; -}; -class CFWL_SpinButtonImpDelegate : public CFWL_WidgetImpDelegate { - public: - CFWL_SpinButtonImpDelegate(CFWL_SpinButtonImp* pOwner); - int32_t OnProcessMessage(CFWL_Message* pMessage) override; - FWL_ERR OnProcessEvent(CFWL_Event* pEvent) override; - FWL_ERR OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL) override; - - protected: - void OnFocusChanged(CFWL_Message* pMsg, FX_BOOL bSet = TRUE); - void OnLButtonDown(CFWL_MsgMouse* pMsg); - void OnLButtonUp(CFWL_MsgMouse* pMsg); - void OnMouseMove(CFWL_MsgMouse* pMsg); - void OnMouseLeave(CFWL_MsgMouse* pMsg); - void OnKeyDown(CFWL_MsgKey* pMsg); - CFWL_SpinButtonImp* m_pOwner; -}; - -#endif // XFA_SRC_FWL_BASEWIDGET_FWL_SPINBUTTONIMP_H_ diff --git a/xfa/src/fwl/basewidget/fwl_tooltipctrlimp.cpp b/xfa/src/fwl/basewidget/fwl_tooltipctrlimp.cpp deleted file mode 100644 index 696a2e2b39..0000000000 --- a/xfa/src/fwl/basewidget/fwl_tooltipctrlimp.cpp +++ /dev/null @@ -1,293 +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/basewidget/fwl_tooltipctrlimp.h" - -#include "xfa/include/fwl/basewidget/fwl_tooltipctrl.h" -#include "xfa/include/fwl/core/fwl_theme.h" -#include "xfa/src/fde/tto/fde_textout.h" -#include "xfa/src/fwl/core/fwl_formimp.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_widgetimp.h" - -// static -IFWL_ToolTip* IFWL_ToolTip::Create(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) { - IFWL_ToolTip* pToolTip = new IFWL_ToolTip; - CFWL_ToolTipImp* pToolTipImpl = new CFWL_ToolTipImp(properties, pOuter); - pToolTip->SetImpl(pToolTipImpl); - pToolTipImpl->SetInterface(pToolTip); - return pToolTip; -} -FWL_ERR IFWL_ToolTip::SetAnchor(const CFX_RectF& rtAnchor) { - return static_cast<CFWL_ToolTipImp*>(GetImpl())->SetAnchor(rtAnchor); -} -FWL_ERR IFWL_ToolTip::Show() { - return static_cast<CFWL_ToolTipImp*>(GetImpl())->Show(); -} -FWL_ERR IFWL_ToolTip::Hide() { - return static_cast<CFWL_ToolTipImp*>(GetImpl())->Hide(); -} -IFWL_ToolTip::IFWL_ToolTip() {} -CFWL_ToolTipImp::CFWL_ToolTipImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) - : CFWL_FormImp(properties, pOuter), - m_bBtnDown(FALSE), - m_dwTTOStyles(FDE_TTOSTYLE_SingleLine), - m_iTTOAlign(FDE_TTOALIGNMENT_Center), - m_hTimerShow(NULL), - m_hTimerHide(NULL), - m_pTimer(NULL) { - m_rtClient.Set(0, 0, 0, 0); - m_rtCaption.Set(0, 0, 0, 0); - m_rtAnchor.Set(0, 0, 0, 0); - m_TimerShow.m_pToolTip = this; - m_TimerHide.m_pToolTip = this; -} -CFWL_ToolTipImp::~CFWL_ToolTipImp() { - if (m_pTimer) { - delete m_pTimer; - m_pTimer = NULL; - } -} -FWL_ERR CFWL_ToolTipImp::GetClassName(CFX_WideString& wsClass) const { - wsClass = FWL_CLASS_ToolTip; - return FWL_ERR_Succeeded; -} -FX_DWORD CFWL_ToolTipImp::GetClassID() const { - return FWL_CLASSHASH_ToolTip; -} -FWL_ERR CFWL_ToolTipImp::Initialize() { - m_pProperties->m_dwStyles |= FWL_WGTSTYLE_Popup; - m_pProperties->m_dwStyles &= ~FWL_WGTSTYLE_Child; - if (CFWL_WidgetImp::Initialize() != FWL_ERR_Succeeded) - return FWL_ERR_Indefinite; - m_pDelegate = new CFWL_ToolTipImpDelegate(this); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ToolTipImp::Finalize() { - delete m_pDelegate; - m_pDelegate = nullptr; - return CFWL_WidgetImp::Finalize(); -} -FWL_ERR CFWL_ToolTipImp::GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize) { - if (bAutoSize) { - rect.Set(0, 0, 0, 0); - if (m_pProperties->m_pThemeProvider == NULL) { - m_pProperties->m_pThemeProvider = GetAvailableTheme(); - } - CFX_WideString wsCaption; - IFWL_ToolTipDP* pData = - static_cast<IFWL_ToolTipDP*>(m_pProperties->m_pDataProvider); - if (pData) { - pData->GetCaption(m_pInterface, wsCaption); - } - int32_t iLen = wsCaption.GetLength(); - if (iLen > 0) { - CFX_SizeF sz = CalcTextSize(wsCaption, m_pProperties->m_pThemeProvider); - rect.Set(0, 0, sz.x, sz.y); - rect.width += FWL_WGTCAPACITY_CXBorder * 25; - rect.height += FWL_WGTCAPACITY_CYBorder * 8; - } - CFWL_WidgetImp::GetWidgetRect(rect, TRUE); - } else { - rect = m_pProperties->m_rtWidget; - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ToolTipImp::Update() { - if (IsLocked()) { - return FWL_ERR_Indefinite; - } - if (!m_pProperties->m_pThemeProvider) { - m_pProperties->m_pThemeProvider = GetAvailableTheme(); - } - UpdateTextOutStyles(); - GetClientRect(m_rtClient); - m_rtCaption = m_rtClient; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ToolTipImp::GetClientRect(CFX_RectF& rect) { - 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)); - } - rect = m_pProperties->m_rtWidget; - rect.Offset(-rect.left, -rect.top); - rect.Deflate(x, t, x, y); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ToolTipImp::DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - IFWL_ToolTipTarget* toolTipTarget = - CFWL_ToolTipContainer::getInstance()->GetCurrentToolTipTarget(); - if (toolTipTarget && !toolTipTarget->UseDefaultTheme()) { - return toolTipTarget->DrawToolTip(pGraphics, pMatrix, m_pInterface); - } - if (!pGraphics) - return FWL_ERR_Indefinite; - if (!m_pProperties->m_pThemeProvider) - return FWL_ERR_Indefinite; - IFWL_ThemeProvider* pTheme = m_pProperties->m_pThemeProvider; - DrawBkground(pGraphics, pTheme, pMatrix); - DrawText(pGraphics, pTheme, pMatrix); - return FWL_ERR_Succeeded; -} -void CFWL_ToolTipImp::DrawBkground(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - CFWL_ThemeBackground param; - param.m_pWidget = m_pInterface; - param.m_iPart = FWL_PART_TTP_Background; - param.m_dwStates = m_pProperties->m_dwStates; - param.m_pGraphics = pGraphics; - if (pMatrix) { - param.m_matrix.Concat(*pMatrix); - } - param.m_rtPart = m_rtClient; - if (m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) { - param.m_pData = &m_rtCaption; - } - pTheme->DrawBackground(¶m); -} -void CFWL_ToolTipImp::DrawText(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - if (!m_pProperties->m_pDataProvider) - return; - CFX_WideString wsCaption; - m_pProperties->m_pDataProvider->GetCaption(m_pInterface, wsCaption); - if (wsCaption.IsEmpty()) { - return; - } - CFWL_ThemeText param; - param.m_pWidget = m_pInterface; - param.m_iPart = FWL_PART_TTP_Caption; - param.m_dwStates = m_pProperties->m_dwStates; - param.m_pGraphics = pGraphics; - if (pMatrix) { - param.m_matrix.Concat(*pMatrix); - } - param.m_rtPart = m_rtCaption; - param.m_wsText = wsCaption; - param.m_dwTTOStyles = m_dwTTOStyles; - param.m_iTTOAlign = m_iTTOAlign; - pTheme->DrawText(¶m); -} -void CFWL_ToolTipImp::UpdateTextOutStyles() { - m_iTTOAlign = FDE_TTOALIGNMENT_Center; - m_dwTTOStyles = FDE_TTOSTYLE_SingleLine; - if (m_pProperties->m_dwStyleExes & FWL_WGTSTYLE_RTLReading) { - m_dwTTOStyles |= FDE_TTOSTYLE_RTL; - } - if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_TTP_Multiline) { - m_dwTTOStyles &= ~FDE_TTOSTYLE_SingleLine; - } -} -FWL_ERR CFWL_ToolTipImp::SetAnchor(const CFX_RectF& rtAnchor) { - m_rtAnchor = rtAnchor; - return TRUE; -} -FWL_ERR CFWL_ToolTipImp::Show() { - IFWL_ToolTipDP* pData = - static_cast<IFWL_ToolTipDP*>(m_pProperties->m_pDataProvider); - int32_t nInitDelay = pData->GetInitialDelay(m_pInterface); - if ((m_pProperties->m_dwStates & FWL_WGTSTATE_Invisible)) { - m_hTimerShow = FWL_StartTimer(&m_TimerShow, nInitDelay, FALSE); - } - return TRUE; -} -FWL_ERR CFWL_ToolTipImp::Hide() { - SetStates(FWL_WGTSTATE_Invisible, TRUE); - if (m_hTimerHide) { - FWL_StopTimer(m_hTimerHide); - m_hTimerHide = NULL; - } - if (m_hTimerShow) { - FWL_StopTimer(m_hTimerShow); - m_hTimerShow = NULL; - } - return TRUE; -} -FWL_ERR CFWL_ToolTipImp::SetStates(FX_DWORD dwStates, FX_BOOL bSet) { - if ((dwStates & FWL_WGTSTATE_Invisible) && !bSet) { - IFWL_ToolTipDP* pData = - static_cast<IFWL_ToolTipDP*>(m_pProperties->m_pDataProvider); - int32_t nAutoPopDelay = pData->GetAutoPopDelay(m_pInterface); - m_hTimerHide = FWL_StartTimer(&m_TimerHide, nAutoPopDelay, FALSE); - } - return CFWL_WidgetImp::SetStates(dwStates, bSet); -} -void CFWL_ToolTipImp::RefreshToolTipPos() { - if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_TTP_NoAnchor) == 0) { - CFX_RectF rtPopup; - CFX_RectF rtWidget(m_pProperties->m_rtWidget); - CFX_RectF rtAnchor(m_rtAnchor); - rtPopup.Set(0, 0, 0, 0); - FX_FLOAT fx = rtAnchor.Center().x + 20; - FX_FLOAT fy = rtAnchor.Center().y + 20; - rtPopup.Set(fx, fy, rtWidget.Width(), rtWidget.Height()); - FX_FLOAT fScreenWidth = 0; - FX_FLOAT fScreenHeight = 0; - GetScreenSize(fScreenWidth, fScreenHeight); - if (rtPopup.bottom() > fScreenHeight) { - rtPopup.Offset(0, fScreenHeight - rtPopup.bottom()); - } - if (rtPopup.right() > fScreenWidth) { - rtPopup.Offset(fScreenWidth - rtPopup.right(), 0); - } - if (rtPopup.left < 0) { - rtPopup.Offset(0 - rtPopup.left, 0); - } - if (rtPopup.top < 0) { - rtPopup.Offset(0, 0 - rtPopup.top); - } - SetWidgetRect(rtPopup); - Update(); - } -} -CFWL_ToolTipImp::CFWL_ToolTipTimer::CFWL_ToolTipTimer(CFWL_ToolTipImp* pToolTip) - : m_pToolTip(pToolTip) {} -int32_t CFWL_ToolTipImp::CFWL_ToolTipTimer::Run(FWL_HTIMER hTimer) { - if (m_pToolTip->m_hTimerShow == hTimer && m_pToolTip->m_hTimerShow) { - if (m_pToolTip->GetStates() & FWL_WGTSTATE_Invisible) { - m_pToolTip->SetStates(FWL_WGTSTATE_Invisible, FALSE); - m_pToolTip->RefreshToolTipPos(); - FWL_StopTimer(m_pToolTip->m_hTimerShow); - m_pToolTip->m_hTimerShow = NULL; - return TRUE; - } - } - if (m_pToolTip->m_hTimerHide == hTimer && m_pToolTip->m_hTimerHide) { - m_pToolTip->SetStates(FWL_WGTSTATE_Invisible, TRUE); - FWL_StopTimer(m_pToolTip->m_hTimerHide); - m_pToolTip->m_hTimerHide = NULL; - return TRUE; - } - return TRUE; -} -CFWL_ToolTipImpDelegate::CFWL_ToolTipImpDelegate(CFWL_ToolTipImp* pOwner) - : m_pOwner(pOwner) {} -int32_t CFWL_ToolTipImpDelegate::OnProcessMessage(CFWL_Message* pMessage) { - return CFWL_WidgetImpDelegate::OnProcessMessage(pMessage); -} -FWL_ERR CFWL_ToolTipImpDelegate::OnProcessEvent(CFWL_Event* pEvent) { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ToolTipImpDelegate::OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - return m_pOwner->DrawWidget(pGraphics, pMatrix); -} diff --git a/xfa/src/fwl/basewidget/fwl_tooltipctrlimp.h b/xfa/src/fwl/basewidget/fwl_tooltipctrlimp.h deleted file mode 100644 index 08fb7b0639..0000000000 --- a/xfa/src/fwl/basewidget/fwl_tooltipctrlimp.h +++ /dev/null @@ -1,86 +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 - -#ifndef XFA_SRC_FWL_BASEWIDGET_FWL_TOOLTIPCTRLIMP_H_ -#define XFA_SRC_FWL_BASEWIDGET_FWL_TOOLTIPCTRLIMP_H_ - -#include "xfa/include/fwl/core/fwl_timer.h" -#include "xfa/src/fwl/core/fwl_formimp.h" -#include "xfa/src/fwl/core/fwl_widgetimp.h" - -class CFWL_WidgetImpProperties; -class IFWL_Widget; -class CFWL_ToolTipImpDelegate; - -class CFWL_ToolTipImp : public CFWL_FormImp { - public: - CFWL_ToolTipImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter); - virtual ~CFWL_ToolTipImp(); - virtual FWL_ERR GetClassName(CFX_WideString& wsClass) const; - virtual FX_DWORD GetClassID() const; - virtual FWL_ERR Initialize(); - virtual FWL_ERR Finalize(); - virtual FWL_ERR GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize = FALSE); - virtual FWL_ERR Update(); - virtual FWL_ERR DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL); - virtual FWL_ERR SetStates(FX_DWORD dwStates, FX_BOOL bSet); - virtual FWL_ERR GetClientRect(CFX_RectF& rect); - FWL_ERR SetAnchor(const CFX_RectF& rtAnchor); - FWL_ERR Show(); - FWL_ERR Hide(); - - protected: - void DrawBkground(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix); - void DrawText(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix); - void UpdateTextOutStyles(); - void RefreshToolTipPos(); - class CFWL_ToolTipTimer : public IFWL_Timer { - public: - CFWL_ToolTipTimer() {} - ~CFWL_ToolTipTimer() {} - CFWL_ToolTipTimer(CFWL_ToolTipImp* pToolTip); - virtual int32_t Run(FWL_HTIMER hTimer); - CFWL_ToolTipImp* m_pToolTip; - }; - CFX_RectF m_rtClient; - CFX_RectF m_rtCaption; - FX_BOOL m_bBtnDown; - FX_DWORD m_dwTTOStyles; - int32_t m_iTTOAlign; - CFX_RectF m_rtAnchor; - FWL_HTIMER m_hTimerShow; - FWL_HTIMER m_hTimerHide; - CFWL_ToolTipTimer* m_pTimer; - CFWL_ToolTipTimer m_TimerShow; - CFWL_ToolTipTimer m_TimerHide; - friend class CFWL_ToolTipImpDelegate; - friend class CFWL_ToolTipTimer; -}; -class CFWL_ToolTipImpDelegate : public CFWL_WidgetImpDelegate { - public: - CFWL_ToolTipImpDelegate(CFWL_ToolTipImp* pOwner); - int32_t OnProcessMessage(CFWL_Message* pMessage) override; - FWL_ERR OnProcessEvent(CFWL_Event* pEvent) override; - FWL_ERR OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL) override; - - protected: - void OnFocusChanged(CFWL_Message* pMsg, FX_BOOL bSet = TRUE); - void OnLButtonDown(CFWL_MsgMouse* pMsg); - void OnLButtonUp(CFWL_MsgMouse* pMsg); - void OnMouseMove(CFWL_MsgMouse* pMsg); - void OnMouseLeave(CFWL_MsgMouse* pMsg); - void OnKeyDown(CFWL_MsgKey* pMsg); - CFWL_ToolTipImp* m_pOwner; -}; - -#endif // XFA_SRC_FWL_BASEWIDGET_FWL_TOOLTIPCTRLIMP_H_ diff --git a/xfa/src/fwl/basewidget/fxmath_barcodeimp.cpp b/xfa/src/fwl/basewidget/fxmath_barcodeimp.cpp deleted file mode 100644 index 8c9bfe432c..0000000000 --- a/xfa/src/fwl/basewidget/fxmath_barcodeimp.cpp +++ /dev/null @@ -1,385 +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/basewidget/fxmath_barcodeimp.h" - -static CBC_CodeBase* FX_Barcode_CreateBarCodeEngineObject(BC_TYPE type) { - switch (type) { - case BC_CODE39: - return new CBC_Code39(); - case BC_CODABAR: - return new CBC_Codabar(); - case BC_CODE128: - return new CBC_Code128(BC_CODE128_B); - case BC_CODE128_B: - return new CBC_Code128(BC_CODE128_B); - case BC_CODE128_C: - return new CBC_Code128(BC_CODE128_C); - case BC_EAN8: - return new CBC_EAN8(); - case BC_UPCA: - return new CBC_UPCA(); - case BC_EAN13: - return new CBC_EAN13(); - case BC_QR_CODE: - return new CBC_QRCode(); - case BC_PDF417: - return new CBC_PDF417I(); - case BC_DATAMATRIX: - return new CBC_DataMatrix(); - case BC_UNKNOWN: - default: - return NULL; - } -} -CFX_Barcode::CFX_Barcode() {} -CFX_Barcode::~CFX_Barcode() { - if (m_pBCEngine) { - delete m_pBCEngine; - m_pBCEngine = NULL; - } -} -FX_BOOL CFX_Barcode::Crreate(BC_TYPE type) { - m_pBCEngine = FX_Barcode_CreateBarCodeEngineObject(type); - return m_pBCEngine != NULL; -} -void CFX_Barcode::Release() { - delete this; -} -BC_TYPE CFX_Barcode::GetType() { - return m_pBCEngine ? m_pBCEngine->GetType() : BC_UNKNOWN; -} -FX_BOOL CFX_Barcode::SetCharEncoding(BC_CHAR_ENCODING encoding) { - return m_pBCEngine ? m_pBCEngine->SetCharEncoding(encoding) : FALSE; -} -FX_BOOL CFX_Barcode::SetModuleHeight(int32_t moduleHeight) { - return m_pBCEngine ? m_pBCEngine->SetModuleHeight(moduleHeight) : FALSE; -} -FX_BOOL CFX_Barcode::SetModuleWidth(int32_t moduleWidth) { - return m_pBCEngine ? m_pBCEngine->SetModuleWidth(moduleWidth) : FALSE; -} -FX_BOOL CFX_Barcode::SetHeight(int32_t height) { - return m_pBCEngine ? m_pBCEngine->SetHeight(height) : FALSE; -} -FX_BOOL CFX_Barcode::SetWidth(int32_t width) { - return m_pBCEngine ? m_pBCEngine->SetWidth(width) : FALSE; -} -FX_BOOL CFX_Barcode::CheckContentValidity(const CFX_WideStringC& contents) { - switch (GetType()) { - case BC_CODE39: - case BC_CODABAR: - case BC_CODE128: - case BC_CODE128_B: - case BC_CODE128_C: - case BC_EAN8: - case BC_EAN13: - case BC_UPCA: - return m_pBCEngine - ? static_cast<CBC_OneCode*>(m_pBCEngine) - ->CheckContentValidity(contents) - : TRUE; - default: - return TRUE; - } -} -FX_BOOL CFX_Barcode::SetPrintChecksum(FX_BOOL checksum) { - switch (GetType()) { - case BC_CODE39: - case BC_CODABAR: - case BC_CODE128: - case BC_CODE128_B: - case BC_CODE128_C: - case BC_EAN8: - case BC_EAN13: - case BC_UPCA: - return m_pBCEngine ? (static_cast<CBC_OneCode*>(m_pBCEngine) - ->SetPrintChecksum(checksum), - TRUE) - : FALSE; - default: - return FALSE; - } -} -FX_BOOL CFX_Barcode::SetDataLength(int32_t length) { - switch (GetType()) { - case BC_CODE39: - case BC_CODABAR: - case BC_CODE128: - case BC_CODE128_B: - case BC_CODE128_C: - case BC_EAN8: - case BC_EAN13: - case BC_UPCA: - return m_pBCEngine ? (static_cast<CBC_OneCode*>(m_pBCEngine) - ->SetDataLength(length), - TRUE) - : FALSE; - default: - return FALSE; - } -} -FX_BOOL CFX_Barcode::SetCalChecksum(int32_t state) { - switch (GetType()) { - case BC_CODE39: - case BC_CODABAR: - case BC_CODE128: - case BC_CODE128_B: - case BC_CODE128_C: - case BC_EAN8: - case BC_EAN13: - case BC_UPCA: - return m_pBCEngine ? (static_cast<CBC_OneCode*>(m_pBCEngine) - ->SetCalChecksum(state), - TRUE) - : FALSE; - default: - return FALSE; - } -} -FX_BOOL CFX_Barcode::SetFont(CFX_Font* pFont) { - switch (GetType()) { - case BC_CODE39: - case BC_CODABAR: - case BC_CODE128: - case BC_CODE128_B: - case BC_CODE128_C: - case BC_EAN8: - case BC_EAN13: - case BC_UPCA: - return m_pBCEngine - ? static_cast<CBC_OneCode*>(m_pBCEngine)->SetFont(pFont) - : FALSE; - default: - return FALSE; - } -} -FX_BOOL CFX_Barcode::SetFontSize(FX_FLOAT size) { - switch (GetType()) { - case BC_CODE39: - case BC_CODABAR: - case BC_CODE128: - case BC_CODE128_B: - case BC_CODE128_C: - case BC_EAN8: - case BC_EAN13: - case BC_UPCA: - return m_pBCEngine - ? (static_cast<CBC_OneCode*>(m_pBCEngine)->SetFontSize(size), - TRUE) - : FALSE; - default: - return FALSE; - } -} -FX_BOOL CFX_Barcode::SetFontStyle(int32_t style) { - switch (GetType()) { - case BC_CODE39: - case BC_CODABAR: - case BC_CODE128: - case BC_CODE128_B: - case BC_CODE128_C: - case BC_EAN8: - case BC_EAN13: - case BC_UPCA: - return m_pBCEngine - ? (static_cast<CBC_OneCode*>(m_pBCEngine)->SetFontStyle(style), - TRUE) - : FALSE; - default: - return FALSE; - } -} -FX_BOOL CFX_Barcode::SetFontColor(FX_ARGB color) { - switch (GetType()) { - case BC_CODE39: - case BC_CODABAR: - case BC_CODE128: - case BC_CODE128_B: - case BC_CODE128_C: - case BC_EAN8: - case BC_EAN13: - case BC_UPCA: - return m_pBCEngine - ? (static_cast<CBC_OneCode*>(m_pBCEngine)->SetFontColor(color), - TRUE) - : FALSE; - default: - return FALSE; - } -} -FX_BOOL CFX_Barcode::SetTextLocation(BC_TEXT_LOC location) { - typedef FX_BOOL (CBC_CodeBase::*memptrtype)(BC_TEXT_LOC); - memptrtype memptr = NULL; - switch (GetType()) { - case BC_CODE39: - memptr = (memptrtype)&CBC_Code39::SetTextLocation; - break; - case BC_CODABAR: - memptr = (memptrtype)&CBC_Codabar::SetTextLocation; - break; - case BC_CODE128: - case BC_CODE128_B: - case BC_CODE128_C: - memptr = (memptrtype)&CBC_Code128::SetTextLocation; - break; - default: - break; - } - return m_pBCEngine && memptr ? (m_pBCEngine->*memptr)(location) : FALSE; -} -FX_BOOL CFX_Barcode::SetWideNarrowRatio(int32_t ratio) { - typedef FX_BOOL (CBC_CodeBase::*memptrtype)(int32_t); - memptrtype memptr = NULL; - switch (GetType()) { - case BC_CODE39: - memptr = (memptrtype)&CBC_Code39::SetWideNarrowRatio; - break; - case BC_CODABAR: - memptr = (memptrtype)&CBC_Codabar::SetWideNarrowRatio; - break; - default: - break; - } - return m_pBCEngine && memptr ? (m_pBCEngine->*memptr)(ratio) : FALSE; -} -FX_BOOL CFX_Barcode::SetStartChar(FX_CHAR start) { - typedef FX_BOOL (CBC_CodeBase::*memptrtype)(FX_CHAR); - memptrtype memptr = NULL; - switch (GetType()) { - case BC_CODABAR: - memptr = (memptrtype)&CBC_Codabar::SetStartChar; - break; - default: - break; - } - return m_pBCEngine && memptr ? (m_pBCEngine->*memptr)(start) : FALSE; -} -FX_BOOL CFX_Barcode::SetEndChar(FX_CHAR end) { - typedef FX_BOOL (CBC_CodeBase::*memptrtype)(FX_CHAR); - memptrtype memptr = NULL; - switch (GetType()) { - case BC_CODABAR: - memptr = (memptrtype)&CBC_Codabar::SetEndChar; - break; - default: - break; - } - return m_pBCEngine && memptr ? (m_pBCEngine->*memptr)(end) : FALSE; -} -FX_BOOL CFX_Barcode::SetVersion(int32_t version) { - typedef FX_BOOL (CBC_CodeBase::*memptrtype)(int32_t); - memptrtype memptr = NULL; - switch (GetType()) { - case BC_QR_CODE: - memptr = (memptrtype)&CBC_QRCode::SetVersion; - break; - default: - break; - } - return m_pBCEngine && memptr ? (m_pBCEngine->*memptr)(version) : FALSE; -} -FX_BOOL CFX_Barcode::SetErrorCorrectionLevel(int32_t level) { - typedef FX_BOOL (CBC_CodeBase::*memptrtype)(int32_t); - memptrtype memptr = NULL; - switch (GetType()) { - case BC_QR_CODE: - memptr = (memptrtype)&CBC_QRCode::SetErrorCorrectionLevel; - break; - case BC_PDF417: - memptr = (memptrtype)&CBC_PDF417I::SetErrorCorrectionLevel; - break; - default: - return FALSE; - } - return m_pBCEngine && memptr ? (m_pBCEngine->*memptr)(level) : FALSE; -} -FX_BOOL CFX_Barcode::SetTruncated(FX_BOOL truncated) { - typedef void (CBC_CodeBase::*memptrtype)(FX_BOOL); - memptrtype memptr = NULL; - switch (GetType()) { - case BC_PDF417: - memptr = (memptrtype)&CBC_PDF417I::SetTruncated; - break; - default: - break; - } - return m_pBCEngine && memptr ? ((m_pBCEngine->*memptr)(truncated), TRUE) - : FALSE; -} -#ifndef BCExceptionNO -#define BCExceptionNO 0 -#endif -#ifndef BCExceptionFormatException -#define BCExceptionFormatException 8 -#endif -#ifndef BCExceptionUnSupportedBarcode -#define BCExceptionUnSupportedBarcode 18 -#endif -FX_BOOL CFX_Barcode::Encode(const CFX_WideStringC& contents, - FX_BOOL isDevice, - int32_t& e) { - if (!m_pBCEngine) { - return FALSE; - } - return m_pBCEngine->Encode(contents, isDevice, e); -} -FX_BOOL CFX_Barcode::RenderDevice(CFX_RenderDevice* device, - const CFX_Matrix* matirx, - int32_t& e) { - if (!m_pBCEngine) { - return FALSE; - } - return m_pBCEngine->RenderDevice(device, matirx, e); -} -FX_BOOL CFX_Barcode::RenderBitmap(CFX_DIBitmap*& pOutBitmap, int32_t& e) { - if (!m_pBCEngine) { - return FALSE; - } - return m_pBCEngine->RenderBitmap(pOutBitmap, e); -} -#define BC_TYPE_MIN BC_CODE39 -#define BC_TYPE_MAX BC_DATAMATRIX -CFX_WideString CFX_Barcode::Decode(uint8_t* buf, - int32_t width, - int32_t height, - int32_t& errorCode) { - for (BC_TYPE t = BC_TYPE_MIN; t <= BC_TYPE_MAX; - t = (BC_TYPE)((int32_t)t + 1)) { - CBC_CodeBase* pTmpEngine = FX_Barcode_CreateBarCodeEngineObject(t); - if (!pTmpEngine) { - continue; - } - CFX_WideString ret = pTmpEngine->Decode(buf, width, height, errorCode); - if (errorCode == BCExceptionNO) { - return ret; - } - } - errorCode = BCExceptionUnSupportedBarcode; - return CFX_WideString(); -} -CFX_WideString CFX_Barcode::Decode(CFX_DIBitmap* pBitmap, int32_t& errorCode) { - for (BC_TYPE t = BC_TYPE_MIN; t <= BC_TYPE_MAX; - t = (BC_TYPE)((int32_t)t + 1)) { - CBC_CodeBase* pTmpEngine = FX_Barcode_CreateBarCodeEngineObject(t); - if (!pTmpEngine) { - continue; - } - CFX_WideString ret = pTmpEngine->Decode(pBitmap, errorCode); - if (errorCode == BCExceptionNO) { - return ret; - } - } - errorCode = BCExceptionUnSupportedBarcode; - return CFX_WideString(); -} -IFX_Barcode* FX_Barcode_Create(BC_TYPE type) { - CFX_Barcode* pBarcode = new CFX_Barcode; - if (pBarcode->Crreate(type)) { - return pBarcode; - } - pBarcode->Release(); - return NULL; -} diff --git a/xfa/src/fwl/basewidget/fxmath_barcodeimp.h b/xfa/src/fwl/basewidget/fxmath_barcodeimp.h deleted file mode 100644 index 22cb97bcc4..0000000000 --- a/xfa/src/fwl/basewidget/fxmath_barcodeimp.h +++ /dev/null @@ -1,56 +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 - -#ifndef XFA_SRC_FWL_BASEWIDGET_FXMATH_BARCODEIMP_H_ -#define XFA_SRC_FWL_BASEWIDGET_FXMATH_BARCODEIMP_H_ - -#include "xfa/include/fwl/basewidget/fxmath_barcode.h" - -class CFX_Barcode : public IFX_Barcode { - public: - CFX_Barcode(); - ~CFX_Barcode(); - FX_BOOL Crreate(BC_TYPE type); - virtual void Release(); - virtual BC_TYPE GetType(); - virtual FX_BOOL Encode(const CFX_WideStringC& contents, - FX_BOOL isDevice, - int32_t& e); - virtual FX_BOOL RenderDevice(CFX_RenderDevice* device, - const CFX_Matrix* matirx, - int32_t& e); - virtual FX_BOOL RenderBitmap(CFX_DIBitmap*& pOutBitmap, int32_t& e); - virtual CFX_WideString Decode(uint8_t* buf, - int32_t width, - int32_t height, - int32_t& errorCode); - virtual CFX_WideString Decode(CFX_DIBitmap* pBitmap, int32_t& errorCode); - virtual FX_BOOL SetCharEncoding(BC_CHAR_ENCODING encoding); - virtual FX_BOOL SetModuleHeight(int32_t moduleHeight); - virtual FX_BOOL SetModuleWidth(int32_t moduleWidth); - virtual FX_BOOL SetHeight(int32_t height); - virtual FX_BOOL SetWidth(int32_t width); - virtual FX_BOOL CheckContentValidity(const CFX_WideStringC& contents); - virtual FX_BOOL SetPrintChecksum(FX_BOOL checksum); - virtual FX_BOOL SetDataLength(int32_t length); - virtual FX_BOOL SetCalChecksum(int32_t state); - virtual FX_BOOL SetFont(CFX_Font* pFont); - virtual FX_BOOL SetFontSize(FX_FLOAT size); - virtual FX_BOOL SetFontStyle(int32_t style); - virtual FX_BOOL SetFontColor(FX_ARGB color); - virtual FX_BOOL SetTextLocation(BC_TEXT_LOC location); - virtual FX_BOOL SetWideNarrowRatio(int32_t ratio); - virtual FX_BOOL SetStartChar(FX_CHAR start); - virtual FX_BOOL SetEndChar(FX_CHAR end); - virtual FX_BOOL SetVersion(int32_t version); - virtual FX_BOOL SetErrorCorrectionLevel(int32_t level); - virtual FX_BOOL SetTruncated(FX_BOOL truncated); - - protected: - CBC_CodeBase* m_pBCEngine; -}; - -#endif // XFA_SRC_FWL_BASEWIDGET_FXMATH_BARCODEIMP_H_ diff --git a/xfa/src/fwl/core/fwl_appimp.cpp b/xfa/src/fwl/core/fwl_appimp.cpp deleted file mode 100644 index 43a3d0badf..0000000000 --- a/xfa/src/fwl/core/fwl_appimp.cpp +++ /dev/null @@ -1,114 +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_appimp.h" - -#include "xfa/include/fwl/adapter/fwl_adapterwidgetmgr.h" -#include "xfa/include/fwl/core/fwl_app.h" -#include "xfa/include/fwl/core/fwl_widget.h" -#include "xfa/src/fwl/core/fwl_noteimp.h" -#include "xfa/src/fwl/core/fwl_targetimp.h" -#include "xfa/src/fwl/core/fwl_threadimp.h" -#include "xfa/src/fwl/core/fwl_widgetmgrimp.h" - -IFWL_App* IFWL_App::Create(IFWL_AdapterNative* pAdapter) { - IFWL_App* pApp = new IFWL_App; - pApp->SetImpl(new CFWL_AppImp(pApp, pAdapter)); - return pApp; -} -FWL_ERR IFWL_App::Initialize() { - return static_cast<CFWL_AppImp*>(GetImpl())->Initialize(); -} -FWL_ERR IFWL_App::Finalize() { - return static_cast<CFWL_AppImp*>(GetImpl())->Finalize(); -} -IFWL_AdapterNative* IFWL_App::GetAdapterNative() { - return static_cast<CFWL_AppImp*>(GetImpl())->GetAdapterNative(); -} -IFWL_WidgetMgr* IFWL_App::GetWidgetMgr() { - return static_cast<CFWL_AppImp*>(GetImpl())->GetWidgetMgr(); -} -IFWL_ThemeProvider* IFWL_App::GetThemeProvider() { - return static_cast<CFWL_AppImp*>(GetImpl())->GetThemeProvider(); -} -FWL_ERR IFWL_App::SetThemeProvider(IFWL_ThemeProvider* pThemeProvider) { - return static_cast<CFWL_AppImp*>(GetImpl())->SetThemeProvider(pThemeProvider); -} -FWL_ERR IFWL_App::Exit(int32_t iExitCode) { - return static_cast<CFWL_AppImp*>(GetImpl())->Exit(iExitCode); -} - -CFWL_AppImp::CFWL_AppImp(IFWL_App* pIface, IFWL_AdapterNative* pAdapter) - : CFWL_NoteThreadImp(pIface), - m_pAdapterNative(pAdapter), - m_pThemeProvider(nullptr) {} - -CFWL_AppImp::~CFWL_AppImp() { - CFWL_ToolTipContainer::DeleteInstance(); -} - -FWL_ERR CFWL_AppImp::Initialize() { - if (!m_pWidgetMgr) { - m_pWidgetMgr.reset(new CFWL_WidgetMgr(m_pAdapterNative)); - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_AppImp::Finalize() { - m_pWidgetMgr.reset(); - return FWL_ERR_Succeeded; -} -IFWL_AdapterNative* CFWL_AppImp::GetAdapterNative() const { - return m_pAdapterNative; -} -IFWL_AdapterWidgetMgr* FWL_GetAdapterWidgetMgr() { - return static_cast<CFWL_WidgetMgr*>(FWL_GetWidgetMgr()) - ->GetAdapterWidgetMgr(); -} -IFWL_WidgetMgr* CFWL_AppImp::GetWidgetMgr() const { - return m_pWidgetMgr.get(); -} -FWL_ERR CFWL_AppImp::SetThemeProvider(IFWL_ThemeProvider* pThemeProvider) { - m_pThemeProvider = pThemeProvider; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_AppImp::Exit(int32_t iExitCode) { - while (m_pNoteDriver->PopNoteLoop()) { - continue; - } - return m_pWidgetMgr->GetAdapterWidgetMgr()->Exit(0); -} -IFWL_ThemeProvider* CFWL_AppImp::GetThemeProvider() const { - return m_pThemeProvider; -} -IFWL_AdapterNative* FWL_GetAdapterNative() { - IFWL_App* pApp = FWL_GetApp(); - if (!pApp) - return NULL; - return pApp->GetAdapterNative(); -} -IFWL_ThemeProvider* FWL_GetThemeProvider() { - return NULL; -} -static IFWL_App* _theApp = NULL; -IFWL_App* FWL_GetApp() { - return _theApp; -} -void FWL_SetApp(IFWL_App* pApp) { - _theApp = pApp; -} -FWL_ERR FWL_SetFullScreen(IFWL_Widget* pWidget, FX_BOOL bFullScreen) { - if (!pWidget) - return FWL_ERR_Succeeded; - IFWL_NoteThread* pNoteTread = pWidget->GetOwnerThread(); - if (!pNoteTread) - return FWL_ERR_Succeeded; - CFWL_NoteDriver* pNoteDriver = - static_cast<CFWL_NoteDriver*>(pNoteTread->GetNoteDriver()); - if (!pNoteTread) - return FWL_ERR_Succeeded; - pNoteDriver->NotifyFullScreenMode(pWidget, bFullScreen); - return FWL_GetAdapterWidgetMgr()->SetFullScreen(pWidget, bFullScreen); -} diff --git a/xfa/src/fwl/core/fwl_appimp.h b/xfa/src/fwl/core/fwl_appimp.h deleted file mode 100644 index fa4ffecc65..0000000000 --- a/xfa/src/fwl/core/fwl_appimp.h +++ /dev/null @@ -1,38 +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 - -#ifndef XFA_SRC_FWL_CORE_FWL_APPIMP_H_ -#define XFA_SRC_FWL_CORE_FWL_APPIMP_H_ - -#include <memory> - -#include "xfa/src/fwl/core/fwl_threadimp.h" - -class CFWL_WidgetMgr; -class IFWL_AdapterNative; -class IFWL_WidgetMgr; -class IFWL_ThemeProvider; -class IFWL_App; - -class CFWL_AppImp : public CFWL_NoteThreadImp { - public: - CFWL_AppImp(IFWL_App* pIface, IFWL_AdapterNative* pAdapter); - virtual ~CFWL_AppImp(); - virtual FWL_ERR Initialize(); - virtual FWL_ERR Finalize(); - virtual IFWL_AdapterNative* GetAdapterNative() const; - virtual IFWL_WidgetMgr* GetWidgetMgr() const; - virtual IFWL_ThemeProvider* GetThemeProvider() const; - virtual FWL_ERR SetThemeProvider(IFWL_ThemeProvider* pThemeProvider); - virtual FWL_ERR Exit(int32_t iExitCode = 0); - - protected: - IFWL_AdapterNative* const m_pAdapterNative; - std::unique_ptr<CFWL_WidgetMgr> m_pWidgetMgr; - IFWL_ThemeProvider* m_pThemeProvider; -}; - -#endif // XFA_SRC_FWL_CORE_FWL_APPIMP_H_ diff --git a/xfa/src/fwl/core/fwl_contentimp.cpp b/xfa/src/fwl/core/fwl_contentimp.cpp deleted file mode 100644 index d415e33a26..0000000000 --- a/xfa/src/fwl/core/fwl_contentimp.cpp +++ /dev/null @@ -1,94 +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_contentimp.h" - -#include "xfa/include/fwl/core/fwl_content.h" -#include "xfa/src/fwl/core/fwl_noteimp.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" - -FWL_ERR IFWL_Content::InsertWidget(IFWL_Widget* pChild, int32_t nIndex) { - return static_cast<CFWL_ContentImp*>(GetImpl())->InsertWidget(pChild, nIndex); -} -FWL_ERR IFWL_Content::RemoveWidget(IFWL_Widget* pWidget) { - return static_cast<CFWL_ContentImp*>(GetImpl())->RemoveWidget(pWidget); -} -FWL_ERR IFWL_Content::RemoveAllWidgets() { - return static_cast<CFWL_ContentImp*>(GetImpl())->RemoveAllWidgets(); -} -FWL_ERR IFWL_Content::GetMinSize(FX_FLOAT& fWidth, FX_FLOAT& fHeight) { - return static_cast<CFWL_ContentImp*>(GetImpl())->GetMinSize(fWidth, fHeight); -} -FWL_ERR IFWL_Content::SetMinSize(FX_FLOAT fWidth, FX_FLOAT fHeight) { - return static_cast<CFWL_ContentImp*>(GetImpl())->SetMinSize(fWidth, fHeight); -} -FWL_ERR IFWL_Content::GetMaxSize(FX_FLOAT& fWidth, FX_FLOAT& fHeight) { - return static_cast<CFWL_ContentImp*>(GetImpl())->GetMaxSize(fWidth, fHeight); -} -FWL_ERR IFWL_Content::SetMaxSize(FX_FLOAT fWidth, FX_FLOAT fHeight) { - return static_cast<CFWL_ContentImp*>(GetImpl())->SetMaxSize(fWidth, fHeight); -} -IFWL_Content::IFWL_Content() {} -CFWL_ContentImp::CFWL_ContentImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) - : CFWL_WidgetImp(properties, pOuter), - m_fWidthMin(0), - m_fWidthMax(10000), - m_fHeightMin(0), - m_fHeightMax(10000) {} -CFWL_ContentImp::~CFWL_ContentImp() {} -FWL_ERR CFWL_ContentImp::InsertWidget(IFWL_Widget* pChild, int32_t nIndex) { - if (!pChild) - return FWL_ERR_Indefinite; - pChild->SetParent(m_pInterface); - if (nIndex == -1) { - return FWL_ERR_Succeeded; - } - CFWL_WidgetMgr* pMgr = static_cast<CFWL_WidgetMgr*>(FWL_GetWidgetMgr()); - if (!pMgr) - return FWL_ERR_Indefinite; - pMgr->SetWidgetIndex(pChild, nIndex); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ContentImp::RemoveWidget(IFWL_Widget* pWidget) { - if (!pWidget) - return FWL_ERR_Indefinite; - pWidget->SetParent(NULL); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ContentImp::RemoveAllWidgets() { - CFWL_WidgetMgr* pMgr = static_cast<CFWL_WidgetMgr*>(FWL_GetWidgetMgr()); - if (!pMgr) - return FWL_ERR_Indefinite; - while (IFWL_Widget* widget = - pMgr->GetWidget(m_pInterface, FWL_WGTRELATION_FirstChild)) { - pMgr->SetParent(NULL, widget); - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ContentImp::GetMinSize(FX_FLOAT& fWidth, FX_FLOAT& fHeight) { - fWidth = m_fWidthMin; - fHeight = m_fHeightMin; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ContentImp::SetMinSize(FX_FLOAT fWidth, FX_FLOAT fHeight) { - m_fWidthMin = fWidth; - m_fHeightMin = fHeight; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ContentImp::GetMaxSize(FX_FLOAT& fWidth, FX_FLOAT& fHeight) { - fWidth = m_fWidthMax; - fHeight = m_fHeightMax; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ContentImp::SetMaxSize(FX_FLOAT fWidth, FX_FLOAT fHeight) { - m_fWidthMax = fWidth; - m_fHeightMax = fHeight; - return FWL_ERR_Succeeded; -} diff --git a/xfa/src/fwl/core/fwl_contentimp.h b/xfa/src/fwl/core/fwl_contentimp.h deleted file mode 100644 index d2b0277a86..0000000000 --- a/xfa/src/fwl/core/fwl_contentimp.h +++ /dev/null @@ -1,35 +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 - -#ifndef XFA_SRC_FWL_CORE_FWL_CONTENTIMP_H_ -#define XFA_SRC_FWL_CORE_FWL_CONTENTIMP_H_ - -#include "xfa/src/fwl/core/fwl_widgetimp.h" - -class IFWL_Widget; - -class CFWL_ContentImp : public CFWL_WidgetImp { - public: - CFWL_ContentImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter); - - virtual ~CFWL_ContentImp(); - virtual FWL_ERR InsertWidget(IFWL_Widget* pChild, int32_t nIndex = -1); - virtual FWL_ERR RemoveWidget(IFWL_Widget* pWidget); - virtual FWL_ERR RemoveAllWidgets(); - FWL_ERR GetMinSize(FX_FLOAT& fWidth, FX_FLOAT& fHeight); - FWL_ERR SetMinSize(FX_FLOAT fWidth, FX_FLOAT fHeight); - FWL_ERR GetMaxSize(FX_FLOAT& fWidth, FX_FLOAT& fHeight); - FWL_ERR SetMaxSize(FX_FLOAT fWidth, FX_FLOAT fHeight); - - protected: - FX_FLOAT m_fWidthMin; - FX_FLOAT m_fWidthMax; - FX_FLOAT m_fHeightMin; - FX_FLOAT m_fHeightMax; -}; - -#endif // XFA_SRC_FWL_CORE_FWL_CONTENTIMP_H_ 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; -} diff --git a/xfa/src/fwl/core/fwl_formimp.h b/xfa/src/fwl/core/fwl_formimp.h deleted file mode 100644 index ad31da807c..0000000000 --- a/xfa/src/fwl/core/fwl_formimp.h +++ /dev/null @@ -1,193 +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 - -#ifndef XFA_SRC_FWL_CORE_FWL_FORMIMP_H_ -#define XFA_SRC_FWL_CORE_FWL_FORMIMP_H_ - -#include "xfa/include/fwl/core/fwl_form.h" -#include "xfa/src/fwl/core/fwl_panelimp.h" -#include "xfa/src/fwl/core/fwl_widgetimp.h" - -class CFWL_NoteLoop; -class CFWL_WidgetImpProperties; -class CFWL_MsgMouse; -class IFWL_Widget; -class IFWL_ThemeProvider; -class CFWL_SysBtn; -class CFWL_FormImp; -class CFWL_FormImpDelegate; - -#define FWL_SYSBUTTONSTATE_Hover 0x0001 -#define FWL_SYSBUTTONSTATE_Pressed 0x0002 -#define FWL_SYSBUTTONSTATE_Disabled 0x0010 -class CFWL_SysBtn { - public: - CFWL_SysBtn() { - m_rtBtn.Set(0, 0, 0, 0); - m_dwState = 0; - } - - FX_BOOL IsHover() { return m_dwState & FWL_SYSBUTTONSTATE_Hover; } - FX_BOOL IsPressed() { return m_dwState & FWL_SYSBUTTONSTATE_Pressed; } - FX_BOOL IsDisabled() { return m_dwState & FWL_SYSBUTTONSTATE_Disabled; } - void SetNormal() { m_dwState &= 0xFFF0; } - void SetPressed() { - SetNormal(); - m_dwState |= FWL_SYSBUTTONSTATE_Pressed; - } - void SetHover() { - SetNormal(); - m_dwState |= FWL_SYSBUTTONSTATE_Hover; - } - void SetDisabled(FX_BOOL bDisabled) { - bDisabled ? m_dwState |= FWL_SYSBUTTONSTATE_Disabled - : m_dwState &= ~FWL_SYSBUTTONSTATE_Disabled; - } - int32_t GetPartState() { - return (IsDisabled() ? FWL_PARTSTATE_FRM_Disabled : (m_dwState + 1)); - } - - CFX_RectF m_rtBtn; - FX_DWORD m_dwState; -}; -enum FORM_RESIZETYPE { - FORM_RESIZETYPE_None = 0, - FORM_RESIZETYPE_Cap, - FORM_RESIZETYPE_Left, - FORM_RESIZETYPE_Top, - FORM_RESIZETYPE_Right, - FORM_RESIZETYPE_Bottom, - FORM_RESIZETYPE_LeftTop, - FORM_RESIZETYPE_LeftBottom, - FORM_RESIZETYPE_RightTop, - FORM_RESIZETYPE_RightBottom -}; -typedef struct RestoreResizeInfo { - CFX_PointF m_ptStart; - CFX_SizeF m_szStart; -} RestoreInfo; -class CFWL_FormImp : public CFWL_PanelImp { - public: - CFWL_FormImp(const CFWL_WidgetImpProperties& properties, IFWL_Widget* pOuter); - virtual ~CFWL_FormImp(); - virtual FWL_ERR GetClassName(CFX_WideString& wsClass) const; - virtual FX_DWORD GetClassID() const; - virtual FX_BOOL IsInstance(const CFX_WideStringC& wsClass) const; - virtual FWL_ERR Initialize(); - virtual FWL_ERR Finalize(); - - virtual FWL_ERR GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize = FALSE); - virtual FWL_ERR GetClientRect(CFX_RectF& rect); - virtual FWL_ERR Update(); - virtual FX_DWORD HitTest(FX_FLOAT fx, FX_FLOAT fy); - virtual FWL_ERR DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL); - virtual FWL_FORMSIZE GetFormSize(); - virtual FWL_ERR SetFormSize(FWL_FORMSIZE eFormSize); - virtual IFWL_Widget* DoModal(); - virtual IFWL_Widget* DoModal(FX_DWORD& dwCommandID); - virtual FWL_ERR EndDoModal(); - virtual FWL_ERR SetBorderRegion(CFX_Path* pPath); - virtual void DrawBackground(CFX_Graphics* pGraphics, - IFWL_ThemeProvider* pTheme); - CFWL_WidgetImp* GetSubFocus(); - void SetSubFocus(CFWL_WidgetImp* pWidget); - CFX_MapAccelerators& GetAccelerator(); - void SetAccelerator(CFX_MapAccelerators* pAccelerators); - - protected: - void ShowChildWidget(IFWL_Widget* pParent); - void RemoveSysButtons(); - void CalcContentRect(CFX_RectF& rtContent); - CFWL_SysBtn* GetSysBtnAtPoint(FX_FLOAT fx, FX_FLOAT fy); - CFWL_SysBtn* GetSysBtnByState(FX_DWORD dwState); - CFWL_SysBtn* GetSysBtnByIndex(int32_t nIndex); - int32_t GetSysBtnIndex(CFWL_SysBtn* pBtn); - FX_FLOAT GetCaptionHeight(); - void DrawCaptionText(CFX_Graphics* pGs, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix = NULL); - void DrawIconImage(CFX_Graphics* pGs, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix = NULL); - void GetEdgeRect(CFX_RectF& rtEdge); - void SetWorkAreaRect(); - void SetCursor(FX_FLOAT fx, FX_FLOAT fy); - void Layout(); - void ReSetSysBtn(); - void RegisterForm(); - void UnRegisterForm(); - FX_BOOL IsDoModal(); - void SetThemeData(); - FX_BOOL HasIcon(); - void UpdateIcon(); - void UpdateCaption(); - void DoWidthLimit(FX_FLOAT& fLeft, - FX_FLOAT& fWidth, - FX_FLOAT fCurX, - FX_FLOAT fSpace, - FX_FLOAT fLimitMin, - FX_FLOAT fLimitMax, - FX_BOOL bLeft); - void DoHeightLimit(FX_FLOAT& fTop, - FX_FLOAT& fHeight, - FX_FLOAT fCurY, - FX_FLOAT fSpace, - FX_FLOAT fLimitMin, - FX_FLOAT fLimitMax, - FX_BOOL bTop); - CFX_MapAccelerators m_mapAccelerators; - CFX_RectF m_rtRestore; - CFX_RectF m_rtCaptionText; - CFX_RectF m_rtRelative; - CFX_RectF m_rtCaption; - CFX_RectF m_rtIcon; - CFWL_SysBtn* m_pCloseBox; - CFWL_SysBtn* m_pMinBox; - CFWL_SysBtn* m_pMaxBox; - CFWL_SysBtn* m_pCaptionBox; - CFWL_NoteLoop* m_pNoteLoop; - CFWL_WidgetImp* m_pSubFocus; - RestoreInfo m_InfoStart; - FX_FLOAT m_fCXBorder; - FX_FLOAT m_fCYBorder; - int32_t m_iCaptureBtn; - int32_t m_iSysBox; - int32_t m_eResizeType; - FX_BOOL m_bLButtonDown; - FX_BOOL m_bMaximized; - FX_BOOL m_bSetMaximize; - FX_BOOL m_bCustomizeLayout; - FWL_FORMSIZE m_eFormSize; - FX_BOOL m_bDoModalFlag; - FX_FLOAT m_fSmallIconSz; - FX_FLOAT m_fBigIconSz; - CFX_DIBitmap* m_pBigIcon; - CFX_DIBitmap* m_pSmallIcon; - FX_BOOL m_bMouseIn; - friend class CFWL_FormImpDelegate; -}; -class CFWL_FormImpDelegate : public CFWL_WidgetImpDelegate { - public: - CFWL_FormImpDelegate(CFWL_FormImp* pOwner); - int32_t OnProcessMessage(CFWL_Message* pMessage) override; - FWL_ERR OnProcessEvent(CFWL_Event* pEvent) override; - FWL_ERR OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL) override; - - protected: - void OnLButtonDown(CFWL_MsgMouse* pMsg); - void OnLButtonUp(CFWL_MsgMouse* pMsg); - void OnMouseMove(CFWL_MsgMouse* pMsg); - void OnMouseHover(CFWL_MsgMouse* pMsg); - void OnMouseLeave(CFWL_MsgMouse* pMsg); - void OnLButtonDblClk(CFWL_MsgMouse* pMsg); - void OnWindowMove(CFWL_MsgWindowMove* pMsg); - void OnClose(CFWL_MsgClose* pMsg); - CFWL_FormImp* m_pOwner; -}; - -#endif // XFA_SRC_FWL_CORE_FWL_FORMIMP_H_ diff --git a/xfa/src/fwl/core/fwl_gridimp.cpp b/xfa/src/fwl/core/fwl_gridimp.cpp deleted file mode 100644 index 1230fa2655..0000000000 --- a/xfa/src/fwl/core/fwl_gridimp.cpp +++ /dev/null @@ -1,1378 +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_gridimp.h" - -#include "xfa/src/fwl/core/fwl_contentimp.h" -#include "xfa/src/fwl/core/fwl_noteimp.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" - -// static -IFWL_Grid* IFWL_Grid::Create(const CFWL_WidgetImpProperties& properties) { - IFWL_Grid* pGrid = new IFWL_Grid; - CFWL_GridImp* pGridImpl = new CFWL_GridImp(properties, nullptr); - pGrid->SetImpl(pGridImpl); - pGridImpl->SetInterface(pGrid); - return pGrid; -} -IFWL_Grid::IFWL_Grid() {} -FWL_HGRIDCOLROW IFWL_Grid::InsertColRow(FX_BOOL bColumn, int32_t nIndex) { - return static_cast<CFWL_GridImp*>(GetImpl())->InsertColRow(bColumn, nIndex); -} -int32_t IFWL_Grid::CountColRows(FX_BOOL bColumn) { - return static_cast<CFWL_GridImp*>(GetImpl())->CountColRows(bColumn); -} -FWL_HGRIDCOLROW IFWL_Grid::GetColRow(FX_BOOL bColumn, int32_t nIndex) { - return static_cast<CFWL_GridImp*>(GetImpl())->GetColRow(bColumn, nIndex); -} -int32_t IFWL_Grid::GetIndex(FWL_HGRIDCOLROW hColRow) { - return static_cast<CFWL_GridImp*>(GetImpl())->GetIndex(hColRow); -} -FX_FLOAT IFWL_Grid::GetSize(FWL_HGRIDCOLROW hColRow, FWL_GRIDUNIT& eUnit) { - return static_cast<CFWL_GridImp*>(GetImpl())->GetSize(hColRow, eUnit); -} -FWL_ERR IFWL_Grid::SetSize(FWL_HGRIDCOLROW hColRow, - FX_FLOAT fSize, - FWL_GRIDUNIT eUnit) { - return static_cast<CFWL_GridImp*>(GetImpl())->SetSize(hColRow, fSize, eUnit); -} -FX_FLOAT IFWL_Grid::GetMinSize(FWL_HGRIDCOLROW hColRow, FWL_GRIDUNIT& eUnit) { - return static_cast<CFWL_GridImp*>(GetImpl())->GetMinSize(hColRow, eUnit); -} -FWL_ERR IFWL_Grid::SetMinSize(FWL_HGRIDCOLROW hColRow, - FX_FLOAT fSize, - FWL_GRIDUNIT eUnit) { - return static_cast<CFWL_GridImp*>(GetImpl()) - ->SetMinSize(hColRow, fSize, eUnit); -} -FX_FLOAT IFWL_Grid::GetMaxSize(FWL_HGRIDCOLROW hColRow, FWL_GRIDUNIT& eUnit) { - return static_cast<CFWL_GridImp*>(GetImpl())->GetMaxSize(hColRow, eUnit); -} -FWL_ERR IFWL_Grid::SetMaxSize(FWL_HGRIDCOLROW hColRow, - FX_FLOAT fSize, - FWL_GRIDUNIT eUnit) { - return static_cast<CFWL_GridImp*>(GetImpl()) - ->SetMaxSize(hColRow, fSize, eUnit); -} -FX_BOOL IFWL_Grid::DeleteColRow(FWL_HGRIDCOLROW hColRow) { - return static_cast<CFWL_GridImp*>(GetImpl())->DeleteColRow(hColRow); -} -FX_BOOL IFWL_Grid::IsColumn(FWL_HGRIDCOLROW hColRow) { - return static_cast<CFWL_GridImp*>(GetImpl())->IsColumn(hColRow); -} -int32_t IFWL_Grid::GetWidgetPos(IFWL_Widget* pWidget, FX_BOOL bColumn) { - return static_cast<CFWL_GridImp*>(GetImpl())->GetWidgetPos(pWidget, bColumn); -} -FWL_ERR IFWL_Grid::SetWidgetPos(IFWL_Widget* pWidget, - int32_t iPos, - FX_BOOL bColumn) { - return static_cast<CFWL_GridImp*>(GetImpl()) - ->SetWidgetPos(pWidget, iPos, bColumn); -} -int32_t IFWL_Grid::GetWidgetSpan(IFWL_Widget* pWidget, FX_BOOL bColumn) { - return static_cast<CFWL_GridImp*>(GetImpl())->GetWidgetSpan(pWidget, bColumn); -} -FWL_ERR IFWL_Grid::SetWidgetSpan(IFWL_Widget* pWidget, - int32_t iSpan, - FX_BOOL bColumn) { - return static_cast<CFWL_GridImp*>(GetImpl()) - ->SetWidgetSpan(pWidget, iSpan, bColumn); -} -FX_FLOAT IFWL_Grid::GetWidgetSize(IFWL_Widget* pWidget, - FWL_GRIDSIZE eSize, - FWL_GRIDUNIT& eUnit) { - return static_cast<CFWL_GridImp*>(GetImpl()) - ->GetWidgetSize(pWidget, eSize, eUnit); -} -FWL_ERR IFWL_Grid::SetWidgetSize(IFWL_Widget* pWidget, - FWL_GRIDSIZE eSize, - FX_FLOAT fSize, - FWL_GRIDUNIT eUit) { - return static_cast<CFWL_GridImp*>(GetImpl()) - ->SetWidgetSize(pWidget, eSize, fSize, eUit); -} -FX_BOOL IFWL_Grid::GetWidgetMargin(IFWL_Widget* pWidget, - FWL_GRIDMARGIN eMargin, - FX_FLOAT& fMargin) { - return static_cast<CFWL_GridImp*>(GetImpl()) - ->GetWidgetMargin(pWidget, eMargin, fMargin); -} -FWL_ERR IFWL_Grid::SetWidgetMargin(IFWL_Widget* pWidget, - FWL_GRIDMARGIN eMargin, - FX_FLOAT fMargin) { - return static_cast<CFWL_GridImp*>(GetImpl()) - ->SetWidgetMargin(pWidget, eMargin, fMargin); -} -FWL_ERR IFWL_Grid::RemoveWidgetMargin(IFWL_Widget* pWidget, - FWL_GRIDMARGIN eMargin) { - return static_cast<CFWL_GridImp*>(GetImpl()) - ->RemoveWidgetMargin(pWidget, eMargin); -} -FX_FLOAT IFWL_Grid::GetGridSize(FWL_GRIDSIZE eSize, FWL_GRIDUNIT& eUnit) { - return static_cast<CFWL_GridImp*>(GetImpl())->GetGridSize(eSize, eUnit); -} -FWL_ERR IFWL_Grid::SetGridSize(FWL_GRIDSIZE eSize, - FX_FLOAT fSize, - FWL_GRIDUNIT eUit) { - return static_cast<CFWL_GridImp*>(GetImpl())->SetGridSize(eSize, fSize, eUit); -} - -CFWL_GridImp::CFWL_GridImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) - : CFWL_ContentImp(properties, pOuter) { - m_Size[FWL_GRIDSIZE_Width].eUnit = FWL_GRIDUNIT_Auto; - m_Size[FWL_GRIDSIZE_Width].fLength = 0; - m_Size[FWL_GRIDSIZE_Height].eUnit = FWL_GRIDUNIT_Auto; - m_Size[FWL_GRIDSIZE_Height].fLength = 0; - m_Size[FWL_GRIDSIZE_MinWidth].eUnit = FWL_GRIDUNIT_Fixed; - m_Size[FWL_GRIDSIZE_MinWidth].fLength = 0; - m_Size[FWL_GRIDSIZE_MaxWidth].eUnit = FWL_GRIDUNIT_Infinity; - m_Size[FWL_GRIDSIZE_MaxWidth].fLength = 0; - m_Size[FWL_GRIDSIZE_MinHeight].eUnit = FWL_GRIDUNIT_Fixed; - m_Size[FWL_GRIDSIZE_MinHeight].fLength = 0; - m_Size[FWL_GRIDSIZE_MaxHeight].eUnit = FWL_GRIDUNIT_Infinity; - m_Size[FWL_GRIDSIZE_MaxHeight].fLength = 0; -} -CFWL_GridImp::~CFWL_GridImp() { - int32_t iCount = m_Columns.GetSize(); - for (int32_t i = 0; i < iCount; i++) { - delete static_cast<CFWL_GridColRow*>(m_Columns[i]); - } - m_Columns.RemoveAll(); - iCount = m_Rows.GetSize(); - for (int32_t j = 0; j < iCount; j++) { - delete static_cast<CFWL_GridColRow*>(m_Rows[j]); - } - m_Rows.RemoveAll(); - FX_POSITION ps = m_mapWidgetInfo.GetStartPosition(); - while (ps) { - IFWL_Widget* pWidget; - CFWL_GridWidgetInfo* pInfo; - m_mapWidgetInfo.GetNextAssoc(ps, (void*&)pWidget, (void*&)pInfo); - delete pInfo; - } - m_mapWidgetInfo.RemoveAll(); - delete m_pDelegate; - m_pDelegate = nullptr; -} -FWL_ERR CFWL_GridImp::GetClassName(CFX_WideString& wsClass) const { - wsClass = FWL_CLASS_Grid; - return FWL_ERR_Succeeded; -} -FX_DWORD CFWL_GridImp::GetClassID() const { - return FWL_CLASSHASH_Grid; -} -FWL_ERR CFWL_GridImp::Initialize() { - if (CFWL_ContentImp::Initialize() != FWL_ERR_Succeeded) - return FWL_ERR_Indefinite; - m_pDelegate = new CFWL_GridImpDelegate(this); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_GridImp::Finalize() { - if (CFWL_ContentImp::Finalize() != FWL_ERR_Succeeded) - return FWL_ERR_Indefinite; - delete m_pDelegate; - m_pDelegate = nullptr; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_GridImp::GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize) { - if (bAutoSize) { - rect.left = 0; - rect.top = 0; - rect.width = ProcessUnCertainColumns(); - rect.height = ProcessUnCertainRows(); - } else { - rect = m_pProperties->m_rtWidget; - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_GridImp::SetWidgetRect(const CFX_RectF& rect) { - CFWL_WidgetImp::SetWidgetRect(rect); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_GridImp::Update() { - if (IsLocked()) { - return FWL_ERR_Indefinite; - } - ProcessColumns(m_pProperties->m_rtWidget.width); - ProcessRows(m_pProperties->m_rtWidget.height); - SetAllWidgetsRect(); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_GridImp::DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - if (!pGraphics) - return FWL_ERR_Indefinite; - if ((m_pProperties->m_dwStyleExes & FWL_GRIDSTYLEEXT_ShowGridLines) == 0) { - return FWL_ERR_Succeeded; - } - pGraphics->SaveGraphState(); - if (pMatrix) { - pGraphics->ConcatMatrix(pMatrix); - } - { - FX_BOOL bDrawLine = FALSE; - CFX_Path path; - path.Create(); - int32_t iColumns = m_Columns.GetSize(); - for (int32_t i = 1; i < iColumns; i++) { - CFWL_GridColRow* pColRow = static_cast<CFWL_GridColRow*>(m_Columns[i]); - if (!pColRow) { - continue; - } - bDrawLine = TRUE; - path.AddLine(pColRow->m_fActualPos, 0, pColRow->m_fActualPos, - m_pProperties->m_rtWidget.height); - } - int32_t iRows = m_Rows.GetSize(); - for (int32_t j = 1; j < iRows; j++) { - CFWL_GridColRow* pColRow = static_cast<CFWL_GridColRow*>(m_Rows[j]); - if (!pColRow) { - continue; - } - bDrawLine = TRUE; - path.AddLine(0, pColRow->m_fActualPos, m_pProperties->m_rtWidget.width, - pColRow->m_fActualPos); - } - if (bDrawLine) { - CFX_Color cr(0xFFFF0000); - pGraphics->SetStrokeColor(&cr); - pGraphics->StrokePath(&path); - } - } - pGraphics->RestoreGraphState(); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_GridImp::InsertWidget(IFWL_Widget* pChild, int32_t nIndex) { - if (!pChild) - return FWL_ERR_Indefinite; - CFWL_ContentImp::InsertWidget(pChild, nIndex); - if (!m_mapWidgetInfo.GetValueAt(pChild)) { - CFWL_GridWidgetInfo* pInfo = new CFWL_GridWidgetInfo; - m_mapWidgetInfo.SetAt(pChild, pInfo); - m_Widgets.Add(pChild); - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_GridImp::RemoveWidget(IFWL_Widget* pWidget) { - if (!pWidget) - return FWL_ERR_Indefinite; - CFWL_ContentImp::RemoveWidget(pWidget); - if (CFWL_GridWidgetInfo* pInfo = static_cast<CFWL_GridWidgetInfo*>( - m_mapWidgetInfo.GetValueAt(pWidget))) { - m_mapWidgetInfo.RemoveKey(pWidget); - delete pInfo; - int32_t nIndex = m_Widgets.Find(pWidget); - m_Widgets.RemoveAt(nIndex, 1); - } - return FWL_ERR_Succeeded; -} -FWL_HGRIDCOLROW CFWL_GridImp::InsertColRow(FX_BOOL bColumn, int32_t nIndex) { - if (bColumn) { - if (nIndex < 0 || nIndex > m_Columns.GetSize()) { - nIndex = m_Columns.GetSize(); - } - CFWL_GridColRow* pColumn = new CFWL_GridColRow; - m_Columns.InsertAt(nIndex, pColumn, 1); - return (FWL_HGRIDCOLROW)pColumn; - } - if (nIndex < 0 || nIndex > m_Rows.GetSize()) { - nIndex = m_Rows.GetSize(); - } - CFWL_GridColRow* pRow = new CFWL_GridColRow; - m_Rows.InsertAt(nIndex, pRow, 1); - return (FWL_HGRIDCOLROW)pRow; -} -int32_t CFWL_GridImp::CountColRows(FX_BOOL bColumn) { - if (bColumn) { - return m_Columns.GetSize(); - } - return m_Rows.GetSize(); -} -FWL_HGRIDCOLROW CFWL_GridImp::GetColRow(FX_BOOL bColumn, int32_t nIndex) { - if (bColumn) { - if (nIndex < 0 || nIndex >= m_Columns.GetSize()) { - return NULL; - } - return (FWL_HGRIDCOLROW)m_Columns[nIndex]; - } - if (nIndex < 0 || nIndex >= m_Rows.GetSize()) { - return NULL; - } - return (FWL_HGRIDCOLROW)m_Rows[nIndex]; -} -int32_t CFWL_GridImp::GetIndex(FWL_HGRIDCOLROW hColRow) { - if (IsColumn(hColRow)) { - return m_Columns.Find(hColRow); - } - return m_Rows.Find(hColRow); -} -FX_FLOAT CFWL_GridImp::GetSize(FWL_HGRIDCOLROW hColRow, FWL_GRIDUNIT& eUnit) { - if (!hColRow) - return -1; - CFWL_GridColRow* pColRow = reinterpret_cast<CFWL_GridColRow*>(hColRow); - eUnit = pColRow->m_Size.eUnit; - return pColRow->m_Size.fLength; -} -FWL_ERR CFWL_GridImp::SetSize(FWL_HGRIDCOLROW hColRow, - FX_FLOAT fSize, - FWL_GRIDUNIT eUnit) { - if (!hColRow) - return FWL_ERR_Indefinite; - CFWL_GridColRow* pColRow = reinterpret_cast<CFWL_GridColRow*>(hColRow); - pColRow->m_Size.eUnit = eUnit; - pColRow->m_Size.fLength = fSize; - return FWL_ERR_Succeeded; -} -FX_FLOAT CFWL_GridImp::GetMinSize(FWL_HGRIDCOLROW hColRow, - FWL_GRIDUNIT& eUnit) { - if (!hColRow) - return -1; - CFWL_GridColRow* pColRow = reinterpret_cast<CFWL_GridColRow*>(hColRow); - eUnit = pColRow->m_MinSize.eUnit; - return pColRow->m_MinSize.fLength; -} -FWL_ERR CFWL_GridImp::SetMinSize(FWL_HGRIDCOLROW hColRow, - FX_FLOAT fSize, - FWL_GRIDUNIT eUnit) { - if (!hColRow) - return FWL_ERR_Indefinite; - CFWL_GridColRow* pColRow = reinterpret_cast<CFWL_GridColRow*>(hColRow); - pColRow->m_MinSize.eUnit = eUnit; - pColRow->m_MinSize.fLength = fSize; - return FWL_ERR_Succeeded; -} -FX_FLOAT CFWL_GridImp::GetMaxSize(FWL_HGRIDCOLROW hColRow, - FWL_GRIDUNIT& eUnit) { - if (!hColRow) - return -1; - CFWL_GridColRow* pColRow = reinterpret_cast<CFWL_GridColRow*>(hColRow); - eUnit = pColRow->m_MaxSize.eUnit; - return pColRow->m_MaxSize.fLength; -} -FWL_ERR CFWL_GridImp::SetMaxSize(FWL_HGRIDCOLROW hColRow, - FX_FLOAT fSize, - FWL_GRIDUNIT eUnit) { - if (!hColRow) - return FWL_ERR_Indefinite; - CFWL_GridColRow* pColRow = reinterpret_cast<CFWL_GridColRow*>(hColRow); - pColRow->m_MaxSize.eUnit = eUnit; - pColRow->m_MaxSize.fLength = fSize; - return FWL_ERR_Succeeded; -} -FX_BOOL CFWL_GridImp::DeleteColRow(FWL_HGRIDCOLROW hColRow) { - int32_t nIndex = m_Columns.Find(hColRow); - if (nIndex >= 0) { - m_Columns.RemoveAt(nIndex); - delete reinterpret_cast<CFWL_GridColRow*>(hColRow); - return TRUE; - } - nIndex = m_Rows.Find(hColRow); - if (nIndex >= 0) { - delete reinterpret_cast<CFWL_GridColRow*>(hColRow); - m_Rows.RemoveAt(nIndex); - return TRUE; - } - return FALSE; -} -FX_BOOL CFWL_GridImp::IsColumn(FWL_HGRIDCOLROW hColRow) { - return m_Columns.Find(hColRow) != -1; -} -int32_t CFWL_GridImp::GetWidgetPos(IFWL_Widget* pWidget, FX_BOOL bColumn) { - CFWL_GridWidgetInfo* pInfo = - static_cast<CFWL_GridWidgetInfo*>(GetWidgetInfo(pWidget)); - if (pInfo) { - return bColumn ? pInfo->m_iColumn : pInfo->m_iRow; - } - return -1; -} -FWL_ERR CFWL_GridImp::SetWidgetPos(IFWL_Widget* pWidget, - int32_t iPos, - FX_BOOL bColumn) { - CFWL_GridWidgetInfo* pInfo = - static_cast<CFWL_GridWidgetInfo*>(GetWidgetInfo(pWidget)); - if (pInfo) { - bColumn ? pInfo->m_iColumn = iPos : pInfo->m_iRow = iPos; - } - return FWL_ERR_Succeeded; -} -int32_t CFWL_GridImp::GetWidgetSpan(IFWL_Widget* pWidget, FX_BOOL bColumn) { - CFWL_GridWidgetInfo* pInfo = - static_cast<CFWL_GridWidgetInfo*>(GetWidgetInfo(pWidget)); - if (pInfo) { - return bColumn ? pInfo->m_iColumnSpan : pInfo->m_iRowSpan; - } - return 0; -} -FWL_ERR CFWL_GridImp::SetWidgetSpan(IFWL_Widget* pWidget, - int32_t iSpan, - FX_BOOL bColumn) { - CFWL_GridWidgetInfo* pInfo = - static_cast<CFWL_GridWidgetInfo*>(GetWidgetInfo(pWidget)); - if (pInfo) { - bColumn ? pInfo->m_iColumnSpan = iSpan : pInfo->m_iRowSpan = iSpan; - } - return FWL_ERR_Succeeded; -} -FX_FLOAT CFWL_GridImp::GetWidgetSize(IFWL_Widget* pWidget, - FWL_GRIDSIZE eSize, - FWL_GRIDUNIT& eUnit) { - CFWL_GridWidgetInfo* pInfo = - static_cast<CFWL_GridWidgetInfo*>(GetWidgetInfo(pWidget)); - if (pInfo) { - eUnit = pInfo->m_Size[eSize].eUnit; - return pInfo->m_Size[eSize].fLength; - } - return 0; -} -FWL_ERR CFWL_GridImp::SetWidgetSize(IFWL_Widget* pWidget, - FWL_GRIDSIZE eSize, - FX_FLOAT fSize, - FWL_GRIDUNIT eUit) { - CFWL_GridWidgetInfo* pInfo = - static_cast<CFWL_GridWidgetInfo*>(GetWidgetInfo(pWidget)); - if (pInfo) { - pInfo->m_Size[eSize].fLength = fSize; - pInfo->m_Size[eSize].eUnit = eUit; - } - return FWL_ERR_Succeeded; -} -FX_BOOL CFWL_GridImp::GetWidgetMargin(IFWL_Widget* pWidget, - FWL_GRIDMARGIN eMargin, - FX_FLOAT& fMargin) { - CFWL_GridWidgetInfo* pInfo = - static_cast<CFWL_GridWidgetInfo*>(GetWidgetInfo(pWidget)); - if (pInfo) { - fMargin = pInfo->m_Margin[eMargin]; - return (pInfo->m_dwMarginFlag & (1 << eMargin)) != 0; - } - return FALSE; -} -FWL_ERR CFWL_GridImp::SetWidgetMargin(IFWL_Widget* pWidget, - FWL_GRIDMARGIN eMargin, - FX_FLOAT fMargin) { - CFWL_GridWidgetInfo* pInfo = - static_cast<CFWL_GridWidgetInfo*>(GetWidgetInfo(pWidget)); - if (pInfo) { - pInfo->m_Margin[eMargin] = fMargin; - pInfo->m_dwMarginFlag |= (1 << eMargin); - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_GridImp::RemoveWidgetMargin(IFWL_Widget* pWidget, - FWL_GRIDMARGIN eMargin) { - CFWL_GridWidgetInfo* pInfo = - static_cast<CFWL_GridWidgetInfo*>(GetWidgetInfo(pWidget)); - if (pInfo) { - pInfo->m_dwMarginFlag &= ~(1 << eMargin); - } - return FWL_ERR_Succeeded; -} -FX_FLOAT CFWL_GridImp::GetGridSize(FWL_GRIDSIZE eSize, FWL_GRIDUNIT& eUnit) { - eUnit = m_Size[eSize].eUnit; - return m_Size[eSize].fLength; -} -FWL_ERR CFWL_GridImp::SetGridSize(FWL_GRIDSIZE eSize, - FX_FLOAT fSize, - FWL_GRIDUNIT eUit) { - m_Size[eSize].fLength = fSize; - m_Size[eSize].eUnit = eUit; - return FWL_ERR_Succeeded; -} -CFWL_GridWidgetInfo* CFWL_GridImp::GetWidgetInfo(IFWL_Widget* pWidget) { - return static_cast<CFWL_GridWidgetInfo*>(m_mapWidgetInfo.GetValueAt(pWidget)); -} -void CFWL_GridImp::ProcFixedColRow(CFWL_GridColRow* pColRow, - int32_t nIndex, - FX_FLOAT fColRowSize, - FX_BOOL bColumn) { - pColRow->m_fActualSize = fColRowSize; - FX_POSITION ps = m_mapWidgetInfo.GetStartPosition(); - while (ps) { - void* key = nullptr; - void* value = nullptr; - m_mapWidgetInfo.GetNextAssoc(ps, key, value); - IFWL_Widget* pWidget = static_cast<IFWL_Widget*>(key); - CFWL_GridWidgetInfo* pInfo = static_cast<CFWL_GridWidgetInfo*>(value); - if (bColumn) { - if (pInfo->m_iColumn == nIndex && pInfo->m_iColumnSpan == 1) { - CalcWidgetWidth(pWidget, pInfo, pColRow->m_fActualSize); - } - } else { - if (pInfo->m_iRow == nIndex && pInfo->m_iRowSpan == 1) { - CalcWidgetHeigt(pWidget, pInfo, pColRow->m_fActualSize); - } - } - } -} -void CFWL_GridImp::ProcAutoColRow(CFWL_GridColRow* pColRow, - int32_t nIndex, - FX_BOOL bColumn) { - if (!pColRow) - return; - FX_FLOAT fMaxSize = 0, fWidgetSize = 0; - FX_POSITION ps = m_mapWidgetInfo.GetStartPosition(); - while (ps) { - IFWL_Widget* pWidget = NULL; - CFWL_GridWidgetInfo* pInfo = NULL; - m_mapWidgetInfo.GetNextAssoc(ps, (void*&)pWidget, (void*&)pInfo); - if (!pWidget || !pInfo) { - continue; - } - if (bColumn) { - if (pInfo->m_iColumn != nIndex || pInfo->m_iColumnSpan != 1) { - continue; - } - fWidgetSize = CalcAutoColumnWidgetWidth(pWidget, pInfo); - if (fMaxSize < fWidgetSize) { - fMaxSize = fWidgetSize; - } - } else { - if (pInfo->m_iRow != nIndex || pInfo->m_iRowSpan != 1) { - continue; - } - fWidgetSize = CalcAutoColumnWidgetHeight(pWidget, pInfo); - if (fMaxSize < fWidgetSize) { - fMaxSize = fWidgetSize; - } - } - } - SetColRowActualSize(pColRow, fMaxSize); -} -void CFWL_GridImp::ProcScaledColRow(CFWL_GridColRow* pColRow, - int32_t nIndex, - FX_FLOAT fColRowSize, - FX_BOOL bColumn) { - if (fColRowSize > 0) { - ProcFixedColRow(pColRow, nIndex, fColRowSize, bColumn); - } -} -void CFWL_GridImp::CalcWidgetWidth(IFWL_Widget* pWidget, - CFWL_GridWidgetInfo* pInfo, - FX_FLOAT fColunmWidth) { - if (pInfo->m_Size[FWL_GRIDSIZE_Width].eUnit == FWL_GRIDUNIT_Fixed) { - SetWidgetActualWidth(pInfo, pInfo->m_Size[FWL_GRIDSIZE_Width].fLength); - } else { - FX_FLOAT fWidth = 0; - FX_FLOAT fLeftMargin = 0, fRightMargin = 0; - FX_BOOL bLeftMargin = - GetWidgetMargin(pWidget, FWL_GRIDMARGIN_Left, fLeftMargin); - FX_BOOL bRightMargin = - GetWidgetMargin(pWidget, FWL_GRIDMARGIN_Right, fRightMargin); - if (bLeftMargin && bRightMargin) { - fWidth = fColunmWidth - fLeftMargin - fRightMargin; - } else { - CFX_RectF rtAuto; - pWidget->GetWidgetRect(rtAuto, TRUE); - fWidth = rtAuto.Width(); - } - SetWidgetActualWidth(pInfo, fWidth); - } -} -void CFWL_GridImp::CalcWidgetHeigt(IFWL_Widget* pWidget, - CFWL_GridWidgetInfo* pInfo, - FX_FLOAT fRowHeigt) { - if (pInfo->m_Size[FWL_GRIDSIZE_Height].eUnit == FWL_GRIDUNIT_Fixed) { - SetWidgetActualHeight(pInfo, pInfo->m_Size[FWL_GRIDSIZE_Height].fLength); - } else { - FX_FLOAT fHeight = 0; - FX_FLOAT fTopMargin = 0, fBottomMargin = 0; - FX_BOOL bTopMargin = - GetWidgetMargin(pWidget, FWL_GRIDMARGIN_Top, fTopMargin); - FX_BOOL bBottomMargin = - GetWidgetMargin(pWidget, FWL_GRIDMARGIN_Bottom, fBottomMargin); - if (bTopMargin && bBottomMargin) { - fHeight = fRowHeigt - fTopMargin - fBottomMargin; - } else { - CFX_RectF rtAuto; - pWidget->GetWidgetRect(rtAuto, TRUE); - fHeight = rtAuto.Height(); - } - SetWidgetActualHeight(pInfo, fHeight); - } -} -FX_FLOAT CFWL_GridImp::CalcAutoColumnWidgetWidth(IFWL_Widget* pWidget, - CFWL_GridWidgetInfo* pInfo) { - FX_FLOAT fLeftMargin = 0, fRightMargin = 0; - FX_BOOL bLeftMargin = - GetWidgetMargin(pWidget, FWL_GRIDMARGIN_Left, fLeftMargin); - FX_BOOL bRightMargin = - GetWidgetMargin(pWidget, FWL_GRIDMARGIN_Right, fRightMargin); - if (pInfo->m_Size[FWL_GRIDSIZE_Width].eUnit == FWL_GRIDUNIT_Fixed) { - SetWidgetActualWidth(pInfo, pInfo->m_Size[FWL_GRIDSIZE_Width].fLength); - } else { - CFX_RectF rtAuto; - pWidget->GetWidgetRect(rtAuto, TRUE); - FX_FLOAT fWidth = rtAuto.width; - SetWidgetActualWidth(pInfo, fWidth); - } - FX_FLOAT fTotal = pInfo->m_fActualWidth; - if (bLeftMargin) { - fTotal += fLeftMargin; - } - if (bRightMargin) { - fTotal += fRightMargin; - } - return fTotal; -} -FX_FLOAT CFWL_GridImp::CalcAutoColumnWidgetHeight(IFWL_Widget* pWidget, - CFWL_GridWidgetInfo* pInfo) { - FX_FLOAT fTopMargin = 0, fBottomMargin = 0; - FX_BOOL bTopMargin = GetWidgetMargin(pWidget, FWL_GRIDMARGIN_Top, fTopMargin); - FX_BOOL bBottomMargin = - GetWidgetMargin(pWidget, FWL_GRIDMARGIN_Bottom, fBottomMargin); - if (pInfo->m_Size[FWL_GRIDSIZE_Height].eUnit == FWL_GRIDUNIT_Fixed) { - SetWidgetActualHeight(pInfo, pInfo->m_Size[FWL_GRIDSIZE_Height].fLength); - } else { - CFX_RectF rtAuto; - pWidget->GetWidgetRect(rtAuto, TRUE); - FX_FLOAT fHeight = rtAuto.height; - SetWidgetActualHeight(pInfo, fHeight); - } - FX_FLOAT fTotal = pInfo->m_fActualHeight; - if (bTopMargin) { - fTotal += fTopMargin; - } - if (bBottomMargin) { - fTotal += fBottomMargin; - } - return fTotal; -} -FX_FLOAT CFWL_GridImp::ProcessColumns(FX_FLOAT fWidth) { - if (fWidth <= 0) { - return ProcessUnCertainColumns(); - } - int32_t iColumns = m_Columns.GetSize(); - if (iColumns < 1) { - return fWidth; - } - FX_FLOAT fFixedWidth = 0; - FX_FLOAT fAutoWidth = 0; - CFX_PtrArray autoColumns; - CFX_PtrArray scaledColumns; - FX_FLOAT fScaledColumnNum = 0; - for (int32_t i = 0; i < iColumns; i++) { - CFWL_GridColRow* pColRow = static_cast<CFWL_GridColRow*>(m_Columns[i]); - if (!pColRow) { - continue; - } - switch (pColRow->m_Size.eUnit) { - case FWL_GRIDUNIT_Fixed: { - SetColRowActualSize(pColRow, pColRow->m_Size.fLength); - fFixedWidth += pColRow->m_fActualSize; - break; - } - case FWL_GRIDUNIT_Auto: { - ProcAutoColRow(pColRow, i, TRUE); - autoColumns.Add(pColRow); - break; - } - case FWL_GRIDUNIT_Scaled: - default: { - fScaledColumnNum += pColRow->m_Size.fLength; - scaledColumns.Add(pColRow); - SetColRowActualSize(pColRow, 0); - } - } - } - FX_POSITION ps = m_mapWidgetInfo.GetStartPosition(); - while (ps) { - IFWL_Widget* pWidget = NULL; - CFWL_GridWidgetInfo* pInfo = NULL; - m_mapWidgetInfo.GetNextAssoc(ps, (void*&)pWidget, (void*&)pInfo); - if (!pInfo || pInfo->m_iColumnSpan < 2) { - continue; - } - CFX_PtrArray spanAutoColumns; - FX_FLOAT fSpanSize = 0; - int32_t iAutoColRows = 0; - int32_t iScaledColRows = 0; - for (int32_t i = 0; i < pInfo->m_iColumnSpan; i++) { - CFWL_GridColRow* pColumn = reinterpret_cast<CFWL_GridColRow*>( - GetColRow(TRUE, pInfo->m_iColumn + i)); - if (!pColumn) { - break; - } - fSpanSize += pColumn->m_fActualSize; - if (pColumn->m_Size.eUnit == FWL_GRIDUNIT_Auto) { - iAutoColRows++; - spanAutoColumns.Add(pColumn); - } else if (pColumn->m_Size.eUnit == FWL_GRIDUNIT_Scaled) { - iScaledColRows++; - } - } - if (iAutoColRows < 1) { - continue; - } - FX_FLOAT fWidgetWidth = CalcAutoColumnWidgetWidth(pWidget, pInfo); - if (fWidgetWidth > fSpanSize) { - if (iScaledColRows > 0) { - } else { - SetSpanAutoColRowSize(spanAutoColumns, fWidgetWidth - fSpanSize); - } - } - } - int32_t iAutoCols = autoColumns.GetSize(); - for (int32_t k = 0; k < iAutoCols; k++) { - fAutoWidth += static_cast<CFWL_GridColRow*>(autoColumns[k])->m_fActualSize; - } - FX_FLOAT fScaledWidth = fWidth - fFixedWidth - fAutoWidth; - if (fScaledWidth > 0 && fScaledColumnNum > 0) { - SetScaledColRowsSize(scaledColumns, fScaledWidth, fScaledColumnNum); - } - return fWidth; -} -FX_FLOAT CFWL_GridImp::ProcessRows(FX_FLOAT fHeight) { - if (fHeight <= 0) { - return ProcessUnCertainRows(); - } - int32_t iRows = m_Rows.GetSize(); - if (iRows < 1) { - return fHeight; - } - FX_FLOAT fFixedHeight = 0; - FX_FLOAT fAutoHeigt = 0; - CFX_PtrArray autoRows; - CFX_PtrArray scaledRows; - FX_FLOAT fScaledRowNum = 0; - for (int32_t i = 0; i < iRows; i++) { - CFWL_GridColRow* pColRow = static_cast<CFWL_GridColRow*>(m_Rows[i]); - if (!pColRow) { - continue; - } - switch (pColRow->m_Size.eUnit) { - case FWL_GRIDUNIT_Fixed: { - SetColRowActualSize(pColRow, pColRow->m_Size.fLength); - fFixedHeight += pColRow->m_fActualSize; - break; - } - case FWL_GRIDUNIT_Auto: { - ProcAutoColRow(pColRow, i, FALSE); - autoRows.Add(pColRow); - break; - } - case FWL_GRIDUNIT_Scaled: - default: { - fScaledRowNum += pColRow->m_Size.fLength; - scaledRows.Add(pColRow); - SetColRowActualSize(pColRow, 0); - break; - } - } - } - FX_POSITION ps = m_mapWidgetInfo.GetStartPosition(); - while (ps) { - IFWL_Widget* pWidget = NULL; - CFWL_GridWidgetInfo* pInfo = NULL; - m_mapWidgetInfo.GetNextAssoc(ps, (void*&)pWidget, (void*&)pInfo); - if (!pInfo || pInfo->m_iRowSpan < 2) { - continue; - } - CFX_PtrArray spanAutoRows; - FX_FLOAT fSpanSize = 0; - int32_t iAutoColRows = 0; - int32_t iScaledColRows = 0; - for (int32_t i = 0; i < pInfo->m_iRowSpan; i++) { - CFWL_GridColRow* pRow = reinterpret_cast<CFWL_GridColRow*>( - GetColRow(FALSE, pInfo->m_iRow + i)); - if (!pRow) { - break; - } - fSpanSize += pRow->m_fActualSize; - if (pRow->m_Size.eUnit == FWL_GRIDUNIT_Auto) { - iAutoColRows++; - spanAutoRows.Add(pRow); - } else if (pRow->m_Size.eUnit == FWL_GRIDUNIT_Scaled) { - iScaledColRows++; - } - } - if (iAutoColRows < 1) { - continue; - } - FX_FLOAT fWidgetHeight = CalcAutoColumnWidgetHeight(pWidget, pInfo); - if (fWidgetHeight > fSpanSize) { - if (iScaledColRows > 0) { - } else { - SetSpanAutoColRowSize(spanAutoRows, fWidgetHeight - fSpanSize); - } - } - } - int32_t iAutoRows = autoRows.GetSize(); - for (int32_t k = 0; k < iAutoRows; k++) { - fAutoHeigt += - reinterpret_cast<CFWL_GridColRow*>(autoRows[k])->m_fActualSize; - } - FX_FLOAT fScaledHeight = fHeight - fFixedHeight - fAutoHeigt; - if (fScaledHeight > 0 && fScaledRowNum > 0) { - SetScaledColRowsSize(scaledRows, fScaledHeight, fScaledRowNum); - } - return fHeight; -} -FX_FLOAT CFWL_GridImp::ProcessUnCertainColumns() { - int32_t iColumns = m_Columns.GetSize(); - if (iColumns < 1) { - CFWL_GridColRow* pColRow = new CFWL_GridColRow; - pColRow->m_Size.eUnit = FWL_GRIDUNIT_Auto; - ProcAutoColRow(pColRow, 0, TRUE); - FX_FLOAT fWidth = pColRow->m_fActualSize; - delete pColRow; - return fWidth; - } - FX_FLOAT fFixedWidth = 0; - CFX_PtrArray autoColumns; - CFX_PtrArray scaledColumns; - FX_FLOAT fScaledColumnNum = 0; - FX_FLOAT fScaledMaxPerWidth = 0; - for (int32_t i = 0; i < iColumns; i++) { - CFWL_GridColRow* pColRow = reinterpret_cast<CFWL_GridColRow*>(m_Columns[i]); - if (!pColRow) { - continue; - } - switch (pColRow->m_Size.eUnit) { - case FWL_GRIDUNIT_Fixed: { - SetColRowActualSize(pColRow, pColRow->m_Size.fLength); - fFixedWidth += pColRow->m_fActualSize; - break; - } - case FWL_GRIDUNIT_Auto: { - ProcAutoColRow(pColRow, i, TRUE); - autoColumns.Add(pColRow); - break; - } - case FWL_GRIDUNIT_Scaled: - default: { - ProcAutoColRow(pColRow, i, TRUE); - fScaledColumnNum += pColRow->m_Size.fLength; - scaledColumns.Add(pColRow); - if (pColRow->m_Size.fLength <= 0) { - break; - } - FX_FLOAT fPerWidth = pColRow->m_fActualSize / pColRow->m_Size.fLength; - if (fPerWidth > fScaledMaxPerWidth) { - fScaledMaxPerWidth = fPerWidth; - } - } - } - } - iColumns = scaledColumns.GetSize(); - for (int32_t j = 0; j < iColumns; j++) { - CFWL_GridColRow* pColRow = static_cast<CFWL_GridColRow*>(scaledColumns[j]); - if (!pColRow) { - continue; - } - SetColRowActualSize(pColRow, fScaledMaxPerWidth * pColRow->m_Size.fLength); - } - FX_POSITION ps = m_mapWidgetInfo.GetStartPosition(); - while (ps) { - IFWL_Widget* pWidget = NULL; - CFWL_GridWidgetInfo* pInfo = NULL; - m_mapWidgetInfo.GetNextAssoc(ps, (void*&)pWidget, (void*&)pInfo); - if (!pInfo || pInfo->m_iColumnSpan < 2) { - continue; - } - CFX_PtrArray spanAutoColumns; - CFX_PtrArray spanScaledColumns; - FX_FLOAT fSpanSize = 0; - FX_FLOAT fScaledSum = 0; - int32_t iAutoColRows = 0; - int32_t iScaledColRows = 0; - for (int32_t i = 0; i < pInfo->m_iColumnSpan; i++) { - CFWL_GridColRow* pColumn = reinterpret_cast<CFWL_GridColRow*>( - GetColRow(TRUE, pInfo->m_iColumn + i)); - if (!pColumn) { - break; - } - fSpanSize += pColumn->m_fActualSize; - if (pColumn->m_Size.eUnit == FWL_GRIDUNIT_Auto) { - iAutoColRows++; - spanAutoColumns.Add(pColumn); - } else if (pColumn->m_Size.eUnit == FWL_GRIDUNIT_Scaled) { - iScaledColRows++; - fScaledSum += pColumn->m_Size.fLength; - spanScaledColumns.Add(pColumn); - } - } - if (iAutoColRows < 1 && iScaledColRows < 1) { - continue; - } - FX_FLOAT fWidgetWidth = CalcAutoColumnWidgetWidth(pWidget, pInfo); - if (fWidgetWidth > fSpanSize) { - if (iScaledColRows > 0) { - if (fScaledSum <= 0) { - continue; - } - SetSpanScaledColRowSize(spanScaledColumns, fWidgetWidth - fSpanSize, - fScaledSum); - } else { - SetSpanAutoColRowSize(spanAutoColumns, fWidgetWidth - fSpanSize); - } - } - } - FX_FLOAT fAutoWidth = 0; - int32_t iAutoCols = autoColumns.GetSize(); - for (int32_t m = 0; m < iAutoCols; m++) { - fAutoWidth += static_cast<CFWL_GridColRow*>(autoColumns[m])->m_fActualSize; - } - FX_FLOAT fScaledWidth = 0; - iColumns = scaledColumns.GetSize(); - for (int32_t n = 0; n < iColumns; n++) { - fScaledWidth += - static_cast<CFWL_GridColRow*>(scaledColumns[n])->m_fActualSize; - } - return fFixedWidth + fAutoWidth + fScaledWidth; -} -FX_FLOAT CFWL_GridImp::ProcessUnCertainRows() { - int32_t iRows = m_Rows.GetSize(); - if (iRows < 1) { - CFWL_GridColRow* pColRow = new CFWL_GridColRow; - pColRow->m_Size.eUnit = FWL_GRIDUNIT_Auto; - ProcAutoColRow(pColRow, 0, FALSE); - FX_FLOAT fWidth = pColRow->m_fActualSize; - delete pColRow; - return fWidth; - } - FX_FLOAT fFixedHeight = 0; - CFX_PtrArray autoRows; - CFX_PtrArray scaledRows; - FX_FLOAT fScaledRowNum = 0; - FX_FLOAT fScaledMaxPerHeight = 0; - for (int32_t i = 0; i < iRows; i++) { - CFWL_GridColRow* pColRow = static_cast<CFWL_GridColRow*>(m_Rows[i]); - if (!pColRow) { - continue; - } - switch (pColRow->m_Size.eUnit) { - case FWL_GRIDUNIT_Fixed: { - SetColRowActualSize(pColRow, pColRow->m_Size.fLength); - fFixedHeight += pColRow->m_fActualSize; - break; - } - case FWL_GRIDUNIT_Auto: { - ProcAutoColRow(pColRow, i, FALSE); - autoRows.Add(pColRow); - break; - } - case FWL_GRIDUNIT_Scaled: - default: { - ProcAutoColRow(pColRow, i, FALSE); - fScaledRowNum += pColRow->m_Size.fLength; - scaledRows.Add(pColRow); - if (pColRow->m_Size.fLength > 0) { - FX_FLOAT fPerHeight = - pColRow->m_fActualSize / pColRow->m_Size.fLength; - if (fPerHeight > fScaledMaxPerHeight) { - fScaledMaxPerHeight = fPerHeight; - } - } - break; - } - } - } - iRows = scaledRows.GetSize(); - for (int32_t j = 0; j < iRows; j++) { - CFWL_GridColRow* pColRow = static_cast<CFWL_GridColRow*>(scaledRows[j]); - if (!pColRow) { - continue; - } - SetColRowActualSize(pColRow, fScaledMaxPerHeight * pColRow->m_Size.fLength); - } - FX_POSITION ps = m_mapWidgetInfo.GetStartPosition(); - while (ps) { - void* key = nullptr; - void* value = nullptr; - m_mapWidgetInfo.GetNextAssoc(ps, key, value); - IFWL_Widget* pWidget = static_cast<IFWL_Widget*>(key); - CFWL_GridWidgetInfo* pInfo = static_cast<CFWL_GridWidgetInfo*>(value); - if (pInfo->m_iRowSpan < 2) { - continue; - } - CFX_PtrArray spanAutoRows; - CFX_PtrArray spanScaledRows; - FX_FLOAT fSpanSize = 0; - FX_FLOAT fScaledSum = 0; - int32_t iAutoColRows = 0; - int32_t iScaledColRows = 0; - for (int32_t i = 0; i < pInfo->m_iRowSpan; i++) { - CFWL_GridColRow* pRow = reinterpret_cast<CFWL_GridColRow*>( - GetColRow(FALSE, pInfo->m_iRow + i)); - if (!pRow) { - break; - } - fSpanSize += pRow->m_fActualSize; - if (pRow->m_Size.eUnit == FWL_GRIDUNIT_Auto) { - iAutoColRows++; - spanAutoRows.Add(pRow); - } else if (pRow->m_Size.eUnit == FWL_GRIDUNIT_Scaled) { - iScaledColRows++; - fScaledSum += pRow->m_Size.fLength; - spanScaledRows.Add(pRow); - } - } - if (iAutoColRows < 1 && iScaledColRows < 1) { - continue; - } - FX_FLOAT fWidgetHeight = CalcAutoColumnWidgetHeight(pWidget, pInfo); - if (fWidgetHeight > fSpanSize) { - if (iScaledColRows > 0) { - if (fScaledSum <= 0) { - continue; - } - SetSpanScaledColRowSize(spanScaledRows, fWidgetHeight - fSpanSize, - fScaledSum); - } else { - SetSpanAutoColRowSize(spanAutoRows, fWidgetHeight - fSpanSize); - } - } - } - FX_FLOAT fAutoHeigt = 0; - int32_t iAutoRows = autoRows.GetSize(); - for (int32_t m = 0; m < iAutoRows; m++) { - fAutoHeigt += static_cast<CFWL_GridColRow*>(autoRows[m])->m_fActualSize; - } - FX_FLOAT fScaledHeight = 0; - iRows = scaledRows.GetSize(); - for (int32_t n = 0; n < iRows; n++) { - fScaledHeight += - static_cast<CFWL_GridColRow*>(scaledRows[n])->m_fActualSize; - } - return fFixedHeight + fAutoHeigt + fScaledHeight; -} -FX_BOOL CFWL_GridImp::SetColRowActualSize(CFWL_GridColRow* pColRow, - FX_FLOAT fSize, - FX_BOOL bSetBeyond) { - if (pColRow->m_MinSize.eUnit == FWL_GRIDUNIT_Fixed && - fSize < pColRow->m_MinSize.fLength) { - pColRow->m_fActualSize = pColRow->m_MinSize.fLength; - return FALSE; - } - if (pColRow->m_MaxSize.eUnit == FWL_GRIDUNIT_Fixed && - fSize > pColRow->m_MaxSize.fLength) { - pColRow->m_fActualSize = pColRow->m_MaxSize.fLength; - return FALSE; - } - if (bSetBeyond) { - return TRUE; - } - pColRow->m_fActualSize = fSize; - return TRUE; -} -FX_FLOAT CFWL_GridImp::SetWidgetActualWidth(CFWL_GridWidgetInfo* pInfo, - FX_FLOAT fWidth) { - if (pInfo->m_Size[FWL_GRIDSIZE_MinWidth].eUnit == FWL_GRIDUNIT_Fixed && - fWidth < pInfo->m_Size[FWL_GRIDSIZE_MinWidth].fLength) { - fWidth = pInfo->m_Size[FWL_GRIDSIZE_MinWidth].fLength; - } - if (pInfo->m_Size[FWL_GRIDSIZE_MaxWidth].eUnit == FWL_GRIDUNIT_Fixed && - fWidth > pInfo->m_Size[FWL_GRIDSIZE_MaxWidth].fLength) { - fWidth = pInfo->m_Size[FWL_GRIDSIZE_MaxWidth].fLength; - } - pInfo->m_fActualWidth = fWidth; - return fWidth; -} -FX_FLOAT CFWL_GridImp::SetWidgetActualHeight(CFWL_GridWidgetInfo* pInfo, - FX_FLOAT fHeight) { - if (pInfo->m_Size[FWL_GRIDSIZE_MinHeight].eUnit == FWL_GRIDUNIT_Fixed && - fHeight < pInfo->m_Size[FWL_GRIDSIZE_MinHeight].fLength) { - fHeight = pInfo->m_Size[FWL_GRIDSIZE_MinHeight].fLength; - } - if (pInfo->m_Size[FWL_GRIDSIZE_MaxHeight].eUnit == FWL_GRIDUNIT_Fixed && - fHeight > pInfo->m_Size[FWL_GRIDSIZE_MaxHeight].fLength) { - fHeight = pInfo->m_Size[FWL_GRIDSIZE_MaxHeight].fLength; - } - pInfo->m_fActualHeight = fHeight; - return fHeight; -} -void CFWL_GridImp::SetAllWidgetsRect() { - FX_FLOAT fStartLeft = 0; - int32_t iColumns = m_Columns.GetSize(); - for (int32_t i = 0; i < iColumns; i++) { - CFWL_GridColRow* pColRow = static_cast<CFWL_GridColRow*>(m_Columns[i]); - if (!pColRow) { - continue; - } - pColRow->m_fActualPos = fStartLeft; - fStartLeft += pColRow->m_fActualSize; - } - FX_FLOAT fStartTop = 0; - int32_t iRows = m_Rows.GetSize(); - for (int32_t j = 0; j < iRows; j++) { - CFWL_GridColRow* pColRow = static_cast<CFWL_GridColRow*>(m_Rows[j]); - if (!pColRow) { - continue; - } - pColRow->m_fActualPos = fStartTop; - fStartTop += pColRow->m_fActualSize; - } - FX_POSITION ps = m_mapWidgetInfo.GetStartPosition(); - while (ps) { - IFWL_Widget* pWidget = NULL; - CFWL_GridWidgetInfo* pInfo = NULL; - m_mapWidgetInfo.GetNextAssoc(ps, (void*&)pWidget, (void*&)pInfo); - if (!pWidget || !pInfo) { - continue; - } - FX_FLOAT fColumnStart = 0; - CFWL_GridColRow* pColumn = - reinterpret_cast<CFWL_GridColRow*>(GetColRow(TRUE, pInfo->m_iColumn)); - if (pColumn) { - fColumnStart = pColumn->m_fActualPos; - } - FX_FLOAT fRowStart = 0; - CFWL_GridColRow* pRow = - reinterpret_cast<CFWL_GridColRow*>(GetColRow(FALSE, pInfo->m_iRow)); - if (pRow) { - fRowStart = pRow->m_fActualPos; - } - FX_FLOAT fColumnWidth = 0; - if (iColumns > 0) { - for (int32_t j = 0; j < pInfo->m_iColumnSpan; j++) { - CFWL_GridColRow* pCol = reinterpret_cast<CFWL_GridColRow*>( - GetColRow(TRUE, pInfo->m_iColumn + j)); - if (!pCol) { - break; - } - fColumnWidth += pCol->m_fActualSize; - } - } else { - fColumnWidth = m_pProperties->m_rtWidget.width; - } - FX_FLOAT fRowHeight = 0; - if (iRows > 0) { - for (int32_t k = 0; k < pInfo->m_iRowSpan; k++) { - CFWL_GridColRow* pR = reinterpret_cast<CFWL_GridColRow*>( - GetColRow(FALSE, pInfo->m_iRow + k)); - if (!pR) { - break; - } - fRowHeight += pR->m_fActualSize; - } - } else { - fRowHeight = m_pProperties->m_rtWidget.height; - } - FX_FLOAT fLeftMargin = 0, fRightMargin = 0; - FX_BOOL bLeftMargin = - GetWidgetMargin(pWidget, FWL_GRIDMARGIN_Left, fLeftMargin); - FX_BOOL bRightMargin = - GetWidgetMargin(pWidget, FWL_GRIDMARGIN_Right, fRightMargin); - FX_FLOAT fTopMargin = 0, fBottomMargin = 0; - FX_BOOL bTopMargin = - GetWidgetMargin(pWidget, FWL_GRIDMARGIN_Top, fTopMargin); - FX_BOOL bBottomMargin = - GetWidgetMargin(pWidget, FWL_GRIDMARGIN_Bottom, fBottomMargin); - if (pInfo->m_Size[FWL_GRIDSIZE_Width].eUnit == FWL_GRIDUNIT_Fixed) { - SetWidgetActualWidth(pInfo, pInfo->m_Size[FWL_GRIDSIZE_Width].fLength); - } else { - if (bLeftMargin && bRightMargin) { - SetWidgetActualWidth(pInfo, fColumnWidth - fLeftMargin - fRightMargin); - } else { - CFX_RectF rtAuto; - pWidget->GetWidgetRect(rtAuto, TRUE); - SetWidgetActualWidth(pInfo, rtAuto.width); - } - } - if (pInfo->m_Size[FWL_GRIDSIZE_Height].eUnit == FWL_GRIDUNIT_Fixed) { - SetWidgetActualHeight(pInfo, pInfo->m_Size[FWL_GRIDSIZE_Height].fLength); - } else { - if (bTopMargin && bBottomMargin) { - SetWidgetActualHeight(pInfo, fRowHeight - fTopMargin - fBottomMargin); - } else { - CFX_RectF rtAuto; - pWidget->GetWidgetRect(rtAuto, TRUE); - SetWidgetActualHeight(pInfo, rtAuto.height); - } - } - if (bLeftMargin && bRightMargin && - pInfo->m_Size[FWL_GRIDSIZE_Width].eUnit == FWL_GRIDUNIT_Fixed) { - fLeftMargin = - fColumnStart + fLeftMargin + - (fColumnWidth - fLeftMargin - fRightMargin - pInfo->m_fActualWidth) / - 2; - } else if (bLeftMargin) { - fLeftMargin = fColumnStart + fLeftMargin; - } else if (bRightMargin) { - fLeftMargin = - fColumnStart + fColumnWidth - fRightMargin - pInfo->m_fActualWidth; - } else { - fLeftMargin = fColumnStart; - } - if (bTopMargin && bBottomMargin && - pInfo->m_Size[FWL_GRIDSIZE_Height].eUnit == FWL_GRIDUNIT_Fixed) { - fTopMargin = - fRowStart + fTopMargin + - (fRowHeight - fTopMargin - fBottomMargin - pInfo->m_fActualHeight) / - 2; - } else if (bTopMargin) { - fTopMargin = fRowStart + fTopMargin; - } else if (bBottomMargin) { - fTopMargin = - fRowStart + fRowHeight - fBottomMargin - pInfo->m_fActualHeight; - } else { - fTopMargin = fRowStart; - } - CFX_RectF rtWidget, rtOld; - rtWidget.Set(fLeftMargin, fTopMargin, pInfo->m_fActualWidth, - pInfo->m_fActualHeight); - pWidget->GetWidgetRect(rtOld); - if (rtWidget == rtOld) { - continue; - } - pWidget->SetWidgetRect(rtWidget); - if (rtWidget.width == rtOld.width && rtWidget.height == rtOld.height) { - continue; - } - pWidget->Update(); - } -} -FX_BOOL CFWL_GridImp::IsGrid(IFWL_Widget* pWidget) { - if (!pWidget) - return FALSE; - return pWidget->GetClassID() == FWL_CLASSHASH_Grid; -} -void CFWL_GridImp::SetSpanAutoColRowSize(const CFX_PtrArray& spanAutos, - FX_FLOAT fTotalSize) { - int32_t iAutoColRows = spanAutos.GetSize(); - if (iAutoColRows < 1) { - return; - } - CFX_PtrArray autoNoMinMaxs; - FX_FLOAT fAutoPer = fTotalSize / iAutoColRows; - for (int32_t j = 0; j < iAutoColRows; j++) { - CFWL_GridColRow* pColumn = static_cast<CFWL_GridColRow*>(spanAutos[j]); - FX_FLOAT fOrgSize = pColumn->m_fActualSize; - if (SetColRowActualSize(pColumn, pColumn->m_fActualSize + fAutoPer, TRUE)) { - autoNoMinMaxs.Add(pColumn); - } else { - fTotalSize -= pColumn->m_fActualSize - fOrgSize; - int32_t iNoMinMax = iAutoColRows - (j + 1 - autoNoMinMaxs.GetSize()); - if (iNoMinMax > 0 && fTotalSize > 0) { - fAutoPer = fTotalSize / iNoMinMax; - } else { - break; - } - } - } - int32_t iNormals = autoNoMinMaxs.GetSize(); - if (fTotalSize > 0) { - if (iNormals == iAutoColRows) { - fAutoPer = fTotalSize / iNormals; - for (int32_t k = 0; k < iNormals; k++) { - CFWL_GridColRow* pColumn = - static_cast<CFWL_GridColRow*>(autoNoMinMaxs[k]); - pColumn->m_fActualSize += fAutoPer; - } - } else { - SetSpanAutoColRowSize(autoNoMinMaxs, fTotalSize); - } - } else { - } -} -void CFWL_GridImp::SetSpanScaledColRowSize(const CFX_PtrArray& spanScaleds, - FX_FLOAT fTotalSize, - FX_FLOAT fTotalScaledNum) { - int32_t iScaledColRows = spanScaleds.GetSize(); - if (iScaledColRows < 1) { - return; - } - CFX_PtrArray autoNoMinMaxs; - FX_FLOAT fPerSize = fTotalSize / fTotalScaledNum; - for (int32_t i = 0; i < iScaledColRows; i++) { - CFWL_GridColRow* pColRow = static_cast<CFWL_GridColRow*>(spanScaleds[i]); - if (SetColRowActualSize(pColRow, pColRow->m_fActualSize + - fPerSize * pColRow->m_Size.fLength, - TRUE)) { - autoNoMinMaxs.Add(pColRow); - } else { - fTotalSize -= pColRow->m_fActualSize; - fTotalScaledNum -= pColRow->m_Size.fLength; - int32_t iNoMinMax = iScaledColRows - (i + 1 - autoNoMinMaxs.GetSize()); - if (iNoMinMax > 0 && fTotalSize > 0) { - fPerSize = fTotalSize / fTotalScaledNum; - } else { - break; - } - } - } - int32_t iNormals = autoNoMinMaxs.GetSize(); - if (fTotalSize > 0) { - if (iNormals == iScaledColRows) { - fPerSize = fTotalSize / fTotalScaledNum; - for (int32_t j = 0; j < iNormals; j++) { - CFWL_GridColRow* pColumn = - static_cast<CFWL_GridColRow*>(autoNoMinMaxs[j]); - pColumn->m_fActualSize += fPerSize * pColumn->m_Size.fLength; - } - } else { - SetSpanScaledColRowSize(autoNoMinMaxs, fTotalSize, fTotalScaledNum); - } - } else { - } -} -void CFWL_GridImp::SetScaledColRowsSize(const CFX_PtrArray& spanScaleds, - FX_FLOAT fTotalSize, - FX_FLOAT fTotalScaledNum) { - int32_t iScaledColRows = spanScaleds.GetSize(); - if (iScaledColRows < 1) { - return; - } - CFX_PtrArray autoNoMinMaxs; - FX_FLOAT fPerSize = fTotalSize / fTotalScaledNum; - for (int32_t i = 0; i < iScaledColRows; i++) { - CFWL_GridColRow* pColRow = static_cast<CFWL_GridColRow*>(spanScaleds[i]); - if (!pColRow) { - continue; - } - FX_FLOAT fSize = fPerSize * pColRow->m_Size.fLength; - FX_FLOAT fOrgSize = pColRow->m_fActualSize; - if (SetColRowActualSize(pColRow, fSize, TRUE)) { - autoNoMinMaxs.Add(pColRow); - } else { - fTotalSize -= pColRow->m_fActualSize - fOrgSize; - fTotalScaledNum -= pColRow->m_Size.fLength; - int32_t iNoMinMax = iScaledColRows - (i + 1 - autoNoMinMaxs.GetSize()); - if (iNoMinMax > 0 && fTotalSize > 0) { - fPerSize = fTotalSize / fTotalScaledNum; - } else { - break; - } - } - } - int32_t iNormals = autoNoMinMaxs.GetSize(); - if (fTotalSize > 0) { - if (iNormals == iScaledColRows) { - fPerSize = fTotalSize / fTotalScaledNum; - for (int32_t i = 0; i < iNormals; i++) { - CFWL_GridColRow* pColRow = - static_cast<CFWL_GridColRow*>(autoNoMinMaxs[i]); - if (!pColRow) { - continue; - } - FX_FLOAT fSize = fPerSize * pColRow->m_Size.fLength; - pColRow->m_fActualSize = fSize; - } - } else { - SetScaledColRowsSize(autoNoMinMaxs, fTotalSize, fTotalScaledNum); - } - } else { - } -} -CFWL_GridImpDelegate::CFWL_GridImpDelegate(CFWL_GridImp* pOwner) - : m_pOwner(pOwner) {} -int32_t CFWL_GridImpDelegate::OnProcessMessage(CFWL_Message* pMessage) { - if (pMessage->GetClassID() != FWL_MSGHASH_Mouse) { - return 0; - } - CFWL_MsgMouse* pMsg = static_cast<CFWL_MsgMouse*>(pMessage); - if (pMsg->m_dwCmd != FWL_MSGMOUSECMD_LButtonDown) { - return 0; - } - return 1; -} -FWL_ERR CFWL_GridImpDelegate::OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - return m_pOwner->DrawWidget(pGraphics, pMatrix); -} diff --git a/xfa/src/fwl/core/fwl_gridimp.h b/xfa/src/fwl/core/fwl_gridimp.h deleted file mode 100644 index 326b236295..0000000000 --- a/xfa/src/fwl/core/fwl_gridimp.h +++ /dev/null @@ -1,197 +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 - -#ifndef XFA_SRC_FWL_CORE_FWL_GRIDIMP_H_ -#define XFA_SRC_FWL_CORE_FWL_GRIDIMP_H_ - -#include "xfa/include/fwl/core/fwl_app.h" -#include "xfa/include/fwl/core/fwl_content.h" -#include "xfa/include/fwl/core/fwl_grid.h" -#include "xfa/src/fwl/core/fwl_contentimp.h" - -class CFWL_GridLength { - public: - CFWL_GridLength() : fLength(0), eUnit(FWL_GRIDUNIT_Fixed) {} - CFWL_GridLength(FX_FLOAT fValue, FWL_GRIDUNIT e) - : fLength(fValue), eUnit(e) {} - FX_FLOAT fLength; - FWL_GRIDUNIT eUnit; -}; - -class CFWL_GridColRow { - public: - CFWL_GridColRow() - : m_Size(1, FWL_GRIDUNIT_Scaled), - m_MinSize(0, FWL_GRIDUNIT_Fixed), - m_MaxSize(0, FWL_GRIDUNIT_Infinity), - m_fActualSize(0), - m_fActualPos(0) {} - CFWL_GridLength m_Size; - CFWL_GridLength m_MinSize; - CFWL_GridLength m_MaxSize; - FX_FLOAT m_fActualSize; - FX_FLOAT m_fActualPos; -}; - -class CFWL_GridWidgetInfo { - public: - CFWL_GridWidgetInfo() - : m_iColumn(0), - m_iColumnSpan(1), - m_iRow(0), - m_iRowSpan(1), - m_dwMarginFlag(0), - m_fActualWidth(0), - m_fActualHeight(0) { - m_Size[FWL_GRIDSIZE_Width].eUnit = FWL_GRIDUNIT_Auto; - m_Size[FWL_GRIDSIZE_Width].fLength = 0; - m_Size[FWL_GRIDSIZE_Height].eUnit = FWL_GRIDUNIT_Auto; - m_Size[FWL_GRIDSIZE_Height].fLength = 0; - m_Size[FWL_GRIDSIZE_MinWidth].eUnit = FWL_GRIDUNIT_Fixed; - m_Size[FWL_GRIDSIZE_MinWidth].fLength = 0; - m_Size[FWL_GRIDSIZE_MaxWidth].eUnit = FWL_GRIDUNIT_Infinity; - m_Size[FWL_GRIDSIZE_MaxWidth].fLength = 0; - m_Size[FWL_GRIDSIZE_MinHeight].eUnit = FWL_GRIDUNIT_Fixed; - m_Size[FWL_GRIDSIZE_MinHeight].fLength = 0; - m_Size[FWL_GRIDSIZE_MaxHeight].eUnit = FWL_GRIDUNIT_Infinity; - m_Size[FWL_GRIDSIZE_MaxHeight].fLength = 0; - m_Margin[0] = m_Margin[1] = m_Margin[2] = m_Margin[3] = 0; - } - int32_t m_iColumn; - int32_t m_iColumnSpan; - int32_t m_iRow; - int32_t m_iRowSpan; - CFWL_GridLength m_Size[6]; - FX_DWORD m_dwMarginFlag; - FX_FLOAT m_Margin[4]; - FX_FLOAT m_fActualWidth; - FX_FLOAT m_fActualHeight; -}; - -class CFWL_GridImp : public CFWL_ContentImp { - public: - CFWL_GridImp(const CFWL_WidgetImpProperties& properties, IFWL_Widget* pOuter); - virtual ~CFWL_GridImp(); - virtual FWL_ERR GetClassName(CFX_WideString& wsClass) const; - virtual FX_DWORD GetClassID() const; - virtual FWL_ERR Initialize(); - virtual FWL_ERR Finalize(); - virtual FWL_ERR GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize = FALSE); - virtual FWL_ERR SetWidgetRect(const CFX_RectF& rect); - virtual FWL_ERR Update(); - virtual FWL_ERR DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL); - - virtual FWL_ERR InsertWidget(IFWL_Widget* pChild, int32_t nIndex = -1); - virtual FWL_ERR RemoveWidget(IFWL_Widget* pWidget); - virtual FWL_HGRIDCOLROW InsertColRow(FX_BOOL bColumn, int32_t nIndex = -1); - virtual int32_t CountColRows(FX_BOOL bColumn); - virtual FWL_HGRIDCOLROW GetColRow(FX_BOOL bColumn, int32_t nIndex); - virtual int32_t GetIndex(FWL_HGRIDCOLROW hColRow); - virtual FX_FLOAT GetSize(FWL_HGRIDCOLROW hColRow, FWL_GRIDUNIT& eUnit); - virtual FWL_ERR SetSize(FWL_HGRIDCOLROW hColRow, - FX_FLOAT fSize, - FWL_GRIDUNIT eUnit); - FX_FLOAT GetMinSize(FWL_HGRIDCOLROW hColRow, FWL_GRIDUNIT& eUnit); - FWL_ERR SetMinSize(FWL_HGRIDCOLROW hColRow, - FX_FLOAT fSize, - FWL_GRIDUNIT eUnit); - FX_FLOAT GetMaxSize(FWL_HGRIDCOLROW hColRow, FWL_GRIDUNIT& eUnit); - FWL_ERR SetMaxSize(FWL_HGRIDCOLROW hColRow, - FX_FLOAT fSize, - FWL_GRIDUNIT eUnit); - virtual FX_BOOL DeleteColRow(FWL_HGRIDCOLROW hColRow); - virtual FX_BOOL IsColumn(FWL_HGRIDCOLROW hColRow); - virtual int32_t GetWidgetPos(IFWL_Widget* pWidget, FX_BOOL bColumn); - virtual FWL_ERR SetWidgetPos(IFWL_Widget* pWidget, - int32_t iPos, - FX_BOOL bColumn); - virtual int32_t GetWidgetSpan(IFWL_Widget* pWidget, FX_BOOL bColumn); - virtual FWL_ERR SetWidgetSpan(IFWL_Widget* pWidget, - int32_t iSpan, - FX_BOOL bColumn); - virtual FX_FLOAT GetWidgetSize(IFWL_Widget* pWidget, - FWL_GRIDSIZE eSize, - FWL_GRIDUNIT& eUnit); - virtual FWL_ERR SetWidgetSize(IFWL_Widget* pWidget, - FWL_GRIDSIZE eSize, - FX_FLOAT fSize, - FWL_GRIDUNIT eUit); - virtual FX_BOOL GetWidgetMargin(IFWL_Widget* pWidget, - FWL_GRIDMARGIN eMargin, - FX_FLOAT& fMargin); - virtual FWL_ERR SetWidgetMargin(IFWL_Widget* pWidget, - FWL_GRIDMARGIN eMargin, - FX_FLOAT fMargin); - virtual FWL_ERR RemoveWidgetMargin(IFWL_Widget* pWidget, - FWL_GRIDMARGIN eMargin); - virtual FX_FLOAT GetGridSize(FWL_GRIDSIZE eSize, FWL_GRIDUNIT& eUnit); - virtual FWL_ERR SetGridSize(FWL_GRIDSIZE eSize, - FX_FLOAT fSize, - FWL_GRIDUNIT eUit); - - protected: - CFWL_GridWidgetInfo* GetWidgetInfo(IFWL_Widget* pWidget); - void ProcFixedColRow(CFWL_GridColRow* pColRow, - int32_t nIndex, - FX_FLOAT fColRowSize, - FX_BOOL bColumn); - void ProcAutoColRow(CFWL_GridColRow* pColRow, - int32_t nIndex, - FX_BOOL bColumn); - void ProcScaledColRow(CFWL_GridColRow* pColRow, - int32_t nIndex, - FX_FLOAT fColRowSize, - FX_BOOL bColumn); - void CalcWidgetWidth(IFWL_Widget* pWidget, - CFWL_GridWidgetInfo* pInfo, - FX_FLOAT fColunmWidth); - void CalcWidgetHeigt(IFWL_Widget* pWidget, - CFWL_GridWidgetInfo* pInfo, - FX_FLOAT fRowHeigt); - FX_FLOAT CalcAutoColumnWidgetWidth(IFWL_Widget* pWidget, - CFWL_GridWidgetInfo* pInfo); - FX_FLOAT CalcAutoColumnWidgetHeight(IFWL_Widget* pWidget, - CFWL_GridWidgetInfo* pInfo); - FX_FLOAT ProcessColumns(FX_FLOAT fWidth); - FX_FLOAT ProcessRows(FX_FLOAT fHeight); - FX_FLOAT ProcessUnCertainColumns(); - FX_FLOAT ProcessUnCertainRows(); - FX_BOOL SetColRowActualSize(CFWL_GridColRow* pColRow, - FX_FLOAT fSize, - FX_BOOL bSetBeyond = FALSE); - FX_FLOAT SetWidgetActualWidth(CFWL_GridWidgetInfo* pInfo, FX_FLOAT fWidth); - FX_FLOAT SetWidgetActualHeight(CFWL_GridWidgetInfo* pInfo, FX_FLOAT fHeight); - void SetAllWidgetsRect(); - FX_BOOL IsGrid(IFWL_Widget* pWidget); - void SetSpanAutoColRowSize(const CFX_PtrArray& spanAutos, - FX_FLOAT fTotalSize); - void SetSpanScaledColRowSize(const CFX_PtrArray& spanScaleds, - FX_FLOAT fTotalSize, - FX_FLOAT fTotalScaledNum); - void SetScaledColRowsSize(const CFX_PtrArray& spanScaleds, - FX_FLOAT fTotalSize, - FX_FLOAT fTotalScaledNum); - CFX_PtrArray m_Rows; - CFX_PtrArray m_Columns; - CFX_PtrArray m_Widgets; - CFX_MapPtrToPtr m_mapWidgetInfo; - CFWL_GridLength m_Size[6]; - friend class CFWL_GridImpDelegate; -}; - -class CFWL_GridImpDelegate : public CFWL_WidgetImpDelegate { - public: - CFWL_GridImpDelegate(CFWL_GridImp* pOwner); - int32_t OnProcessMessage(CFWL_Message* pMessage) override; - FWL_ERR OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL) override; - - protected: - CFWL_GridImp* m_pOwner; -}; - -#endif // XFA_SRC_FWL_CORE_FWL_GRIDIMP_H_ diff --git a/xfa/src/fwl/core/fwl_noteimp.cpp b/xfa/src/fwl/core/fwl_noteimp.cpp deleted file mode 100644 index 3a46446362..0000000000 --- a/xfa/src/fwl/core/fwl_noteimp.cpp +++ /dev/null @@ -1,1097 +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_noteimp.h" - -#include "core/include/fxcrt/fx_ext.h" -#include "xfa/include/fwl/adapter/fwl_adapterwidgetmgr.h" -#include "xfa/include/fwl/basewidget/fwl_tooltipctrl.h" -#include "xfa/include/fwl/core/fwl_app.h" -#include "xfa/include/fwl/core/fwl_grid.h" -#include "xfa/src/fwl/basewidget/fwl_tooltipctrlimp.h" -#include "xfa/src/fwl/core/fwl_appimp.h" -#include "xfa/src/fwl/core/fwl_formimp.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" - -CFWL_NoteLoop::CFWL_NoteLoop(CFWL_WidgetImp* pForm) - : m_pForm(pForm), m_bContinueModal(TRUE) {} -FX_BOOL CFWL_NoteLoop::PreProcessMessage(CFWL_Message* pMessage) { - if (!m_pForm) { - return FALSE; - } - return TranslateAccelerator(pMessage); -} -FWL_ERR CFWL_NoteLoop::Idle(int32_t count) { -#if (_FX_OS_ == _FX_WIN32_DESKTOP_) - if (count <= 0) { -#endif - CFWL_EvtIdle ev; - IFWL_App* pApp = FWL_GetApp(); - if (!pApp) - return FWL_ERR_Indefinite; - IFWL_NoteDriver* pDriver = pApp->GetNoteDriver(); - if (!pDriver) - return FWL_ERR_Indefinite; - pDriver->SendNote(&ev); -#if (_FX_OS_ == _FX_WIN32_DESKTOP_) - } -#endif - return FWL_ERR_Indefinite; -} -CFWL_WidgetImp* CFWL_NoteLoop::GetForm() { - return m_pForm; -} -FX_BOOL CFWL_NoteLoop::ContinueModal() { - return m_bContinueModal; -} -FWL_ERR CFWL_NoteLoop::EndModalLoop() { - m_bContinueModal = FALSE; -#if (_FX_OS_ == _FX_MACOSX_) - CFWL_WidgetMgr* pWidgetMgr = static_cast<CFWL_WidgetMgr*>(FWL_GetWidgetMgr()); - IFWL_AdapterWidgetMgr* adapterWidgetMgr = pWidgetMgr->GetAdapterWidgetMgr(); - adapterWidgetMgr->EndLoop(); -#endif - return FWL_ERR_Succeeded; -} -FX_BOOL CFWL_NoteLoop::TranslateAccelerator(CFWL_Message* pMessage) { - if (pMessage->GetClassID() != FWL_MSGHASH_Key) { - return FALSE; - } - CFWL_MsgKey* pMsgKey = static_cast<CFWL_MsgKey*>(pMessage); - if (pMsgKey->m_dwCmd != FWL_MSGKEYCMD_KeyDown) { - return FALSE; - } - CFX_MapAccelerators& accel = - static_cast<CFWL_FormImp*>(m_pForm)->GetAccelerator(); - FX_POSITION pos = accel.GetStartPosition(); - if (!pos) { - return FALSE; - } - FX_DWORD vrKey, rValue; - while (pos) { - accel.GetNextAssoc(pos, vrKey, rValue); - FX_DWORD dwFlags = (vrKey & 0xFF00) >> 8; - FX_DWORD m_dwKeyCode = vrKey & 0x00FF; - if (pMsgKey->m_dwFlags == dwFlags && pMsgKey->m_dwKeyCode == m_dwKeyCode) { - GenerateCommondEvent(rValue); - return TRUE; - } - } - return FALSE; -} -FWL_ERR CFWL_NoteLoop::SetMainForm(CFWL_WidgetImp* pForm) { - m_pForm = pForm; - return FWL_ERR_Succeeded; -} -void CFWL_NoteLoop::GenerateCommondEvent(FX_DWORD dwCommand) { - CFWL_EvtMenuCommand ev; - ev.m_iCommand = dwCommand; - IFWL_NoteThread* pThread = m_pForm->GetOwnerThread(); - if (!pThread) - return; - IFWL_NoteDriver* pDriver = pThread->GetNoteDriver(); - if (!pDriver) - return; - pDriver->SendNote(&ev); -} -CFWL_NoteDriver::CFWL_NoteDriver() - : m_sendEventCalled(0), - m_maxSize(500), - m_bFullScreen(FALSE), - m_pHover(nullptr), - m_pFocus(nullptr), - m_pGrab(nullptr), - m_hook(nullptr) { - m_pNoteLoop = new CFWL_NoteLoop; - PushNoteLoop(m_pNoteLoop); -} -CFWL_NoteDriver::~CFWL_NoteDriver() { - delete m_pNoteLoop; - ClearInvalidEventTargets(TRUE); -} -FX_BOOL CFWL_NoteDriver::SendNote(CFWL_Note* pNote) { - if (pNote->IsEvent()) { - int32_t iCount = m_eventTargets.GetCount(); - if (iCount < 1) { - return TRUE; - } - if (FWL_EVTHASH_Mouse == static_cast<CFWL_Event*>(pNote)->GetClassID()) { - CFWL_EvtMouse* pMouse = static_cast<CFWL_EvtMouse*>(pNote); - if (FWL_MSGMOUSECMD_MouseHover == pMouse->m_dwCmd) { - if (m_pNoteLoop->GetForm() && - CFWL_ToolTipContainer::getInstance()->ProcessEnter( - pMouse, m_pNoteLoop->GetForm()->GetInterface())) { - } - } else if (FWL_MSGMOUSECMD_MouseLeave == pMouse->m_dwCmd) { - if (CFWL_ToolTipContainer::getInstance()->ProcessLeave(pMouse)) { - } - } else if ((FWL_MSGMOUSECMD_LButtonDown <= pMouse->m_dwCmd) && - (FWL_MSGMOUSECMD_MButtonDblClk >= pMouse->m_dwCmd)) { - if (CFWL_ToolTipContainer::getInstance()->ProcessLeave(pMouse)) { - } - } - } - m_sendEventCalled++; - FX_POSITION pos = m_eventTargets.GetStartPosition(); - while (pos) { - void* key = NULL; - CFWL_EventTarget* pEventTarget; - m_eventTargets.GetNextAssoc(pos, key, (void*&)pEventTarget); - if (pEventTarget && !pEventTarget->IsInvalid()) { - pEventTarget->ProcessEvent(static_cast<CFWL_Event*>(pNote)); - } - } - m_sendEventCalled--; - } else { - if (!pNote->m_pDstTarget) - return FALSE; - IFWL_WidgetDelegate* pDelegate = pNote->m_pDstTarget->SetDelegate(NULL); - if (pDelegate) { - pDelegate->OnProcessMessage(static_cast<CFWL_Message*>(pNote)); - } - } - return TRUE; -} -extern void FWL_PostMessageToMainRoop(CFWL_Message* pMessage); -FX_BOOL CFWL_NoteDriver::PostMessage(CFWL_Message* pMessage) { - FWL_PostMessageToMainRoop(pMessage); - return TRUE; -} -#define FWL_NoteDriver_EventKey 1100 -FWL_ERR CFWL_NoteDriver::RegisterEventTarget(IFWL_Widget* pListener, - IFWL_Widget* pEventSource, - FX_DWORD dwFilter) { - FX_DWORD dwkey = (FX_DWORD)(uintptr_t)pListener->GetPrivateData( - (void*)(uintptr_t)FWL_NoteDriver_EventKey); - if (dwkey == 0) { - void* random = FX_Random_MT_Start(0); - dwkey = rand(); - FX_Random_MT_Close(random); - pListener->SetPrivateData((void*)(uintptr_t)FWL_NoteDriver_EventKey, - (void*)(uintptr_t)dwkey, NULL); - } - CFWL_EventTarget* value = NULL; - if (!m_eventTargets.Lookup((void*)(uintptr_t)dwkey, (void*&)value)) { - value = new CFWL_EventTarget(this, pListener); - m_eventTargets.SetAt((void*)(uintptr_t)dwkey, value); - } - value->SetEventSource(pEventSource, dwFilter); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_NoteDriver::UnregisterEventTarget(IFWL_Widget* pListener) { - FX_DWORD dwkey = (FX_DWORD)(uintptr_t)pListener->GetPrivateData( - (void*)(uintptr_t)FWL_NoteDriver_EventKey); - if (dwkey == 0) { - return FWL_ERR_Indefinite; - } - CFWL_EventTarget* value = NULL; - if (m_eventTargets.Lookup((void*)(uintptr_t)dwkey, (void*&)value)) { - value->FlagInvalid(); - } - return FWL_ERR_Succeeded; -} -void CFWL_NoteDriver::ClearEventTargets(FX_BOOL bRemoveAll) { - ClearInvalidEventTargets(bRemoveAll); -} -int32_t CFWL_NoteDriver::GetQueueMaxSize() const { - return m_maxSize; -} -FWL_ERR CFWL_NoteDriver::SetQueueMaxSize(const int32_t size) { - m_maxSize = size; - return FWL_ERR_Succeeded; -} -IFWL_NoteThread* CFWL_NoteDriver::GetOwnerThread() const { - return FWL_GetApp(); -} -FWL_ERR CFWL_NoteDriver::PushNoteLoop(IFWL_NoteLoop* pNoteLoop) { - m_noteLoopQueue.Add(pNoteLoop); - return FWL_ERR_Succeeded; -} -IFWL_NoteLoop* CFWL_NoteDriver::PopNoteLoop() { - int32_t pos = m_noteLoopQueue.GetSize(); - if (pos <= 0) - return NULL; - IFWL_NoteLoop* p = - static_cast<IFWL_NoteLoop*>(m_noteLoopQueue.GetAt(pos - 1)); - m_noteLoopQueue.RemoveAt(pos - 1); - return p; -} -FX_BOOL CFWL_NoteDriver::SetFocus(IFWL_Widget* pFocus, FX_BOOL bNotify) { - if (m_pFocus == pFocus) { - return TRUE; - } - IFWL_Widget* pPrev = m_pFocus; - m_pFocus = pFocus; - if (pPrev) { - CFWL_MsgKillFocus ms; - ms.m_pDstTarget = pPrev; - ms.m_pSrcTarget = pPrev; - if (bNotify) { - ms.m_dwExtend = 1; - } - IFWL_WidgetDelegate* pDelegate = pPrev->SetDelegate(NULL); - if (pDelegate) { - pDelegate->OnProcessMessage(&ms); - } - } - if (pFocus) { - IFWL_Widget* pWidget = - FWL_GetWidgetMgr()->GetWidget(pFocus, FWL_WGTRELATION_SystemForm); - CFWL_FormImp* pForm = - pWidget ? static_cast<CFWL_FormImp*>(pWidget->GetImpl()) : nullptr; - if (pForm) { - CFWL_WidgetImp* pNewFocus = - static_cast<CFWL_WidgetImp*>(pFocus->GetImpl()); - pForm->SetSubFocus(pNewFocus); - } - CFWL_MsgSetFocus ms; - ms.m_pDstTarget = pFocus; - if (bNotify) { - ms.m_dwExtend = 1; - } - IFWL_WidgetDelegate* pDelegate = pFocus->SetDelegate(NULL); - if (pDelegate) { - pDelegate->OnProcessMessage(&ms); - } - } - return TRUE; -} -FWL_ERR CFWL_NoteDriver::Run() { - CFWL_WidgetMgr* pWidgetMgr = static_cast<CFWL_WidgetMgr*>(FWL_GetWidgetMgr()); - if (!pWidgetMgr) - return FWL_ERR_Indefinite; -#if (_FX_OS_ == _FX_MACOSX_) - IFWL_AdapterWidgetMgr* adapterWidgetMgr = pWidgetMgr->GetAdapterWidgetMgr(); - CFWL_NoteLoop* pTopLoop = GetTopLoop(); - if (pTopLoop) { - CFWL_WidgetImp* formImp = pTopLoop->GetForm(); - if (formImp) { - IFWL_Widget* pForm = formImp->GetInterface(); - adapterWidgetMgr->RunLoop(pForm); - } - } -#elif(_FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN64_) - FX_BOOL bIdle = TRUE; - int32_t iIdleCount = 0; - CFWL_NoteLoop* pTopLoop = NULL; - for (;;) { - pTopLoop = GetTopLoop(); - if (!pTopLoop || !pTopLoop->ContinueModal()) { - break; - } - if (UnqueueMessage(pTopLoop)) { - continue; - } - while (bIdle && !(pWidgetMgr->CheckMessage_Native())) { - if (FWL_ERR_Indefinite == pTopLoop->Idle(iIdleCount++)) { - bIdle = FALSE; - } - } - do { - if (FWL_ERR_Indefinite == pWidgetMgr->DispatchMessage_Native()) { - break; - } - if (pWidgetMgr->IsIdleMessage_Native()) { - bIdle = TRUE; - iIdleCount = 0; - } - } while (pWidgetMgr->CheckMessage_Native()); - } -#elif(_FX_OS_ == _FX_LINUX_DESKTOP_) - CFWL_NoteLoop* pTopLoop = NULL; - for (;;) { - pTopLoop = GetTopLoop(); - if (!pTopLoop || !pTopLoop->ContinueModal()) { - break; - } - if (UnqueueMessage(pTopLoop)) { - continue; - } - if (pWidgetMgr->CheckMessage_Native()) { - pWidgetMgr->DispatchMessage_Native(); - } - } -#endif - return FWL_ERR_Succeeded; -} -IFWL_Widget* CFWL_NoteDriver::GetFocus() { - return m_pFocus; -} -IFWL_Widget* CFWL_NoteDriver::GetHover() { - return m_pHover; -} -void CFWL_NoteDriver::SetHover(IFWL_Widget* pHover) { - m_pHover = pHover; -} -void CFWL_NoteDriver::SetGrab(IFWL_Widget* pGrab, FX_BOOL bSet) { - m_pGrab = bSet ? pGrab : NULL; -} -void CFWL_NoteDriver::NotifyTargetHide(IFWL_Widget* pNoteTarget) { - if (m_pFocus == pNoteTarget) { - m_pFocus = NULL; - } - if (m_pHover == pNoteTarget) { - m_pHover = NULL; - } - if (m_pGrab == pNoteTarget) { - m_pGrab = NULL; - } -} -void CFWL_NoteDriver::NotifyTargetDestroy(IFWL_Widget* pNoteTarget) { - if (m_pFocus == pNoteTarget) { - m_pFocus = NULL; - } - if (m_pHover == pNoteTarget) { - m_pHover = NULL; - } - if (m_pGrab == pNoteTarget) { - m_pGrab = NULL; - } - UnregisterEventTarget(pNoteTarget); - int32_t count = m_forms.GetSize(); - for (int32_t nIndex = 0; nIndex < count; nIndex++) { - CFWL_FormImp* pForm = static_cast<CFWL_FormImp*>(m_forms[nIndex]); - if (!pForm) { - continue; - } - CFWL_WidgetImp* pSubFocus = pForm->GetSubFocus(); - if (!pSubFocus) - return; - if (pSubFocus && pSubFocus->GetInterface() == pNoteTarget) { - pForm->SetSubFocus(NULL); - } - } -} -void CFWL_NoteDriver::NotifyFullScreenMode(IFWL_Widget* pNoteTarget, - FX_BOOL bFullScreen) { - m_bFullScreen = bFullScreen; -} -FWL_ERR CFWL_NoteDriver::RegisterForm(CFWL_WidgetImp* pForm) { - if (!pForm) - return FWL_ERR_Indefinite; - if (m_forms.Find(pForm) >= 0) { - return FWL_ERR_Indefinite; - } - m_forms.Add(pForm); - if (m_forms.GetSize() == 1) { - CFWL_NoteLoop* pLoop = - static_cast<CFWL_NoteLoop*>(m_noteLoopQueue.GetAt(0)); - if (!pLoop) - return FWL_ERR_Indefinite; - pLoop->SetMainForm(pForm); - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_NoteDriver::UnRegisterForm(CFWL_WidgetImp* pForm) { - if (!pForm) - return FWL_ERR_Indefinite; - int32_t nIndex = m_forms.Find(pForm); - if (nIndex < 0) { - return FWL_ERR_Indefinite; - } - m_forms.RemoveAt(nIndex); - return FWL_ERR_Succeeded; -} -FX_BOOL CFWL_NoteDriver::QueueMessage(CFWL_Message* pMessage) { - pMessage->Retain(); - m_noteQueue.Add(pMessage); - return TRUE; -} -FX_BOOL CFWL_NoteDriver::UnqueueMessage(CFWL_NoteLoop* pNoteLoop) { - if (m_noteQueue.GetSize() < 1) { - return FALSE; - } - CFWL_Message* pMessage = static_cast<CFWL_Message*>(m_noteQueue[0]); - m_noteQueue.RemoveAt(0); - if (!IsValidMessage(pMessage)) { - pMessage->Release(); - return TRUE; - } - FX_BOOL bHookMessage = FALSE; - if (m_hook) { - bHookMessage = (*m_hook)(pMessage, m_hookInfo); - } - if (!bHookMessage && !pNoteLoop->PreProcessMessage(pMessage)) { - ProcessMessage(pMessage); - } - pMessage->Release(); - return TRUE; -} -CFWL_NoteLoop* CFWL_NoteDriver::GetTopLoop() { - int32_t size = m_noteLoopQueue.GetSize(); - if (size <= 0) - return NULL; - return static_cast<CFWL_NoteLoop*>(m_noteLoopQueue[size - 1]); -} -int32_t CFWL_NoteDriver::CountLoop() { - return m_noteLoopQueue.GetSize(); -} -void CFWL_NoteDriver::SetHook(FWLMessageHookCallback callback, void* info) { - m_hook = callback; - m_hookInfo = info; -} -FX_BOOL CFWL_NoteDriver::ProcessMessage(CFWL_Message* pMessage) { - CFWL_WidgetMgr* pWidgetMgr = static_cast<CFWL_WidgetMgr*>(FWL_GetWidgetMgr()); - IFWL_Widget* pMessageForm = pWidgetMgr->IsFormDisabled() - ? pMessage->m_pDstTarget - : GetMessageForm(pMessage->m_pDstTarget); - if (!pMessageForm) - return FALSE; - if (DispatchMessage(pMessage, pMessageForm)) { - if (pMessage->GetClassID() == FWL_MSGHASH_Mouse) { - MouseSecondary(static_cast<CFWL_MsgMouse*>(pMessage)); - } - return TRUE; - } - return FALSE; -} -FX_BOOL CFWL_NoteDriver::DispatchMessage(CFWL_Message* pMessage, - IFWL_Widget* pMessageForm) { - FX_BOOL bRet = FALSE; - switch (pMessage->GetClassID()) { - case FWL_MSGHASH_Activate: { - bRet = DoActivate(static_cast<CFWL_MsgActivate*>(pMessage), pMessageForm); - break; - } - case FWL_MSGHASH_Deactivate: { - bRet = DoDeactivate(static_cast<CFWL_MsgDeactivate*>(pMessage), - pMessageForm); - break; - } - case FWL_MSGHASH_SetFocus: { - bRet = DoSetFocus(static_cast<CFWL_MsgSetFocus*>(pMessage), pMessageForm); - break; - } - case FWL_MSGHASH_KillFocus: { - bRet = - DoKillFocus(static_cast<CFWL_MsgKillFocus*>(pMessage), pMessageForm); - break; - } - case FWL_MSGHASH_Key: { - bRet = DoKey(static_cast<CFWL_MsgKey*>(pMessage), pMessageForm); - break; - } - case FWL_MSGHASH_Mouse: { - bRet = DoMouse(static_cast<CFWL_MsgMouse*>(pMessage), pMessageForm); - break; - } - case FWL_MSGHASH_MouseWheel: { - bRet = DoWheel(static_cast<CFWL_MsgMouseWheel*>(pMessage), pMessageForm); - break; - } - case FWL_MSGHASH_Size: { - bRet = DoSize(static_cast<CFWL_MsgSize*>(pMessage)); - break; - } - case FWL_MSGHASH_Cursor: { - bRet = TRUE; - break; - } - case FWL_MSGHASH_WindowMove: { - bRet = DoWindowMove(static_cast<CFWL_MsgWindowMove*>(pMessage), - pMessageForm); - break; - } - case FWL_MSGHASH_DropFiles: { - bRet = - DoDragFiles(static_cast<CFWL_MsgDropFiles*>(pMessage), pMessageForm); - break; - } - default: { - bRet = TRUE; - break; - } - } - if (bRet) { - IFWL_WidgetDelegate* pDelegate = pMessage->m_pDstTarget->SetDelegate(NULL); - if (pDelegate) { - pDelegate->OnProcessMessage(pMessage); - } - } - return bRet; -} -FX_BOOL CFWL_NoteDriver::DoActivate(CFWL_MsgActivate* pMsg, - IFWL_Widget* pMessageForm) { - if (m_bFullScreen) { - return FALSE; - } - pMsg->m_pDstTarget = pMessageForm; - return (pMsg->m_pDstTarget)->GetStates() & FWL_WGTSTATE_Deactivated; -} -FX_BOOL CFWL_NoteDriver::DoDeactivate(CFWL_MsgDeactivate* pMsg, - IFWL_Widget* pMessageForm) { - if (m_bFullScreen) { - return FALSE; - } - int32_t iTrackLoop = m_noteLoopQueue.GetSize(); - if (iTrackLoop <= 0) - return FALSE; - if (iTrackLoop == 1) { - if (pMessageForm->IsInstance(FX_WSTRC(L"FWL_FORMPROXY"))) { - return FALSE; - } - if (pMsg->m_pSrcTarget && - pMsg->m_pSrcTarget->IsInstance(FX_WSTRC(L"FWL_FORMPROXY"))) { - return FALSE; - } - if (pMsg->m_pSrcTarget && pMsg->m_pSrcTarget->GetClassID() == 1111984755) { - return FALSE; - } - return TRUE; - } - IFWL_Widget* pDst = pMsg->m_pDstTarget; - if (!pDst) - return FALSE; -#if (_FX_OS_ == _FX_MACOSX_) - if (pDst == pMessageForm && pDst->IsInstance(L"FWL_FORMPROXY")) { - return TRUE; - } -#endif - return pDst != pMessageForm && - !pDst->IsInstance(FX_WSTRC(L"FWL_FORMPROXY")) && - !pMessageForm->IsInstance(FX_WSTRC(L"FWL_FORMPROXY")); -} -FX_BOOL CFWL_NoteDriver::DoSetFocus(CFWL_MsgSetFocus* pMsg, - IFWL_Widget* pMessageForm) { - CFWL_WidgetMgr* pWidgetMgr = static_cast<CFWL_WidgetMgr*>(FWL_GetWidgetMgr()); - if (pWidgetMgr->IsFormDisabled()) { - m_pFocus = pMsg->m_pDstTarget; - return TRUE; - } else { - IFWL_Widget* pWidget = pMsg->m_pDstTarget; - CFWL_FormImp* pForm = - pWidget ? static_cast<CFWL_FormImp*>(pWidget->GetImpl()) : nullptr; - if (pForm) { - CFWL_WidgetImp* pSubFocus = pForm->GetSubFocus(); - if (pSubFocus && ((pSubFocus->GetStates() & FWL_WGTSTATE_Focused) == 0)) { - pMsg->m_pDstTarget = pSubFocus->GetInterface(); - if (m_pFocus != pMsg->m_pDstTarget) { - m_pFocus = pMsg->m_pDstTarget; - return TRUE; - } - } - } - } - return FALSE; -} -FX_BOOL CFWL_NoteDriver::DoKillFocus(CFWL_MsgKillFocus* pMsg, - IFWL_Widget* pMessageForm) { - CFWL_WidgetMgr* pWidgetMgr = static_cast<CFWL_WidgetMgr*>(FWL_GetWidgetMgr()); - if (pWidgetMgr->IsFormDisabled()) { - if (m_pFocus == pMsg->m_pDstTarget) { - m_pFocus = NULL; - } - return TRUE; - } - IFWL_Widget* pWidget = pMsg->m_pDstTarget; - CFWL_FormImp* pForm = - pWidget ? static_cast<CFWL_FormImp*>(pWidget->GetImpl()) : nullptr; - if (pForm) { - CFWL_WidgetImp* pSubFocus = pForm->GetSubFocus(); - if (pSubFocus && (pSubFocus->GetStates() & FWL_WGTSTATE_Focused)) { - pMsg->m_pDstTarget = pSubFocus->GetInterface(); - if (m_pFocus == pMsg->m_pDstTarget) { - m_pFocus = NULL; - return TRUE; - } - } - } - return FALSE; -} -FX_BOOL CFWL_NoteDriver::DoKey(CFWL_MsgKey* pMsg, IFWL_Widget* pMessageForm) { -#if (_FX_OS_ != _FX_MACOSX_) - if (pMsg->m_dwCmd == FWL_MSGKEYCMD_KeyDown && - pMsg->m_dwKeyCode == FWL_VKEY_Tab) { - CFWL_WidgetMgr* pWidgetMgr = - static_cast<CFWL_WidgetMgr*>(FWL_GetWidgetMgr()); - IFWL_Widget* pForm = GetMessageForm(pMsg->m_pDstTarget); - IFWL_Widget* pFocus = m_pFocus; - if (m_pFocus) { - if (pWidgetMgr->GetWidget(m_pFocus, FWL_WGTRELATION_SystemForm) != - pForm) { - pFocus = NULL; - } - } - FX_BOOL bFind = FALSE; - IFWL_Widget* pNextTabStop = pWidgetMgr->nextTab(pForm, pFocus, bFind); - if (!pNextTabStop) { - bFind = FALSE; - pNextTabStop = pWidgetMgr->nextTab(pForm, NULL, bFind); - } - if (pNextTabStop == pFocus) { - return TRUE; - } - if (pNextTabStop) { - SetFocus(pNextTabStop); - } - return TRUE; - } -#endif - if (!m_pFocus) { - if (pMsg->m_dwCmd == FWL_MSGKEYCMD_KeyDown && - pMsg->m_dwKeyCode == FWL_VKEY_Return) { - CFWL_WidgetMgr* pWidgetMgr = - static_cast<CFWL_WidgetMgr*>(FWL_GetWidgetMgr()); - IFWL_Widget* defButton = pWidgetMgr->GetDefaultButton(pMessageForm); - if (defButton) { - pMsg->m_pDstTarget = defButton; - return TRUE; - } - } - return FALSE; - } - pMsg->m_pDstTarget = m_pFocus; - return TRUE; -} -FX_BOOL CFWL_NoteDriver::DoMouse(CFWL_MsgMouse* pMsg, - IFWL_Widget* pMessageForm) { - if (pMsg->m_dwCmd == FWL_MSGMOUSECMD_MouseLeave || - pMsg->m_dwCmd == FWL_MSGMOUSECMD_MouseHover || - pMsg->m_dwCmd == FWL_MSGMOUSECMD_MouseEnter) { - return pMsg->m_pDstTarget != NULL; - } - if (pMsg->m_pDstTarget != pMessageForm) { - pMsg->m_pDstTarget->TransformTo(pMessageForm, pMsg->m_fx, pMsg->m_fy); - } - if (!DoMouseEx(pMsg, pMessageForm)) { - pMsg->m_pDstTarget = pMessageForm; - } - return TRUE; -} -FX_BOOL CFWL_NoteDriver::DoWheel(CFWL_MsgMouseWheel* pMsg, - IFWL_Widget* pMessageForm) { - CFWL_WidgetMgr* pWidgetMgr = static_cast<CFWL_WidgetMgr*>(FWL_GetWidgetMgr()); - if (!pWidgetMgr) - return FALSE; - IFWL_Widget* pDst = - pWidgetMgr->GetWidgetAtPoint(pMessageForm, pMsg->m_fx, pMsg->m_fy); - if (!pDst) - return FALSE; - while (pDst && pDst->GetClassID() == FWL_CLASSHASH_Grid) { - pDst = pDst->GetParent(); - } - pMessageForm->TransformTo(pDst, pMsg->m_fx, pMsg->m_fy); - pMsg->m_pDstTarget = pDst; - return TRUE; -} -FX_BOOL CFWL_NoteDriver::DoSize(CFWL_MsgSize* pMsg) { - CFWL_WidgetMgr* pWidgetMgr = static_cast<CFWL_WidgetMgr*>(FWL_GetWidgetMgr()); - if (!pWidgetMgr) - return FALSE; - pWidgetMgr->NotifySizeChanged(pMsg->m_pDstTarget, (FX_FLOAT)pMsg->m_iWidth, - (FX_FLOAT)pMsg->m_iHeight); - return TRUE; -} -FX_BOOL CFWL_NoteDriver::DoWindowMove(CFWL_MsgWindowMove* pMsg, - IFWL_Widget* pMessageForm) { - return pMsg->m_pDstTarget == pMessageForm; -} -FX_BOOL CFWL_NoteDriver::DoDragFiles(CFWL_MsgDropFiles* pMsg, - IFWL_Widget* pMessageForm) { - return pMsg->m_pDstTarget == pMessageForm; -} -FX_BOOL CFWL_NoteDriver::DoMouseEx(CFWL_MsgMouse* pMsg, - IFWL_Widget* pMessageForm) { - CFWL_WidgetMgr* pWidgetMgr = static_cast<CFWL_WidgetMgr*>(FWL_GetWidgetMgr()); - if (!pWidgetMgr) - return FALSE; - IFWL_Widget* pTarget = NULL; - if (m_pGrab) - pTarget = m_pGrab; - if (!pTarget) { - pTarget = - pWidgetMgr->GetWidgetAtPoint(pMessageForm, pMsg->m_fx, pMsg->m_fy); - while (pTarget && pTarget->GetClassID() == FWL_CLASSHASH_Grid) { - pTarget = pTarget->GetParent(); - } - } - if (pTarget) { - if (pMessageForm != pTarget) { - pMessageForm->TransformTo(pTarget, pMsg->m_fx, pMsg->m_fy); - } - } - if (!pTarget) - return FALSE; - pMsg->m_pDstTarget = pTarget; - return TRUE; -} -void CFWL_NoteDriver::MouseSecondary(CFWL_MsgMouse* pMsg) { - IFWL_Widget* pTarget = pMsg->m_pDstTarget; - if (pTarget == m_pHover) { - return; - } - if (m_pHover) { - CFWL_MsgMouse msLeave; - msLeave.m_pDstTarget = m_pHover; - msLeave.m_fx = pMsg->m_fx; - msLeave.m_fy = pMsg->m_fy; - pTarget->TransformTo(m_pHover, msLeave.m_fx, msLeave.m_fy); - msLeave.m_dwFlags = 0; - msLeave.m_dwCmd = FWL_MSGMOUSECMD_MouseLeave; - DispatchMessage(&msLeave, NULL); - } - if (pTarget->GetClassID() == FWL_CLASSHASH_Form) { - m_pHover = NULL; - return; - } - m_pHover = pTarget; - CFWL_MsgMouse msHover; - msHover.m_pDstTarget = pTarget; - msHover.m_fx = pMsg->m_fx; - msHover.m_fy = pMsg->m_fy; - msHover.m_dwFlags = 0; - msHover.m_dwCmd = FWL_MSGMOUSECMD_MouseHover; - DispatchMessage(&msHover, NULL); -} -FX_BOOL CFWL_NoteDriver::IsValidMessage(CFWL_Message* pMessage) { - if (pMessage->GetClassID() == FWL_MSGHASH_Post) { - return TRUE; - } - int32_t iCount = m_noteLoopQueue.GetSize(); - for (int32_t i = 0; i < iCount; i++) { - CFWL_NoteLoop* pNoteLoop = static_cast<CFWL_NoteLoop*>(m_noteLoopQueue[i]); - CFWL_WidgetImp* pForm = pNoteLoop->GetForm(); - if (pForm && (pForm->GetInterface() == pMessage->m_pDstTarget)) { - return TRUE; - } - } - iCount = m_forms.GetSize(); - for (int32_t j = 0; j < iCount; j++) { - CFWL_FormImp* pForm = static_cast<CFWL_FormImp*>(m_forms[j]); - if (pForm->GetInterface() == pMessage->m_pDstTarget) { - return TRUE; - } - } - return FALSE; -} -IFWL_Widget* CFWL_NoteDriver::GetMessageForm(IFWL_Widget* pDstTarget) { - int32_t iTrackLoop = m_noteLoopQueue.GetSize(); - if (iTrackLoop <= 0) - return NULL; - IFWL_Widget* pMessageForm = NULL; - if (iTrackLoop > 1) { - CFWL_NoteLoop* pNootLoop = - static_cast<CFWL_NoteLoop*>(m_noteLoopQueue[iTrackLoop - 1]); - pMessageForm = pNootLoop->GetForm()->GetInterface(); - } else { - pMessageForm = (m_forms.Find(pDstTarget) < 0) ? NULL : pDstTarget; - } - if (!pMessageForm && pDstTarget) { - CFWL_WidgetMgr* pWidgetMgr = - static_cast<CFWL_WidgetMgr*>(FWL_GetWidgetMgr()); - if (!pWidgetMgr) - return NULL; - pMessageForm = - pWidgetMgr->GetWidget(pDstTarget, FWL_WGTRELATION_SystemForm); - } - return pMessageForm; -} -void CFWL_NoteDriver::ClearInvalidEventTargets(FX_BOOL bRemoveAll) { - FX_POSITION pos = m_eventTargets.GetStartPosition(); - while (pos) { - void* key = NULL; - CFWL_EventTarget* pEventTarget = NULL; - m_eventTargets.GetNextAssoc(pos, key, (void*&)pEventTarget); - if (pEventTarget && (bRemoveAll || pEventTarget->IsInvalid())) { - m_eventTargets.RemoveKey(key); - delete pEventTarget; - } - } -} -class CFWL_CoreToopTipDP : public IFWL_ToolTipDP { - public: - FWL_ERR GetCaption(IFWL_Widget* pWidget, CFX_WideString& wsCaption); - int32_t GetInitialDelay(IFWL_Widget* pWidget); - int32_t GetAutoPopDelay(IFWL_Widget* pWidget); - CFX_DIBitmap* GetToolTipIcon(IFWL_Widget* pWidget); - CFX_SizeF GetToolTipIconSize(IFWL_Widget* pWidget); - CFX_RectF GetAnchor(); - CFWL_CoreToopTipDP(); - - CFX_WideString m_wsCaption; - int32_t m_nInitDelayTime; - int32_t m_nAutoPopDelayTime; - CFX_RectF m_fAnchor; -}; -CFWL_CoreToopTipDP::CFWL_CoreToopTipDP() { - m_nInitDelayTime = 500; - m_nAutoPopDelayTime = 50000; - m_fAnchor.Set(0.0, 0.0, 0.0, 0.0); -} -FWL_ERR CFWL_CoreToopTipDP::GetCaption(IFWL_Widget* pWidget, - CFX_WideString& wsCaption) { - wsCaption = m_wsCaption; - return FWL_ERR_Succeeded; -} -int32_t CFWL_CoreToopTipDP::GetInitialDelay(IFWL_Widget* pWidget) { - return m_nInitDelayTime; -} -int32_t CFWL_CoreToopTipDP::GetAutoPopDelay(IFWL_Widget* pWidget) { - return m_nAutoPopDelayTime; -} -CFX_DIBitmap* CFWL_CoreToopTipDP::GetToolTipIcon(IFWL_Widget* pWidget) { - return NULL; -} -CFX_SizeF CFWL_CoreToopTipDP::GetToolTipIconSize(IFWL_Widget* pWidget) { - return CFX_SizeF(); -} -CFX_RectF CFWL_CoreToopTipDP::GetAnchor() { - return m_fAnchor; -} -CFWL_EventTarget::~CFWL_EventTarget() { - m_eventSources.RemoveAll(); -} -int32_t CFWL_EventTarget::SetEventSource(IFWL_Widget* pSource, - FX_DWORD dwFilter) { - if (pSource) { - m_eventSources.SetAt(pSource, dwFilter); - return m_eventSources.GetCount(); - } - return 1; -} -FX_BOOL CFWL_EventTarget::ProcessEvent(CFWL_Event* pEvent) { - IFWL_WidgetDelegate* pDelegate = m_pListener->SetDelegate(NULL); - if (!pDelegate) - return FALSE; - if (m_eventSources.GetCount() == 0) { - pDelegate->OnProcessEvent(pEvent); - return TRUE; - } - FX_POSITION pos = m_eventSources.GetStartPosition(); - while (pos) { - IFWL_Widget* pSource = NULL; - FX_DWORD dwFilter = 0; - m_eventSources.GetNextAssoc(pos, (void*&)pSource, dwFilter); - if (pSource == pEvent->m_pSrcTarget || - pEvent->GetClassID() == FWL_EVTHASH_Idle) { - if (IsFilterEvent(pEvent, dwFilter)) { - pDelegate->OnProcessEvent(pEvent); - return TRUE; - } - } - } - return FALSE; -} -FX_BOOL CFWL_EventTarget::IsFilterEvent(CFWL_Event* pEvent, FX_DWORD dwFilter) { - if (dwFilter == FWL_EVENT_ALL_MASK) { - return TRUE; - } - FX_BOOL bRet = FALSE; - switch (pEvent->GetClassID()) { - case FWL_EVTHASH_Mouse: { - bRet = dwFilter & FWL_EVENT_MOUSE_MASK; - break; - } - case FWL_EVTHASH_MouseWheel: { - bRet = dwFilter & FWL_EVENT_MOUSEWHEEL_MASK; - break; - } - case FWL_EVTHASH_Key: { - bRet = dwFilter & FWL_EVENT_KEY_MASK; - break; - } - case FWL_EVTHASH_SetFocus: - case FWL_EVTHASH_KillFocus: { - bRet = dwFilter & FWL_EVENT_FOCUSCHANGED_MASK; - break; - } - case FWL_EVTHASH_Draw: { - bRet = dwFilter & FWL_EVENT_DRAW_MASK; - break; - } - case FWL_EVTHASH_Close: { - bRet = dwFilter & FWL_EVENT_CLOSE_MASK; - break; - } - case FWL_EVTHASH_SizeChanged: { - bRet = dwFilter & FWL_EVENT_SIZECHANGED_MASK; - break; - } - case FWL_EVTHASH_Idle: { - bRet = dwFilter & FWL_EVENT_IDLE_MASK; - break; - } - default: { - bRet = dwFilter & FWL_EVENT_CONTROL_MASK; - break; - } - } - return bRet; -} - -CFWL_ToolTipContainer* CFWL_ToolTipContainer::s_pInstance = NULL; - -CFWL_ToolTipContainer::CFWL_ToolTipContainer() - : pCurTarget(NULL), m_pToolTipImp(NULL) { - m_ToolTipDp = new CFWL_CoreToopTipDP; - m_ToolTipDp->m_nInitDelayTime = 0; - m_ToolTipDp->m_nAutoPopDelayTime = 2000; -} -CFWL_ToolTipContainer::~CFWL_ToolTipContainer() { - if (m_pToolTipImp) { - IFWL_ToolTip* pToolTip = - static_cast<IFWL_ToolTip*>(m_pToolTipImp->GetInterface()); - pToolTip->Finalize(); - delete pToolTip; - } - delete m_ToolTipDp; -} -// static -CFWL_ToolTipContainer* CFWL_ToolTipContainer::getInstance() { - if (!s_pInstance) { - s_pInstance = new CFWL_ToolTipContainer; - } - return s_pInstance; -} -// static -void CFWL_ToolTipContainer::DeleteInstance() { - if (s_pInstance) { - delete s_pInstance; - s_pInstance = NULL; - } -} -FX_ERR CFWL_ToolTipContainer::AddToolTipTarget(IFWL_ToolTipTarget* pTarget) { - if (m_arrWidget.Find((void*)pTarget) < 0) { - m_arrWidget.Add((void*)pTarget); - return FWL_ERR_Succeeded; - } - return FWL_ERR_Indefinite; -} -FX_ERR CFWL_ToolTipContainer::RemoveToolTipTarget(IFWL_ToolTipTarget* pTarget) { - int index = m_arrWidget.Find((void*)pTarget); - if (index >= 0) { - m_arrWidget.RemoveAt(index); - return FWL_ERR_Succeeded; - } - return FWL_ERR_Indefinite; -} -FX_BOOL CFWL_ToolTipContainer::HasToolTip(IFWL_Widget* pWedget) { - int32_t iCount = m_arrWidget.GetSize(); - for (int32_t i = 0; i < iCount; i++) { - IFWL_ToolTipTarget* p = static_cast<IFWL_ToolTipTarget*>(m_arrWidget[i]); - if (p->GetWidget() == pWedget) { - pCurTarget = p; - return TRUE; - } - } - return FALSE; -} -FX_BOOL CFWL_ToolTipContainer::ProcessEnter(CFWL_EvtMouse* pEvt, - IFWL_Widget* pOwner) { - if (HasToolTip(pEvt->m_pDstTarget)) { - if (NULL == m_pToolTipImp) { - CFWL_WidgetImpProperties prop; - prop.m_pDataProvider = m_ToolTipDp; - prop.m_pOwner = pOwner; - CFX_RectF rtTooltip; - rtTooltip.Set(150, 150, 100, 50); - prop.m_rtWidget = rtTooltip; - IFWL_ToolTip* pToolTip = IFWL_ToolTip::Create(prop, nullptr); - pToolTip->Initialize(); - m_pToolTipImp = static_cast<CFWL_ToolTipImp*>(pToolTip->GetImpl()); - m_pToolTipImp->ModifyStylesEx(FWL_STYLEEXT_TTP_Multiline, 0); - m_pToolTipImp->SetStates(FWL_WGTSTATE_Invisible, TRUE); - } - if (pCurTarget->IsShowed()) { - CFX_WideString wsCaption; - pCurTarget->GetCaption(wsCaption); - if (!wsCaption.IsEmpty()) { - m_ToolTipDp->m_wsCaption = wsCaption; - } - CFX_RectF rt; - CFX_SizeF sz; - pCurTarget->GetToolTipSize(sz); - if (sz.x > 0 && sz.y > 0) { - rt.width = sz.x; - rt.height = sz.y; - } else { - CFX_RectF r; - m_pToolTipImp->GetWidgetRect(r, TRUE); - rt.width = r.width; - rt.height = r.height; - } - CFX_PointF pt(pEvt->m_fx, pEvt->m_fy); - if (pCurTarget->GetToolTipPos(pt) == FWL_ERR_Succeeded) { - rt.left = pt.x; - rt.top = pt.y; - m_pToolTipImp->ModifyStylesEx(FWL_STYLEEXT_TTP_NoAnchor, 0); - } else { - CFX_RectF rtAnchor; - pCurTarget->GetWidget()->GetClientRect(rtAnchor); - pCurTarget->GetWidget()->TransformTo(NULL, rtAnchor.left, rtAnchor.top); - m_pToolTipImp->SetAnchor(rtAnchor); - m_pToolTipImp->ModifyStylesEx(0, FWL_STYLEEXT_TTP_NoAnchor); - } - m_pToolTipImp->SetWidgetRect(rt); - m_pToolTipImp->Update(); - m_pToolTipImp->Show(); - } - return TRUE; - } - return FALSE; -} -FX_BOOL CFWL_ToolTipContainer::ProcessLeave(CFWL_EvtMouse* pEvt) { - if (HasToolTip(pEvt->m_pDstTarget) && NULL != m_pToolTipImp) { - m_pToolTipImp->Hide(); - pCurTarget = NULL; - return TRUE; - } - return FALSE; -} -IFWL_ToolTipTarget* CFWL_ToolTipContainer::GetCurrentToolTipTarget() { - return pCurTarget; -} -FX_ERR CFWL_ToolTipContainer::SetToolTipInitialDelay(int32_t nDelayTime) { - m_ToolTipDp->m_nInitDelayTime = nDelayTime; - return FWL_ERR_Succeeded; -} -FX_ERR CFWL_ToolTipContainer::SetToolTipAutoPopDelay(int32_t nDelayTime) { - m_ToolTipDp->m_nAutoPopDelayTime = nDelayTime; - return FWL_ERR_Succeeded; -} -FWL_ERR FWL_AddToolTipTarget(IFWL_ToolTipTarget* pTarget) { - return CFWL_ToolTipContainer::getInstance()->AddToolTipTarget(pTarget); -} -FWL_ERR FWL_RemoveToolTipTarget(IFWL_ToolTipTarget* pTarget) { - return CFWL_ToolTipContainer::getInstance()->RemoveToolTipTarget(pTarget); -} -FWL_ERR FWL_SetToolTipInitialDelay(int32_t nDelayTime) { - return CFWL_ToolTipContainer::getInstance()->SetToolTipInitialDelay( - nDelayTime); -} -FWL_ERR FWL_SetToolTipAutoPopDelay(int32_t nDelayTime) { - return CFWL_ToolTipContainer::getInstance()->SetToolTipAutoPopDelay( - nDelayTime); -} -IFWL_Widget* FWL_GetCurrentThreadModalWidget(IFWL_NoteThread* pNoteThread) { - if (!pNoteThread) - return NULL; - CFWL_NoteDriver* noteDriver = - static_cast<CFWL_NoteDriver*>(pNoteThread->GetNoteDriver()); - if (!noteDriver) - return NULL; - if (noteDriver->CountLoop() == 1) { - return NULL; - } - CFWL_NoteLoop* topLoop = noteDriver->GetTopLoop(); - if (!topLoop) - return NULL; - CFWL_WidgetImp* widget = topLoop->GetForm(); - if (!widget) - return NULL; - return widget->GetInterface(); -} -FWL_ERR FWL_SetHook(IFWL_NoteDriver* driver, - FWLMessageHookCallback callback, - void* info) { - CFWL_NoteDriver* noteDriver = static_cast<CFWL_NoteDriver*>(driver); - noteDriver->SetHook(callback, info); - return FWL_ERR_Succeeded; -} diff --git a/xfa/src/fwl/core/fwl_noteimp.h b/xfa/src/fwl/core/fwl_noteimp.h deleted file mode 100644 index 72e1a8ef96..0000000000 --- a/xfa/src/fwl/core/fwl_noteimp.h +++ /dev/null @@ -1,157 +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 - -#ifndef XFA_SRC_FWL_CORE_FWL_NOTEIMP_H_ -#define XFA_SRC_FWL_CORE_FWL_NOTEIMP_H_ - -#include "xfa/include/fwl/core/fwl_note.h" - -class CFWL_WidgetImp; -class CFWL_ToolTipImp; -class CFWL_CoreToopTipDP; -class CFWL_NoteDriver; -class CFWL_EventTarget; -class CFWL_ToolTipContainer; - -class CFWL_NoteLoop : public IFWL_NoteLoop { - public: - CFWL_NoteLoop(CFWL_WidgetImp* pForm = NULL); - - // IFWL_NoteLoop: - ~CFWL_NoteLoop() override {} - FX_BOOL PreProcessMessage(CFWL_Message* pMessage) override; - FWL_ERR Idle(int32_t count) override; - - CFWL_WidgetImp* GetForm(); - FX_BOOL ContinueModal(); - FWL_ERR EndModalLoop(); - FX_BOOL TranslateAccelerator(CFWL_Message* pMessage); - FWL_ERR SetMainForm(CFWL_WidgetImp* pForm); - - protected: - void GenerateCommondEvent(FX_DWORD dwCommand); - - CFWL_WidgetImp* m_pForm; - FX_BOOL m_bContinueModal; -}; -class CFWL_NoteDriver : public IFWL_NoteDriver { - public: - CFWL_NoteDriver(); - ~CFWL_NoteDriver() override; - - // IFWL_NoteDriver: - FX_BOOL SendNote(CFWL_Note* pNote) override; - FX_BOOL PostMessage(CFWL_Message* pMessage) override; - FWL_ERR RegisterEventTarget(IFWL_Widget* pListener, - IFWL_Widget* pEventSource = NULL, - FX_DWORD dwFilter = FWL_EVENT_ALL_MASK) override; - FWL_ERR UnregisterEventTarget(IFWL_Widget* pListener) override; - void ClearEventTargets(FX_BOOL bRemoveAll) override; - int32_t GetQueueMaxSize() const override; - FWL_ERR SetQueueMaxSize(const int32_t size) override; - IFWL_NoteThread* GetOwnerThread() const override; - FWL_ERR PushNoteLoop(IFWL_NoteLoop* pNoteLoop) override; - IFWL_NoteLoop* PopNoteLoop() override; - IFWL_Widget* GetFocus() override; - FX_BOOL SetFocus(IFWL_Widget* pFocus, FX_BOOL bNotify = FALSE) override; - void SetGrab(IFWL_Widget* pGrab, FX_BOOL bSet) override; - FWL_ERR Run() override; - - IFWL_Widget* GetHover(); - void SetHover(IFWL_Widget* pHover); - void NotifyTargetHide(IFWL_Widget* pNoteTarget); - void NotifyTargetDestroy(IFWL_Widget* pNoteTarget); - void NotifyFullScreenMode(IFWL_Widget* pNoteTarget, FX_BOOL bFullScreen); - FWL_ERR RegisterForm(CFWL_WidgetImp* pForm); - FWL_ERR UnRegisterForm(CFWL_WidgetImp* pForm); - FX_BOOL QueueMessage(CFWL_Message* pMessage); - FX_BOOL UnqueueMessage(CFWL_NoteLoop* pNoteLoop); - CFWL_NoteLoop* GetTopLoop(); - int32_t CountLoop(); - void SetHook(FWLMessageHookCallback callback, void* info); - FX_BOOL ProcessMessage(CFWL_Message* pMessage); - - protected: - FX_BOOL DispatchMessage(CFWL_Message* pMessage, IFWL_Widget* pMessageForm); - FX_BOOL DoActivate(CFWL_MsgActivate* pMsg, IFWL_Widget* pMessageForm); - FX_BOOL DoDeactivate(CFWL_MsgDeactivate* pMsg, IFWL_Widget* pMessageForm); - FX_BOOL DoSetFocus(CFWL_MsgSetFocus* pMsg, IFWL_Widget* pMessageForm); - FX_BOOL DoKillFocus(CFWL_MsgKillFocus* pMsg, IFWL_Widget* pMessageForm); - FX_BOOL DoKey(CFWL_MsgKey* pMsg, IFWL_Widget* pMessageForm); - FX_BOOL DoMouse(CFWL_MsgMouse* pMsg, IFWL_Widget* pMessageForm); - FX_BOOL DoWheel(CFWL_MsgMouseWheel* pMsg, IFWL_Widget* pMessageForm); - FX_BOOL DoSize(CFWL_MsgSize* pMsg); - FX_BOOL DoWindowMove(CFWL_MsgWindowMove* pMsg, IFWL_Widget* pMessageForm); - FX_BOOL DoDragFiles(CFWL_MsgDropFiles* pMsg, IFWL_Widget* pMessageForm); - FX_BOOL DoMouseEx(CFWL_MsgMouse* pMsg, IFWL_Widget* pMessageForm); - void MouseSecondary(CFWL_MsgMouse* pMsg); - FX_BOOL IsValidMessage(CFWL_Message* pMessage); - IFWL_Widget* GetMessageForm(IFWL_Widget* pDstTarget); - void ClearInvalidEventTargets(FX_BOOL bRemoveAll); - CFX_PtrArray m_forms; - CFX_PtrArray m_noteQueue; - CFX_PtrArray m_noteLoopQueue; - CFX_MapPtrToPtr m_eventTargets; - int32_t m_sendEventCalled; - int32_t m_maxSize; - FX_BOOL m_bFullScreen; - IFWL_Widget* m_pHover; - IFWL_Widget* m_pFocus; - IFWL_Widget* m_pGrab; - CFWL_NoteLoop* m_pNoteLoop; - FWLMessageHookCallback m_hook; - void* m_hookInfo; -}; -typedef CFX_MapPtrTemplate<void*, FX_DWORD> CFWL_EventSource; -class CFWL_EventTarget { - public: - CFWL_EventTarget(CFWL_NoteDriver* pNoteDriver, IFWL_Widget* pListener) - : m_pListener(pListener), m_pNoteDriver(pNoteDriver), m_bInvalid(FALSE) {} - ~CFWL_EventTarget(); - int32_t SetEventSource(IFWL_Widget* pSource, - FX_DWORD dwFilter = FWL_EVENT_ALL_MASK); - FX_BOOL ProcessEvent(CFWL_Event* pEvent); - FX_BOOL IsFilterEvent(CFWL_Event* pEvent, FX_DWORD dwFilter); - FX_BOOL IsInvalid() { return m_bInvalid; } - void FlagInvalid() { m_bInvalid = TRUE; } - - protected: - CFWL_EventSource m_eventSources; - IFWL_Widget* m_pListener; - CFWL_NoteDriver* m_pNoteDriver; - FX_BOOL m_bInvalid; -}; -class CFWL_ToolTipContainer { - public: - static CFWL_ToolTipContainer* getInstance(); - static void DeleteInstance(); - - FX_ERR AddToolTipTarget(IFWL_ToolTipTarget* pTarget); - FX_ERR RemoveToolTipTarget(IFWL_ToolTipTarget* pTarget); - IFWL_ToolTipTarget* GetCurrentToolTipTarget(); - - FX_BOOL HasToolTip(IFWL_Widget* pWidget); - - FX_BOOL ProcessEnter(CFWL_EvtMouse* pEvt, IFWL_Widget* pOwner); - FX_BOOL ProcessLeave(CFWL_EvtMouse* pEvt); - - FX_ERR SetToolTipInitialDelay(int32_t iDelayTime); - FX_ERR SetToolTipAutoPopDelay(int32_t iDelayTime); - - protected: - CFWL_ToolTipContainer(); - virtual ~CFWL_ToolTipContainer(); - - IFWL_ToolTipTarget* pCurTarget; - CFWL_ToolTipImp* m_pToolTipImp; - CFWL_CoreToopTipDP* m_ToolTipDp; - CFX_PtrArray m_arrWidget; - - private: - static CFWL_ToolTipContainer* s_pInstance; -}; - -#endif // XFA_SRC_FWL_CORE_FWL_NOTEIMP_H_ diff --git a/xfa/src/fwl/core/fwl_panelimp.cpp b/xfa/src/fwl/core/fwl_panelimp.cpp deleted file mode 100644 index 7d6c8ee874..0000000000 --- a/xfa/src/fwl/core/fwl_panelimp.cpp +++ /dev/null @@ -1,152 +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_panelimp.h" - -#include "xfa/include/fwl/core/fwl_content.h" -#include "xfa/include/fwl/core/fwl_grid.h" -#include "xfa/include/fwl/core/fwl_panel.h" -#include "xfa/src/fwl/core/fwl_noteimp.h" -#include "xfa/src/fwl/core/fwl_targetimp.h" -#include "xfa/src/fwl/core/fwl_widgetimp.h" -#include "xfa/src/fwl/core/fwl_widgetmgrimp.h" - -// static -IFWL_Panel* IFWL_Panel::Create(CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) { - IFWL_Panel* pPanel = new IFWL_Panel; - CFWL_PanelImp* pPanelImpl = new CFWL_PanelImp(properties, pOuter); - pPanel->SetImpl(pPanelImpl); - pPanelImpl->SetInterface(pPanel); - return pPanel; -} -IFWL_Panel::IFWL_Panel() {} -IFWL_Content* IFWL_Panel::GetContent() { - return static_cast<CFWL_PanelImp*>(GetImpl())->GetContent(); -} -FWL_ERR IFWL_Panel::SetContent(IFWL_Content* pContent) { - return static_cast<CFWL_PanelImp*>(GetImpl())->SetContent(pContent); -} - -CFWL_PanelImp::CFWL_PanelImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) - : CFWL_WidgetImp(properties, pOuter), m_pContent(nullptr) {} -CFWL_PanelImp::~CFWL_PanelImp() {} -FWL_ERR CFWL_PanelImp::GetClassName(CFX_WideString& wsClass) const { - wsClass = FWL_CLASS_Panel; - return FWL_ERR_Succeeded; -} -FX_DWORD CFWL_PanelImp::GetClassID() const { - return FWL_CLASSHASH_Panel; -} -FWL_ERR CFWL_PanelImp::GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize) { - if (bAutoSize) { - if (m_pContent) { - m_pContent->GetWidgetRect(rect, TRUE); - } - } else { - rect = m_pProperties->m_rtWidget; - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_PanelImp::Update() { - if (m_pContent) { - CFX_RectF rtClient; - GetClientRect(rtClient); - FWL_GRIDUNIT eWidth = FWL_GRIDUNIT_Fixed, eHeight = FWL_GRIDUNIT_Fixed; - IFWL_WidgetMgr* pWidgetMgr = FWL_GetWidgetMgr(); - if (!pWidgetMgr) - return FWL_ERR_Indefinite; - IFWL_Widget* pParent = - pWidgetMgr->GetWidget(GetInterface(), FWL_WGTRELATION_Parent); - if (pParent && pParent->GetClassID() == FWL_CLASSHASH_Grid) { - IFWL_Grid* pGrid = static_cast<IFWL_Grid*>(pParent); - pGrid->GetWidgetSize(GetInterface(), FWL_GRIDSIZE_Width, eWidth); - pGrid->GetWidgetSize(GetInterface(), FWL_GRIDSIZE_Height, eHeight); - } - m_pContent->SetWidgetRect(rtClient); - m_pContent->Update(); - } - return FWL_ERR_Succeeded; -} -IFWL_Content* CFWL_PanelImp::GetContent() { - return m_pContent; -} -FWL_ERR CFWL_PanelImp::SetContent(IFWL_Content* pContent) { - if (!pContent) - return FWL_ERR_Indefinite; - m_pContent = pContent; - return pContent->SetParent(m_pInterface); -} -class CFWL_CustomPanelImp : public CFWL_WidgetImp { - public: - CFWL_CustomPanelImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter); - virtual ~CFWL_CustomPanelImp(); - virtual FWL_ERR GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize = FALSE); - virtual FWL_ERR Update(); - virtual IFWL_Content* GetContent(); - virtual FWL_ERR SetContent(IFWL_Content* pContent); - FWL_ERR SetProxy(IFWL_Proxy* pProxy); - - protected: - IFWL_Content* m_pContent; - IFWL_Proxy* m_pProxy; -}; -CFWL_CustomPanelImp::CFWL_CustomPanelImp( - const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) - : CFWL_WidgetImp(properties, pOuter), - m_pContent(nullptr), - m_pProxy(nullptr) {} -CFWL_CustomPanelImp::~CFWL_CustomPanelImp() {} -FWL_ERR CFWL_CustomPanelImp::GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize) { - if (bAutoSize && m_pProxy && - (m_pProxy->GetWidgetRect(rect, bAutoSize) == FWL_ERR_Succeeded)) { - return FWL_ERR_Succeeded; - } - return CFWL_WidgetImp::GetWidgetRect(rect, bAutoSize); -} -FWL_ERR CFWL_CustomPanelImp::Update() { - if (m_pProxy) { - return m_pProxy->Update(); - } - return CFWL_WidgetImp::Update(); -} -IFWL_Content* CFWL_CustomPanelImp::GetContent() { - return m_pContent; -} -FWL_ERR CFWL_CustomPanelImp::SetContent(IFWL_Content* pContent) { - if (!pContent) - return FWL_ERR_Indefinite; - m_pContent = pContent; - return pContent->SetParent(m_pInterface); -} -FWL_ERR CFWL_CustomPanelImp::SetProxy(IFWL_Proxy* pProxy) { - m_pProxy = pProxy; - return FWL_ERR_Succeeded; -} - -// statuc -IFWL_CustomPanel* IFWL_CustomPanel::Create(CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) { - IFWL_CustomPanel* pCustomPanel = new IFWL_CustomPanel; - CFWL_CustomPanelImp* pCustomPanelImpl = - new CFWL_CustomPanelImp(properties, pOuter); - pCustomPanel->SetImpl(pCustomPanelImpl); - pCustomPanelImpl->SetInterface(pCustomPanel); - return pCustomPanel; -} -IFWL_CustomPanel::IFWL_CustomPanel() {} -IFWL_Content* IFWL_CustomPanel::GetContent() { - return static_cast<CFWL_CustomPanelImp*>(GetImpl())->GetContent(); -} -FWL_ERR IFWL_CustomPanel::SetContent(IFWL_Content* pContent) { - return static_cast<CFWL_CustomPanelImp*>(GetImpl())->SetContent(pContent); -} -FWL_ERR IFWL_CustomPanel::SetProxy(IFWL_Proxy* pProxy) { - return static_cast<CFWL_CustomPanelImp*>(GetImpl())->SetProxy(pProxy); -} diff --git a/xfa/src/fwl/core/fwl_panelimp.h b/xfa/src/fwl/core/fwl_panelimp.h deleted file mode 100644 index 1bd7159054..0000000000 --- a/xfa/src/fwl/core/fwl_panelimp.h +++ /dev/null @@ -1,32 +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 - -#ifndef XFA_SRC_FWL_CORE_FWL_PANELIMP_H_ -#define XFA_SRC_FWL_CORE_FWL_PANELIMP_H_ - -#include "xfa/src/fwl/core/fwl_widgetimp.h" - -class CFWL_WidgetImpProperties; -class IFWL_Widget; -class IFWL_Content; - -class CFWL_PanelImp : public CFWL_WidgetImp { - public: - CFWL_PanelImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter); - virtual ~CFWL_PanelImp(); - virtual FWL_ERR GetClassName(CFX_WideString& wsClass) const; - virtual FX_DWORD GetClassID() const; - virtual FWL_ERR GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize = FALSE); - virtual FWL_ERR Update(); - virtual IFWL_Content* GetContent(); - virtual FWL_ERR SetContent(IFWL_Content* pContent); - - protected: - IFWL_Content* m_pContent; -}; - -#endif // XFA_SRC_FWL_CORE_FWL_PANELIMP_H_ diff --git a/xfa/src/fwl/core/fwl_sdadapterimp.cpp b/xfa/src/fwl/core/fwl_sdadapterimp.cpp deleted file mode 100644 index fedd6b285d..0000000000 --- a/xfa/src/fwl/core/fwl_sdadapterimp.cpp +++ /dev/null @@ -1,175 +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/include/fwl/adapter/fwl_sdadapterimp.h" - -#include "core/include/fxcrt/fx_system.h" -#include "xfa/include/fwl/adapter/fwl_adapterthreadmgr.h" -#include "xfa/include/fwl/adapter/fwl_adapterwidgetmgr.h" -#include "xfa/include/fwl/core/fwl_app.h" -#include "xfa/src/fwl/core/fwl_noteimp.h" -#include "xfa/src/fwl/core/fwl_targetimp.h" -#include "xfa/src/fwl/core/fwl_threadimp.h" -#include "xfa/src/fwl/core/fwl_widgetmgrimp.h" - -CFWL_SDAdapterWidgetMgr::CFWL_SDAdapterWidgetMgr() {} -CFWL_SDAdapterWidgetMgr::~CFWL_SDAdapterWidgetMgr() {} - -FWL_ERR CFWL_SDAdapterWidgetMgr::CreateWidget(IFWL_Widget* pWidget, - IFWL_Widget* pParent) { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_SDAdapterWidgetMgr::DestroyWidget(IFWL_Widget* pWidget) { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_SDAdapterWidgetMgr::SetWidgetRect(IFWL_Widget* pWidget, - const CFX_RectF& rect) { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_SDAdapterWidgetMgr::SetWidgetPosition(IFWL_Widget* pWidget, - FX_FLOAT fx, - FX_FLOAT fy) { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_SDAdapterWidgetMgr::SetParentWidget(IFWL_Widget* pWidget, - IFWL_Widget* pParent) { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_SDAdapterWidgetMgr::ShowWidget(IFWL_Widget* pWidget) { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_SDAdapterWidgetMgr::HideWidget(IFWL_Widget* pWidget) { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_SDAdapterWidgetMgr::SetNormal(IFWL_Widget* pWidget) { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_SDAdapterWidgetMgr::SetMaximize(IFWL_Widget* pWidget) { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_SDAdapterWidgetMgr::SetMinimize(IFWL_Widget* pWidget) { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_SDAdapterWidgetMgr::RunWidget(IFWL_Widget* pWidget) { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_SDAdapterWidgetMgr::RepaintWidget(IFWL_Widget* pWidget, - const CFX_RectF* pRect) { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_SDAdapterWidgetMgr::Exit(int32_t iExitCode) { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_SDAdapterWidgetMgr::CreateWidgetWithNativeId(IFWL_Widget* pWidget, - void* vp) { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_SDAdapterWidgetMgr::GetWidgetRect(IFWL_Widget* pWidget, - CFX_RectF& rect) { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_SDAdapterWidgetMgr::SetWidgetIcon(IFWL_Widget* pWidget, - const CFX_DIBitmap* pIcon, - FX_BOOL bBig) { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_SDAdapterWidgetMgr::SetWidgetCaption( - IFWL_Widget* pWidget, - const CFX_WideStringC& wsCaption) { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_SDAdapterWidgetMgr::SetBorderRegion(IFWL_Widget* pWidget, - CFX_Path* pPath) { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_SDAdapterWidgetMgr::SetTransparent(IFWL_Widget* pWidget, - FX_DWORD dwAlpha) { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_SDAdapterWidgetMgr::SetFullScreen(IFWL_Widget* pWidget, - FX_BOOL bFullScreen) { - return FWL_ERR_Succeeded; -} -FX_BOOL CFWL_SDAdapterWidgetMgr::CheckMessage() { - return TRUE; -} -FX_BOOL CFWL_SDAdapterWidgetMgr::IsIdleMessage() { - return TRUE; -} -FWL_ERR CFWL_SDAdapterWidgetMgr::DispatchMessage() { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_SDAdapterWidgetMgr::GetWidgetDC(IFWL_Widget* pWidget, void*& pDC) { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_SDAdapterWidgetMgr::ReleaseWidgetDC(IFWL_Widget* pWidget, - void* pDC, - CFX_RectF* pClip) { - return FWL_ERR_Succeeded; -} -void* CFWL_SDAdapterWidgetMgr::GetWindow(IFWL_Widget* pWidget) { - return NULL; -} -FX_DWORD CFWL_SDAdapterWidgetMgr::GetKeyState(FX_DWORD dwVirtKey) { - return 0; -} -FWL_ERR CFWL_SDAdapterWidgetMgr::RunLoop(IFWL_Widget* widget) { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_SDAdapterWidgetMgr::EndLoop() { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_SDAdapterWidgetMgr::InitMenu(IFWL_Menu* pMenu, - IFWL_MenuDP* pMenuData) { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_SDAdapterWidgetMgr::UpdateMenu(IFWL_Menu* pMenu, - const void* hItem, - int32_t iType) { - return FWL_ERR_Succeeded; -} -int32_t CFWL_SDAdapterWidgetMgr::TrackPopupMenu(IFWL_Menu* pMenu, - IFWL_MenuDP* pMenuData) { - return 0; -} -FWL_ERR CFWL_SDAdapterWidgetMgr::SetMessageHook(IFWL_AdapterMessageHook* hook) { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_SDAdapterWidgetMgr::GetSystemBorder(FX_FLOAT& l, - FX_FLOAT& t, - FX_FLOAT& r, - FX_FLOAT& b) { - return FWL_ERR_Succeeded; -} -FX_BOOL CFWL_SDAdapterWidgetMgr::GetPopupPos(IFWL_Widget* pWidget, - FX_FLOAT fMinHeight, - FX_FLOAT fMaxHeight, - const CFX_RectF& rtAnchor, - CFX_RectF& rtPopup) { - return FWL_ERR_Succeeded; -} -CFWL_SDAdapterThreadMgr::CFWL_SDAdapterThreadMgr() {} -CFWL_SDAdapterThreadMgr::~CFWL_SDAdapterThreadMgr() {} -FWL_ERR CFWL_SDAdapterThreadMgr::Start(IFWL_Thread* pThread, - FWL_HTHREAD& hThread, - FX_BOOL bSuspended) { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_SDAdapterThreadMgr::Resume(FWL_HTHREAD hThread) { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_SDAdapterThreadMgr::Suspend(FWL_HTHREAD hThread) { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_SDAdapterThreadMgr::Kill(FWL_HTHREAD hThread, int32_t iExitCode) { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_SDAdapterThreadMgr::Stop(FWL_HTHREAD hThread, int32_t iExitCode) { - return FWL_ERR_Succeeded; -} -IFWL_Thread* CFWL_SDAdapterThreadMgr::GetCurrentThread() { - return FWL_GetApp(); -} diff --git a/xfa/src/fwl/core/fwl_targetimp.cpp b/xfa/src/fwl/core/fwl_targetimp.cpp deleted file mode 100644 index 0c8d5fbce0..0000000000 --- a/xfa/src/fwl/core/fwl_targetimp.cpp +++ /dev/null @@ -1,44 +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_targetimp.h" - -FWL_ERR IFWL_Target::GetClassName(CFX_WideString& wsClass) const { - return m_pImpl->GetClassName(wsClass); -} -FX_DWORD IFWL_Target::GetClassID() const { - return m_pImpl->GetClassID(); -} -FX_BOOL IFWL_Target::IsInstance(const CFX_WideStringC& wsClass) const { - return m_pImpl->IsInstance(wsClass); -} -FWL_ERR IFWL_Target::Initialize() { - return m_pImpl->Initialize(); -} -FWL_ERR IFWL_Target::Finalize() { - return m_pImpl->Finalize(); -} -IFWL_Target::~IFWL_Target() { - delete m_pImpl; -} -CFWL_TargetImp::CFWL_TargetImp() {} -CFWL_TargetImp::~CFWL_TargetImp() {} -FWL_ERR CFWL_TargetImp::GetClassName(CFX_WideString& wsClass) const { - wsClass.Empty(); - return FWL_ERR_Succeeded; -} -FX_DWORD CFWL_TargetImp::GetClassID() const { - return 0; -} -FX_BOOL CFWL_TargetImp::IsInstance(const CFX_WideStringC& wsClass) const { - return FALSE; -} -FWL_ERR CFWL_TargetImp::Initialize() { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_TargetImp::Finalize() { - return FWL_ERR_Succeeded; -} diff --git a/xfa/src/fwl/core/fwl_targetimp.h b/xfa/src/fwl/core/fwl_targetimp.h deleted file mode 100644 index e243d39e9b..0000000000 --- a/xfa/src/fwl/core/fwl_targetimp.h +++ /dev/null @@ -1,27 +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 - -#ifndef XFA_SRC_FWL_CORE_FWL_TARGETIMP_H_ -#define XFA_SRC_FWL_CORE_FWL_TARGETIMP_H_ - -#include "core/include/fxcrt/fx_basic.h" -#include "xfa/include/fwl/core/fwl_target.h" - -class CFWL_TargetImp { - public: - virtual ~CFWL_TargetImp(); - - virtual FWL_ERR GetClassName(CFX_WideString& wsClass) const; - virtual FX_DWORD GetClassID() const; - virtual FX_BOOL IsInstance(const CFX_WideStringC& wsClass) const; - virtual FWL_ERR Initialize(); - virtual FWL_ERR Finalize(); - - protected: - CFWL_TargetImp(); -}; - -#endif // XFA_SRC_FWL_CORE_FWL_TARGETIMP_H_ diff --git a/xfa/src/fwl/core/fwl_threadimp.cpp b/xfa/src/fwl/core/fwl_threadimp.cpp deleted file mode 100644 index 28df34eade..0000000000 --- a/xfa/src/fwl/core/fwl_threadimp.cpp +++ /dev/null @@ -1,38 +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_threadimp.h" - -#include "xfa/src/fwl/core/fwl_appimp.h" -#include "xfa/src/fwl/core/fwl_noteimp.h" -#include "xfa/src/fwl/core/fwl_targetimp.h" - -void IFWL_Thread::Release() { - delete m_pImpl; -} -FWL_ERR IFWL_Thread::Run(FWL_HTHREAD hThread) { - return m_pImpl->Run(hThread); -} -IFWL_NoteDriver* IFWL_NoteThread::GetNoteDriver() { - return static_cast<CFWL_NoteThreadImp*>(GetImpl())->GetNoteDriver(); -} - -FWL_ERR CFWL_ThreadImp::Run(FWL_HTHREAD hThread) { - return FWL_ERR_Succeeded; -} -CFWL_NoteThreadImp::CFWL_NoteThreadImp(IFWL_NoteThread* pIface) - : CFWL_ThreadImp(pIface), m_pNoteDriver(new CFWL_NoteDriver) {} -CFWL_NoteThreadImp::~CFWL_NoteThreadImp() { - delete m_pNoteDriver; -} -FWL_ERR CFWL_NoteThreadImp::Run(FWL_HTHREAD hThread) { - if (!m_pNoteDriver) - return FWL_ERR_Indefinite; - return m_pNoteDriver->Run(); -} -IFWL_NoteDriver* CFWL_NoteThreadImp::GetNoteDriver() { - return m_pNoteDriver; -} diff --git a/xfa/src/fwl/core/fwl_threadimp.h b/xfa/src/fwl/core/fwl_threadimp.h deleted file mode 100644 index eaf30e6350..0000000000 --- a/xfa/src/fwl/core/fwl_threadimp.h +++ /dev/null @@ -1,40 +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 - -#ifndef XFA_SRC_FWL_CORE_FWL_THREADIMP_H_ -#define XFA_SRC_FWL_CORE_FWL_THREADIMP_H_ - -#include "xfa/include/fwl/core/fwl_thread.h" // For FWL_HTHREAD. - -class CFWL_NoteDriver; -class IFWL_NoteDriver; - -class CFWL_ThreadImp { - public: - virtual ~CFWL_ThreadImp() {} - IFWL_Thread* GetInterface() const { return m_pIface; } - virtual FWL_ERR Run(FWL_HTHREAD hThread); - - protected: - CFWL_ThreadImp(IFWL_Thread* pIface) : m_pIface(pIface) {} - - private: - IFWL_Thread* const m_pIface; -}; - -class CFWL_NoteThreadImp : public CFWL_ThreadImp { - public: - CFWL_NoteThreadImp(IFWL_NoteThread* pIface); - virtual ~CFWL_NoteThreadImp(); - - FWL_ERR Run(FWL_HTHREAD hThread) override; - virtual IFWL_NoteDriver* GetNoteDriver(); - - protected: - CFWL_NoteDriver* const m_pNoteDriver; -}; - -#endif // XFA_SRC_FWL_CORE_FWL_THREADIMP_H_ diff --git a/xfa/src/fwl/core/fwl_timerimp.cpp b/xfa/src/fwl/core/fwl_timerimp.cpp deleted file mode 100644 index 503c0f759e..0000000000 --- a/xfa/src/fwl/core/fwl_timerimp.cpp +++ /dev/null @@ -1,36 +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/include/fwl/adapter/fwl_adapternative.h" -#include "xfa/include/fwl/adapter/fwl_adaptertimermgr.h" -#include "xfa/include/fwl/core/fwl_app.h" -#include "xfa/include/fwl/core/fwl_timer.h" -#include "xfa/src/fwl/core/fwl_appimp.h" -#include "xfa/src/fwl/core/fwl_targetimp.h" -#include "xfa/src/fwl/core/fwl_threadimp.h" - -FWL_HTIMER FWL_StartTimer(IFWL_Timer* pTimer, - FX_DWORD dwElapse, - FX_BOOL bImmediately) { - IFWL_AdapterNative* pAdapterNative = FWL_GetAdapterNative(); - if (!pAdapterNative) - return NULL; - IFWL_AdapterTimerMgr* pAdapterTimerMgr = pAdapterNative->GetTimerMgr(); - if (!pAdapterTimerMgr) - return NULL; - FWL_HTIMER hTimer = NULL; - pAdapterTimerMgr->Start(pTimer, dwElapse, hTimer, bImmediately); - return hTimer; -} -int32_t FWL_StopTimer(FWL_HTIMER hTimer) { - IFWL_AdapterNative* pAdapterNative = FWL_GetAdapterNative(); - if (!pAdapterNative) - return FWL_ERR_Indefinite; - IFWL_AdapterTimerMgr* pAdapterTimerMgr = pAdapterNative->GetTimerMgr(); - if (!pAdapterTimerMgr) - return FWL_ERR_Indefinite; - return pAdapterTimerMgr->Stop(hTimer); -} diff --git a/xfa/src/fwl/core/fwl_widgetimp.cpp b/xfa/src/fwl/core/fwl_widgetimp.cpp deleted file mode 100644 index 32d80d1fb3..0000000000 --- a/xfa/src/fwl/core/fwl_widgetimp.cpp +++ /dev/null @@ -1,1101 +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_widgetimp.h" - -#include <algorithm> - -#include "xfa/include/fwl/adapter/fwl_adapternative.h" -#include "xfa/include/fwl/adapter/fwl_adapterthreadmgr.h" -#include "xfa/include/fwl/adapter/fwl_adapterwidgetmgr.h" -#include "xfa/include/fwl/basewidget/fwl_combobox.h" -#include "xfa/include/fwl/basewidget/fwl_datetimepicker.h" -#include "xfa/include/fwl/basewidget/fwl_menu.h" -#include "xfa/include/fwl/core/fwl_app.h" -#include "xfa/include/fwl/core/fwl_content.h" -#include "xfa/include/fwl/core/fwl_form.h" -#include "xfa/include/fwl/core/fwl_theme.h" -#include "xfa/src/fde/tto/fde_textout.h" -#include "xfa/src/fwl/core/fwl_appimp.h" -#include "xfa/src/fwl/core/fwl_noteimp.h" -#include "xfa/src/fwl/core/fwl_targetimp.h" -#include "xfa/src/fwl/core/fwl_threadimp.h" -#include "xfa/src/fwl/core/fwl_widgetmgrimp.h" - -FWL_ERR IFWL_Widget::GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize) { - return static_cast<CFWL_WidgetImp*>(GetImpl()) - ->GetWidgetRect(rect, bAutoSize); -} -FWL_ERR IFWL_Widget::GetGlobalRect(CFX_RectF& rect) { - return static_cast<CFWL_WidgetImp*>(GetImpl())->GetGlobalRect(rect); -} -FWL_ERR IFWL_Widget::SetWidgetRect(const CFX_RectF& rect) { - return static_cast<CFWL_WidgetImp*>(GetImpl())->SetWidgetRect(rect); -} -FWL_ERR IFWL_Widget::GetClientRect(CFX_RectF& rect) { - return static_cast<CFWL_WidgetImp*>(GetImpl())->GetClientRect(rect); -} -IFWL_Widget* IFWL_Widget::GetParent() { - return static_cast<CFWL_WidgetImp*>(GetImpl())->GetParent(); -} -FWL_ERR IFWL_Widget::SetParent(IFWL_Widget* pParent) { - return static_cast<CFWL_WidgetImp*>(GetImpl())->SetParent(pParent); -} -IFWL_Widget* IFWL_Widget::GetOwner() { - return static_cast<CFWL_WidgetImp*>(GetImpl())->GetOwner(); -} -FWL_ERR IFWL_Widget::SetOwner(IFWL_Widget* pOwner) { - return static_cast<CFWL_WidgetImp*>(GetImpl())->SetOwner(pOwner); -} -IFWL_Widget* IFWL_Widget::GetOuter() { - return static_cast<CFWL_WidgetImp*>(GetImpl())->GetOuter(); -} -FX_DWORD IFWL_Widget::GetStyles() { - return static_cast<CFWL_WidgetImp*>(GetImpl())->GetStyles(); -} -FWL_ERR IFWL_Widget::ModifyStyles(FX_DWORD dwStylesAdded, - FX_DWORD dwStylesRemoved) { - return static_cast<CFWL_WidgetImp*>(GetImpl()) - ->ModifyStyles(dwStylesAdded, dwStylesRemoved); -} -FX_DWORD IFWL_Widget::GetStylesEx() { - return static_cast<CFWL_WidgetImp*>(GetImpl())->GetStylesEx(); -} -FWL_ERR IFWL_Widget::ModifyStylesEx(FX_DWORD dwStylesExAdded, - FX_DWORD dwStylesExRemoved) { - return static_cast<CFWL_WidgetImp*>(GetImpl()) - ->ModifyStylesEx(dwStylesExAdded, dwStylesExRemoved); -} -FX_DWORD IFWL_Widget::GetStates() { - return static_cast<CFWL_WidgetImp*>(GetImpl())->GetStates(); -} -FWL_ERR IFWL_Widget::SetStates(FX_DWORD dwStates, FX_BOOL bSet) { - return static_cast<CFWL_WidgetImp*>(GetImpl())->SetStates(dwStates, bSet); -} -FWL_ERR IFWL_Widget::SetPrivateData(void* module_id, - void* pData, - PD_CALLBACK_FREEDATA callback) { - return static_cast<CFWL_WidgetImp*>(GetImpl()) - ->SetPrivateData(module_id, pData, callback); -} -void* IFWL_Widget::GetPrivateData(void* module_id) { - return static_cast<CFWL_WidgetImp*>(GetImpl())->GetPrivateData(module_id); -} -FWL_ERR IFWL_Widget::Update() { - return static_cast<CFWL_WidgetImp*>(GetImpl())->Update(); -} -FWL_ERR IFWL_Widget::LockUpdate() { - return static_cast<CFWL_WidgetImp*>(GetImpl())->LockUpdate(); -} -FWL_ERR IFWL_Widget::UnlockUpdate() { - return static_cast<CFWL_WidgetImp*>(GetImpl())->UnlockUpdate(); -} -FX_DWORD IFWL_Widget::HitTest(FX_FLOAT fx, FX_FLOAT fy) { - return static_cast<CFWL_WidgetImp*>(GetImpl())->HitTest(fx, fy); -} -FWL_ERR IFWL_Widget::TransformTo(IFWL_Widget* pWidget, - FX_FLOAT& fx, - FX_FLOAT& fy) { - return static_cast<CFWL_WidgetImp*>(GetImpl())->TransformTo(pWidget, fx, fy); -} -FWL_ERR IFWL_Widget::TransformTo(IFWL_Widget* pWidget, CFX_RectF& rt) { - return static_cast<CFWL_WidgetImp*>(GetImpl())->TransformTo(pWidget, rt); -} -FWL_ERR IFWL_Widget::GetMatrix(CFX_Matrix& matrix, FX_BOOL bGlobal) { - return static_cast<CFWL_WidgetImp*>(GetImpl())->GetMatrix(matrix, bGlobal); -} -FWL_ERR IFWL_Widget::SetMatrix(const CFX_Matrix& matrix) { - return static_cast<CFWL_WidgetImp*>(GetImpl())->SetMatrix(matrix); -} -FWL_ERR IFWL_Widget::DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - return static_cast<CFWL_WidgetImp*>(GetImpl()) - ->DrawWidget(pGraphics, pMatrix); -} -IFWL_ThemeProvider* IFWL_Widget::GetThemeProvider() { - return static_cast<CFWL_WidgetImp*>(GetImpl())->GetThemeProvider(); -} -FWL_ERR IFWL_Widget::SetThemeProvider(IFWL_ThemeProvider* pThemeProvider) { - return static_cast<CFWL_WidgetImp*>(GetImpl()) - ->SetThemeProvider(pThemeProvider); -} -FWL_ERR IFWL_Widget::SetDataProvider(IFWL_DataProvider* pDataProvider) { - return static_cast<CFWL_WidgetImp*>(GetImpl()) - ->SetDataProvider(pDataProvider); -} -IFWL_WidgetDelegate* IFWL_Widget::SetDelegate(IFWL_WidgetDelegate* pDelegate) { - return static_cast<CFWL_WidgetImp*>(GetImpl())->SetDelegate(pDelegate); -} -IFWL_NoteThread* IFWL_Widget::GetOwnerThread() const { - return static_cast<CFWL_WidgetImp*>(GetImpl())->GetOwnerThread(); -} -CFX_SizeF IFWL_Widget::GetOffsetFromParent(IFWL_Widget* pParent) { - return static_cast<CFWL_WidgetImp*>(GetImpl())->GetOffsetFromParent(pParent); -} -FWL_ERR CFWL_WidgetImp::Initialize() { - IFWL_App* pApp = FWL_GetApp(); - if (!pApp) - return FWL_ERR_Indefinite; - IFWL_AdapterNative* pAdapter = pApp->GetAdapterNative(); - if (!pAdapter) - return FWL_ERR_Indefinite; - IFWL_AdapterThreadMgr* pAdapterThread = pAdapter->GetThreadMgr(); - if (!pAdapterThread) - return FWL_ERR_Indefinite; - SetOwnerThread(static_cast<CFWL_NoteThreadImp*>( - pAdapterThread->GetCurrentThread()->GetImpl())); - IFWL_Widget* pParent = m_pProperties->m_pParent; - m_pWidgetMgr->InsertWidget(pParent, m_pInterface); - if (!IsChild()) { - { - IFWL_Widget* pOwner = m_pProperties->m_pOwner; - if (pOwner) { - m_pWidgetMgr->SetOwner(pOwner, m_pInterface); - } - } - m_pWidgetMgr->CreateWidget_Native(m_pInterface); - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_WidgetImp::Finalize() { - NotifyDriver(); - IFWL_Form* pForm = static_cast<IFWL_Form*>( - FWL_GetWidgetMgr()->GetWidget(m_pInterface, FWL_WGTRELATION_SystemForm)); - if (pForm && pForm != m_pInterface) { - IFWL_Content* pContent = pForm->GetContent(); - if (pContent) { - pContent->RemoveWidget(m_pInterface); - } - } - if (!IsChild()) { - m_pWidgetMgr->DestroyWidget_Native(m_pInterface); - } - m_pWidgetMgr->RemoveWidget(m_pInterface); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_WidgetImp::GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize) { - if (bAutoSize) { - if (HasEdge()) { - FX_FLOAT fEdge = GetEdgeWidth(); - rect.Inflate(fEdge, fEdge); - } - if (HasBorder()) { - FX_FLOAT fBorder = GetBorderSize(); - rect.Inflate(fBorder, fBorder); - } - } else { - rect = m_pProperties->m_rtWidget; - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_WidgetImp::GetGlobalRect(CFX_RectF& rect) { - IFWL_Widget* pForm = - m_pWidgetMgr->GetWidget(m_pInterface, FWL_WGTRELATION_SystemForm); - if (!pForm) - return FWL_ERR_Indefinite; - rect.Set(0, 0, m_pProperties->m_rtWidget.width, - m_pProperties->m_rtWidget.height); - if (pForm == m_pInterface) { - return FWL_ERR_Succeeded; - } - return TransformTo(pForm, rect); -} -FWL_ERR CFWL_WidgetImp::SetWidgetRect(const CFX_RectF& rect) { - CFX_RectF rtOld = m_pProperties->m_rtWidget; - m_pProperties->m_rtWidget = rect; - if (IsChild()) { - if (FXSYS_fabs(rtOld.width - rect.width) > 0.5f || - FXSYS_fabs(rtOld.height - rect.height) > 0.5f) { - CFWL_EvtSizeChanged ev; - ev.m_pSrcTarget = m_pInterface; - ev.m_rtOld = rtOld; - ev.m_rtNew = rect; - IFWL_WidgetDelegate* pDelegate = SetDelegate(NULL); - if (pDelegate) { - pDelegate->OnProcessEvent(&ev); - } - } - return FWL_ERR_Succeeded; - } - m_pWidgetMgr->SetWidgetRect_Native(m_pInterface, rect); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_WidgetImp::GetClientRect(CFX_RectF& rect) { - GetEdgeRect(rect); - if (HasEdge()) { - FX_FLOAT fEdge = GetEdgeWidth(); - rect.Deflate(fEdge, fEdge); - } - return FWL_ERR_Succeeded; -} -IFWL_Widget* CFWL_WidgetImp::GetParent() { - return m_pWidgetMgr->GetWidget(m_pInterface, FWL_WGTRELATION_Parent); -} -FWL_ERR CFWL_WidgetImp::SetParent(IFWL_Widget* pParent) { - m_pProperties->m_pParent = pParent; - m_pWidgetMgr->SetParent(pParent, m_pInterface); - return FWL_ERR_Succeeded; -} -IFWL_Widget* CFWL_WidgetImp::GetOwner() { - return m_pWidgetMgr->GetWidget(m_pInterface, FWL_WGTRELATION_Owner); -} -FWL_ERR CFWL_WidgetImp::SetOwner(IFWL_Widget* pOwner) { - m_pProperties->m_pOwner = pOwner; - m_pWidgetMgr->SetOwner(pOwner, m_pInterface); - return FWL_ERR_Succeeded; -} -IFWL_Widget* CFWL_WidgetImp::GetOuter() { - return m_pOuter; -} -FX_DWORD CFWL_WidgetImp::GetStyles() { - return m_pProperties->m_dwStyles; -} -FWL_ERR CFWL_WidgetImp::ModifyStyles(FX_DWORD dwStylesAdded, - FX_DWORD dwStylesRemoved) { - m_pProperties->m_dwStyles = - (m_pProperties->m_dwStyles & ~dwStylesRemoved) | dwStylesAdded; - return FWL_ERR_Succeeded; -} -FX_DWORD CFWL_WidgetImp::GetStylesEx() { - return m_pProperties->m_dwStyleExes; -} -FWL_ERR CFWL_WidgetImp::ModifyStylesEx(FX_DWORD dwStylesExAdded, - FX_DWORD dwStylesExRemoved) { - m_pProperties->m_dwStyleExes = - (m_pProperties->m_dwStyleExes & ~dwStylesExRemoved) | dwStylesExAdded; - return FWL_ERR_Succeeded; -} -FX_DWORD CFWL_WidgetImp::GetStates() { - return m_pProperties->m_dwStates; -} -static void NotifyHideChildWidget(IFWL_WidgetMgr* widgetMgr, - IFWL_Widget* widget, - CFWL_NoteDriver* noteDriver) { - IFWL_Widget* child = widgetMgr->GetWidget(widget, FWL_WGTRELATION_FirstChild); - while (child) { - noteDriver->NotifyTargetHide(child); - NotifyHideChildWidget(widgetMgr, child, noteDriver); - child = widgetMgr->GetWidget(child, FWL_WGTRELATION_NextSibling); - } -} -FWL_ERR CFWL_WidgetImp::SetStates(FX_DWORD dwStates, FX_BOOL bSet) { - bSet ? (m_pProperties->m_dwStates |= dwStates) - : (m_pProperties->m_dwStates &= ~dwStates); - FWL_ERR ret = FWL_ERR_Succeeded; - if (dwStates & FWL_WGTSTATE_Invisible) { - if (bSet) { - ret = m_pWidgetMgr->HideWidget_Native(m_pInterface); - CFWL_NoteDriver* noteDriver = - static_cast<CFWL_NoteDriver*>(GetOwnerThread()->GetNoteDriver()); - IFWL_WidgetMgr* widgetMgr = FWL_GetWidgetMgr(); - noteDriver->NotifyTargetHide(m_pInterface); - IFWL_Widget* child = - widgetMgr->GetWidget(m_pInterface, FWL_WGTRELATION_FirstChild); - while (child) { - noteDriver->NotifyTargetHide(child); - NotifyHideChildWidget(widgetMgr, child, noteDriver); - child = widgetMgr->GetWidget(child, FWL_WGTRELATION_NextSibling); - } - } else { - ret = m_pWidgetMgr->ShowWidget_Native(m_pInterface); - } - } - return ret; -} -FWL_ERR CFWL_WidgetImp::SetPrivateData(void* module_id, - void* pData, - PD_CALLBACK_FREEDATA callback) { - if (!m_pPrivateData) { - m_pPrivateData = new CFX_PrivateData; - } - m_pPrivateData->SetPrivateData(module_id, pData, callback); - return FWL_ERR_Succeeded; -} -void* CFWL_WidgetImp::GetPrivateData(void* module_id) { - if (!m_pPrivateData) - return NULL; - return m_pPrivateData->GetPrivateData(module_id); -} -FWL_ERR CFWL_WidgetImp::Update() { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_WidgetImp::LockUpdate() { - m_iLock++; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_WidgetImp::UnlockUpdate() { - if (IsLocked()) { - m_iLock--; - } - return FWL_ERR_Succeeded; -} -FX_DWORD CFWL_WidgetImp::HitTest(FX_FLOAT fx, FX_FLOAT fy) { - CFX_RectF rtClient; - GetClientRect(rtClient); - if (rtClient.Contains(fx, fy)) { - return FWL_WGTHITTEST_Client; - } - if (HasEdge()) { - CFX_RectF rtEdge; - GetEdgeRect(rtEdge); - if (rtEdge.Contains(fx, fy)) { - return FWL_WGTHITTEST_Edge; - } - } - if (HasBorder()) { - CFX_RectF rtRelative; - GetRelativeRect(rtRelative); - if (rtRelative.Contains(fx, fy)) { - return FWL_WGTHITTEST_Border; - } - } - return FWL_WGTHITTEST_Unknown; -} -FWL_ERR CFWL_WidgetImp::TransformTo(IFWL_Widget* pWidget, - FX_FLOAT& fx, - FX_FLOAT& fy) { - if (m_pWidgetMgr->IsFormDisabled()) { - CFX_SizeF szOffset; - if (IsParent(pWidget)) { - szOffset = GetOffsetFromParent(pWidget); - } else { - szOffset = pWidget->GetOffsetFromParent(m_pInterface); - szOffset.x = -szOffset.x; - szOffset.y = -szOffset.y; - } - fx += szOffset.x; - fy += szOffset.y; - return FWL_ERR_Succeeded; - } - CFX_RectF r; - CFX_Matrix m; - IFWL_Widget* parent = GetParent(); - if (parent) { - GetWidgetRect(r); - fx += r.left; - fy += r.top; - GetMatrix(m, TRUE); - m.TransformPoint(fx, fy); - } - IFWL_Widget* form1 = - m_pWidgetMgr->GetWidget(m_pInterface, FWL_WGTRELATION_SystemForm); - if (!form1) - return FWL_ERR_Indefinite; - if (!pWidget) { - form1->GetWidgetRect(r); - fx += r.left; - fy += r.top; -#ifdef FWL_UseMacSystemBorder - if (form1->GetStyles() & FWL_WGTSTYLE_Caption) { - FX_FLOAT l, t, r, b; - l = t = r = b = 0; - FWL_GetAdapterWidgetMgr()->GetSystemBorder(l, t, r, b); - fy += t; - } -#endif - return FWL_ERR_Succeeded; - } - IFWL_Widget* form2 = - m_pWidgetMgr->GetWidget(pWidget, FWL_WGTRELATION_SystemForm); - if (!form2) - return FWL_ERR_Indefinite; - if (form1 != form2) { - form1->GetWidgetRect(r); - fx += r.left; - fy += r.top; - form2->GetWidgetRect(r); - fx -= r.left; - fy -= r.top; -#ifdef FWL_UseMacSystemBorder - if ((form1->GetStyles() & FWL_WGTSTYLE_Caption) != - (form2->GetStyles() & FWL_WGTSTYLE_Caption)) { - FX_FLOAT l, t, r, b; - l = t = r = b = 0; - FWL_GetAdapterWidgetMgr()->GetSystemBorder(l, t, r, b); - (form1->GetStyles() & FWL_WGTSTYLE_Caption) ? (fy += t) : (fy -= t); - } -#endif - } - parent = pWidget->GetParent(); - if (parent) { - pWidget->GetMatrix(m, TRUE); - CFX_Matrix m1; - m1.SetIdentity(); - m1.SetReverse(m); - m1.TransformPoint(fx, fy); - pWidget->GetWidgetRect(r); - fx -= r.left; - fy -= r.top; - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_WidgetImp::TransformTo(IFWL_Widget* pWidget, CFX_RectF& rt) { - return TransformTo(pWidget, rt.left, rt.top); -} -FWL_ERR CFWL_WidgetImp::GetMatrix(CFX_Matrix& matrix, FX_BOOL bGlobal) { - if (!m_pProperties) - return FWL_ERR_Indefinite; - if (bGlobal) { - IFWL_Widget* parent = GetParent(); - CFX_PtrArray parents; - while (parent) { - parents.Add(parent); - parent = parent->GetParent(); - } - matrix.SetIdentity(); - CFX_Matrix ctmOnParent; - CFX_RectF rect; - int32_t count = parents.GetSize(); - for (int32_t i = count - 2; i >= 0; i--) { - parent = static_cast<IFWL_Widget*>(parents.GetAt(i)); - parent->GetMatrix(ctmOnParent, FALSE); - parent->GetWidgetRect(rect); - matrix.Concat(ctmOnParent, TRUE); - matrix.Translate(rect.left, rect.top, TRUE); - } - matrix.Concat(m_pProperties->m_ctmOnParent, TRUE); - parents.RemoveAll(); - } else { - matrix = m_pProperties->m_ctmOnParent; - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_WidgetImp::SetMatrix(const CFX_Matrix& matrix) { - if (!m_pProperties) - return FWL_ERR_Indefinite; - IFWL_Widget* parent = GetParent(); - if (!parent) { - return FWL_ERR_Indefinite; - } - m_pProperties->m_ctmOnParent = matrix; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_WidgetImp::DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - return FWL_ERR_Indefinite; -} -IFWL_ThemeProvider* CFWL_WidgetImp::GetThemeProvider() { - return m_pProperties->m_pThemeProvider; -} -FWL_ERR CFWL_WidgetImp::SetThemeProvider(IFWL_ThemeProvider* pThemeProvider) { - m_pProperties->m_pThemeProvider = pThemeProvider; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_WidgetImp::SetDataProvider(IFWL_DataProvider* pDataProvider) { - m_pProperties->m_pDataProvider = pDataProvider; - return FWL_ERR_Succeeded; -} -IFWL_WidgetDelegate* CFWL_WidgetImp::SetDelegate( - IFWL_WidgetDelegate* pDelegate) { - if (!m_pCurDelegate) { - m_pCurDelegate = m_pDelegate; - } - if (!pDelegate) { - return m_pCurDelegate; - } - IFWL_WidgetDelegate* pOldDelegate = m_pCurDelegate; - m_pCurDelegate = pDelegate; - return pOldDelegate; -} -IFWL_NoteThread* CFWL_WidgetImp::GetOwnerThread() const { - return static_cast<IFWL_NoteThread*>(m_pOwnerThread->GetInterface()); -} -FWL_ERR CFWL_WidgetImp::SetOwnerThread(CFWL_NoteThreadImp* pOwnerThread) { - m_pOwnerThread = pOwnerThread; - return FWL_ERR_Succeeded; -} -IFWL_Widget* CFWL_WidgetImp::GetInterface() const { - return m_pInterface; -} -void CFWL_WidgetImp::SetInterface(IFWL_Widget* pInterface) { - m_pInterface = pInterface; -} -CFWL_WidgetImp::CFWL_WidgetImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) - : m_pProperties(new CFWL_WidgetImpProperties), - m_pPrivateData(NULL), - m_pDelegate(NULL), - m_pCurDelegate(NULL), - m_pOuter(pOuter), - m_pInterface(NULL), - m_iLock(0) { - *m_pProperties = properties; - m_pWidgetMgr = static_cast<CFWL_WidgetMgr*>(FWL_GetWidgetMgr()); - FXSYS_assert(m_pWidgetMgr != NULL); -} -CFWL_WidgetImp::~CFWL_WidgetImp() { - if (m_pPrivateData) { - delete m_pPrivateData; - m_pPrivateData = NULL; - } - if (m_pProperties) { - delete m_pProperties; - m_pProperties = NULL; - } -} -FX_BOOL CFWL_WidgetImp::IsEnabled() const { - return (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled) == 0; -} -FX_BOOL CFWL_WidgetImp::IsVisible() const { - return (m_pProperties->m_dwStates & FWL_WGTSTATE_Invisible) == 0; -} -FX_BOOL CFWL_WidgetImp::IsActive() const { - return (m_pProperties->m_dwStates & FWL_WGTSTATE_Deactivated) == 0; -} -FX_BOOL CFWL_WidgetImp::IsOverLapper() const { - return (m_pProperties->m_dwStyles & FWL_WGTSTYLE_WindowTypeMask) == - FWL_WGTSTYLE_OverLapper; -} -FX_BOOL CFWL_WidgetImp::IsPopup() const { - return !!(m_pProperties->m_dwStyles & FWL_WGTSTYLE_Popup); -} -FX_BOOL CFWL_WidgetImp::IsChild() const { - return !!(m_pProperties->m_dwStyles & FWL_WGTSTYLE_Child); -} -FX_BOOL CFWL_WidgetImp::IsLocked() const { - return m_iLock > 0; -} -FX_BOOL CFWL_WidgetImp::IsOffscreen() const { - return !!(m_pProperties->m_dwStyles & FWL_WGTSTYLE_Offscreen); -} -FX_BOOL CFWL_WidgetImp::HasBorder() const { - return !!(m_pProperties->m_dwStyles & FWL_WGTSTYLE_Border); -} -FX_BOOL CFWL_WidgetImp::HasEdge() const { - return !!(m_pProperties->m_dwStyles & FWL_WGTSTYLE_EdgeMask); -} -void CFWL_WidgetImp::GetEdgeRect(CFX_RectF& rtEdge) { - rtEdge = m_pProperties->m_rtWidget; - rtEdge.left = rtEdge.top = 0; - if (HasBorder()) { - FX_FLOAT fCX = GetBorderSize(); - FX_FLOAT fCY = GetBorderSize(FALSE); - rtEdge.Deflate(fCX, fCY); - } -} -FX_FLOAT CFWL_WidgetImp::GetBorderSize(FX_BOOL bCX) { - FX_FLOAT* pfBorder = static_cast<FX_FLOAT*>(GetThemeCapacity( - bCX ? FWL_WGTCAPACITY_CXBorder : FWL_WGTCAPACITY_CYBorder)); - if (!pfBorder) - return 0; - return *pfBorder; -} -FX_FLOAT CFWL_WidgetImp::GetEdgeWidth() { - FX_DWORD dwCapacity = 0; - switch (m_pProperties->m_dwStyles & FWL_WGTSTYLE_EdgeMask) { - case FWL_WGTSTYLE_EdgeFlat: { - dwCapacity = FWL_WGTCAPACITY_EdgeFlat; - break; - } - case FWL_WGTSTYLE_EdgeRaised: { - dwCapacity = FWL_WGTCAPACITY_EdgeRaised; - break; - } - case FWL_WGTSTYLE_EdgeSunken: { - dwCapacity = FWL_WGTCAPACITY_EdgeSunken; - break; - } - } - if (dwCapacity > 0) { - FX_FLOAT* fRet = static_cast<FX_FLOAT*>(GetThemeCapacity(dwCapacity)); - return fRet ? *fRet : 0; - } - return 0; -} -void CFWL_WidgetImp::GetRelativeRect(CFX_RectF& rect) { - rect = m_pProperties->m_rtWidget; - rect.left = rect.top = 0; -} -void* CFWL_WidgetImp::GetThemeCapacity(FX_DWORD dwCapacity) { - IFWL_ThemeProvider* pTheme = GetAvailableTheme(); - if (!pTheme) - return NULL; - CFWL_ThemePart part; - part.m_pWidget = m_pInterface; - return pTheme->GetCapacity(&part, dwCapacity); -} -IFWL_ThemeProvider* CFWL_WidgetImp::GetAvailableTheme() { - if (m_pProperties->m_pThemeProvider) { - return m_pProperties->m_pThemeProvider; - } - IFWL_Widget* pUp = m_pInterface; - do { - FWL_WGTRELATION relation = (pUp->GetStyles() & FWL_WGTSTYLE_Popup) - ? FWL_WGTRELATION_Owner - : FWL_WGTRELATION_Parent; - pUp = m_pWidgetMgr->GetWidget(pUp, relation); - if (pUp) { - IFWL_ThemeProvider* pRet = pUp->GetThemeProvider(); - if (pRet && pRet->IsValidWidget(m_pInterface)) { - return pRet; - } - } - } while (pUp); - return FWL_GetApp()->GetThemeProvider(); -} -CFWL_WidgetImp* CFWL_WidgetImp::GetRootOuter() { - IFWL_Widget* pRet = m_pOuter; - if (!pRet) - return nullptr; - while (IFWL_Widget* pOuter = pRet->GetOuter()) { - pRet = pOuter; - } - return static_cast<CFWL_WidgetImp*>(pRet->GetImpl()); -} -#define FWL_WGT_CalcHeight 2048 -#define FWL_WGT_CalcWidth 2048 -#define FWL_WGT_CalcMultiLineDefWidth 120.0f -CFX_SizeF CFWL_WidgetImp::CalcTextSize(const CFX_WideString& wsText, - IFWL_ThemeProvider* pTheme, - FX_BOOL bMultiLine, - int32_t iLineWidth) { - if (!pTheme) - return CFX_SizeF(); - - CFWL_ThemeText calPart; - calPart.m_pWidget = m_pInterface; - calPart.m_wsText = wsText; - calPart.m_dwTTOStyles = - bMultiLine ? FDE_TTOSTYLE_LineWrap : FDE_TTOSTYLE_SingleLine; - calPart.m_iTTOAlign = FDE_TTOALIGNMENT_TopLeft; - CFX_RectF rect; - FX_FLOAT fWidth = bMultiLine - ? (iLineWidth > 0 ? (FX_FLOAT)iLineWidth - : FWL_WGT_CalcMultiLineDefWidth) - : FWL_WGT_CalcWidth; - rect.Set(0, 0, fWidth, FWL_WGT_CalcHeight); - pTheme->CalcTextRect(&calPart, rect); - return CFX_SizeF(rect.width, rect.height); -} -void CFWL_WidgetImp::CalcTextRect(const CFX_WideString& wsText, - IFWL_ThemeProvider* pTheme, - FX_DWORD dwTTOStyles, - int32_t iTTOAlign, - CFX_RectF& rect) { - CFWL_ThemeText calPart; - calPart.m_pWidget = m_pInterface; - calPart.m_wsText = wsText; - calPart.m_dwTTOStyles = dwTTOStyles; - calPart.m_iTTOAlign = iTTOAlign; - pTheme->CalcTextRect(&calPart, rect); -} -void CFWL_WidgetImp::SetFocus(FX_BOOL bFocus) { - if (m_pWidgetMgr->IsFormDisabled()) - return; - IFWL_NoteThread* pThread = GetOwnerThread(); - if (!pThread) - return; - CFWL_NoteDriver* pDriver = - static_cast<CFWL_NoteDriver*>(pThread->GetNoteDriver()); - if (!pDriver) - return; - IFWL_Widget* curFocus = pDriver->GetFocus(); - if (bFocus && curFocus != m_pInterface) { - pDriver->SetFocus(m_pInterface); - } else if (!bFocus && curFocus == m_pInterface) { - pDriver->SetFocus(NULL); - } -} -void CFWL_WidgetImp::SetGrab(FX_BOOL bSet) { - IFWL_NoteThread* pThread = GetOwnerThread(); - if (!pThread) - return; - CFWL_NoteDriver* pDriver = - static_cast<CFWL_NoteDriver*>(pThread->GetNoteDriver()); - pDriver->SetGrab(m_pInterface, bSet); -} -FX_BOOL CFWL_WidgetImp::GetPopupPos(FX_FLOAT fMinHeight, - FX_FLOAT fMaxHeight, - const CFX_RectF& rtAnchor, - CFX_RectF& rtPopup) { - if (GetClassID() == FWL_CLASSHASH_Menu) { - return GetPopupPosMenu(fMinHeight, fMaxHeight, rtAnchor, rtPopup); - } else { - if (GetClassID() == FWL_CLASSHASH_ComboBox) { - if (m_pWidgetMgr->IsFormDisabled()) { - return m_pWidgetMgr->GetAdapterPopupPos(m_pInterface, fMinHeight, - fMaxHeight, rtAnchor, rtPopup); - } else { - return GetPopupPosComboBox(fMinHeight, fMaxHeight, rtAnchor, rtPopup); - } - } else if (GetClassID() == FWL_CLASSHASH_DateTimePicker && - m_pWidgetMgr->IsFormDisabled()) { - return m_pWidgetMgr->GetAdapterPopupPos(m_pInterface, fMinHeight, - fMaxHeight, rtAnchor, rtPopup); - } else { - return GetPopupPosGeneral(fMinHeight, fMaxHeight, rtAnchor, rtPopup); - } - } - return FALSE; -} -FX_BOOL CFWL_WidgetImp::GetPopupPosMenu(FX_FLOAT fMinHeight, - FX_FLOAT fMaxHeight, - const CFX_RectF& rtAnchor, - CFX_RectF& rtPopup) { - FX_FLOAT fx = 0; - FX_FLOAT fy = 0; - FX_FLOAT fScreenWidth = 0; - FX_FLOAT fScreenHeight = 0; - GetScreenSize(fScreenWidth, fScreenHeight); - if (GetStylesEx() & FWL_STYLEEXT_MNU_Vert) { - FX_BOOL bLeft = m_pProperties->m_rtWidget.left < 0; - FX_FLOAT fRight = rtAnchor.right() + rtPopup.width; - TransformTo(NULL, fx, fy); - if (fRight + fx > fScreenWidth || bLeft) { - rtPopup.Set(rtAnchor.left - rtPopup.width, rtAnchor.top, rtPopup.width, - rtPopup.height); - } else { - rtPopup.Set(rtAnchor.right(), rtAnchor.top, rtPopup.width, - rtPopup.height); - } - } else { - FX_FLOAT fBottom = rtAnchor.bottom() + rtPopup.height; - TransformTo(NULL, fx, fy); - if (fBottom + fy > fScreenHeight) { - rtPopup.Set(rtAnchor.left, rtAnchor.top - rtPopup.height, rtPopup.width, - rtPopup.height); - } else { - rtPopup.Set(rtAnchor.left, rtAnchor.bottom(), rtPopup.width, - rtPopup.height); - } - } - rtPopup.Offset(fx, fy); - return TRUE; -} -FX_BOOL CFWL_WidgetImp::GetPopupPosComboBox(FX_FLOAT fMinHeight, - FX_FLOAT fMaxHeight, - const CFX_RectF& rtAnchor, - CFX_RectF& rtPopup) { - FX_FLOAT fx = 0; - FX_FLOAT fy = 0; - FX_FLOAT fScreenWidth = 0; - FX_FLOAT fScreenHeight = 0; - GetScreenSize(fScreenWidth, fScreenHeight); - FX_FLOAT fPopHeight = rtPopup.height; - if (rtPopup.height > fMaxHeight) { - fPopHeight = fMaxHeight; - } else if (rtPopup.height < fMinHeight) { - fPopHeight = fMinHeight; - } - FX_FLOAT fWidth = std::max(rtAnchor.width, rtPopup.width); - FX_FLOAT fBottom = rtAnchor.bottom() + fPopHeight; - TransformTo(NULL, fx, fy); - if (fBottom + fy > fScreenHeight) { - rtPopup.Set(rtAnchor.left, rtAnchor.top - fPopHeight, fWidth, fPopHeight); - } else { - rtPopup.Set(rtAnchor.left, rtAnchor.bottom(), fWidth, fPopHeight); - } - rtPopup.Offset(fx, fy); - return TRUE; -} -FX_BOOL CFWL_WidgetImp::GetPopupPosGeneral(FX_FLOAT fMinHeight, - FX_FLOAT fMaxHeight, - const CFX_RectF& rtAnchor, - CFX_RectF& rtPopup) { - FX_FLOAT fx = 0; - FX_FLOAT fy = 0; - FX_FLOAT fScreenWidth = 0; - FX_FLOAT fScreenHeight = 0; - GetScreenSize(fScreenWidth, fScreenHeight); - TransformTo(NULL, fx, fy); - if (rtAnchor.bottom() + fy > fScreenHeight) { - rtPopup.Set(rtAnchor.left, rtAnchor.top - rtPopup.height, rtPopup.width, - rtPopup.height); - } else { - rtPopup.Set(rtAnchor.left, rtAnchor.bottom(), rtPopup.width, - rtPopup.height); - } - rtPopup.Offset(fx, fy); - return TRUE; -} -FX_BOOL CFWL_WidgetImp::GetScreenSize(FX_FLOAT& fx, FX_FLOAT& fy) { - return FALSE; -} -void CFWL_WidgetImp::RegisterEventTarget(IFWL_Widget* pEventSource, - FX_DWORD dwFilter) { - IFWL_NoteThread* pThread = GetOwnerThread(); - if (!pThread) - return; - IFWL_NoteDriver* pNoteDriver = pThread->GetNoteDriver(); - if (!pNoteDriver) - return; - pNoteDriver->RegisterEventTarget(m_pInterface, pEventSource, dwFilter); -} -void CFWL_WidgetImp::UnregisterEventTarget() { - IFWL_NoteThread* pThread = GetOwnerThread(); - if (!pThread) - return; - IFWL_NoteDriver* pNoteDriver = pThread->GetNoteDriver(); - if (!pNoteDriver) - return; - pNoteDriver->UnregisterEventTarget(m_pInterface); -} -void CFWL_WidgetImp::DispatchKeyEvent(CFWL_MsgKey* pNote) { - if (!pNote) - return; - CFWL_EvtKey* pEvent = new CFWL_EvtKey; - pEvent->m_pSrcTarget = m_pInterface; - pEvent->m_dwCmd = pNote->m_dwCmd; - pEvent->m_dwKeyCode = pNote->m_dwKeyCode; - pEvent->m_dwFlags = pNote->m_dwFlags; - DispatchEvent(pEvent); - pEvent->Release(); -} -void CFWL_WidgetImp::DispatchEvent(CFWL_Event* pEvent) { - if (m_pOuter) { - IFWL_WidgetDelegate* pDelegate = m_pOuter->SetDelegate(NULL); - pDelegate->OnProcessEvent(pEvent); - return; - } - IFWL_NoteThread* pThread = GetOwnerThread(); - if (!pThread) - return; - IFWL_NoteDriver* pNoteDriver = pThread->GetNoteDriver(); - if (!pNoteDriver) - return; - pNoteDriver->SendNote(pEvent); -} -void CFWL_WidgetImp::Repaint(const CFX_RectF* pRect) { - if (pRect) { - m_pWidgetMgr->RepaintWidget(m_pInterface, pRect); - return; - } - CFX_RectF rect; - rect = m_pProperties->m_rtWidget; - rect.left = rect.top = 0; - m_pWidgetMgr->RepaintWidget(m_pInterface, &rect); -} -void CFWL_WidgetImp::DrawBackground(CFX_Graphics* pGraphics, - int32_t iPartBk, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - CFX_RectF rtRelative; - GetRelativeRect(rtRelative); - CFWL_ThemeBackground param; - param.m_pWidget = m_pInterface; - param.m_iPart = iPartBk; - param.m_pGraphics = pGraphics; - if (pMatrix) { - param.m_matrix.Concat(*pMatrix, TRUE); - } - param.m_rtPart = rtRelative; - pTheme->DrawBackground(¶m); -} -void CFWL_WidgetImp::DrawBorder(CFX_Graphics* pGraphics, - int32_t iPartBorder, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - CFX_RectF rtRelative; - GetRelativeRect(rtRelative); - CFWL_ThemeBackground param; - param.m_pWidget = m_pInterface; - param.m_iPart = iPartBorder; - param.m_pGraphics = pGraphics; - if (pMatrix) { - param.m_matrix.Concat(*pMatrix, TRUE); - } - param.m_rtPart = rtRelative; - pTheme->DrawBackground(¶m); -} -void CFWL_WidgetImp::DrawEdge(CFX_Graphics* pGraphics, - int32_t iPartEdge, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix) { - CFX_RectF rtEdge; - GetEdgeRect(rtEdge); - CFWL_ThemeBackground param; - param.m_pWidget = m_pInterface; - param.m_iPart = iPartEdge; - param.m_pGraphics = pGraphics; - if (pMatrix) { - param.m_matrix.Concat(*pMatrix, TRUE); - } - param.m_rtPart = rtEdge; - pTheme->DrawBackground(¶m); -} -void CFWL_WidgetImp::NotifyDriver() { - IFWL_NoteThread* pThread = GetOwnerThread(); - if (!pThread) - return; - CFWL_NoteDriver* pDriver = - static_cast<CFWL_NoteDriver*>(pThread->GetNoteDriver()); - if (!pDriver) - return; - pDriver->NotifyTargetDestroy(m_pInterface); -} -CFX_SizeF CFWL_WidgetImp::GetOffsetFromParent(IFWL_Widget* pParent) { - if (pParent == GetInterface()) - return CFX_SizeF(); - - IFWL_WidgetMgr* pWidgetMgr = FWL_GetWidgetMgr(); - if (!pWidgetMgr) - return CFX_SizeF(); - - CFX_SizeF szRet(m_pProperties->m_rtWidget.left, - m_pProperties->m_rtWidget.top); - - IFWL_Widget* pDstWidget = GetParent(); - while (pDstWidget && pDstWidget != pParent) { - CFX_RectF rtDst; - pDstWidget->GetWidgetRect(rtDst); - szRet += CFX_SizeF(rtDst.left, rtDst.top); - pDstWidget = pWidgetMgr->GetWidget(pDstWidget, FWL_WGTRELATION_Parent); - } - return szRet; -} -FX_BOOL CFWL_WidgetImp::IsParent(IFWL_Widget* pParent) { - IFWL_Widget* pUpWidget = GetParent(); - while (pUpWidget) { - if (pUpWidget == pParent) - return TRUE; - pUpWidget = pUpWidget->GetParent(); - } - return FALSE; -} -CFWL_WidgetImpDelegate::CFWL_WidgetImpDelegate() {} -int32_t CFWL_WidgetImpDelegate::OnProcessMessage(CFWL_Message* pMessage) { - if (!pMessage->m_pDstTarget) - return 0; - CFWL_WidgetImp* pWidget = - static_cast<CFWL_WidgetImp*>(pMessage->m_pDstTarget->GetImpl()); - FX_DWORD dwMsgCode = pMessage->GetClassID(); - switch (dwMsgCode) { - case FWL_MSGHASH_Mouse: { - CFWL_MsgMouse* pMsgMouse = static_cast<CFWL_MsgMouse*>(pMessage); - CFWL_EvtMouse evt; - evt.m_pSrcTarget = pWidget->m_pInterface; - evt.m_pDstTarget = pWidget->m_pInterface; - evt.m_dwCmd = pMsgMouse->m_dwCmd; - evt.m_dwFlags = pMsgMouse->m_dwFlags; - evt.m_fx = pMsgMouse->m_fx; - evt.m_fy = pMsgMouse->m_fy; - pWidget->DispatchEvent(&evt); - break; - } - case FWL_MSGHASH_MouseWheel: { - CFWL_MsgMouseWheel* pMsgMouseWheel = - static_cast<CFWL_MsgMouseWheel*>(pMessage); - CFWL_EvtMouseWheel evt; - evt.m_pSrcTarget = pWidget->m_pInterface; - evt.m_pDstTarget = pWidget->m_pInterface; - evt.m_dwFlags = pMsgMouseWheel->m_dwFlags; - evt.m_fDeltaX = pMsgMouseWheel->m_fDeltaX; - evt.m_fDeltaY = pMsgMouseWheel->m_fDeltaY; - evt.m_fx = pMsgMouseWheel->m_fx; - evt.m_fy = pMsgMouseWheel->m_fy; - pWidget->DispatchEvent(&evt); - break; - } - case FWL_MSGHASH_Key: { - CFWL_MsgKey* pMsgKey = static_cast<CFWL_MsgKey*>(pMessage); - CFWL_EvtKey evt; - evt.m_pSrcTarget = pWidget->m_pInterface; - evt.m_pDstTarget = pWidget->m_pInterface; - evt.m_dwKeyCode = pMsgKey->m_dwKeyCode; - evt.m_dwFlags = pMsgKey->m_dwFlags; - evt.m_dwCmd = pMsgKey->m_dwCmd; - pWidget->DispatchEvent(&evt); - break; - } - case FWL_MSGHASH_SetFocus: { - CFWL_MsgSetFocus* pMsgSetFocus = static_cast<CFWL_MsgSetFocus*>(pMessage); - CFWL_EvtSetFocus evt; - evt.m_pSrcTarget = pMsgSetFocus->m_pDstTarget; - evt.m_pDstTarget = pMsgSetFocus->m_pDstTarget; - evt.m_pSetFocus = pWidget->m_pInterface; - pWidget->DispatchEvent(&evt); - break; - } - case FWL_MSGHASH_KillFocus: { - CFWL_MsgKillFocus* pMsgKillFocus = - static_cast<CFWL_MsgKillFocus*>(pMessage); - CFWL_EvtKillFocus evt; - evt.m_pSrcTarget = pMsgKillFocus->m_pDstTarget; - evt.m_pDstTarget = pMsgKillFocus->m_pDstTarget; - evt.m_pKillFocus = pWidget->m_pInterface; - pWidget->DispatchEvent(&evt); - break; - } - default: {} - } - return 1; -} -FWL_ERR CFWL_WidgetImpDelegate::OnProcessEvent(CFWL_Event* pEvent) { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_WidgetImpDelegate::OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - CFWL_EvtDraw evt; - evt.m_pGraphics = pGraphics; - return FWL_ERR_Succeeded; -} -class CFWL_CustomImp : public CFWL_WidgetImp { - public: - CFWL_CustomImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter); - virtual FWL_ERR GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize = FALSE); - virtual FWL_ERR Update(); - virtual FWL_ERR SetProxy(IFWL_Proxy* pProxy); - - protected: - IFWL_Proxy* m_pProxy; -}; -CFWL_CustomImp::CFWL_CustomImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) - : CFWL_WidgetImp(properties, pOuter), m_pProxy(NULL) {} -FWL_ERR CFWL_CustomImp::GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize) { - if (m_pProxy && - (m_pProxy->GetWidgetRect(rect, bAutoSize) == FWL_ERR_Succeeded)) { - return FWL_ERR_Succeeded; - } - return CFWL_WidgetImp::GetWidgetRect(rect, bAutoSize); -} -FWL_ERR CFWL_CustomImp::Update() { - if (m_pProxy) { - return m_pProxy->Update(); - } - return CFWL_WidgetImp::Update(); -} -FWL_ERR CFWL_CustomImp::SetProxy(IFWL_Proxy* pProxy) { - m_pProxy = pProxy; - return FWL_ERR_Succeeded; -} - -// static -IFWL_Custom* IFWL_Custom::Create(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter) { - IFWL_Custom* pCustom = new IFWL_Custom; - CFWL_CustomImp* pCustomImpl = new CFWL_CustomImp(properties, pOuter); - pCustom->SetImpl(pCustomImpl); - pCustomImpl->SetInterface(pCustom); - return pCustom; -} -IFWL_Custom::IFWL_Custom() {} -FWL_ERR IFWL_Custom::SetProxy(IFWL_Proxy* pProxy) { - return static_cast<CFWL_CustomImp*>(GetImpl())->SetProxy(pProxy); -} -void FWL_SetWidgetRect(IFWL_Widget* widget, const CFX_RectF& rect) { - static_cast<CFWL_WidgetImp*>(widget->GetImpl())->m_pProperties->m_rtWidget = - rect; -} -void FWL_SetWidgetStates(IFWL_Widget* widget, FX_DWORD dwStates) { - static_cast<CFWL_WidgetImp*>(widget->GetImpl())->m_pProperties->m_dwStates = - dwStates; -} -void FWL_SetWidgetStyles(IFWL_Widget* widget, FX_DWORD dwStyles) { - static_cast<CFWL_WidgetImp*>(widget->GetImpl())->m_pProperties->m_dwStyles = - dwStyles; -} -FWL_ERR FWL_EnabelWidget(IFWL_Widget* widget, FX_BOOL bEnable) { - widget->SetStates(FWL_WGTSTATE_Disabled, !bEnable); - IFWL_WidgetMgr* widgetMgr = FWL_GetWidgetMgr(); - IFWL_Widget* child = widgetMgr->GetWidget(widget, FWL_WGTRELATION_FirstChild); - while (child) { - FWL_EnabelWidget(child, bEnable); - child = widgetMgr->GetWidget(child, FWL_WGTRELATION_NextSibling); - } - return FWL_ERR_Succeeded; -} diff --git a/xfa/src/fwl/core/fwl_widgetimp.h b/xfa/src/fwl/core/fwl_widgetimp.h deleted file mode 100644 index d0dcf3cfc1..0000000000 --- a/xfa/src/fwl/core/fwl_widgetimp.h +++ /dev/null @@ -1,162 +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 - -#ifndef XFA_SRC_FWL_CORE_FWL_WIDGETIMP_H_ -#define XFA_SRC_FWL_CORE_FWL_WIDGETIMP_H_ - -#include "xfa/include/fwl/core/fwl_widget.h" -#include "xfa/src/fwl/core/fwl_targetimp.h" - -class CFWL_NoteThreadImp; -class CFWL_WidgetImpProperties; -class CFWL_WidgetMgr; -class IFWL_DataProvider; -class IFWL_ThemeProvider; -class IFWL_Widget; -class IFWL_WidgetDelegate; - -class CFWL_WidgetImp : public CFWL_TargetImp { - public: - virtual FWL_ERR Initialize(); - virtual FWL_ERR Finalize(); - - virtual FWL_ERR GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize = FALSE); - virtual FWL_ERR GetGlobalRect(CFX_RectF& rect); - virtual FWL_ERR SetWidgetRect(const CFX_RectF& rect); - virtual FWL_ERR GetClientRect(CFX_RectF& rect); - virtual IFWL_Widget* GetParent(); - virtual FWL_ERR SetParent(IFWL_Widget* pParent); - virtual IFWL_Widget* GetOwner(); - virtual FWL_ERR SetOwner(IFWL_Widget* pOwner); - virtual IFWL_Widget* GetOuter(); - virtual FX_DWORD GetStyles(); - virtual FWL_ERR ModifyStyles(FX_DWORD dwStylesAdded, - FX_DWORD dwStylesRemoved); - virtual FX_DWORD GetStylesEx(); - virtual FWL_ERR ModifyStylesEx(FX_DWORD dwStylesExAdded, - FX_DWORD dwStylesExRemoved); - virtual FX_DWORD GetStates(); - virtual FWL_ERR SetStates(FX_DWORD dwStates, FX_BOOL bSet = TRUE); - virtual FWL_ERR SetPrivateData(void* module_id, - void* pData, - PD_CALLBACK_FREEDATA callback); - virtual void* GetPrivateData(void* module_id); - virtual FWL_ERR Update(); - virtual FWL_ERR LockUpdate(); - virtual FWL_ERR UnlockUpdate(); - virtual FX_DWORD HitTest(FX_FLOAT fx, FX_FLOAT fy); - virtual FWL_ERR TransformTo(IFWL_Widget* pWidget, FX_FLOAT& fx, FX_FLOAT& fy); - virtual FWL_ERR TransformTo(IFWL_Widget* pWidget, CFX_RectF& rt); - virtual FWL_ERR GetMatrix(CFX_Matrix& matrix, FX_BOOL bGlobal = FALSE); - virtual FWL_ERR SetMatrix(const CFX_Matrix& matrix); - virtual FWL_ERR DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL); - virtual IFWL_ThemeProvider* GetThemeProvider(); - virtual FWL_ERR SetThemeProvider(IFWL_ThemeProvider* pThemeProvider); - virtual FWL_ERR SetDataProvider(IFWL_DataProvider* pDataProvider); - virtual IFWL_WidgetDelegate* SetDelegate(IFWL_WidgetDelegate* pDelegate); - virtual IFWL_NoteThread* GetOwnerThread() const; - FWL_ERR SetOwnerThread(CFWL_NoteThreadImp* pOwnerThread); - IFWL_Widget* GetInterface() const; - void SetInterface(IFWL_Widget* pInterface); - CFX_SizeF GetOffsetFromParent(IFWL_Widget* pParent); - - protected: - CFWL_WidgetImp(const CFWL_WidgetImpProperties& properties, - IFWL_Widget* pOuter); - virtual ~CFWL_WidgetImp(); - FX_BOOL IsEnabled() const; - FX_BOOL IsVisible() const; - FX_BOOL IsActive() const; - FX_BOOL IsOverLapper() const; - FX_BOOL IsPopup() const; - FX_BOOL IsChild() const; - FX_BOOL IsLocked() const; - FX_BOOL IsOffscreen() const; - FX_BOOL HasBorder() const; - FX_BOOL HasEdge() const; - void GetEdgeRect(CFX_RectF& rtEdge); - FX_FLOAT GetBorderSize(FX_BOOL bCX = TRUE); - FX_FLOAT GetEdgeWidth(); - void GetRelativeRect(CFX_RectF& rect); - void* GetThemeCapacity(FX_DWORD dwCapacity); - IFWL_ThemeProvider* GetAvailableTheme(); - CFWL_WidgetImp* GetRootOuter(); - CFX_SizeF CalcTextSize(const CFX_WideString& wsText, - IFWL_ThemeProvider* pTheme, - FX_BOOL bMultiLine = FALSE, - int32_t iLineWidth = -1); - void CalcTextRect(const CFX_WideString& wsText, - IFWL_ThemeProvider* pTheme, - FX_DWORD dwTTOStyles, - int32_t iTTOAlign, - CFX_RectF& rect); - void SetFocus(FX_BOOL bFocus); - void SetGrab(FX_BOOL bSet); - FX_BOOL GetPopupPos(FX_FLOAT fMinHeight, - FX_FLOAT fMaxHeight, - const CFX_RectF& rtAnchor, - CFX_RectF& rtPopup); - FX_BOOL GetPopupPosMenu(FX_FLOAT fMinHeight, - FX_FLOAT fMaxHeight, - const CFX_RectF& rtAnchor, - CFX_RectF& rtPopup); - FX_BOOL GetPopupPosComboBox(FX_FLOAT fMinHeight, - FX_FLOAT fMaxHeight, - const CFX_RectF& rtAnchor, - CFX_RectF& rtPopup); - FX_BOOL GetPopupPosGeneral(FX_FLOAT fMinHeight, - FX_FLOAT fMaxHeight, - const CFX_RectF& rtAnchor, - CFX_RectF& rtPopup); - FX_BOOL GetScreenSize(FX_FLOAT& fx, FX_FLOAT& fy); - void RegisterEventTarget(IFWL_Widget* pEventSource = NULL, - FX_DWORD dwFilter = FWL_EVENT_ALL_MASK); - void UnregisterEventTarget(); - void DispatchKeyEvent(CFWL_MsgKey* pNote); - void DispatchEvent(CFWL_Event* pEvent); - void Repaint(const CFX_RectF* pRect = NULL); - void DrawBackground(CFX_Graphics* pGraphics, - int32_t iPartBk, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix = NULL); - void DrawBorder(CFX_Graphics* pGraphics, - int32_t iPartBorder, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix = NULL); - void DrawEdge(CFX_Graphics* pGraphics, - int32_t iPartEdge, - IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix = NULL); - void NotifyDriver(); - - FX_BOOL IsParent(IFWL_Widget* pParent); - CFWL_WidgetMgr* m_pWidgetMgr; - CFWL_NoteThreadImp* m_pOwnerThread; - CFWL_WidgetImpProperties* m_pProperties; - CFX_PrivateData* m_pPrivateData; - IFWL_WidgetDelegate* m_pDelegate; - IFWL_WidgetDelegate* m_pCurDelegate; - IFWL_Widget* m_pOuter; - IFWL_Widget* m_pInterface; - int32_t m_iLock; - friend class CFWL_WidgetImpDelegate; - friend void FWL_SetWidgetRect(IFWL_Widget* widget, const CFX_RectF& rect); - friend void FWL_SetWidgetStates(IFWL_Widget* widget, FX_DWORD dwStates); - friend void FWL_SetWidgetStyles(IFWL_Widget* widget, FX_DWORD dwStyles); -}; - -class CFWL_WidgetImpDelegate : public IFWL_WidgetDelegate { - public: - CFWL_WidgetImpDelegate(); - ~CFWL_WidgetImpDelegate() override {} - int32_t OnProcessMessage(CFWL_Message* pMessage) override; - FWL_ERR OnProcessEvent(CFWL_Event* pEvent) override; - FWL_ERR OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = NULL) override; -}; - -#endif // XFA_SRC_FWL_CORE_FWL_WIDGETIMP_H_ diff --git a/xfa/src/fwl/core/fwl_widgetmgrimp.cpp b/xfa/src/fwl/core/fwl_widgetmgrimp.cpp deleted file mode 100644 index aeb655b9ad..0000000000 --- a/xfa/src/fwl/core/fwl_widgetmgrimp.cpp +++ /dev/null @@ -1,1075 +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_widgetmgrimp.h" - -#include "xfa/include/fwl/adapter/fwl_adapternative.h" -#include "xfa/include/fwl/adapter/fwl_adapterwidgetmgr.h" -#include "xfa/include/fwl/core/fwl_app.h" -#include "xfa/include/fwl/core/fwl_form.h" -#include "xfa/src/fwl/core/fwl_appimp.h" -#include "xfa/src/fwl/core/fwl_noteimp.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" - -FX_BOOL FWL_UseOffscreen(IFWL_Widget* pWidget) { -#if (_FX_OS_ == _FX_MACOSX_) - return FALSE; -#else - return pWidget->GetStyles() & FWL_WGTSTYLE_Offscreen; -#endif -} -IFWL_WidgetMgr* FWL_GetWidgetMgr() { - IFWL_App* pApp = FWL_GetApp(); - if (!pApp) - return NULL; - return pApp->GetWidgetMgr(); -} -CFWL_WidgetMgr::CFWL_WidgetMgr(IFWL_AdapterNative* pAdapterNative) - : m_dwCapability(0) { - m_pDelegate = new CFWL_WidgetMgrDelegate(this); - m_pAdapter = pAdapterNative->GetWidgetMgr(m_pDelegate); - FXSYS_assert(m_pAdapter); - CFWL_WidgetMgrItem* pRoot = new CFWL_WidgetMgrItem; - m_mapWidgetItem.SetAt(NULL, pRoot); -#if (_FX_OS_ == _FX_WIN32_DESKTOP_) || (_FX_OS_ == _FX_WIN64_) - m_rtScreen.Reset(); -#endif -} -CFWL_WidgetMgr::~CFWL_WidgetMgr() { - FX_POSITION ps = m_mapWidgetItem.GetStartPosition(); - while (ps) { - void* pWidget; - CFWL_WidgetMgrItem* pItem; - m_mapWidgetItem.GetNextAssoc(ps, pWidget, (void*&)pItem); - delete pItem; - } - m_mapWidgetItem.RemoveAll(); - if (m_pDelegate) { - delete m_pDelegate; - m_pDelegate = NULL; - } -} -int32_t CFWL_WidgetMgr::CountWidgets(IFWL_Widget* pParent) { - CFWL_WidgetMgrItem* pParentItem = GetWidgetMgrItem(pParent); - return TravelWidgetMgr(pParentItem, NULL, NULL); -} -IFWL_Widget* CFWL_WidgetMgr::GetWidget(int32_t nIndex, IFWL_Widget* pParent) { - CFWL_WidgetMgrItem* pParentItem = GetWidgetMgrItem(pParent); - IFWL_Widget* pWidget = NULL; - TravelWidgetMgr(pParentItem, &nIndex, NULL, &pWidget); - return pWidget; -} -IFWL_Widget* CFWL_WidgetMgr::GetWidget(IFWL_Widget* pWidget, - FWL_WGTRELATION eRelation) { - CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget); - if (!pItem) { - return NULL; - } - IFWL_Widget* pRet = NULL; - switch (eRelation) { - case FWL_WGTRELATION_Parent: { - pRet = pItem->pParent ? pItem->pParent->pWidget : NULL; - break; - } - case FWL_WGTRELATION_Owner: { - pRet = pItem->pOwner ? pItem->pOwner->pWidget : NULL; - break; - } - case FWL_WGTRELATION_FirstSibling: { - pItem = pItem->pPrevious; - while (pItem && pItem->pPrevious) { - pItem = pItem->pPrevious; - } - pRet = pItem ? pItem->pWidget : NULL; - break; - } - case FWL_WGTRELATION_PriorSibling: { - pRet = pItem->pPrevious ? pItem->pPrevious->pWidget : NULL; - break; - } - case FWL_WGTRELATION_NextSibling: { - pRet = pItem->pNext ? pItem->pNext->pWidget : NULL; - break; - } - case FWL_WGTRELATION_LastSibling: { - pItem = pItem->pNext; - while (pItem && pItem->pNext) { - pItem = pItem->pNext; - } - pRet = pItem ? pItem->pWidget : NULL; - break; - } - case FWL_WGTRELATION_FirstChild: { - pRet = pItem->pChild ? pItem->pChild->pWidget : NULL; - break; - } - case FWL_WGTRELATION_LastChild: { - pItem = pItem->pChild; - while (pItem && pItem->pNext) { - pItem = pItem->pNext; - } - pRet = pItem ? pItem->pWidget : NULL; - break; - } - case FWL_WGTRELATION_SystemForm: { - while (pItem) { - if (IsAbleNative(pItem->pWidget)) { - pRet = pItem->pWidget; - break; - } - pItem = pItem->pParent; - } - break; - } - default: {} - } - return pRet; -} -int32_t CFWL_WidgetMgr::GetWidgetIndex(IFWL_Widget* pWidget) { - CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget); - if (!pItem) - return -1; - return TravelWidgetMgr(pItem->pParent, NULL, pItem); -} -FX_BOOL CFWL_WidgetMgr::SetWidgetIndex(IFWL_Widget* pWidget, int32_t nIndex) { - CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget); - if (!pItem) - return FALSE; - if (!pItem->pParent) - return FALSE; - CFWL_WidgetMgrItem* pChild = pItem->pParent->pChild; - int32_t i = 0; - while (pChild) { - if (pChild == pItem) { - if (i == nIndex) { - return TRUE; - } - if (pChild->pPrevious) { - pChild->pPrevious->pNext = pChild->pNext; - } - if (pChild->pNext) { - pChild->pNext->pPrevious = pChild->pPrevious; - } - if (pItem->pParent->pChild == pItem) { - pItem->pParent->pChild = pItem->pNext; - } - pItem->pNext = NULL; - pItem->pPrevious = NULL; - break; - } - if (!pChild->pNext) { - break; - } - pChild = pChild->pNext; - ++i; - } - pChild = pItem->pParent->pChild; - if (pChild) { - if (nIndex < 0) { - while (pChild->pNext) { - pChild = pChild->pNext; - } - pChild->pNext = pItem; - pItem->pPrevious = pChild; - pItem->pNext = NULL; - return TRUE; - } - i = 0; - while (i < nIndex && pChild->pNext) { - pChild = pChild->pNext; - ++i; - } - if (!pChild->pNext) { - pChild->pNext = pItem; - pItem->pPrevious = pChild; - pItem->pNext = NULL; - return TRUE; - } - if (pChild->pPrevious) { - pItem->pPrevious = pChild->pPrevious; - pChild->pPrevious->pNext = pItem; - } - pChild->pPrevious = pItem; - pItem->pNext = pChild; - if (pItem->pParent->pChild == pChild) { - pItem->pParent->pChild = pItem; - } - } else { - pItem->pParent->pChild = pItem; - pItem->pPrevious = NULL; - pItem->pNext = NULL; - } - return TRUE; -} -FWL_ERR CFWL_WidgetMgr::RepaintWidget(IFWL_Widget* pWidget, - const CFX_RectF* pRect) { - if (!m_pAdapter) - return FWL_ERR_Indefinite; - IFWL_Widget* pNative = pWidget; - CFX_RectF rect(*pRect); - if (IsFormDisabled()) { - IFWL_Widget* pOuter = pWidget->GetOuter(); - while (pOuter) { - CFX_RectF rtTemp; - pNative->GetWidgetRect(rtTemp); - rect.left += rtTemp.left; - rect.top += rtTemp.top; - pNative = pOuter; - pOuter = pOuter->GetOuter(); - } - } else if (!IsAbleNative(pWidget)) { - pNative = GetWidget(pWidget, FWL_WGTRELATION_SystemForm); - if (!pNative) - return FWL_ERR_Indefinite; - pWidget->TransformTo(pNative, rect.left, rect.top); - } - AddRedrawCounts(pNative); - return m_pAdapter->RepaintWidget(pNative, &rect); -} -void CFWL_WidgetMgr::AddWidget(IFWL_Widget* pWidget) { - CFWL_WidgetMgrItem* pParentItem = GetWidgetMgrItem(NULL); - CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget); - if (!pItem) { - pItem = new CFWL_WidgetMgrItem; - pItem->pWidget = pWidget; - m_mapWidgetItem.SetAt(pWidget, pItem); - } - if (pItem->pParent && pItem->pParent != pParentItem) { - if (pItem->pPrevious) { - pItem->pPrevious->pNext = pItem->pNext; - } - if (pItem->pNext) { - pItem->pNext->pPrevious = pItem->pPrevious; - } - if (pItem->pParent->pChild == pItem) { - pItem->pParent->pChild = pItem->pNext; - } - } - pItem->pParent = pParentItem; - SetWidgetIndex(pWidget, -1); -} -void CFWL_WidgetMgr::InsertWidget(IFWL_Widget* pParent, - IFWL_Widget* pChild, - int32_t nIndex) { - CFWL_WidgetMgrItem* pParentItem = GetWidgetMgrItem(pParent); - if (!pParentItem) { - pParentItem = new CFWL_WidgetMgrItem; - pParentItem->pWidget = pParent; - m_mapWidgetItem.SetAt(pParent, pParentItem); - CFWL_WidgetMgrItem* pRoot = GetWidgetMgrItem(NULL); - pParentItem->pParent = pRoot; - SetWidgetIndex(pParent, -1); - } - CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pChild); - if (!pItem) { - pItem = new CFWL_WidgetMgrItem; - pItem->pWidget = pChild; - m_mapWidgetItem.SetAt(pChild, pItem); - } - if (pItem->pParent && pItem->pParent != pParentItem) { - if (pItem->pPrevious) { - pItem->pPrevious->pNext = pItem->pNext; - } - if (pItem->pNext) { - pItem->pNext->pPrevious = pItem->pPrevious; - } - if (pItem->pParent->pChild == pItem) { - pItem->pParent->pChild = pItem->pNext; - } - } - pItem->pParent = pParentItem; - SetWidgetIndex(pChild, nIndex); -} -void CFWL_WidgetMgr::RemoveWidget(IFWL_Widget* pWidget) { - CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget); - if (!pItem) { - return; - } - if (pItem->pPrevious) { - pItem->pPrevious->pNext = pItem->pNext; - } - if (pItem->pNext) { - pItem->pNext->pPrevious = pItem->pPrevious; - } - if (pItem->pParent && pItem->pParent->pChild == pItem) { - pItem->pParent->pChild = pItem->pNext; - } - CFWL_WidgetMgrItem* pChild = pItem->pChild; - while (pChild) { - CFWL_WidgetMgrItem* pNext = pChild->pNext; - RemoveWidget(pChild->pWidget); - pChild = pNext; - } - m_mapWidgetItem.RemoveKey(pWidget); - delete pItem; -} -void CFWL_WidgetMgr::SetOwner(IFWL_Widget* pOwner, IFWL_Widget* pOwned) { - CFWL_WidgetMgrItem* pParentItem = GetWidgetMgrItem(pOwner); - if (!pParentItem) { - pParentItem = new CFWL_WidgetMgrItem; - pParentItem->pWidget = pOwner; - m_mapWidgetItem.SetAt(pOwner, pParentItem); - CFWL_WidgetMgrItem* pRoot = GetWidgetMgrItem(NULL); - pParentItem->pParent = pRoot; - SetWidgetIndex(pOwner, -1); - } - CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pOwned); - if (!pItem) { - pItem = new CFWL_WidgetMgrItem; - pItem->pWidget = pOwned; - m_mapWidgetItem.SetAt(pOwned, pItem); - } - pItem->pOwner = pParentItem; -} -void CFWL_WidgetMgr::SetParent(IFWL_Widget* pParent, IFWL_Widget* pChild) { - CFWL_WidgetMgrItem* pParentItem = GetWidgetMgrItem(pParent); - CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pChild); - if (!pItem) - return; - if (pItem->pParent && pItem->pParent != pParentItem) { - if (pItem->pPrevious) { - pItem->pPrevious->pNext = pItem->pNext; - } - if (pItem->pNext) { - pItem->pNext->pPrevious = pItem->pPrevious; - } - if (pItem->pParent->pChild == pItem) { - pItem->pParent->pChild = pItem->pNext; - } - pItem->pNext = NULL; - pItem->pPrevious = NULL; - } - pItem->pParent = pParentItem; - SetWidgetIndex(pChild, -1); - if (!m_pAdapter) - return; - m_pAdapter->SetParentWidget(pChild, pParent); -} -FX_BOOL CFWL_WidgetMgr::IsChild(IFWL_Widget* pChild, IFWL_Widget* pParent) { - IFWL_Widget* pTemp = pChild; - do { - if (pTemp == pParent) { - return TRUE; - } - pTemp = GetWidget(pTemp, FWL_WGTRELATION_Parent); - } while (pTemp); - return FALSE; -} -FWL_ERR CFWL_WidgetMgr::CreateWidget_Native(IFWL_Widget* pWidget) { - if (!IsAbleNative(pWidget)) { - return FWL_ERR_Succeeded; - } - return m_pAdapter->CreateWidget(pWidget, pWidget->GetOwner()); -} -FWL_ERR CFWL_WidgetMgr::DestroyWidget_Native(IFWL_Widget* pWidget) { - if (!IsAbleNative(pWidget)) { - return FWL_ERR_Succeeded; - } - return m_pAdapter->DestroyWidget(pWidget); -} -FWL_ERR CFWL_WidgetMgr::GetWidgetRect_Native(IFWL_Widget* pWidget, - CFX_RectF& rect) { - if (!IsAbleNative(pWidget)) { - return FWL_ERR_Succeeded; - } - return m_pAdapter->GetWidgetRect(pWidget, rect); -} -FWL_ERR CFWL_WidgetMgr::SetWidgetRect_Native(IFWL_Widget* pWidget, - const CFX_RectF& rect) { - if (FWL_UseOffscreen(pWidget)) { - CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget); - pItem->iRedrawCounter++; - if (pItem->pOffscreen) { - CFX_RenderDevice* pDevice = pItem->pOffscreen->GetRenderDevice(); - if (pDevice && pDevice->GetBitmap()) { - CFX_DIBitmap* pBitmap = pDevice->GetBitmap(); - if (pBitmap->GetWidth() - rect.width > 1 || - pBitmap->GetHeight() - rect.height > 1) { - delete pItem->pOffscreen; - pItem->pOffscreen = NULL; - } - } - } -#if (_FX_OS_ == _FX_WIN32_DESKTOP_) || (_FX_OS_ == _FX_WIN64_) - pItem->bOutsideChanged = !m_rtScreen.Contains(rect); -#endif - } - return m_pAdapter->SetWidgetRect(pWidget, rect); -} -FWL_ERR CFWL_WidgetMgr::SetWidgetPosition_Native(IFWL_Widget* pWidget, - FX_FLOAT fx, - FX_FLOAT fy) { - return m_pAdapter->SetWidgetPosition(pWidget, fx, fy); -} -FWL_ERR CFWL_WidgetMgr::SetWidgetIcon_Native(IFWL_Widget* pWidget, - const CFX_DIBitmap* pIcon, - FX_BOOL bBig) { - return m_pAdapter->SetWidgetIcon(pWidget, pIcon, bBig); -} -FWL_ERR CFWL_WidgetMgr::SetWidgetCaption_Native( - IFWL_Widget* pWidget, - const CFX_WideStringC& wsCaption) { - return m_pAdapter->SetWidgetCaption(pWidget, wsCaption); -} -FWL_ERR CFWL_WidgetMgr::SetBorderRegion_Native(IFWL_Widget* pWidget, - CFX_Path* pPath) { - return m_pAdapter->SetBorderRegion(pWidget, pPath); -} -FWL_ERR CFWL_WidgetMgr::ShowWidget_Native(IFWL_Widget* pWidget) { - return m_pAdapter->ShowWidget(pWidget); -} -FWL_ERR CFWL_WidgetMgr::HideWidget_Native(IFWL_Widget* pWidget) { - return m_pAdapter->HideWidget(pWidget); -} -FWL_ERR CFWL_WidgetMgr::SetNormal_Native(IFWL_Widget* pWidget) { - return m_pAdapter->SetNormal(pWidget); -} -FWL_ERR CFWL_WidgetMgr::SetMaximize_Native(IFWL_Widget* pWidget) { - return m_pAdapter->SetMaximize(pWidget); -} -FWL_ERR CFWL_WidgetMgr::SetMinimize_Native(IFWL_Widget* pWidget) { - return m_pAdapter->SetMinimize(pWidget); -} -FX_BOOL CFWL_WidgetMgr::CheckMessage_Native() { - return m_pAdapter->CheckMessage(); -} -FWL_ERR CFWL_WidgetMgr::DispatchMessage_Native() { - return m_pAdapter->DispatchMessage(); -} -FX_BOOL CFWL_WidgetMgr::IsIdleMessage_Native() { - return m_pAdapter->IsIdleMessage(); -} -FWL_ERR CFWL_WidgetMgr::Exit_Native(int32_t iExitCode) { - return m_pAdapter->Exit(iExitCode); -} -FWL_ERR CFWL_WidgetMgr::CreateWidgetWithNativeId_Native(IFWL_Widget* pWidget, - void* vp) { - return m_pAdapter->CreateWidgetWithNativeId(pWidget, vp); -} -IFWL_Widget* CFWL_WidgetMgr::GetWidgetAtPoint(IFWL_Widget* parent, - FX_FLOAT x, - FX_FLOAT y) { - if (!parent) - return NULL; - FX_FLOAT x1; - FX_FLOAT y1; - IFWL_Widget* child = GetWidget(parent, FWL_WGTRELATION_LastChild); - while (child) { - if ((child->GetStates() & FWL_WGTSTATE_Invisible) == 0) { - x1 = x; - y1 = y; - CFX_Matrix matrixOnParent; - child->GetMatrix(matrixOnParent); - CFX_Matrix m; - m.SetIdentity(); - m.SetReverse(matrixOnParent); - m.TransformPoint(x1, y1); - CFX_RectF bounds; - child->GetWidgetRect(bounds); - if (bounds.Contains(x1, y1)) { - x1 -= bounds.left; - y1 -= bounds.top; - return GetWidgetAtPoint(child, x1, y1); - } - } - child = GetWidget(child, FWL_WGTRELATION_PriorSibling); - } - return parent; -} -void CFWL_WidgetMgr::NotifySizeChanged(IFWL_Widget* pForm, - FX_FLOAT fx, - FX_FLOAT fy) { - if (!FWL_UseOffscreen(pForm)) { - return; - } - CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pForm); - if (pItem->pOffscreen) { - delete pItem->pOffscreen; - pItem->pOffscreen = NULL; - } -} -IFWL_Widget* CFWL_WidgetMgr::nextTab(IFWL_Widget* parent, - IFWL_Widget* focus, - FX_BOOL& bFind) { - IFWL_Widget* child = - FWL_GetWidgetMgr()->GetWidget(parent, FWL_WGTRELATION_FirstChild); - while (child) { - if (focus == child) { - bFind = TRUE; - } - if ((child->GetStyles() & FWL_WGTSTYLE_TabStop) && - (!focus || (focus != child && bFind))) { - return child; - } - IFWL_Widget* bRet = nextTab(child, focus, bFind); - if (bRet) { - return bRet; - } - child = FWL_GetWidgetMgr()->GetWidget(child, FWL_WGTRELATION_NextSibling); - } - return NULL; -} -int32_t CFWL_WidgetMgr::CountRadioButtonGroup(IFWL_Widget* pFirst) { - int32_t iRet = 0; - IFWL_Widget* pChild = pFirst; - while (pChild) { - if ((pChild->GetStyles() & FWL_WGTSTYLE_Group) && - pChild->GetClassID() == 3811304691) { - iRet++; - } - pChild = GetWidget(pChild, FWL_WGTRELATION_NextSibling); - } - return iRet; -} -IFWL_Widget* CFWL_WidgetMgr::GetSiblingRadioButton(IFWL_Widget* pWidget, - FX_BOOL bNext) { - while ((pWidget = GetWidget(pWidget, bNext ? FWL_WGTRELATION_NextSibling - : FWL_WGTRELATION_PriorSibling)) != - NULL) { - if (pWidget->GetClassID() == 3811304691) { - return pWidget; - } - } - return NULL; -} -IFWL_Widget* CFWL_WidgetMgr::GetRadioButtonGroupHeader( - IFWL_Widget* pRadioButton) { - if (pRadioButton->GetStyles() & FWL_WGTSTYLE_Group) { - return pRadioButton; - } - IFWL_Widget* pNext = pRadioButton; - while ((pNext = GetSiblingRadioButton(pNext, FALSE)) != NULL) { - if (pNext->GetStyles() & FWL_WGTSTYLE_Group) { - return pNext; - } - } - pNext = GetWidget(pRadioButton, FWL_WGTRELATION_LastSibling); - if ((pNext->GetStyles() & FWL_WGTSTYLE_Group) && - pNext->GetClassID() == 3811304691) { - return pNext; - } - while ((pNext = GetSiblingRadioButton(pNext, FALSE)) && pNext && - pNext != pRadioButton) { - if (pNext->GetStyles() & FWL_WGTSTYLE_Group) { - return pNext; - } - } - pNext = GetWidget(pRadioButton, FWL_WGTRELATION_FirstSibling); - if (pNext && (pNext->GetStyles() == FWL_WGTSTYLE_Group) && - pNext->GetClassID() == 3811304691) { - return pNext; - } - return GetSiblingRadioButton(pNext, TRUE); -} -void CFWL_WidgetMgr::GetSameGroupRadioButton(IFWL_Widget* pRadioButton, - CFX_PtrArray& group) { - IFWL_Widget* pFirst = GetWidget(pRadioButton, FWL_WGTRELATION_FirstSibling); - if (!pFirst) { - pFirst = pRadioButton; - } - int32_t iGroup = CountRadioButtonGroup(pFirst); - if (iGroup < 2) { - if (pFirst->GetClassID() == 3811304691) { - group.Add(pFirst); - } - IFWL_Widget* pNext = pFirst; - while ((pNext = GetSiblingRadioButton(pNext, TRUE)) != NULL) { - group.Add(pNext); - } - return; - } - IFWL_Widget* pNext = GetRadioButtonGroupHeader(pRadioButton); - do { - group.Add(pNext); - pNext = GetSiblingRadioButton(pNext, TRUE); - if (!pNext) { - if (pFirst->GetClassID() == 3811304691) { - pNext = pFirst; - } else { - pNext = GetSiblingRadioButton(pFirst, TRUE); - } - } - } while (pNext && ((pNext->GetStyles() & FWL_WGTSTYLE_Group) == 0)); -} -IFWL_Widget* CFWL_WidgetMgr::GetDefaultButton(IFWL_Widget* pParent) { - if ((pParent->GetClassID() == 3521614244) && - (pParent->GetStates() & (1 << (FWL_WGTSTATE_MAX + 2)))) { - return pParent; - } - IFWL_Widget* child = - FWL_GetWidgetMgr()->GetWidget(pParent, FWL_WGTRELATION_FirstChild); - while (child) { - if ((child->GetClassID() == 3521614244) && - (child->GetStates() & (1 << (FWL_WGTSTATE_MAX + 2)))) { - return child; - } - IFWL_Widget* find = GetDefaultButton(child); - if (find) { - return find; - } - child = FWL_GetWidgetMgr()->GetWidget(child, FWL_WGTRELATION_NextSibling); - } - return NULL; -} -void CFWL_WidgetMgr::AddRedrawCounts(IFWL_Widget* pWidget) { - CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget); - (pItem->iRedrawCounter)++; -} -void CFWL_WidgetMgr::ResetRedrawCounts(IFWL_Widget* pWidget) { - CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget); - pItem->iRedrawCounter = 0; -} -CFWL_WidgetMgrItem* CFWL_WidgetMgr::GetWidgetMgrItem(IFWL_Widget* pWidget) { - return static_cast<CFWL_WidgetMgrItem*>(m_mapWidgetItem.GetValueAt(pWidget)); -} -int32_t CFWL_WidgetMgr::TravelWidgetMgr(CFWL_WidgetMgrItem* pParent, - int32_t* pIndex, - CFWL_WidgetMgrItem* pItem, - IFWL_Widget** pWidget) { - if (!pParent) { - return 0; - } - int32_t iCount = 0; - CFWL_WidgetMgrItem* pChild = pParent->pChild; - while (pChild) { - iCount++; - if (pIndex) { - if (*pIndex == 0) { - *pWidget = pChild->pWidget; - return iCount; - } - pIndex--; - } - if (pItem && pItem == pChild) { - return iCount - 1; - } - pChild = pChild->pNext; - } - if (pIndex) { - return 0; - } else if (pItem) { - return -1; - } - return iCount - 1; -} -FX_BOOL CFWL_WidgetMgr::IsAbleNative(IFWL_Widget* pWidget) { - if (!pWidget) - return FALSE; - if (!pWidget->IsInstance(FX_WSTRC(FWL_CLASS_Form))) { - return FALSE; - } - FX_DWORD dwStyles = pWidget->GetStyles(); - return ((dwStyles & FWL_WGTSTYLE_WindowTypeMask) == - FWL_WGTSTYLE_OverLapper) || - (dwStyles & FWL_WGTSTYLE_Popup); -} -FX_BOOL CFWL_WidgetMgr::IsThreadEnabled() { - return !(m_dwCapability & FWL_WGTMGR_DisableThread); -} -FX_BOOL CFWL_WidgetMgr::IsFormDisabled() { - return m_dwCapability & FWL_WGTMGR_DisableForm; -} -FX_BOOL CFWL_WidgetMgr::GetAdapterPopupPos(IFWL_Widget* pWidget, - FX_FLOAT fMinHeight, - FX_FLOAT fMaxHeight, - const CFX_RectF& rtAnchor, - CFX_RectF& rtPopup) { - IFWL_AdapterWidgetMgr* pSDApapter = GetAdapterWidgetMgr(); - return pSDApapter->GetPopupPos(pWidget, fMinHeight, fMaxHeight, rtAnchor, - rtPopup); -} -CFWL_WidgetMgrDelegate::CFWL_WidgetMgrDelegate(CFWL_WidgetMgr* pWidgetMgr) - : m_pWidgetMgr(pWidgetMgr) {} -FWL_ERR CFWL_WidgetMgrDelegate::OnSetCapability(FX_DWORD dwCapability) { - m_pWidgetMgr->m_dwCapability = dwCapability; - return FWL_ERR_Succeeded; -} -int32_t CFWL_WidgetMgrDelegate::OnProcessMessageToForm(CFWL_Message* pMessage) { - if (!pMessage) - return 0; - if (!pMessage->m_pDstTarget) - return 0; - IFWL_Widget* pDstWidget = pMessage->m_pDstTarget; - IFWL_NoteThread* pNoteThread = pDstWidget->GetOwnerThread(); - if (!pNoteThread) - return 0; - CFWL_NoteDriver* pNoteDriver = - static_cast<CFWL_NoteDriver*>(pNoteThread->GetNoteDriver()); - if (!pNoteDriver) - return 0; - if (m_pWidgetMgr->IsThreadEnabled()) { - pMessage = static_cast<CFWL_Message*>(pMessage->Clone()); - } - if (m_pWidgetMgr->IsFormDisabled()) { - pNoteDriver->ProcessMessage(pMessage); - } else { - pNoteDriver->QueueMessage(pMessage); - } -#if (_FX_OS_ == _FX_MACOSX_) - CFWL_NoteLoop* pTopLoop = pNoteDriver->GetTopLoop(); - if (pTopLoop) { - pNoteDriver->UnqueueMessage(pTopLoop); - } -#endif - if (m_pWidgetMgr->IsThreadEnabled()) { - pMessage->Release(); - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_WidgetMgrDelegate::OnDrawWidget(IFWL_Widget* pWidget, - CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - if (!pWidget) - return FWL_ERR_Indefinite; - if (!pGraphics) - return FWL_ERR_Indefinite; - CFX_Graphics* pTemp = DrawWidgetBefore(pWidget, pGraphics, pMatrix); - CFX_RectF clipCopy; - pWidget->GetWidgetRect(clipCopy); - clipCopy.left = clipCopy.top = 0; - if (bUseOffscreenDirect(pWidget)) { - DrawWidgetAfter(pWidget, pGraphics, clipCopy, pMatrix); - return FWL_ERR_Succeeded; - } - CFX_RectF clipBounds; -#if (_FX_OS_ == _FX_WIN32_DESKTOP_) || (_FX_OS_ == _FX_WIN64_) || \ - (_FX_OS_ == _FX_LINUX_DESKTOP_) || (_FX_OS_ == _FX_ANDROID_) - IFWL_WidgetDelegate* pDelegate = pWidget->SetDelegate(NULL); - pDelegate->OnDrawWidget(pTemp, pMatrix); - pGraphics->GetClipRect(clipBounds); - clipCopy = clipBounds; -#elif(_FX_OS_ == _FX_MACOSX_) - if (m_pWidgetMgr->IsFormDisabled()) { - IFWL_WidgetDelegate* pDelegate = pWidget->SetDelegate(NULL); - pDelegate->OnDrawWidget(pTemp, pMatrix); - pGraphics->GetClipRect(clipBounds); - clipCopy = clipBounds; - } else { - clipBounds.Set(pMatrix->a, pMatrix->b, pMatrix->c, pMatrix->d); - const_cast<CFX_Matrix*>(pMatrix)->SetIdentity(); // FIXME: const cast. -#ifdef FWL_UseMacSystemBorder -#else -#endif - { - IFWL_WidgetDelegate* pDelegate = pWidget->SetDelegate(NULL); - pDelegate->OnDrawWidget(pTemp, pMatrix); - } - } -#endif - if (!m_pWidgetMgr->IsFormDisabled()) { - CFX_RectF rtClient; - pWidget->GetClientRect(rtClient); - clipBounds.Intersect(rtClient); - } - if (!clipBounds.IsEmpty()) { - DrawChild(pWidget, clipBounds, pTemp, pMatrix); - } - DrawWidgetAfter(pWidget, pGraphics, clipCopy, pMatrix); - m_pWidgetMgr->ResetRedrawCounts(pWidget); - return FWL_ERR_Succeeded; -} -void CFWL_WidgetMgrDelegate::DrawChild(IFWL_Widget* parent, - const CFX_RectF& rtClip, - CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - if (!parent) - return; - FX_BOOL bFormDisable = m_pWidgetMgr->IsFormDisabled(); - IFWL_Widget* pNextChild = - m_pWidgetMgr->GetWidget(parent, FWL_WGTRELATION_FirstChild); - while (pNextChild) { - IFWL_Widget* child = pNextChild; - pNextChild = m_pWidgetMgr->GetWidget(child, FWL_WGTRELATION_NextSibling); - if (child->GetStates() & FWL_WGTSTATE_Invisible) { - continue; - } - CFX_RectF rtWidget; - child->GetWidgetRect(rtWidget); - if (rtWidget.IsEmpty()) { - continue; - } - CFX_Matrix widgetMatrix; - CFX_RectF clipBounds(rtWidget); - if (!bFormDisable) { - child->GetMatrix(widgetMatrix, TRUE); - } - if (pMatrix) { - widgetMatrix.Concat(*pMatrix); - } - if (!bFormDisable) { - widgetMatrix.TransformPoint(clipBounds.left, clipBounds.top); - clipBounds.Intersect(rtClip); - if (clipBounds.IsEmpty()) { - continue; - } - pGraphics->SaveGraphState(); - pGraphics->SetClipRect(clipBounds); - } - widgetMatrix.Translate(rtWidget.left, rtWidget.top, TRUE); - IFWL_WidgetDelegate* pDelegate = child->SetDelegate(NULL); - if (pDelegate) { - if (m_pWidgetMgr->IsFormDisabled() || - IsNeedRepaint(child, &widgetMatrix, rtClip)) { - pDelegate->OnDrawWidget(pGraphics, &widgetMatrix); - } - } - if (!bFormDisable) { - pGraphics->RestoreGraphState(); - } - DrawChild(child, clipBounds, pGraphics, - bFormDisable ? &widgetMatrix : pMatrix); - child = m_pWidgetMgr->GetWidget(child, FWL_WGTRELATION_NextSibling); - } -} -CFX_Graphics* CFWL_WidgetMgrDelegate::DrawWidgetBefore( - IFWL_Widget* pWidget, - CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - if (!FWL_UseOffscreen(pWidget)) { - return pGraphics; - } - CFWL_WidgetMgrItem* pItem = m_pWidgetMgr->GetWidgetMgrItem(pWidget); - if (!pItem->pOffscreen) { - pItem->pOffscreen = new CFX_Graphics; - CFX_RectF rect; - pWidget->GetWidgetRect(rect); - pItem->pOffscreen->Create((int32_t)rect.width, (int32_t)rect.height, - FXDIB_Argb); - } - CFX_RectF rect; - pGraphics->GetClipRect(rect); - pItem->pOffscreen->SetClipRect(rect); - return pItem->pOffscreen; -} -void CFWL_WidgetMgrDelegate::DrawWidgetAfter(IFWL_Widget* pWidget, - CFX_Graphics* pGraphics, - CFX_RectF& rtClip, - const CFX_Matrix* pMatrix) { - if (FWL_UseOffscreen(pWidget)) { - CFWL_WidgetMgrItem* pItem = m_pWidgetMgr->GetWidgetMgrItem(pWidget); - pGraphics->Transfer(pItem->pOffscreen, rtClip.left, rtClip.top, rtClip, - pMatrix); -#ifdef _WIN32 - pItem->pOffscreen->ClearClip(); -#endif - } - CFWL_WidgetMgrItem* pItem = m_pWidgetMgr->GetWidgetMgrItem(pWidget); - pItem->iRedrawCounter = 0; -} - -#define FWL_NEEDREPAINTHIT_Point 12 -#define FWL_NEEDREPAINTHIT_Piece 3 -struct FWL_NEEDREPAINTHITDATA { - CFX_PointF hitPoint; - FX_BOOL bNotNeedRepaint; - FX_BOOL bNotContainByDirty; -}; - -FX_BOOL CFWL_WidgetMgrDelegate::IsNeedRepaint(IFWL_Widget* pWidget, - CFX_Matrix* pMatrix, - const CFX_RectF& rtDirty) { - CFWL_WidgetMgrItem* pItem = m_pWidgetMgr->GetWidgetMgrItem(pWidget); - if (pItem && pItem->iRedrawCounter > 0) { - pItem->iRedrawCounter = 0; - return TRUE; - } - CFX_RectF rtWidget; - pWidget->GetWidgetRect(rtWidget); - rtWidget.left = rtWidget.top = 0; - pMatrix->TransformRect(rtWidget); - if (!rtWidget.IntersectWith(rtDirty)) { - return FALSE; - } - IFWL_Widget* pChild = - FWL_GetWidgetMgr()->GetWidget(pWidget, FWL_WGTRELATION_FirstChild); - if (!pChild) { - return TRUE; - } - if (pChild->GetClassID() == 3150298670) { - CFX_RectF rtTemp; - pChild->GetWidgetRect(rtTemp); - if (rtTemp.width >= rtWidget.width && rtTemp.height >= rtWidget.height) { - pChild = - FWL_GetWidgetMgr()->GetWidget(pChild, FWL_WGTRELATION_FirstChild); - if (!pChild) { - return TRUE; - } - } - } - CFX_RectF rtChilds; - rtChilds.Empty(); - FX_BOOL bChildIntersectWithDirty = FALSE; - FX_BOOL bOrginPtIntersectWidthChild = FALSE; - FX_BOOL bOrginPtIntersectWidthDirty = - rtDirty.Contains(rtWidget.left, rtWidget.top); - static FWL_NEEDREPAINTHITDATA hitPoint[FWL_NEEDREPAINTHIT_Point]; - int32_t iSize = sizeof(FWL_NEEDREPAINTHITDATA); - FXSYS_memset(hitPoint, 0, iSize); - FX_FLOAT fxPiece = rtWidget.width / FWL_NEEDREPAINTHIT_Piece; - FX_FLOAT fyPiece = rtWidget.height / FWL_NEEDREPAINTHIT_Piece; - hitPoint[2].hitPoint.x = hitPoint[6].hitPoint.x = rtWidget.left; - hitPoint[0].hitPoint.x = hitPoint[3].hitPoint.x = hitPoint[7].hitPoint.x = - hitPoint[10].hitPoint.x = fxPiece + rtWidget.left; - hitPoint[1].hitPoint.x = hitPoint[4].hitPoint.x = hitPoint[8].hitPoint.x = - hitPoint[11].hitPoint.x = fxPiece * 2 + rtWidget.left; - hitPoint[5].hitPoint.x = hitPoint[9].hitPoint.x = - rtWidget.width + rtWidget.left; - hitPoint[0].hitPoint.y = hitPoint[1].hitPoint.y = rtWidget.top; - hitPoint[2].hitPoint.y = hitPoint[3].hitPoint.y = hitPoint[4].hitPoint.y = - hitPoint[5].hitPoint.y = fyPiece + rtWidget.top; - hitPoint[6].hitPoint.y = hitPoint[7].hitPoint.y = hitPoint[8].hitPoint.y = - hitPoint[9].hitPoint.y = fyPiece * 2 + rtWidget.top; - hitPoint[10].hitPoint.y = hitPoint[11].hitPoint.y = - rtWidget.height + rtWidget.top; - do { - CFX_RectF rect; - pChild->GetWidgetRect(rect); - CFX_RectF r = rect; - r.left += rtWidget.left; - r.top += rtWidget.top; - if (r.IsEmpty()) { - continue; - } - if (r.Contains(rtDirty)) { - return FALSE; - } - if (!bChildIntersectWithDirty && r.IntersectWith(rtDirty)) { - bChildIntersectWithDirty = TRUE; - } - if (bOrginPtIntersectWidthDirty && !bOrginPtIntersectWidthChild) { - bOrginPtIntersectWidthChild = rect.Contains(0, 0); - } - if (rtChilds.IsEmpty()) { - rtChilds = rect; - } else if (!(pChild->GetStates() & FWL_WGTSTATE_Invisible)) { - rtChilds.Union(rect); - } - for (int32_t i = 0; i < FWL_NEEDREPAINTHIT_Point; i++) { - if (hitPoint[i].bNotContainByDirty || hitPoint[i].bNotNeedRepaint) { - continue; - } - if (!rtDirty.Contains(hitPoint[i].hitPoint)) { - hitPoint[i].bNotContainByDirty = TRUE; - continue; - } - if (r.Contains(hitPoint[i].hitPoint)) { - hitPoint[i].bNotNeedRepaint = TRUE; - } - } - } while ((pChild = FWL_GetWidgetMgr()->GetWidget( - pChild, FWL_WGTRELATION_NextSibling)) != NULL); - if (!bChildIntersectWithDirty) { - return TRUE; - } - if (bOrginPtIntersectWidthDirty && !bOrginPtIntersectWidthChild) { - return TRUE; - } - if (rtChilds.IsEmpty()) { - return TRUE; - } - int32_t repaintPoint = FWL_NEEDREPAINTHIT_Point; - for (int32_t i = 0; i < FWL_NEEDREPAINTHIT_Point; i++) { - if (hitPoint[i].bNotNeedRepaint) { - repaintPoint--; - } - } - if (repaintPoint > 0) { - return TRUE; - } - pMatrix->TransformRect(rtChilds); - if (rtChilds.Contains(rtDirty) || rtChilds.Contains(rtWidget)) { - return FALSE; - } - return TRUE; -} -FX_BOOL CFWL_WidgetMgrDelegate::bUseOffscreenDirect(IFWL_Widget* pWidget) { - CFWL_WidgetMgrItem* pItem = m_pWidgetMgr->GetWidgetMgrItem(pWidget); - if (!FWL_UseOffscreen(pWidget) || !(pItem->pOffscreen)) { - return FALSE; - } -#if (_FX_OS_ == _FX_WIN32_DESKTOP_) || (_FX_OS_ == _FX_WIN64_) - if (pItem->bOutsideChanged) { - CFX_RectF r; - pWidget->GetWidgetRect(r); - CFX_RectF temp(m_pWidgetMgr->m_rtScreen); - temp.Deflate(50, 50); - if (!temp.Contains(r)) { - return FALSE; - } - pItem->bOutsideChanged = FALSE; - } -#endif - return pItem->iRedrawCounter == 0; -} -static void FWL_WriteBMP(CFX_DIBitmap* pBitmap, const FX_CHAR* filename) { - FILE* file = fopen(filename, "wb"); - if (file == NULL) { - return; - } - int size = 14 + 40 + pBitmap->GetPitch() * pBitmap->GetHeight(); - unsigned char buffer[40]; - buffer[0] = 'B'; - buffer[1] = 'M'; - buffer[2] = (unsigned char)size; - buffer[3] = (unsigned char)(size >> 8); - buffer[4] = (unsigned char)(size >> 16); - buffer[5] = (unsigned char)(size >> 24); - buffer[6] = buffer[7] = buffer[8] = buffer[9] = 0; - buffer[10] = 54; - buffer[11] = buffer[12] = buffer[13] = 0; - fwrite(buffer, 14, 1, file); - memset(buffer, 0, 40); - buffer[0] = 40; - buffer[4] = (unsigned char)pBitmap->GetWidth(); - buffer[5] = (unsigned char)(pBitmap->GetWidth() >> 8); - buffer[6] = (unsigned char)(pBitmap->GetWidth() >> 16); - buffer[7] = (unsigned char)(pBitmap->GetWidth() >> 24); - buffer[8] = (unsigned char)(-pBitmap->GetHeight()); - buffer[9] = (unsigned char)((-pBitmap->GetHeight()) >> 8); - buffer[10] = (unsigned char)((-pBitmap->GetHeight()) >> 16); - buffer[11] = (unsigned char)((-pBitmap->GetHeight()) >> 24); - buffer[12] = 1; - buffer[14] = pBitmap->GetBPP(); - fwrite(buffer, 40, 1, file); - for (int row = 0; row < pBitmap->GetHeight(); row++) { - uint8_t* scan_line = pBitmap->GetBuffer() + row * pBitmap->GetPitch(); - fwrite(scan_line, pBitmap->GetPitch(), 1, file); - } - fclose(file); -} -FWL_ERR FWL_WidgetMgrSnapshot(IFWL_Widget* pWidget, - const CFX_WideString* saveFile, - const CFX_Matrix* pMatrix) { - CFX_RectF r; - pWidget->GetWidgetRect(r); - CFX_Graphics gs; - gs.Create((int32_t)r.width, (int32_t)r.height, FXDIB_Argb); - CFWL_WidgetMgr* widgetMgr = static_cast<CFWL_WidgetMgr*>(FWL_GetWidgetMgr()); - CFWL_WidgetMgrDelegate* delegate = widgetMgr->GetDelegate(); - delegate->OnDrawWidget(pWidget, &gs, pMatrix); - CFX_DIBitmap* dib = gs.GetRenderDevice()->GetBitmap(); - FWL_WriteBMP(dib, saveFile->UTF8Encode()); - return FWL_ERR_Succeeded; -} -FX_BOOL FWL_WidgetIsChild(IFWL_Widget* parent, IFWL_Widget* find) { - if (!find) { - return FALSE; - } - IFWL_Widget* child = - FWL_GetWidgetMgr()->GetWidget(parent, FWL_WGTRELATION_FirstChild); - while (child) { - if (child == find) { - return TRUE; - } - if (FWL_WidgetIsChild(child, find)) { - return TRUE; - } - child = FWL_GetWidgetMgr()->GetWidget(child, FWL_WGTRELATION_NextSibling); - } - return FALSE; -} diff --git a/xfa/src/fwl/core/fwl_widgetmgrimp.h b/xfa/src/fwl/core/fwl_widgetmgrimp.h deleted file mode 100644 index f3dfb36017..0000000000 --- a/xfa/src/fwl/core/fwl_widgetmgrimp.h +++ /dev/null @@ -1,170 +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 - -#ifndef XFA_SRC_FWL_CORE_FWL_WIDGETMGRIMP_H_ -#define XFA_SRC_FWL_CORE_FWL_WIDGETMGRIMP_H_ - -#include "xfa/include/fwl/core/fwl_widgetmgr.h" - -class IFWL_Widget; -class IFWL_AdapterWidgetMgr; -class CFWL_WidgetMgrDelegate; -class IFWL_AdapterNative; - -class CFWL_WidgetMgrItem { - public: - CFWL_WidgetMgrItem() - : pParent(NULL), - pOwner(NULL), - pChild(NULL), - pPrevious(NULL), - pNext(NULL), - pWidget(NULL), - pOffscreen(NULL), - iRedrawCounter(0) -#if (_FX_OS_ == _FX_WIN32_DESKTOP_) || (_FX_OS_ == _FX_WIN64_) - , - bOutsideChanged(FALSE) -#endif - { - } - ~CFWL_WidgetMgrItem() { - if (pOffscreen) { - delete pOffscreen; - pOffscreen = NULL; - } - } - CFWL_WidgetMgrItem* pParent; - CFWL_WidgetMgrItem* pOwner; - CFWL_WidgetMgrItem* pChild; - CFWL_WidgetMgrItem* pPrevious; - CFWL_WidgetMgrItem* pNext; - IFWL_Widget* pWidget; - CFX_Graphics* pOffscreen; - int32_t iRedrawCounter; -#if (_FX_OS_ == _FX_WIN32_DESKTOP_) || (_FX_OS_ == _FX_WIN64_) - FX_BOOL bOutsideChanged; -#endif -}; - -class CFWL_WidgetMgr : public IFWL_WidgetMgr { - public: - CFWL_WidgetMgr(IFWL_AdapterNative* pAdapterNative); - ~CFWL_WidgetMgr() override; - - // IFWL_WidgetMgr: - int32_t CountWidgets(IFWL_Widget* pParent = NULL) override; - IFWL_Widget* GetWidget(int32_t nIndex, IFWL_Widget* pParent = NULL) override; - IFWL_Widget* GetWidget(IFWL_Widget* pWidget, - FWL_WGTRELATION eRelation) override; - int32_t GetWidgetIndex(IFWL_Widget* pWidget) override; - FX_BOOL SetWidgetIndex(IFWL_Widget* pWidget, int32_t nIndex) override; - FWL_ERR RepaintWidget(IFWL_Widget* pWidget, - const CFX_RectF* pRect = NULL) override; - FX_DWORD GetCapability() override { return m_dwCapability; } - - void AddWidget(IFWL_Widget* pWidget); - void InsertWidget(IFWL_Widget* pParent, - IFWL_Widget* pChild, - int32_t nIndex = -1); - void RemoveWidget(IFWL_Widget* pWidget); - void SetOwner(IFWL_Widget* pOwner, IFWL_Widget* pOwned); - void SetParent(IFWL_Widget* pParent, IFWL_Widget* pChild); - FX_BOOL IsChild(IFWL_Widget* pChild, IFWL_Widget* pParent); - FWL_ERR CreateWidget_Native(IFWL_Widget* pWidget); - FWL_ERR DestroyWidget_Native(IFWL_Widget* pWidget); - FWL_ERR GetWidgetRect_Native(IFWL_Widget* pWidget, CFX_RectF& rect); - FWL_ERR SetWidgetRect_Native(IFWL_Widget* pWidget, const CFX_RectF& rect); - FWL_ERR SetWidgetPosition_Native(IFWL_Widget* pWidget, - FX_FLOAT fx, - FX_FLOAT fy); - FWL_ERR SetWidgetIcon_Native(IFWL_Widget* pWidget, - const CFX_DIBitmap* pIcon, - FX_BOOL bBig); - FWL_ERR SetWidgetCaption_Native(IFWL_Widget* pWidget, - const CFX_WideStringC& wsCaption); - FWL_ERR SetBorderRegion_Native(IFWL_Widget* pWidget, CFX_Path* pPath); - FWL_ERR ShowWidget_Native(IFWL_Widget* pWidget); - FWL_ERR HideWidget_Native(IFWL_Widget* pWidget); - FWL_ERR SetNormal_Native(IFWL_Widget* pWidget); - FWL_ERR SetMaximize_Native(IFWL_Widget* pWidget); - FWL_ERR SetMinimize_Native(IFWL_Widget* pWidget); - FX_BOOL CheckMessage_Native(); - FWL_ERR DispatchMessage_Native(); - FX_BOOL IsIdleMessage_Native(); - FWL_ERR Exit_Native(int32_t iExitCode); - FWL_ERR CreateWidgetWithNativeId_Native(IFWL_Widget* pWidget, void* vp); - IFWL_Widget* GetWidgetAtPoint(IFWL_Widget* pParent, FX_FLOAT fx, FX_FLOAT fy); - void NotifySizeChanged(IFWL_Widget* pForm, FX_FLOAT fx, FX_FLOAT fy); - IFWL_Widget* nextTab(IFWL_Widget* parent, IFWL_Widget* focus, FX_BOOL& bFind); - int32_t CountRadioButtonGroup(IFWL_Widget* pFirst); - IFWL_Widget* GetSiblingRadioButton(IFWL_Widget* pWidget, FX_BOOL bNext); - IFWL_Widget* GetRadioButtonGroupHeader(IFWL_Widget* pRadioButton); - void GetSameGroupRadioButton(IFWL_Widget* pRadioButton, CFX_PtrArray& group); - IFWL_Widget* GetDefaultButton(IFWL_Widget* pParent); - void AddRedrawCounts(IFWL_Widget* pWidget); - void ResetRedrawCounts(IFWL_Widget* pWidget); - IFWL_AdapterWidgetMgr* GetAdapterWidgetMgr() { return m_pAdapter; } - CFWL_WidgetMgrDelegate* GetDelegate() { return m_pDelegate; } - CFWL_WidgetMgrItem* GetWidgetMgrItem(IFWL_Widget* pWidget); - FX_BOOL IsThreadEnabled(); - FX_BOOL IsFormDisabled(); - FX_BOOL GetAdapterPopupPos(IFWL_Widget* pWidget, - FX_FLOAT fMinHeight, - FX_FLOAT fMaxHeight, - const CFX_RectF& rtAnchor, - CFX_RectF& rtPopup); - - protected: - int32_t TravelWidgetMgr(CFWL_WidgetMgrItem* pParent, - int32_t* pIndex, - CFWL_WidgetMgrItem* pItem, - IFWL_Widget** pWidget = NULL); - FX_BOOL IsAbleNative(IFWL_Widget* pWidget); - CFX_MapPtrToPtr m_mapWidgetItem; - IFWL_AdapterWidgetMgr* m_pAdapter; - CFWL_WidgetMgrDelegate* m_pDelegate; - friend class CFWL_WidgetMgrDelegate; - FX_DWORD m_dwCapability; -#if (_FX_OS_ == _FX_WIN32_DESKTOP_) || (_FX_OS_ == _FX_WIN64_) - CFX_RectF m_rtScreen; -#endif -}; - -class CFWL_WidgetMgrDelegate : public IFWL_WidgetMgrDelegate { - public: - CFWL_WidgetMgrDelegate(CFWL_WidgetMgr* pWidgetMgr); - ~CFWL_WidgetMgrDelegate() override {} - - // IFWL_WidgetMgrDelegate: - FWL_ERR OnSetCapability( - FX_DWORD dwCapability = FWL_WGTMGR_DisableThread) override; - int32_t OnProcessMessageToForm(CFWL_Message* pMessage) override; - FWL_ERR OnDrawWidget(IFWL_Widget* pWidget, - CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) override; - - protected: - void DrawChild(IFWL_Widget* pParent, - const CFX_RectF& rtClip, - CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix); - CFX_Graphics* DrawWidgetBefore(IFWL_Widget* pWidget, - CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix); - void DrawWidgetAfter(IFWL_Widget* pWidget, - CFX_Graphics* pGraphics, - CFX_RectF& rtClip, - const CFX_Matrix* pMatrix); - FX_BOOL IsNeedRepaint(IFWL_Widget* pWidget, - CFX_Matrix* pMatrix, - const CFX_RectF& rtDirty); - FX_BOOL bUseOffscreenDirect(IFWL_Widget* pWidget); - - CFWL_WidgetMgr* m_pWidgetMgr; -}; - -#endif // XFA_SRC_FWL_CORE_FWL_WIDGETMGRIMP_H_ diff --git a/xfa/src/fwl/lightwidget/app.cpp b/xfa/src/fwl/lightwidget/app.cpp deleted file mode 100644 index 31a39c17f0..0000000000 --- a/xfa/src/fwl/lightwidget/app.cpp +++ /dev/null @@ -1,33 +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/include/fwl/lightwidget/app.h" - -#include "core/include/fxcrt/fx_coordinates.h" -#include "xfa/include/fwl/core/fwl_app.h" -#include "xfa/include/fwl/core/fwl_error.h" -#include "xfa/include/fwl/lightwidget/theme.h" - -CFWL_App::CFWL_App() : m_pIface(IFWL_App::Create(nullptr)), m_pTheme(nullptr) {} -CFWL_App::~CFWL_App() { - if (m_pTheme) { - m_pTheme->Finalize(); - delete m_pTheme; - m_pTheme = NULL; - } - m_pIface->Release(); -} -FWL_ERR CFWL_App::Initialize() { - m_pTheme = new CFWL_Theme; - m_pTheme->Initialize(); - m_pIface->SetThemeProvider(m_pTheme); - return m_pIface->Initialize(); -} -FWL_ERR CFWL_App::Exit(int32_t iExitCode) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return m_pIface->Exit(iExitCode); -} diff --git a/xfa/src/fwl/lightwidget/barcode.cpp b/xfa/src/fwl/lightwidget/barcode.cpp deleted file mode 100644 index 4f05837352..0000000000 --- a/xfa/src/fwl/lightwidget/barcode.cpp +++ /dev/null @@ -1,45 +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/include/fwl/lightwidget/barcode.h" - -#include <memory> - -CFWL_Barcode* CFWL_Barcode::Create() { - return new CFWL_Barcode; -} -FWL_ERR CFWL_Barcode::Initialize(const CFWL_WidgetProperties* pProperties) { - if (m_pIface) - return FWL_ERR_Indefinite; - if (pProperties) { - *m_pProperties = *pProperties; - } - std::unique_ptr<IFWL_Barcode> pBarcode(IFWL_Barcode::Create( - m_pProperties->MakeWidgetImpProperties(&m_barcodeData))); - FWL_ERR ret = pBarcode->Initialize(); - if (ret != FWL_ERR_Succeeded) { - return ret; - } - m_pIface = pBarcode.release(); - CFWL_Widget::Initialize(); - return FWL_ERR_Succeeded; -} -CFWL_Barcode::CFWL_Barcode() {} -CFWL_Barcode::~CFWL_Barcode() {} -void CFWL_Barcode::SetType(BC_TYPE type) { - if (!m_pIface) - return; - static_cast<IFWL_Barcode*>(m_pIface)->SetType(type); -} -FX_BOOL CFWL_Barcode::IsProtectedType() { - if (!m_pIface) - return 0; - return static_cast<IFWL_Barcode*>(m_pIface)->IsProtectedType(); -} -FWL_ERR CFWL_Barcode::CFWL_BarcodeDP::GetCaption(IFWL_Widget* pWidget, - CFX_WideString& wsCaption) { - return FWL_ERR_Succeeded; -} diff --git a/xfa/src/fwl/lightwidget/caret.cpp b/xfa/src/fwl/lightwidget/caret.cpp deleted file mode 100644 index bb5fd4cf9e..0000000000 --- a/xfa/src/fwl/lightwidget/caret.cpp +++ /dev/null @@ -1,47 +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/include/fwl/lightwidget/caret.h" - -#include <memory> - -#include "xfa/include/fwl/basewidget/fwl_caret.h" -#include "xfa/include/fwl/lightwidget/edit.h" -#include "xfa/src/fwl/core/fwl_targetimp.h" - -CFWL_Caret* CFWL_Caret::Create() { - return new CFWL_Caret; -} -FWL_ERR CFWL_Caret::Initialize(const CFWL_WidgetProperties* pProperties) { - if (m_pIface) - return FWL_ERR_Indefinite; - if (pProperties) { - *m_pProperties = *pProperties; - } - std::unique_ptr<IFWL_Caret> pCaret(IFWL_Caret::Create( - m_pProperties->MakeWidgetImpProperties(nullptr), nullptr)); - FWL_ERR ret = pCaret->Initialize(); - if (ret != FWL_ERR_Succeeded) { - return ret; - } - m_pIface = pCaret.release(); - CFWL_Widget::Initialize(); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_Caret::ShowCaret(FX_BOOL bFlag) { - return static_cast<IFWL_Caret*>(m_pIface)->ShowCaret(bFlag); -} -FWL_ERR CFWL_Caret::GetFrequency(FX_DWORD& elapse) { - return static_cast<IFWL_Caret*>(m_pIface)->GetFrequency(elapse); -} -FWL_ERR CFWL_Caret::SetFrequency(FX_DWORD elapse) { - return static_cast<IFWL_Caret*>(m_pIface)->SetFrequency(elapse); -} -FWL_ERR CFWL_Caret::SetColor(CFX_Color crFill) { - return static_cast<IFWL_Caret*>(m_pIface)->SetColor(crFill); -} -CFWL_Caret::CFWL_Caret() {} -CFWL_Caret::~CFWL_Caret() {} diff --git a/xfa/src/fwl/lightwidget/checkbox.cpp b/xfa/src/fwl/lightwidget/checkbox.cpp deleted file mode 100644 index 6b7a370973..0000000000 --- a/xfa/src/fwl/lightwidget/checkbox.cpp +++ /dev/null @@ -1,57 +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/include/fwl/lightwidget/checkbox.h" - -#include <memory> - -#include "xfa/include/fwl/core/fwl_error.h" - -CFWL_CheckBox* CFWL_CheckBox::Create() { - return new CFWL_CheckBox; -} -FWL_ERR CFWL_CheckBox::Initialize(const CFWL_WidgetProperties* pProperties) { - if (m_pIface) - return FWL_ERR_Indefinite; - if (pProperties) { - *m_pProperties = *pProperties; - } - std::unique_ptr<IFWL_CheckBox> pCheckBox(IFWL_CheckBox::Create( - m_pProperties->MakeWidgetImpProperties(&m_checkboxData), nullptr)); - FWL_ERR ret = pCheckBox->Initialize(); - if (ret != FWL_ERR_Succeeded) { - return ret; - } - m_pIface = pCheckBox.release(); - CFWL_Widget::Initialize(); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_CheckBox::SetCaption(const CFX_WideStringC& wsCaption) { - m_checkboxData.m_wsCaption = wsCaption; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_CheckBox::SetBoxSize(FX_FLOAT fHeight) { - m_checkboxData.m_fBoxHeight = fHeight; - return FWL_ERR_Succeeded; -} -int32_t CFWL_CheckBox::GetCheckState() { - return static_cast<IFWL_CheckBox*>(m_pIface)->GetCheckState(); -} -FWL_ERR CFWL_CheckBox::SetCheckState(int32_t iCheck) { - return static_cast<IFWL_CheckBox*>(m_pIface)->SetCheckState(iCheck); -} -CFWL_CheckBox::CFWL_CheckBox() {} -CFWL_CheckBox::~CFWL_CheckBox() {} -CFWL_CheckBox::CFWL_CheckBoxDP::CFWL_CheckBoxDP() - : m_fBoxHeight(16.0f), m_wsCaption(L"Check box") {} -FWL_ERR CFWL_CheckBox::CFWL_CheckBoxDP::GetCaption(IFWL_Widget* pWidget, - CFX_WideString& wsCaption) { - wsCaption = m_wsCaption; - return FWL_ERR_Succeeded; -} -FX_FLOAT CFWL_CheckBox::CFWL_CheckBoxDP::GetBoxSize(IFWL_Widget* pWidget) { - return m_fBoxHeight; -} diff --git a/xfa/src/fwl/lightwidget/combobox.cpp b/xfa/src/fwl/lightwidget/combobox.cpp deleted file mode 100644 index aadb0d5ab6..0000000000 --- a/xfa/src/fwl/lightwidget/combobox.cpp +++ /dev/null @@ -1,370 +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/include/fwl/lightwidget/combobox.h" - -#include <utility> - -#include "xfa/include/fwl/core/fwl_error.h" -#include "xfa/include/fwl/core/fwl_widget.h" - -CFWL_ComboBox* CFWL_ComboBox::Create() { - return new CFWL_ComboBox; -} -FWL_ERR CFWL_ComboBox::Initialize(const CFWL_WidgetProperties* pProperties) { - if (m_pIface) - return FWL_ERR_Indefinite; - if (pProperties) { - *m_pProperties = *pProperties; - } - std::unique_ptr<IFWL_ComboBox> pComboBox(IFWL_ComboBox::Create( - m_pProperties->MakeWidgetImpProperties(&m_comboBoxData))); - FWL_ERR ret = pComboBox->Initialize(); - if (ret != FWL_ERR_Succeeded) { - return ret; - } - m_pIface = pComboBox.release(); - CFWL_Widget::Initialize(); - return FWL_ERR_Succeeded; -} -int32_t CFWL_ComboBox::AddString(const CFX_WideStringC& wsText) { - std::unique_ptr<CFWL_ComboBoxItem> pItem(new CFWL_ComboBoxItem); - pItem->m_wsText = wsText; - pItem->m_dwStyles = 0; - m_comboBoxData.m_ItemArray.push_back(std::move(pItem)); - return m_comboBoxData.m_ItemArray.size() - 1; -} -int32_t CFWL_ComboBox::AddString(const CFX_WideStringC& wsText, - CFX_DIBitmap* pIcon) { - std::unique_ptr<CFWL_ComboBoxItem> pItem(new CFWL_ComboBoxItem); - pItem->m_wsText = wsText; - pItem->m_dwStyles = 0; - pItem->m_pDIB = pIcon; - m_comboBoxData.m_ItemArray.push_back(std::move(pItem)); - return m_comboBoxData.m_ItemArray.size() - 1; -} -bool CFWL_ComboBox::RemoveAt(int32_t iIndex) { - if (iIndex < 0 || - static_cast<size_t>(iIndex) >= m_comboBoxData.m_ItemArray.size()) { - return false; - } - m_comboBoxData.m_ItemArray.erase(m_comboBoxData.m_ItemArray.begin() + iIndex); - return true; -} -void CFWL_ComboBox::RemoveAll() { - m_comboBoxData.m_ItemArray.clear(); -} -int32_t CFWL_ComboBox::CountItems() { - return m_comboBoxData.CountItems(GetWidget()); -} -FWL_ERR CFWL_ComboBox::GetTextByIndex(int32_t iIndex, CFX_WideString& wsText) { - CFWL_ComboBoxItem* pItem = reinterpret_cast<CFWL_ComboBoxItem*>( - m_comboBoxData.GetItem(m_pIface, iIndex)); - if (!pItem) - return FWL_ERR_Indefinite; - wsText = pItem->m_wsText; - return FWL_ERR_Succeeded; -} -int32_t CFWL_ComboBox::GetCurSel() { - if (!m_pIface) - return -1; - return static_cast<IFWL_ComboBox*>(m_pIface)->GetCurSel(); -} -FWL_ERR CFWL_ComboBox::SetCurSel(int32_t iSel) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return static_cast<IFWL_ComboBox*>(m_pIface)->SetCurSel(iSel); -} -FWL_ERR CFWL_ComboBox::SetEditText(const CFX_WideStringC& wsText) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return static_cast<IFWL_ComboBox*>(m_pIface)->SetEditText(wsText); -} -int32_t CFWL_ComboBox::GetEditTextLength() const { - if (!m_pIface) - return 0; - return static_cast<IFWL_ComboBox*>(m_pIface)->GetEditTextLength(); -} -FWL_ERR CFWL_ComboBox::GetEditText(CFX_WideString& wsText, - int32_t nStart, - int32_t nCount) const { - if (!m_pIface) - return FWL_ERR_Indefinite; - return static_cast<IFWL_ComboBox*>(m_pIface) - ->GetEditText(wsText, nStart, nCount); -} -FWL_ERR CFWL_ComboBox::SetEditSelRange(int32_t nStart, int32_t nCount) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return static_cast<IFWL_ComboBox*>(m_pIface)->SetEditSelRange(nStart, nCount); -} -int32_t CFWL_ComboBox::GetEditSelRange(int32_t nIndex, int32_t& nStart) { - if (!m_pIface) - return 0; - return static_cast<IFWL_ComboBox*>(m_pIface)->GetEditSelRange(nIndex, nStart); -} -int32_t CFWL_ComboBox::GetEditLimit() { - if (!m_pIface) - return 0; - return static_cast<IFWL_ComboBox*>(m_pIface)->GetEditLimit(); -} -FWL_ERR CFWL_ComboBox::SetEditLimit(int32_t nLimit) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return static_cast<IFWL_ComboBox*>(m_pIface)->SetEditLimit(nLimit); -} -FWL_ERR CFWL_ComboBox::EditDoClipboard(int32_t iCmd) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return static_cast<IFWL_ComboBox*>(m_pIface)->EditDoClipboard(iCmd); -} -FX_BOOL CFWL_ComboBox::EditRedo(const CFX_ByteStringC& bsRecord) { - if (!m_pIface) - return FALSE; - return static_cast<IFWL_ComboBox*>(m_pIface)->EditRedo(bsRecord); -} -FX_BOOL CFWL_ComboBox::EditUndo(const CFX_ByteStringC& bsRecord) { - if (!m_pIface) - return FALSE; - return static_cast<IFWL_ComboBox*>(m_pIface)->EditUndo(bsRecord); -} -FWL_ERR CFWL_ComboBox::SetMaxListHeight(FX_FLOAT fMaxHeight) { - m_comboBoxData.m_fMaxListHeight = fMaxHeight; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ComboBox::SetItemData(int32_t iIndex, void* pData) { - CFWL_ComboBoxItem* pItem = reinterpret_cast<CFWL_ComboBoxItem*>( - m_comboBoxData.GetItem(m_pIface, iIndex)); - if (!pItem) - return FWL_ERR_Indefinite; - pItem->m_pData = pData; - return FWL_ERR_Succeeded; -} -void* CFWL_ComboBox::GetItemData(int32_t iIndex) { - CFWL_ComboBoxItem* pItem = reinterpret_cast<CFWL_ComboBoxItem*>( - m_comboBoxData.GetItem(m_pIface, iIndex)); - if (!pItem) - return NULL; - return pItem->m_pData; -} -FWL_ERR CFWL_ComboBox::SetListTheme(IFWL_ThemeProvider* pTheme) { - return static_cast<IFWL_ComboBox*>(m_pIface)->GetListBoxt()->SetThemeProvider( - pTheme); -} -FX_BOOL CFWL_ComboBox::AfterFocusShowDropList() { - return static_cast<IFWL_ComboBox*>(m_pIface)->AfterFocusShowDropList(); -} -FWL_ERR CFWL_ComboBox::OpenDropDownList(FX_BOOL bActivate) { - return static_cast<IFWL_ComboBox*>(m_pIface)->OpenDropDownList(bActivate); -} -FX_BOOL CFWL_ComboBox::EditCanUndo() { - if (!m_pIface) - return FALSE; - return static_cast<IFWL_ComboBox*>(m_pIface)->EditCanUndo(); -} -FX_BOOL CFWL_ComboBox::EditCanRedo() { - if (!m_pIface) - return FALSE; - return static_cast<IFWL_ComboBox*>(m_pIface)->EditCanRedo(); -} -FX_BOOL CFWL_ComboBox::EditUndo() { - if (!m_pIface) - return FALSE; - return static_cast<IFWL_ComboBox*>(m_pIface)->EditUndo(); -} -FX_BOOL CFWL_ComboBox::EditRedo() { - if (!m_pIface) - return FALSE; - return static_cast<IFWL_ComboBox*>(m_pIface)->EditRedo(); -} -FX_BOOL CFWL_ComboBox::EditCanCopy() { - if (!m_pIface) - return FALSE; - return static_cast<IFWL_ComboBox*>(m_pIface)->EditCanCopy(); -} -FX_BOOL CFWL_ComboBox::EditCanCut() { - if (!m_pIface) - return FALSE; - return static_cast<IFWL_ComboBox*>(m_pIface)->EditCanCut(); -} -FX_BOOL CFWL_ComboBox::EditCanSelectAll() { - if (!m_pIface) - return FALSE; - return static_cast<IFWL_ComboBox*>(m_pIface)->EditCanSelectAll(); -} -FX_BOOL CFWL_ComboBox::EditCopy(CFX_WideString& wsCopy) { - if (!m_pIface) - return FALSE; - return static_cast<IFWL_ComboBox*>(m_pIface)->EditCopy(wsCopy); -} -FX_BOOL CFWL_ComboBox::EditCut(CFX_WideString& wsCut) { - if (!m_pIface) - return FALSE; - return static_cast<IFWL_ComboBox*>(m_pIface)->EditCut(wsCut); -} -FX_BOOL CFWL_ComboBox::EditPaste(const CFX_WideString& wsPaste) { - if (!m_pIface) - return FALSE; - return static_cast<IFWL_ComboBox*>(m_pIface)->EditPaste(wsPaste); -} -FX_BOOL CFWL_ComboBox::EditSelectAll() { - if (!m_pIface) - return FALSE; - return static_cast<IFWL_ComboBox*>(m_pIface)->EditSelectAll(); -} -FX_BOOL CFWL_ComboBox::EditDelete() { - if (!m_pIface) - return FALSE; - return static_cast<IFWL_ComboBox*>(m_pIface)->EditDelete(); -} -FX_BOOL CFWL_ComboBox::EditDeSelect() { - if (!m_pIface) - return FALSE; - return static_cast<IFWL_ComboBox*>(m_pIface)->EditDeSelect(); -} -FWL_ERR CFWL_ComboBox::GetBBox(CFX_RectF& rect) { - if (!m_pIface) - return FALSE; - return static_cast<IFWL_ComboBox*>(m_pIface)->GetBBox(rect); -} -FWL_ERR CFWL_ComboBox::EditModifyStylesEx(FX_DWORD dwStylesExAdded, - FX_DWORD dwStylesExRemoved) { - if (!m_pIface) - return FALSE; - return static_cast<IFWL_ComboBox*>(m_pIface) - ->EditModifyStylesEx(dwStylesExAdded, dwStylesExRemoved); -} -CFWL_ComboBox::CFWL_ComboBox() {} -CFWL_ComboBox::~CFWL_ComboBox() {} -CFWL_ComboBox::CFWL_ComboBoxDP::CFWL_ComboBoxDP() { - m_fItemHeight = 0; - m_fMaxListHeight = 0; -} -CFWL_ComboBox::CFWL_ComboBoxDP::~CFWL_ComboBoxDP() {} -int32_t CFWL_ComboBox::CFWL_ComboBoxDP::CountItems(IFWL_Widget* pWidget) { - return m_ItemArray.size(); -} -FWL_HLISTITEM CFWL_ComboBox::CFWL_ComboBoxDP::GetItem(IFWL_Widget* pWidget, - int32_t nIndex) { - if (nIndex < 0 || static_cast<size_t>(nIndex) >= m_ItemArray.size()) - return nullptr; - - return reinterpret_cast<FWL_HLISTITEM>(m_ItemArray[nIndex].get()); -} -int32_t CFWL_ComboBox::CFWL_ComboBoxDP::GetItemIndex(IFWL_Widget* pWidget, - FWL_HLISTITEM hItem) { - auto it = std::find_if( - m_ItemArray.begin(), m_ItemArray.end(), - [hItem](const std::unique_ptr<CFWL_ComboBoxItem>& candidate) { - return candidate.get() == reinterpret_cast<CFWL_ComboBoxItem*>(hItem); - }); - return it != m_ItemArray.end() ? it - m_ItemArray.begin() : -1; -} -FX_BOOL CFWL_ComboBox::CFWL_ComboBoxDP::SetItemIndex(IFWL_Widget* pWidget, - FWL_HLISTITEM hItem, - int32_t nIndex) { - if (nIndex < 0 || static_cast<size_t>(nIndex) >= m_ItemArray.size()) - return FALSE; - - m_ItemArray[nIndex].reset(reinterpret_cast<CFWL_ComboBoxItem*>(hItem)); - return TRUE; -} -FX_DWORD CFWL_ComboBox::CFWL_ComboBoxDP::GetItemStyles(IFWL_Widget* pWidget, - FWL_HLISTITEM hItem) { - if (!hItem) - return 0; - return reinterpret_cast<CFWL_ComboBoxItem*>(hItem)->m_dwStyles; -} -FWL_ERR CFWL_ComboBox::CFWL_ComboBoxDP::GetItemText(IFWL_Widget* pWidget, - FWL_HLISTITEM hItem, - CFX_WideString& wsText) { - if (!hItem) - return FWL_ERR_Indefinite; - wsText = reinterpret_cast<CFWL_ComboBoxItem*>(hItem)->m_wsText; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ComboBox::CFWL_ComboBoxDP::GetItemRect(IFWL_Widget* pWidget, - FWL_HLISTITEM hItem, - CFX_RectF& rtItem) { - if (!hItem) - return FWL_ERR_Indefinite; - CFWL_ComboBoxItem* pItem = reinterpret_cast<CFWL_ComboBoxItem*>(hItem); - rtItem.Set(pItem->m_rtItem.left, pItem->m_rtItem.top, pItem->m_rtItem.width, - pItem->m_rtItem.height); - return FWL_ERR_Succeeded; -} -void* CFWL_ComboBox::CFWL_ComboBoxDP::GetItemData(IFWL_Widget* pWidget, - FWL_HLISTITEM hItem) { - if (!hItem) - return NULL; - CFWL_ComboBoxItem* pItem = reinterpret_cast<CFWL_ComboBoxItem*>(hItem); - return pItem->m_pData; -} -FWL_ERR CFWL_ComboBox::CFWL_ComboBoxDP::SetItemStyles(IFWL_Widget* pWidget, - FWL_HLISTITEM hItem, - FX_DWORD dwStyle) { - if (!hItem) - return FWL_ERR_Indefinite; - reinterpret_cast<CFWL_ComboBoxItem*>(hItem)->m_dwStyles = dwStyle; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ComboBox::CFWL_ComboBoxDP::SetItemText(IFWL_Widget* pWidget, - FWL_HLISTITEM hItem, - const FX_WCHAR* pszText) { - if (!hItem) - return FWL_ERR_Indefinite; - reinterpret_cast<CFWL_ComboBoxItem*>(hItem)->m_wsText = pszText; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ComboBox::CFWL_ComboBoxDP::SetItemRect(IFWL_Widget* pWidget, - FWL_HLISTITEM hItem, - const CFX_RectF& rtItem) { - if (!hItem) - return FWL_ERR_Indefinite; - reinterpret_cast<CFWL_ComboBoxItem*>(hItem)->m_rtItem = rtItem; - return FWL_ERR_Succeeded; -} -FX_FLOAT CFWL_ComboBox::CFWL_ComboBoxDP::GetItemHeight(IFWL_Widget* pWidget) { - return m_fItemHeight; -} -CFX_DIBitmap* CFWL_ComboBox::CFWL_ComboBoxDP::GetItemIcon(IFWL_Widget* pWidget, - FWL_HLISTITEM hItem) { - if (!hItem) - return NULL; - return reinterpret_cast<CFWL_ComboBoxItem*>(hItem)->m_pDIB; -} -FWL_ERR CFWL_ComboBox::CFWL_ComboBoxDP::GetItemCheckRect(IFWL_Widget* pWidget, - FWL_HLISTITEM hItem, - CFX_RectF& rtCheck) { - CFWL_ComboBoxItem* pItem = reinterpret_cast<CFWL_ComboBoxItem*>(hItem); - rtCheck = pItem->m_rtCheckBox; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ComboBox::CFWL_ComboBoxDP::SetItemCheckRect( - IFWL_Widget* pWidget, - FWL_HLISTITEM hItem, - const CFX_RectF& rtCheck) { - CFWL_ComboBoxItem* pItem = reinterpret_cast<CFWL_ComboBoxItem*>(hItem); - pItem->m_rtCheckBox = rtCheck; - return FWL_ERR_Succeeded; -} -FX_DWORD CFWL_ComboBox::CFWL_ComboBoxDP::GetItemCheckState( - IFWL_Widget* pWidget, - FWL_HLISTITEM hItem) { - CFWL_ComboBoxItem* pItem = reinterpret_cast<CFWL_ComboBoxItem*>(hItem); - return pItem->m_dwCheckState; -} -FWL_ERR CFWL_ComboBox::CFWL_ComboBoxDP::SetItemCheckState( - IFWL_Widget* pWidget, - FWL_HLISTITEM hItem, - FX_DWORD dwCheckState) { - CFWL_ComboBoxItem* pItem = reinterpret_cast<CFWL_ComboBoxItem*>(hItem); - pItem->m_dwCheckState = dwCheckState; - return FWL_ERR_Succeeded; -} -FX_FLOAT CFWL_ComboBox::CFWL_ComboBoxDP::GetListHeight(IFWL_Widget* pWidget) { - return m_fMaxListHeight; -} diff --git a/xfa/src/fwl/lightwidget/datetimepicker.cpp b/xfa/src/fwl/lightwidget/datetimepicker.cpp deleted file mode 100644 index 957ed87fed..0000000000 --- a/xfa/src/fwl/lightwidget/datetimepicker.cpp +++ /dev/null @@ -1,144 +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/include/fwl/lightwidget/datetimepicker.h" - -#include <memory> - -#include "xfa/include/fwl/core/fwl_error.h" -#include "xfa/include/fwl/core/fwl_note.h" -#include "xfa/include/fwl/core/fwl_widget.h" -#include "xfa/include/fwl/basewidget/fwl_datetimepicker.h" - -CFWL_DateTimePicker* CFWL_DateTimePicker::Create() { - return new CFWL_DateTimePicker; -} -FWL_ERR CFWL_DateTimePicker::Initialize( - const CFWL_WidgetProperties* pProperties) { - if (m_pIface) - return FWL_ERR_Indefinite; - if (pProperties) { - *m_pProperties = *pProperties; - } - std::unique_ptr<IFWL_DateTimePicker> pDateTimePicker( - IFWL_DateTimePicker::Create( - m_pProperties->MakeWidgetImpProperties(&m_DateTimePickerDP), - nullptr)); - FWL_ERR ret = pDateTimePicker->Initialize(); - if (ret != FWL_ERR_Succeeded) { - return ret; - } - m_pIface = pDateTimePicker.release(); - CFWL_Widget::Initialize(); - return FWL_ERR_Succeeded; -} - -FWL_ERR CFWL_DateTimePicker::SetToday(int32_t iYear, - int32_t iMonth, - int32_t iDay) { - m_DateTimePickerDP.m_iYear = iYear; - m_DateTimePickerDP.m_iMonth = iMonth; - m_DateTimePickerDP.m_iDay = iDay; - return FWL_ERR_Succeeded; -} -int32_t CFWL_DateTimePicker::CountSelRanges() { - return static_cast<IFWL_DateTimePicker*>(m_pIface)->CountSelRanges(); -} -int32_t CFWL_DateTimePicker::GetSelRange(int32_t nIndex, int32_t& nStart) { - return static_cast<IFWL_DateTimePicker*>(m_pIface) - ->GetSelRange(nIndex, nStart); -} -FWL_ERR CFWL_DateTimePicker::GetEditText(CFX_WideString& wsText) { - return static_cast<IFWL_DateTimePicker*>(m_pIface)->GetEditText(wsText); -} -FWL_ERR CFWL_DateTimePicker::SetEditText(const CFX_WideStringC& wsText) { - return static_cast<IFWL_DateTimePicker*>(m_pIface)->SetEditText(wsText); -} -FWL_ERR CFWL_DateTimePicker::GetCurSel(int32_t& iYear, - int32_t& iMonth, - int32_t& iDay) { - return static_cast<IFWL_DateTimePicker*>(m_pIface) - ->GetCurSel(iYear, iMonth, iDay); -} -FWL_ERR CFWL_DateTimePicker::SetCurSel(int32_t iYear, - int32_t iMonth, - int32_t iDay) { - return static_cast<IFWL_DateTimePicker*>(m_pIface) - ->SetCurSel(iYear, iMonth, iDay); -} -CFWL_DateTimePicker::CFWL_DateTimePicker() {} -CFWL_DateTimePicker::~CFWL_DateTimePicker() {} -CFWL_DateTimePicker::CFWL_DateTimePickerDP::CFWL_DateTimePickerDP() { - m_iYear = 2011; - m_iMonth = 1; - m_iDay = 1; -} -FWL_ERR CFWL_DateTimePicker::CFWL_DateTimePickerDP::GetCaption( - IFWL_Widget* pWidget, - CFX_WideString& wsCaption) { - wsCaption = m_wsData; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_DateTimePicker::CFWL_DateTimePickerDP::GetToday( - IFWL_Widget* pWidget, - int32_t& iYear, - int32_t& iMonth, - int32_t& iDay) { - iYear = m_iYear; - iMonth = m_iMonth; - iDay = m_iDay; - return FWL_ERR_Succeeded; -} -FX_BOOL CFWL_DateTimePicker::CanUndo() { - return static_cast<IFWL_DateTimePicker*>(m_pIface)->CanUndo(); -} -FX_BOOL CFWL_DateTimePicker::CanRedo() { - return static_cast<IFWL_DateTimePicker*>(m_pIface)->CanRedo(); -} -FX_BOOL CFWL_DateTimePicker::Undo() { - return static_cast<IFWL_DateTimePicker*>(m_pIface)->Undo(); -} -FX_BOOL CFWL_DateTimePicker::Redo() { - return static_cast<IFWL_DateTimePicker*>(m_pIface)->Redo(); -} -FX_BOOL CFWL_DateTimePicker::CanCopy() { - return static_cast<IFWL_DateTimePicker*>(m_pIface)->CanCopy(); -} -FX_BOOL CFWL_DateTimePicker::CanCut() { - return static_cast<IFWL_DateTimePicker*>(m_pIface)->CanCut(); -} -FX_BOOL CFWL_DateTimePicker::CanSelectAll() { - return static_cast<IFWL_DateTimePicker*>(m_pIface)->CanSelectAll(); -} -FX_BOOL CFWL_DateTimePicker::Copy(CFX_WideString& wsCopy) { - return static_cast<IFWL_DateTimePicker*>(m_pIface)->Copy(wsCopy); -} -FX_BOOL CFWL_DateTimePicker::Cut(CFX_WideString& wsCut) { - return static_cast<IFWL_DateTimePicker*>(m_pIface)->Copy(wsCut); -} -FX_BOOL CFWL_DateTimePicker::Paste(const CFX_WideString& wsPaste) { - return static_cast<IFWL_DateTimePicker*>(m_pIface)->Paste(wsPaste); -} -FX_BOOL CFWL_DateTimePicker::SelectAll() { - return static_cast<IFWL_DateTimePicker*>(m_pIface)->SelectAll(); -} -FX_BOOL CFWL_DateTimePicker::Delete() { - return static_cast<IFWL_DateTimePicker*>(m_pIface)->Delete(); -} -FX_BOOL CFWL_DateTimePicker::DeSelect() { - return static_cast<IFWL_DateTimePicker*>(m_pIface)->DeSelect(); -} -FWL_ERR CFWL_DateTimePicker::GetBBox(CFX_RectF& rect) { - return static_cast<IFWL_DateTimePicker*>(m_pIface)->GetBBox(rect); -} -FWL_ERR CFWL_DateTimePicker::SetEditLimit(int32_t nLimit) { - return static_cast<IFWL_DateTimePicker*>(m_pIface)->SetEditLimit(nLimit); -} -FWL_ERR CFWL_DateTimePicker::ModifyEditStylesEx(FX_DWORD dwStylesExAdded, - FX_DWORD dwStylesExRemoved) { - return static_cast<IFWL_DateTimePicker*>(m_pIface) - ->ModifyEditStylesEx(dwStylesExAdded, dwStylesExRemoved); -} diff --git a/xfa/src/fwl/lightwidget/edit.cpp b/xfa/src/fwl/lightwidget/edit.cpp deleted file mode 100644 index 303943a8f6..0000000000 --- a/xfa/src/fwl/lightwidget/edit.cpp +++ /dev/null @@ -1,211 +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/include/fwl/lightwidget/edit.h" - -#include <memory> -#include <vector> - -#include "xfa/include/fwl/basewidget/fwl_edit.h" - -CFWL_Edit* CFWL_Edit::Create() { - return new CFWL_Edit; -} -FWL_ERR CFWL_Edit::Initialize(const CFWL_WidgetProperties* pProperties) { - if (m_pIface) - return FWL_ERR_Indefinite; - if (pProperties) { - *m_pProperties = *pProperties; - } - std::unique_ptr<IFWL_Edit> pEdit(IFWL_Edit::Create( - m_pProperties->MakeWidgetImpProperties(nullptr), nullptr)); - FWL_ERR ret = pEdit->Initialize(); - if (ret != FWL_ERR_Succeeded) { - return ret; - } - m_pIface = pEdit.release(); - CFWL_Widget::Initialize(); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_Edit::SetText(const CFX_WideString& wsText) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return static_cast<IFWL_Edit*>(m_pIface)->SetText(wsText); -} -int32_t CFWL_Edit::GetTextLength() const { - if (!m_pIface) - return 0; - return static_cast<IFWL_Edit*>(m_pIface)->GetTextLength(); -} -FWL_ERR CFWL_Edit::GetText(CFX_WideString& wsText, - int32_t nStart, - int32_t nCount) const { - if (!m_pIface) - return FWL_ERR_Indefinite; - return static_cast<IFWL_Edit*>(m_pIface)->GetText(wsText, nStart, nCount); -} -FWL_ERR CFWL_Edit::ClearText() { - if (!m_pIface) - return FWL_ERR_Indefinite; - return static_cast<IFWL_Edit*>(m_pIface)->ClearText(); -} -int32_t CFWL_Edit::GetCaretPos() const { - if (!m_pIface) - return -1; - return static_cast<IFWL_Edit*>(m_pIface)->GetCaretPos(); -} -int32_t CFWL_Edit::SetCaretPos(int32_t nIndex, FX_BOOL bBefore) { - if (!m_pIface) - return -1; - return static_cast<IFWL_Edit*>(m_pIface)->SetCaretPos(nIndex, bBefore); -} -FWL_ERR CFWL_Edit::AddSelRange(int32_t nStart, int32_t nCount) { - if (!m_pIface) - return FWL_ERR_Indefinite; - static_cast<IFWL_Edit*>(m_pIface)->AddSelRange(nStart, nCount); - int32_t pos = 0; - int32_t sum = static_cast<IFWL_Edit*>(m_pIface)->GetTextLength(); - if (nCount == -1) { - pos = sum; - } else { - pos = nStart + nCount; - } - return static_cast<IFWL_Edit*>(m_pIface)->SetCaretPos(pos); -} -int32_t CFWL_Edit::CountSelRanges() { - if (!m_pIface) - return 0; - return static_cast<IFWL_Edit*>(m_pIface)->CountSelRanges(); -} -int32_t CFWL_Edit::GetSelRange(int32_t nIndex, int32_t& nStart) { - if (!m_pIface) - return 0; - return static_cast<IFWL_Edit*>(m_pIface)->GetSelRange(nIndex, nStart); -} -FWL_ERR CFWL_Edit::ClearSelections() { - if (!m_pIface) - return FWL_ERR_Indefinite; - return static_cast<IFWL_Edit*>(m_pIface)->ClearSelections(); -} -int32_t CFWL_Edit::GetLimit() { - if (!m_pIface) - return -1; - return static_cast<IFWL_Edit*>(m_pIface)->GetLimit(); -} -FWL_ERR CFWL_Edit::SetLimit(int32_t nLimit) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return static_cast<IFWL_Edit*>(m_pIface)->SetLimit(nLimit); -} -FWL_ERR CFWL_Edit::SetAliasChar(FX_WCHAR wAlias) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return static_cast<IFWL_Edit*>(m_pIface)->SetAliasChar(wAlias); -} -FWL_ERR CFWL_Edit::Insert(int32_t nStart, - const FX_WCHAR* lpText, - int32_t nLen) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return static_cast<IFWL_Edit*>(m_pIface)->Insert(nStart, lpText, nLen); -} -FWL_ERR CFWL_Edit::DeleteSelections() { - if (!m_pIface) - return FWL_ERR_Indefinite; - return static_cast<IFWL_Edit*>(m_pIface)->DeleteSelections(); -} -FWL_ERR CFWL_Edit::DeleteRange(int32_t nStart, int32_t nCount) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return static_cast<IFWL_Edit*>(m_pIface)->DeleteRange(nStart, nCount); -} -FWL_ERR CFWL_Edit::ReplaceSelections(const CFX_WideStringC& wsReplace) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return static_cast<IFWL_Edit*>(m_pIface)->ReplaceSelections(wsReplace); -} -FWL_ERR CFWL_Edit::Replace(int32_t nStart, - int32_t nLen, - const CFX_WideStringC& wsReplace) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return static_cast<IFWL_Edit*>(m_pIface)->Replace(nStart, nLen, wsReplace); -} -FWL_ERR CFWL_Edit::DoClipboard(int32_t iCmd) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return static_cast<IFWL_Edit*>(m_pIface)->DoClipboard(iCmd); -} -FX_BOOL CFWL_Edit::Redo(const CFX_ByteStringC& bsRecord) { - if (!m_pIface) - return FALSE; - return static_cast<IFWL_Edit*>(m_pIface)->Redo(bsRecord); -} -FX_BOOL CFWL_Edit::Undo(const CFX_ByteStringC& bsRecord) { - if (!m_pIface) - return FALSE; - return static_cast<IFWL_Edit*>(m_pIface)->Undo(bsRecord); -} -FWL_ERR CFWL_Edit::SetTabWidth(FX_FLOAT fTabWidth, FX_BOOL bEquidistant) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return static_cast<IFWL_Edit*>(m_pIface) - ->SetTabWidth(fTabWidth, bEquidistant); -} -FWL_ERR CFWL_Edit::SetNumberRange(int32_t iMin, int32_t iMax) { - if (iMin > iMax) { - return FWL_ERR_Parameter_Invalid; - } - return static_cast<IFWL_Edit*>(m_pIface)->SetNumberRange(iMin, iMax); -} -FWL_ERR CFWL_Edit::SetBackColor(FX_DWORD dwColor) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return static_cast<IFWL_Edit*>(m_pIface)->SetBackColor(dwColor); -} -FWL_ERR CFWL_Edit::SetFont(const CFX_WideString& wsFont, FX_FLOAT fSize) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return static_cast<IFWL_Edit*>(m_pIface)->SetFont(wsFont, fSize); -} -FX_BOOL CFWL_Edit::CanUndo() { - return static_cast<IFWL_Edit*>(m_pIface)->CanUndo(); -} -FX_BOOL CFWL_Edit::CanRedo() { - return static_cast<IFWL_Edit*>(m_pIface)->CanRedo(); -} -FX_BOOL CFWL_Edit::Undo() { - return static_cast<IFWL_Edit*>(m_pIface)->Undo(); -} -FX_BOOL CFWL_Edit::Redo() { - return static_cast<IFWL_Edit*>(m_pIface)->Undo(); -} -FX_BOOL CFWL_Edit::Copy(CFX_WideString& wsCopy) { - return static_cast<IFWL_Edit*>(m_pIface)->Copy(wsCopy); -} -FX_BOOL CFWL_Edit::Cut(CFX_WideString& wsCut) { - return static_cast<IFWL_Edit*>(m_pIface)->Cut(wsCut); -} -FX_BOOL CFWL_Edit::Paste(const CFX_WideString& wsPaste) { - return static_cast<IFWL_Edit*>(m_pIface)->Paste(wsPaste); -} -FX_BOOL CFWL_Edit::Delete() { - return static_cast<IFWL_Edit*>(m_pIface)->Delete(); -} -void CFWL_Edit::SetScrollOffset(FX_FLOAT fScrollOffset) { - return static_cast<IFWL_Edit*>(m_pIface)->SetScrollOffset(fScrollOffset); -} -FX_BOOL CFWL_Edit::GetSuggestWords(CFX_PointF pointf, - std::vector<CFX_ByteString>& sSuggest) { - return static_cast<IFWL_Edit*>(m_pIface)->GetSuggestWords(pointf, sSuggest); -} -FX_BOOL CFWL_Edit::ReplaceSpellCheckWord(CFX_PointF pointf, - const CFX_ByteStringC& bsReplace) { - return static_cast<IFWL_Edit*>(m_pIface) - ->ReplaceSpellCheckWord(pointf, bsReplace); -} -CFWL_Edit::CFWL_Edit() {} -CFWL_Edit::~CFWL_Edit() {} diff --git a/xfa/src/fwl/lightwidget/listbox.cpp b/xfa/src/fwl/lightwidget/listbox.cpp deleted file mode 100644 index 6a7a26cd1b..0000000000 --- a/xfa/src/fwl/lightwidget/listbox.cpp +++ /dev/null @@ -1,302 +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/include/fwl/lightwidget/listbox.h" - -#include <memory> - -#include "third_party/base/stl_util.h" - -CFWL_ListBox* CFWL_ListBox::Create() { - return new CFWL_ListBox; -} -FWL_ERR CFWL_ListBox::Initialize(const CFWL_WidgetProperties* pProperties) { - if (m_pIface) - return FWL_ERR_Indefinite; - if (pProperties) { - *m_pProperties = *pProperties; - } - std::unique_ptr<IFWL_ListBox> pListBox(IFWL_ListBox::Create( - m_pProperties->MakeWidgetImpProperties(&m_ListBoxDP), nullptr)); - FWL_ERR ret = pListBox->Initialize(); - if (ret != FWL_ERR_Succeeded) { - return ret; - } - m_pIface = pListBox.release(); - CFWL_Widget::Initialize(); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ListBox::AddDIBitmap(CFX_DIBitmap* pDIB, FWL_HLISTITEM hItem) { - reinterpret_cast<CFWL_ListItem*>(hItem)->m_pDIB = pDIB; - return FWL_ERR_Succeeded; -} -FWL_HLISTITEM CFWL_ListBox::AddString(const CFX_WideStringC& wsAdd, - FX_BOOL bSelect) { - std::unique_ptr<CFWL_ListItem> pItem(new CFWL_ListItem); - pItem->m_dwStates = 0; - pItem->m_wsText = wsAdd; - pItem->m_dwStates = bSelect ? FWL_ITEMSTATE_LTB_Selected : 0; - m_ListBoxDP.m_ItemArray.push_back(std::move(pItem)); - return (FWL_HLISTITEM)m_ListBoxDP.m_ItemArray.back().get(); -} -FX_BOOL CFWL_ListBox::DeleteString(FWL_HLISTITEM hItem) { - int32_t nIndex = m_ListBoxDP.GetItemIndex(GetWidget(), hItem); - if (nIndex < 0 || - static_cast<size_t>(nIndex) >= m_ListBoxDP.m_ItemArray.size()) { - return FALSE; - } - int32_t iCount = m_ListBoxDP.CountItems(m_pIface); - int32_t iSel = nIndex + 1; - if (iSel >= iCount) { - iSel = nIndex - 1; - if (iSel < 0) { - iSel = -1; - } - } - if (iSel >= 0) { - CFWL_ListItem* pSel = - reinterpret_cast<CFWL_ListItem*>(m_ListBoxDP.GetItem(m_pIface, iSel)); - pSel->m_dwStates |= FWL_ITEMSTATE_LTB_Selected; - } - m_ListBoxDP.m_ItemArray.erase(m_ListBoxDP.m_ItemArray.begin() + nIndex); - return TRUE; -} -void CFWL_ListBox::DeleteAll() { - m_ListBoxDP.m_ItemArray.clear(); -} -int32_t CFWL_ListBox::CountSelItems() { - if (!m_pIface) - return 0; - return static_cast<IFWL_ListBox*>(m_pIface)->CountSelItems(); -} -FWL_HLISTITEM CFWL_ListBox::GetSelItem(int32_t nIndexSel) { - if (!m_pIface) - return NULL; - return static_cast<IFWL_ListBox*>(m_pIface)->GetSelItem(nIndexSel); -} -int32_t CFWL_ListBox::GetSelIndex(int32_t nIndex) { - if (!m_pIface) - return 0; - return static_cast<IFWL_ListBox*>(m_pIface)->GetSelIndex(nIndex); -} -FWL_ERR CFWL_ListBox::SetSelItem(FWL_HLISTITEM hItem, FX_BOOL bSelect) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return static_cast<IFWL_ListBox*>(m_pIface)->SetSelItem(hItem, bSelect); -} -FWL_ERR CFWL_ListBox::GetItemText(FWL_HLISTITEM hItem, CFX_WideString& wsText) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return static_cast<IFWL_ListBox*>(m_pIface)->GetItemText(hItem, wsText); -} -FWL_ERR CFWL_ListBox::GetScrollPos(FX_FLOAT& fPos, FX_BOOL bVert) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return static_cast<IFWL_ListBox*>(m_pIface)->GetScrollPos(fPos, bVert); -} -FWL_ERR CFWL_ListBox::SetItemHeight(FX_FLOAT fItemHeight) { - m_ListBoxDP.m_fItemHeight = fItemHeight; - return FWL_ERR_Succeeded; -} -FWL_HLISTITEM CFWL_ListBox::GetFocusItem() { - for (const auto& hItem : m_ListBoxDP.m_ItemArray) { - if (hItem->m_dwStates & FWL_ITEMSTATE_LTB_Focused) - return (FWL_HLISTITEM)hItem.get(); - } - return nullptr; -} -FWL_ERR CFWL_ListBox::SetFocusItem(FWL_HLISTITEM hItem) { - int32_t nIndex = m_ListBoxDP.GetItemIndex(GetWidget(), hItem); - m_ListBoxDP.m_ItemArray[nIndex]->m_dwStates |= FWL_ITEMSTATE_LTB_Focused; - return FWL_ERR_Succeeded; -} -FWL_ERR* CFWL_ListBox::Sort(IFWL_ListBoxCompare* pCom) { - return static_cast<IFWL_ListBox*>(m_pIface)->Sort(pCom); -} -int32_t CFWL_ListBox::CountItems() { - return pdfium::CollectionSize<int32_t>(m_ListBoxDP.m_ItemArray); -} -FWL_HLISTITEM CFWL_ListBox::GetItem(int32_t nIndex) { - if (nIndex < 0 || nIndex >= CountItems()) - return nullptr; - - return (FWL_HLISTITEM)m_ListBoxDP.m_ItemArray[nIndex].get(); -} -FWL_ERR CFWL_ListBox::SetItemString(FWL_HLISTITEM hItem, - const CFX_WideStringC& wsText) { - if (!hItem) - return FWL_ERR_Indefinite; - reinterpret_cast<CFWL_ListItem*>(hItem)->m_wsText = wsText; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ListBox::GetItemString(FWL_HLISTITEM hItem, - CFX_WideString& wsText) { - if (!hItem) - return FWL_ERR_Indefinite; - wsText = reinterpret_cast<CFWL_ListItem*>(hItem)->m_wsText; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ListBox::SetItemData(FWL_HLISTITEM hItem, void* pData) { - if (!hItem) - return FWL_ERR_Indefinite; - reinterpret_cast<CFWL_ListItem*>(hItem)->m_pData = pData; - return FWL_ERR_Succeeded; -} -void* CFWL_ListBox::GetItemData(FWL_HLISTITEM hItem) { - if (!hItem) - return NULL; - return reinterpret_cast<CFWL_ListItem*>(hItem)->m_pData; -} -FWL_HLISTITEM CFWL_ListBox::GetItemAtPoint(FX_FLOAT fx, FX_FLOAT fy) { - CFX_RectF rtClient; - m_pIface->GetClientRect(rtClient); - fx -= rtClient.left; - fy -= rtClient.top; - FX_FLOAT fPosX = 0; - FX_FLOAT fPosY = 0; - static_cast<IFWL_ListBox*>(m_pIface)->GetScrollPos(fx); - static_cast<IFWL_ListBox*>(m_pIface)->GetScrollPos(fy, FALSE); - int32_t nCount = m_ListBoxDP.CountItems(NULL); - for (int32_t i = 0; i < nCount; i++) { - FWL_HLISTITEM hItem = m_ListBoxDP.GetItem(NULL, i); - if (!hItem) { - continue; - } - CFX_RectF rtItem; - m_ListBoxDP.GetItemRect(NULL, hItem, rtItem); - rtItem.Offset(-fPosX, -fPosY); - if (rtItem.Contains(fx, fy)) { - return hItem; - } - } - return NULL; -} -FX_DWORD CFWL_ListBox::GetItemStates(FWL_HLISTITEM hItem) { - if (!hItem) - return 0; - CFWL_ListItem* pItem = reinterpret_cast<CFWL_ListItem*>(hItem); - return pItem->m_dwStates | pItem->m_dwCheckState; -} -CFWL_ListBox::CFWL_ListBox() {} -CFWL_ListBox::~CFWL_ListBox() {} -CFWL_ListBox::CFWL_ListBoxDP::CFWL_ListBoxDP() {} -CFWL_ListBox::CFWL_ListBoxDP::~CFWL_ListBoxDP() {} -FWL_ERR CFWL_ListBox::CFWL_ListBoxDP::GetCaption(IFWL_Widget* pWidget, - CFX_WideString& wsCaption) { - wsCaption = m_wsData; - return FWL_ERR_Succeeded; -} -int32_t CFWL_ListBox::CFWL_ListBoxDP::CountItems(IFWL_Widget* pWidget) { - return pdfium::CollectionSize<int32_t>(m_ItemArray); -} -FWL_HLISTITEM CFWL_ListBox::CFWL_ListBoxDP::GetItem(IFWL_Widget* pWidget, - int32_t nIndex) { - if (nIndex < 0 || nIndex >= CountItems(pWidget)) - return nullptr; - - return (FWL_HLISTITEM)m_ItemArray[nIndex].get(); -} -int32_t CFWL_ListBox::CFWL_ListBoxDP::GetItemIndex(IFWL_Widget* pWidget, - FWL_HLISTITEM hItem) { - auto it = std::find_if( - m_ItemArray.begin(), m_ItemArray.end(), - [hItem](const std::unique_ptr<CFWL_ListItem>& candidate) { - return candidate.get() == reinterpret_cast<CFWL_ListItem*>(hItem); - }); - return it != m_ItemArray.end() ? it - m_ItemArray.begin() : -1; -} -FX_BOOL CFWL_ListBox::CFWL_ListBoxDP::SetItemIndex(IFWL_Widget* pWidget, - FWL_HLISTITEM hItem, - int32_t nIndex) { - if (nIndex < 0 || nIndex >= CountItems(pWidget)) - return FALSE; - m_ItemArray[nIndex].reset(reinterpret_cast<CFWL_ListItem*>(hItem)); - return TRUE; -} -FX_DWORD CFWL_ListBox::CFWL_ListBoxDP::GetItemStyles(IFWL_Widget* pWidget, - FWL_HLISTITEM hItem) { - if (!hItem) - return -1; - return reinterpret_cast<CFWL_ListItem*>(hItem)->m_dwStates; -} -FWL_ERR CFWL_ListBox::CFWL_ListBoxDP::GetItemText(IFWL_Widget* pWidget, - FWL_HLISTITEM hItem, - CFX_WideString& wsText) { - if (!hItem) - return FWL_ERR_Indefinite; - wsText = reinterpret_cast<CFWL_ListItem*>(hItem)->m_wsText; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ListBox::CFWL_ListBoxDP::GetItemRect(IFWL_Widget* pWidget, - FWL_HLISTITEM hItem, - CFX_RectF& rtItem) { - if (!hItem) - return FWL_ERR_Indefinite; - CFWL_ListItem* pItem = reinterpret_cast<CFWL_ListItem*>(hItem); - rtItem = pItem->m_rtItem; - return FWL_ERR_Succeeded; -} -void* CFWL_ListBox::CFWL_ListBoxDP::GetItemData(IFWL_Widget* pWidget, - FWL_HLISTITEM hItem) { - if (!hItem) - return NULL; - CFWL_ListItem* pItem = reinterpret_cast<CFWL_ListItem*>(hItem); - return pItem->m_pData; -} -FWL_ERR CFWL_ListBox::CFWL_ListBoxDP::SetItemStyles(IFWL_Widget* pWidget, - FWL_HLISTITEM hItem, - FX_DWORD dwStyle) { - if (!hItem) - return FWL_ERR_Indefinite; - reinterpret_cast<CFWL_ListItem*>(hItem)->m_dwStates = dwStyle; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ListBox::CFWL_ListBoxDP::SetItemText(IFWL_Widget* pWidget, - FWL_HLISTITEM hItem, - const FX_WCHAR* pszText) { - if (!hItem) - return FWL_ERR_Indefinite; - reinterpret_cast<CFWL_ListItem*>(hItem)->m_wsText = pszText; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ListBox::CFWL_ListBoxDP::SetItemRect(IFWL_Widget* pWidget, - FWL_HLISTITEM hItem, - const CFX_RectF& rtItem) { - if (!hItem) - return FWL_ERR_Indefinite; - reinterpret_cast<CFWL_ListItem*>(hItem)->m_rtItem = rtItem; - return FWL_ERR_Succeeded; -} -FX_FLOAT CFWL_ListBox::CFWL_ListBoxDP::GetItemHeight(IFWL_Widget* pWidget) { - return m_fItemHeight; -} -CFX_DIBitmap* CFWL_ListBox::CFWL_ListBoxDP::GetItemIcon(IFWL_Widget* pWidget, - FWL_HLISTITEM hItem) { - return reinterpret_cast<CFWL_ListItem*>(hItem)->m_pDIB; -} -FWL_ERR CFWL_ListBox::CFWL_ListBoxDP::GetItemCheckRect(IFWL_Widget* pWidget, - FWL_HLISTITEM hItem, - CFX_RectF& rtCheck) { - rtCheck = reinterpret_cast<CFWL_ListItem*>(hItem)->m_rtCheckBox; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ListBox::CFWL_ListBoxDP::SetItemCheckRect( - IFWL_Widget* pWidget, - FWL_HLISTITEM hItem, - const CFX_RectF& rtCheck) { - reinterpret_cast<CFWL_ListItem*>(hItem)->m_rtCheckBox = rtCheck; - return FWL_ERR_Succeeded; -} -FX_DWORD CFWL_ListBox::CFWL_ListBoxDP::GetItemCheckState(IFWL_Widget* pWidget, - FWL_HLISTITEM hItem) { - return reinterpret_cast<CFWL_ListItem*>(hItem)->m_dwCheckState; -} -FWL_ERR CFWL_ListBox::CFWL_ListBoxDP::SetItemCheckState(IFWL_Widget* pWidget, - FWL_HLISTITEM hItem, - FX_DWORD dwCheckState) { - reinterpret_cast<CFWL_ListItem*>(hItem)->m_dwCheckState = dwCheckState; - return FWL_ERR_Succeeded; -} diff --git a/xfa/src/fwl/lightwidget/picturebox.cpp b/xfa/src/fwl/lightwidget/picturebox.cpp deleted file mode 100644 index e35741c3ac..0000000000 --- a/xfa/src/fwl/lightwidget/picturebox.cpp +++ /dev/null @@ -1,119 +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/include/fwl/lightwidget/picturebox.h" - -#include <memory> - -CFWL_PictureBox* CFWL_PictureBox::Create() { - return new CFWL_PictureBox; -} -FWL_ERR CFWL_PictureBox::Initialize(const CFWL_WidgetProperties* pProperties) { - if (m_pIface) - return FWL_ERR_Indefinite; - if (pProperties) { - *m_pProperties = *pProperties; - } - std::unique_ptr<IFWL_PictureBox> pPictureBox(IFWL_PictureBox::Create( - m_pProperties->MakeWidgetImpProperties(&m_PictureBoxDP), nullptr)); - FWL_ERR ret = pPictureBox->Initialize(); - if (ret != FWL_ERR_Succeeded) { - return ret; - } - m_pIface = pPictureBox.release(); - CFWL_Widget::Initialize(); - return FWL_ERR_Succeeded; -} -CFX_DIBitmap* CFWL_PictureBox::GetPicture() { - return m_PictureBoxDP.m_pBitmap; -} -FWL_ERR CFWL_PictureBox::SetPicture(CFX_DIBitmap* pBitmap) { - m_PictureBoxDP.m_pBitmap = pBitmap; - return FWL_ERR_Succeeded; -} -FX_FLOAT CFWL_PictureBox::GetRotation() { - return m_PictureBoxDP.m_fRotation; -} -FWL_ERR CFWL_PictureBox::SetRotation(FX_FLOAT fRotation) { - m_PictureBoxDP.m_fRotation = fRotation; - return FWL_ERR_Succeeded; -} -int32_t CFWL_PictureBox::GetFlipMode() { - return m_PictureBoxDP.GetFlipMode(m_pIface); -} -FWL_ERR CFWL_PictureBox::SetFlipMode(int32_t iFlipMode) { - m_PictureBoxDP.m_iFlipMode = iFlipMode; - return FWL_ERR_Succeeded; -} -int32_t CFWL_PictureBox::GetOpacity() { - return m_PictureBoxDP.GetOpacity(m_pIface); -} -FWL_ERR CFWL_PictureBox::SetOpacity(int32_t iOpacity) { - m_PictureBoxDP.m_iOpacity = iOpacity; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_PictureBox::GetScale(FX_FLOAT& fScaleX, FX_FLOAT& fScaleY) { - CFX_Matrix matrix; - m_PictureBoxDP.GetMatrix(m_pIface, matrix); - matrix.Scale(fScaleX, fScaleY); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_PictureBox::SetScale(FX_FLOAT fScaleX, FX_FLOAT fScaleY) { - m_PictureBoxDP.m_fScaleX = fScaleX; - m_PictureBoxDP.m_fScaleY = fScaleY; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_PictureBox::GetOffset(FX_FLOAT& fx, FX_FLOAT& fy) { - CFX_Matrix matrix; - m_PictureBoxDP.GetMatrix(m_pIface, matrix); - fx = matrix.e; - fy = matrix.f; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_PictureBox::SetOffset(FX_FLOAT fx, FX_FLOAT fy) { - m_PictureBoxDP.m_fOffSetX = fx; - m_PictureBoxDP.m_fOffSetY = fy; - return FWL_ERR_Succeeded; -} -CFWL_PictureBox::CFWL_PictureBox() {} -CFWL_PictureBox::~CFWL_PictureBox() {} -FWL_ERR CFWL_PictureBox::CFWL_PictureBoxDP::GetCaption( - IFWL_Widget* pWidget, - CFX_WideString& wsCaption) { - return FWL_ERR_Succeeded; -} -CFX_DIBitmap* CFWL_PictureBox::CFWL_PictureBoxDP::GetPicture( - IFWL_Widget* pWidget) { - return m_pBitmap; -} -CFX_DIBitmap* CFWL_PictureBox::CFWL_PictureBoxDP::GetErrorPicture( - IFWL_Widget* pWidget) { - return m_pBitmap; -} -CFX_DIBitmap* CFWL_PictureBox::CFWL_PictureBoxDP::GetInitialPicture( - IFWL_Widget* pWidget) { - return m_pBitmap; -} -int32_t CFWL_PictureBox::CFWL_PictureBoxDP::GetOpacity(IFWL_Widget* pWidget) { - return m_iOpacity; -} -FWL_ERR CFWL_PictureBox::CFWL_PictureBoxDP::GetMatrix(IFWL_Widget* pWidget, - CFX_Matrix& matrix) { - CFX_RectF rect; - pWidget->GetClientRect(rect); - FX_FLOAT fLen = rect.width / 2; - FX_FLOAT fWid = rect.height / 2; - matrix.SetIdentity(); - matrix.Translate(-fLen, -fWid); - matrix.Rotate(m_fRotation); - matrix.Translate(fLen, fWid); - matrix.Scale(m_fScaleX, m_fScaleY); - matrix.Translate(m_fOffSetX, m_fOffSetY); - return FWL_ERR_Succeeded; -} -int32_t CFWL_PictureBox::CFWL_PictureBoxDP::GetFlipMode(IFWL_Widget* pWidget) { - return m_iFlipMode; -} diff --git a/xfa/src/fwl/lightwidget/pushbutton.cpp b/xfa/src/fwl/lightwidget/pushbutton.cpp deleted file mode 100644 index c9fb74e5f5..0000000000 --- a/xfa/src/fwl/lightwidget/pushbutton.cpp +++ /dev/null @@ -1,56 +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/include/fwl/lightwidget/pushbutton.h" - -#include <memory> - -CFWL_PushButton* CFWL_PushButton::Create() { - return new CFWL_PushButton; -} -FWL_ERR CFWL_PushButton::Initialize(const CFWL_WidgetProperties* pProperties) { - if (m_pIface) - return FWL_ERR_Indefinite; - if (pProperties) { - *m_pProperties = *pProperties; - } - std::unique_ptr<IFWL_PushButton> pPushButton(IFWL_PushButton::Create( - m_pProperties->MakeWidgetImpProperties(&m_buttonData), nullptr)); - FWL_ERR ret = pPushButton->Initialize(); - if (ret != FWL_ERR_Succeeded) { - return ret; - } - m_pIface = pPushButton.release(); - CFWL_Widget::Initialize(); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_PushButton::GetCaption(CFX_WideString& wsCaption) { - wsCaption = m_buttonData.m_wsCaption; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_PushButton::SetCaption(const CFX_WideStringC& wsCaption) { - m_buttonData.m_wsCaption = wsCaption; - return FWL_ERR_Succeeded; -} -CFX_DIBitmap* CFWL_PushButton::GetPicture() { - return m_buttonData.m_pBitmap; -} -FWL_ERR CFWL_PushButton::SetPicture(CFX_DIBitmap* pBitmap) { - m_buttonData.m_pBitmap = pBitmap; - return FWL_ERR_Succeeded; -} -CFWL_PushButton::CFWL_PushButton() {} -CFWL_PushButton::~CFWL_PushButton() {} -FWL_ERR CFWL_PushButton::CFWL_PushButtonDP::GetCaption( - IFWL_Widget* pWidget, - CFX_WideString& wsCaption) { - wsCaption = m_wsCaption; - return FWL_ERR_Succeeded; -} -CFX_DIBitmap* CFWL_PushButton::CFWL_PushButtonDP::GetPicture( - IFWL_Widget* pWidget) { - return m_pBitmap; -} diff --git a/xfa/src/fwl/lightwidget/scrollbar.cpp b/xfa/src/fwl/lightwidget/scrollbar.cpp deleted file mode 100644 index cc927e724e..0000000000 --- a/xfa/src/fwl/lightwidget/scrollbar.cpp +++ /dev/null @@ -1,93 +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/include/fwl/lightwidget/scrollbar.h" - -#include <memory> - -#include "xfa/include/fwl/basewidget/fwl_scrollbar.h" - -CFWL_ScrollBar* CFWL_ScrollBar::Create() { - return new CFWL_ScrollBar; -} -FWL_ERR CFWL_ScrollBar::Initialize(const CFWL_WidgetProperties* pProperties) { - if (m_pIface) - return FWL_ERR_Indefinite; - if (pProperties) { - *m_pProperties = *pProperties; - } - std::unique_ptr<IFWL_ScrollBar> pScrollBar(IFWL_ScrollBar::Create( - m_pProperties->MakeWidgetImpProperties(nullptr), nullptr)); - FWL_ERR ret = pScrollBar->Initialize(); - if (ret != FWL_ERR_Succeeded) { - return ret; - } - m_pIface = pScrollBar.release(); - CFWL_Widget::Initialize(); - return FWL_ERR_Succeeded; -} -FX_BOOL CFWL_ScrollBar::IsVertical() { - if (!m_pIface) - return FALSE; - return static_cast<IFWL_ScrollBar*>(m_pIface)->IsVertical(); -} -FWL_ERR CFWL_ScrollBar::GetRange(FX_FLOAT& fMin, FX_FLOAT& fMax) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return static_cast<IFWL_ScrollBar*>(m_pIface)->GetRange(fMin, fMax); -} -FWL_ERR CFWL_ScrollBar::SetRange(FX_FLOAT fMin, FX_FLOAT fMax) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return static_cast<IFWL_ScrollBar*>(m_pIface)->SetRange(fMin, fMax); -} -FX_FLOAT CFWL_ScrollBar::GetPageSize() { - if (!m_pIface) - return 0; - return static_cast<IFWL_ScrollBar*>(m_pIface)->GetPageSize(); -} -FWL_ERR CFWL_ScrollBar::SetPageSize(FX_FLOAT fPageSize) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return static_cast<IFWL_ScrollBar*>(m_pIface)->SetPageSize(fPageSize); -} -FX_FLOAT CFWL_ScrollBar::GetStepSize() { - if (!m_pIface) - return 0; - return static_cast<IFWL_ScrollBar*>(m_pIface)->GetStepSize(); -} -FWL_ERR CFWL_ScrollBar::SetStepSize(FX_FLOAT fStepSize) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return static_cast<IFWL_ScrollBar*>(m_pIface)->SetStepSize(fStepSize); -} -FX_FLOAT CFWL_ScrollBar::GetPos() { - if (!m_pIface) - return -1; - return static_cast<IFWL_ScrollBar*>(m_pIface)->GetPos(); -} -FWL_ERR CFWL_ScrollBar::SetPos(FX_FLOAT fPos) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return static_cast<IFWL_ScrollBar*>(m_pIface)->SetPos(fPos); -} -FX_FLOAT CFWL_ScrollBar::GetTrackPos() { - if (!m_pIface) - return -1; - return static_cast<IFWL_ScrollBar*>(m_pIface)->GetTrackPos(); -} -FWL_ERR CFWL_ScrollBar::SetTrackPos(FX_FLOAT fTrackPos) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return static_cast<IFWL_ScrollBar*>(m_pIface)->SetTrackPos(fTrackPos); -} -FX_BOOL CFWL_ScrollBar::DoScroll(FX_DWORD dwCode, FX_FLOAT fPos) { - if (!m_pIface) - return FALSE; - return static_cast<IFWL_ScrollBar*>(m_pIface)->DoScroll(dwCode, fPos); -} -CFWL_ScrollBar::CFWL_ScrollBar() {} -CFWL_ScrollBar::~CFWL_ScrollBar() {} diff --git a/xfa/src/fwl/lightwidget/theme.cpp b/xfa/src/fwl/lightwidget/theme.cpp deleted file mode 100644 index fe9f55928b..0000000000 --- a/xfa/src/fwl/lightwidget/theme.cpp +++ /dev/null @@ -1,135 +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/include/fwl/lightwidget/theme.h" - -#include <algorithm> - -#include "xfa/include/fwl/theme/barcodetp.h" -#include "xfa/include/fwl/theme/carettp.h" -#include "xfa/include/fwl/theme/checkboxtp.h" -#include "xfa/include/fwl/theme/comboboxtp.h" -#include "xfa/include/fwl/theme/datetimepickertp.h" -#include "xfa/include/fwl/theme/edittp.h" -#include "xfa/include/fwl/theme/formtp.h" -#include "xfa/include/fwl/theme/listboxtp.h" -#include "xfa/include/fwl/theme/monthcalendartp.h" -#include "xfa/include/fwl/theme/pictureboxtp.h" -#include "xfa/include/fwl/theme/pushbuttontp.h" -#include "xfa/include/fwl/theme/scrollbartp.h" - -CFWL_Theme::CFWL_Theme() { - m_ThemesArray.push_back(std::unique_ptr<CFWL_WidgetTP>(new CFWL_FormTP)); - m_ThemesArray.push_back( - std::unique_ptr<CFWL_WidgetTP>(new CFWL_PushButtonTP)); - m_ThemesArray.push_back(std::unique_ptr<CFWL_WidgetTP>(new CFWL_CheckBoxTP)); - m_ThemesArray.push_back(std::unique_ptr<CFWL_WidgetTP>(new CFWL_ListBoxTP)); - m_ThemesArray.push_back( - std::unique_ptr<CFWL_WidgetTP>(new CFWL_PictureBoxTP)); - m_ThemesArray.push_back(std::unique_ptr<CFWL_WidgetTP>(new CFWL_ScrollBarTP)); - m_ThemesArray.push_back(std::unique_ptr<CFWL_WidgetTP>(new CFWL_EditTP)); - m_ThemesArray.push_back(std::unique_ptr<CFWL_WidgetTP>(new CFWL_ComboBoxTP)); - m_ThemesArray.push_back(std::unique_ptr<CFWL_WidgetTP>(new CFWL_BarcodeTP)); - m_ThemesArray.push_back( - std::unique_ptr<CFWL_WidgetTP>(new CFWL_DateTimePickerTP)); - m_ThemesArray.push_back( - std::unique_ptr<CFWL_WidgetTP>(new CFWL_MonthCalendarTP)); - m_ThemesArray.push_back(std::unique_ptr<CFWL_WidgetTP>(new CFWL_CaretTP)); -} - -CFWL_Theme::~CFWL_Theme() {} - -FX_BOOL CFWL_Theme::IsValidWidget(IFWL_Widget* pWidget) { - return !!GetTheme(pWidget); -} - -FX_DWORD CFWL_Theme::GetThemeID(IFWL_Widget* pWidget) { - return GetTheme(pWidget)->GetThemeID(pWidget); -} - -FX_DWORD CFWL_Theme::SetThemeID(IFWL_Widget* pWidget, - FX_DWORD dwThemeID, - FX_BOOL bChildren) { - FX_DWORD dwID; - for (const auto& pTheme : m_ThemesArray) { - dwID = pTheme->GetThemeID(pWidget); - pTheme->SetThemeID(pWidget, dwThemeID, FALSE); - } - return dwID; -} - -FWL_ERR CFWL_Theme::GetThemeMatrix(IFWL_Widget* pWidget, CFX_Matrix& matrix) { - return FWL_ERR_Succeeded; -} - -FWL_ERR CFWL_Theme::SetThemeMatrix(IFWL_Widget* pWidget, - const CFX_Matrix& matrix) { - return FWL_ERR_Succeeded; -} - -FX_BOOL CFWL_Theme::DrawBackground(CFWL_ThemeBackground* pParams) { - return GetTheme(pParams->m_pWidget)->DrawBackground(pParams); -} - -FX_BOOL CFWL_Theme::DrawText(CFWL_ThemeText* pParams) { - return GetTheme(pParams->m_pWidget)->DrawText(pParams); -} - -void* CFWL_Theme::GetCapacity(CFWL_ThemePart* pThemePart, FX_DWORD dwCapacity) { - return GetTheme(pThemePart->m_pWidget)->GetCapacity(pThemePart, dwCapacity); -} - -FX_BOOL CFWL_Theme::IsCustomizedLayout(IFWL_Widget* pWidget) { - return GetTheme(pWidget)->IsCustomizedLayout(pWidget); -} - -FWL_ERR CFWL_Theme::GetPartRect(CFWL_ThemePart* pThemePart, CFX_RectF& rtPart) { - return GetTheme(pThemePart->m_pWidget)->GetPartRect(pThemePart, rtPart); -} - -FX_BOOL CFWL_Theme::IsInPart(CFWL_ThemePart* pThemePart, - FX_FLOAT fx, - FX_FLOAT fy) { - return GetTheme(pThemePart->m_pWidget)->IsInPart(pThemePart, fx, fy); -} - -FX_BOOL CFWL_Theme::CalcTextRect(CFWL_ThemeText* pParams, CFX_RectF& rect) { - return GetTheme(pParams->m_pWidget)->CalcTextRect(pParams, rect); -} - -FWL_ERR CFWL_Theme::Initialize() { - for (const auto& pTheme : m_ThemesArray) - pTheme->Initialize(); - - FWLTHEME_Init(); - return FWL_ERR_Succeeded; -} - -FWL_ERR CFWL_Theme::Finalize() { - for (const auto& pTheme : m_ThemesArray) - pTheme->Finalize(); - - FWLTHEME_Release(); - return FWL_ERR_Succeeded; -} - -FWL_ERR CFWL_Theme::SetFont(IFWL_Widget* pWidget, - const FX_WCHAR* strFont, - FX_FLOAT fFontSize, - FX_ARGB rgbFont) { - for (const auto& pTheme : m_ThemesArray) - pTheme->SetFont(pWidget, strFont, fFontSize, rgbFont); - - return FWL_ERR_Succeeded; -} - -CFWL_WidgetTP* CFWL_Theme::GetTheme(IFWL_Widget* pWidget) { - for (const auto& pTheme : m_ThemesArray) { - if (pTheme->IsValidWidget(pWidget)) - return pTheme.get(); - } - return nullptr; -} diff --git a/xfa/src/fwl/lightwidget/tooltipctrl.cpp b/xfa/src/fwl/lightwidget/tooltipctrl.cpp deleted file mode 100644 index 5a308c4c84..0000000000 --- a/xfa/src/fwl/lightwidget/tooltipctrl.cpp +++ /dev/null @@ -1,111 +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/include/fwl/lightwidget/tooltipctrl.h" - -#include <memory> - -#include "xfa/src/fwl/core/fwl_formimp.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" - -CFWL_ToolTip* CFWL_ToolTip::Create() { - return new CFWL_ToolTip; -} -FWL_ERR CFWL_ToolTip::Initialize(const CFWL_WidgetProperties* pProperties) { - if (m_pIface) - return FWL_ERR_Indefinite; - if (pProperties) { - *m_pProperties = *pProperties; - } - std::unique_ptr<IFWL_ToolTip> pToolTip(IFWL_ToolTip::Create( - m_pProperties->MakeWidgetImpProperties(&m_tooltipData), nullptr)); - FWL_ERR ret = pToolTip->Initialize(); - if (ret != FWL_ERR_Succeeded) { - return ret; - } - m_pIface = pToolTip.release(); - CFWL_Widget::Initialize(); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ToolTip::GetCaption(CFX_WideString& wsCaption) { - wsCaption = m_tooltipData.m_wsCaption; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ToolTip::SetCaption(const CFX_WideStringC& wsCaption) { - m_tooltipData.m_wsCaption = wsCaption; - return FWL_ERR_Succeeded; -} -int32_t CFWL_ToolTip::GetInitialDelay() { - return m_tooltipData.m_nInitDelayTime; -} -int32_t CFWL_ToolTip::SetInitialDelay(int32_t nDelayTime) { - m_tooltipData.m_nInitDelayTime = nDelayTime; - return FWL_ERR_Succeeded; -} -int32_t CFWL_ToolTip::GetAutoPopDelay() { - return m_tooltipData.m_nAutoPopDelayTime; -} -int32_t CFWL_ToolTip::SetAutoPopDelay(int32_t nDelayTime) { - m_tooltipData.m_nAutoPopDelayTime = nDelayTime; - return FWL_ERR_Succeeded; -} -CFX_DIBitmap* CFWL_ToolTip::GetToolTipIcon() { - return m_tooltipData.m_pBitmap; -} -FWL_ERR CFWL_ToolTip::SetToolTipIcon(CFX_DIBitmap* pBitmap) { - m_tooltipData.m_pBitmap = pBitmap; - return FWL_ERR_Succeeded; -} -CFX_SizeF CFWL_ToolTip::GetToolTipIconSize() { - return m_tooltipData.m_fIconSize; -} -FWL_ERR CFWL_ToolTip::SetToolTipIconSize(CFX_SizeF fSize) { - m_tooltipData.m_fIconSize = fSize; - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_ToolTip::SetAnchor(const CFX_RectF& rtAnchor) { - return static_cast<IFWL_ToolTip*>(m_pIface)->SetAnchor(rtAnchor); -} -FWL_ERR CFWL_ToolTip::Show() { - return static_cast<IFWL_ToolTip*>(m_pIface)->Show(); -} -FWL_ERR CFWL_ToolTip::Hide() { - return static_cast<IFWL_ToolTip*>(m_pIface)->Hide(); -} -CFWL_ToolTip::CFWL_ToolTip() {} -CFWL_ToolTip::~CFWL_ToolTip() {} -CFWL_ToolTip::CFWL_ToolTipDP::CFWL_ToolTipDP() : m_pBitmap(NULL) { - m_wsCaption = L""; - m_nInitDelayTime = 500; - m_nAutoPopDelayTime = 50000; - m_fAnchor.Set(0.0, 0.0, 0.0, 0.0); -} -FWL_ERR CFWL_ToolTip::CFWL_ToolTipDP::GetCaption(IFWL_Widget* pWidget, - CFX_WideString& wsCaption) { - wsCaption = m_wsCaption; - return FWL_ERR_Succeeded; -} -int32_t CFWL_ToolTip::CFWL_ToolTipDP::GetInitialDelay(IFWL_Widget* pWidget) { - return m_nInitDelayTime; -} -int32_t CFWL_ToolTip::CFWL_ToolTipDP::GetAutoPopDelay(IFWL_Widget* pWidget) { - return m_nAutoPopDelayTime; -} -CFX_DIBitmap* CFWL_ToolTip::CFWL_ToolTipDP::GetToolTipIcon( - IFWL_Widget* pWidget) { - return m_pBitmap; -} -CFX_SizeF CFWL_ToolTip::CFWL_ToolTipDP::GetToolTipIconSize( - IFWL_Widget* pWidget) { - return m_fIconSize; -} -CFX_RectF CFWL_ToolTip::CFWL_ToolTipDP::GetAnchor() { - return m_fAnchor; -} diff --git a/xfa/src/fwl/lightwidget/widget.cpp b/xfa/src/fwl/lightwidget/widget.cpp deleted file mode 100644 index 58fb2a71d1..0000000000 --- a/xfa/src/fwl/lightwidget/widget.cpp +++ /dev/null @@ -1,318 +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/include/fwl/lightwidget/widget.h" - -#include "xfa/include/fwl/core/fwl_theme.h" -#include "xfa/include/fwl/core/fwl_thread.h" -#include "xfa/src/fde/tto/fde_textout.h" -#include "xfa/src/fwl/core/fwl_noteimp.h" -#include "xfa/src/fwl/core/fwl_noteimp.h" -#include "xfa/src/fwl/core/fwl_targetimp.h" -#include "xfa/src/fwl/core/fwl_widgetimp.h" -#include "xfa/src/fwl/core/fwl_widgetmgrimp.h" - -CFWL_WidgetImpProperties CFWL_WidgetProperties::MakeWidgetImpProperties( - IFWL_DataProvider* pDataProvider) const { - CFWL_WidgetImpProperties result; - result.m_ctmOnParent = m_ctmOnParent; - result.m_rtWidget = m_rtWidget; - result.m_dwStyles = m_dwStyles; - result.m_dwStyleExes = m_dwStyleExes; - result.m_dwStates = m_dwStates; - if (m_pParent) - result.m_pParent = m_pParent->GetWidget(); - if (m_pOwner) - result.m_pOwner = m_pOwner->GetWidget(); - result.m_pDataProvider = pDataProvider; - return result; -} -IFWL_Widget* CFWL_Widget::GetWidget() { - return m_pIface; -} -FWL_ERR CFWL_Widget::GetClassName(CFX_WideString& wsClass) const { - if (!m_pIface) - return FWL_ERR_Indefinite; - return m_pIface->GetClassName(wsClass); -} -FX_DWORD CFWL_Widget::GetClassID() const { - if (!m_pIface) - return 0; - return m_pIface->GetClassID(); -} -FX_BOOL CFWL_Widget::IsInstance(const CFX_WideStringC& wsClass) const { - if (!m_pIface) - return FALSE; - return m_pIface->IsInstance(wsClass); -} -static void* gs_pFWLWidget = (void*)FXBSTR_ID('l', 'i', 'g', 't'); -FWL_ERR CFWL_Widget::Initialize(const CFWL_WidgetProperties* pProperties) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return m_pIface->SetPrivateData(gs_pFWLWidget, this, NULL); -} -FWL_ERR CFWL_Widget::GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return m_pIface->GetWidgetRect(rect, bAutoSize); -} -FWL_ERR CFWL_Widget::GetGlobalRect(CFX_RectF& rect) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return m_pIface->GetGlobalRect(rect); -} -FWL_ERR CFWL_Widget::SetWidgetRect(const CFX_RectF& rect) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return m_pIface->SetWidgetRect(rect); -} -FWL_ERR CFWL_Widget::GetClientRect(CFX_RectF& rect) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return m_pIface->GetClientRect(rect); -} -CFWL_Widget* CFWL_Widget::GetParent() { - if (!m_pIface) - return NULL; - IFWL_Widget* parent = m_pIface->GetParent(); - if (parent) { - return static_cast<CFWL_Widget*>(parent->GetPrivateData(gs_pFWLWidget)); - } - return NULL; -} -FWL_ERR CFWL_Widget::SetParent(CFWL_Widget* pParent) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return m_pIface->SetParent(pParent ? pParent->GetWidget() : NULL); -} -CFWL_Widget* CFWL_Widget::GetOwner() { - if (!m_pIface) - return NULL; - return NULL; -} -FWL_ERR CFWL_Widget::SetOwner(CFWL_Widget* pOwner) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return FWL_ERR_Succeeded; -} -FX_DWORD CFWL_Widget::GetStyles() { - if (!m_pIface) - return 0; - return m_pIface->GetStyles(); -} -FWL_ERR CFWL_Widget::ModifyStyles(FX_DWORD dwStylesAdded, - FX_DWORD dwStylesRemoved) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return m_pIface->ModifyStyles(dwStylesAdded, dwStylesRemoved); -} -FX_DWORD CFWL_Widget::GetStylesEx() { - if (!m_pIface) - return 0; - return m_pIface->GetStylesEx(); -} -FWL_ERR CFWL_Widget::ModifyStylesEx(FX_DWORD dwStylesExAdded, - FX_DWORD dwStylesExRemoved) { - return m_pIface->ModifyStylesEx(dwStylesExAdded, dwStylesExRemoved); -} -FX_DWORD CFWL_Widget::GetStates() { - if (!m_pIface) - return FWL_ERR_Indefinite; - return m_pIface->GetStates(); -} -FWL_ERR CFWL_Widget::SetStates(FX_DWORD dwStates, FX_BOOL bSet) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return m_pIface->SetStates(dwStates, bSet); -} -FWL_ERR CFWL_Widget::SetPrivateData(void* module_id, - void* pData, - PD_CALLBACK_FREEDATA callback) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return m_pIface->SetPrivateData(module_id, pData, callback); -} -void* CFWL_Widget::GetPrivateData(void* module_id) { - if (!m_pIface) - return NULL; - return m_pIface->GetPrivateData(module_id); -} -FWL_ERR CFWL_Widget::Update() { - if (!m_pIface) - return FWL_ERR_Indefinite; - return m_pIface->Update(); -} -FWL_ERR CFWL_Widget::LockUpdate() { - if (!m_pIface) - return FWL_ERR_Indefinite; - return m_pIface->LockUpdate(); -} -FWL_ERR CFWL_Widget::UnlockUpdate() { - if (!m_pIface) - return FWL_ERR_Indefinite; - return m_pIface->UnlockUpdate(); -} -FX_DWORD CFWL_Widget::HitTest(FX_FLOAT fx, FX_FLOAT fy) { - if (!m_pIface) - return 0; - return m_pIface->HitTest(fx, fy); -} -FWL_ERR CFWL_Widget::TransformTo(CFWL_Widget* pWidget, - FX_FLOAT& fx, - FX_FLOAT& fy) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return m_pIface->TransformTo(pWidget ? pWidget->GetWidget() : NULL, fx, fy); -} -FWL_ERR CFWL_Widget::TransformTo(CFWL_Widget* pWidget, CFX_RectF& rt) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return m_pIface->TransformTo(pWidget ? pWidget->GetWidget() : NULL, rt); -} -FWL_ERR CFWL_Widget::GetMatrix(CFX_Matrix& matrix, FX_BOOL bGlobal) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return m_pIface->GetMatrix(matrix, bGlobal); -} -FWL_ERR CFWL_Widget::SetMatrix(const CFX_Matrix& matrix) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return m_pIface->SetMatrix(matrix); -} -FWL_ERR CFWL_Widget::DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - if (!m_pIface) - return FWL_ERR_Indefinite; - return m_pIface->DrawWidget(pGraphics, pMatrix); -} -IFWL_WidgetDelegate* CFWL_Widget::SetDelegate(IFWL_WidgetDelegate* pDelegate) { - if (!m_pIface) - return NULL; - m_pDelegate = m_pIface->SetDelegate(pDelegate); - return m_pDelegate; -} -CFWL_Widget::CFWL_Widget() - : m_pIface(NULL), m_pDelegate(NULL), m_pProperties(NULL) { - m_pProperties = new CFWL_WidgetProperties; - m_pWidgetMgr = static_cast<CFWL_WidgetMgr*>(FWL_GetWidgetMgr()); - FXSYS_assert(m_pWidgetMgr != NULL); -} -CFWL_Widget::~CFWL_Widget() { - delete m_pProperties; - if (m_pIface) { - m_pIface->Finalize(); - delete m_pIface; - } -} -FWL_ERR CFWL_Widget::Repaint(const CFX_RectF* pRect) { - if (!m_pIface) - return FWL_ERR_Indefinite; - CFX_RectF rect; - if (pRect) { - rect = *pRect; - } else { - m_pIface->GetWidgetRect(rect); - rect.left = rect.top = 0; - } - return m_pWidgetMgr->RepaintWidget(m_pIface, &rect); -} -FWL_ERR CFWL_Widget::SetFocus(FX_BOOL bFocus) { - if (!m_pIface) - return FWL_ERR_Indefinite; - IFWL_NoteThread* pThread = m_pIface->GetOwnerThread(); - if (!pThread) - return FWL_ERR_Indefinite; - IFWL_NoteDriver* pDriver = pThread->GetNoteDriver(); - if (!pDriver) - return FWL_ERR_Indefinite; - if (bFocus) { - pDriver->SetFocus(m_pIface); - } else { - if (pDriver->GetFocus() == m_pIface) { - pDriver->SetFocus(NULL); - } - } - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_Widget::SetGrab(FX_BOOL bSet) { - if (!m_pIface) - return FWL_ERR_Indefinite; - IFWL_NoteThread* pThread = m_pIface->GetOwnerThread(); - if (!pThread) - return FWL_ERR_Indefinite; - IFWL_NoteDriver* pDriver = pThread->GetNoteDriver(); - if (!pDriver) - return FWL_ERR_Indefinite; - pDriver->SetGrab(m_pIface, bSet); - return FWL_ERR_Succeeded; -} -void CFWL_Widget::RegisterEventTarget(CFWL_Widget* pEventSource, - FX_DWORD dwFilter) { - if (!m_pIface) - return; - IFWL_NoteThread* pThread = m_pIface->GetOwnerThread(); - if (!pThread) - return; - IFWL_NoteDriver* pNoteDriver = pThread->GetNoteDriver(); - if (!pNoteDriver) - return; - IFWL_Widget* pEventSourceImp = - !pEventSource ? NULL : pEventSource->GetWidget(); - pNoteDriver->RegisterEventTarget(GetWidget(), pEventSourceImp, dwFilter); -} -void CFWL_Widget::DispatchEvent(CFWL_Event* pEvent) { - if (!m_pIface) - return; - if (m_pIface->GetOuter()) { - return; - } - IFWL_NoteThread* pThread = m_pIface->GetOwnerThread(); - if (!pThread) - return; - IFWL_NoteDriver* pNoteDriver = pThread->GetNoteDriver(); - if (!pNoteDriver) - return; - pNoteDriver->SendNote(pEvent); -} -#define FWL_WGT_CalcHeight 2048 -#define FWL_WGT_CalcWidth 2048 -#define FWL_WGT_CalcMultiLineDefWidth 120.0f -CFX_SizeF CFWL_Widget::CalcTextSize(const CFX_WideString& wsText, - FX_BOOL bMultiLine, - int32_t iLineWidth) { - if (!m_pIface) - return CFX_SizeF(); - IFWL_ThemeProvider* pTheme = m_pIface->GetThemeProvider(); - if (!pTheme) - return CFX_SizeF(); - - CFWL_ThemeText calPart; - calPart.m_pWidget = m_pIface; - calPart.m_wsText = wsText; - calPart.m_dwTTOStyles = - bMultiLine ? FDE_TTOSTYLE_LineWrap : FDE_TTOSTYLE_SingleLine; - calPart.m_iTTOAlign = FDE_TTOALIGNMENT_TopLeft; - CFX_RectF rect; - FX_FLOAT fWidth = bMultiLine - ? (iLineWidth > 0 ? (FX_FLOAT)iLineWidth - : FWL_WGT_CalcMultiLineDefWidth) - : FWL_WGT_CalcWidth; - rect.Set(0, 0, fWidth, FWL_WGT_CalcHeight); - pTheme->CalcTextRect(&calPart, rect); - return CFX_SizeF(rect.width, rect.height); -} -CFWL_WidgetDelegate::CFWL_WidgetDelegate() {} -CFWL_WidgetDelegate::~CFWL_WidgetDelegate() {} -int32_t CFWL_WidgetDelegate::OnProcessMessage(CFWL_Message* pMessage) { - return 1; -} -FWL_ERR CFWL_WidgetDelegate::OnProcessEvent(CFWL_Event* pEvent) { - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_WidgetDelegate::OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - return FWL_ERR_Succeeded; -} diff --git a/xfa/src/fwl/theme/barcodetp.cpp b/xfa/src/fwl/theme/barcodetp.cpp deleted file mode 100644 index 477ce99d9b..0000000000 --- a/xfa/src/fwl/theme/barcodetp.cpp +++ /dev/null @@ -1,42 +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/include/fwl/theme/barcodetp.h" - -#include "xfa/include/fwl/basewidget/fwl_barcode.h" -#include "xfa/include/fwl/core/fwl_theme.h" -#include "xfa/include/fwl/core/fwl_widget.h" - -CFWL_BarcodeTP::CFWL_BarcodeTP() {} -CFWL_BarcodeTP::~CFWL_BarcodeTP() {} - -FX_BOOL CFWL_BarcodeTP::IsValidWidget(IFWL_Widget* pWidget) { - if (!pWidget) - return FALSE; - return pWidget->GetClassID() == FWL_CLASSHASH_Barcode; -} -FX_BOOL CFWL_BarcodeTP::DrawBackground(CFWL_ThemeBackground* pParams) { - if (!pParams) - return FALSE; - switch (pParams->m_iPart) { - case FWL_PART_BCD_Border: { - DrawBorder(pParams->m_pGraphics, &pParams->m_rtPart, &pParams->m_matrix); - break; - } - case FWL_PART_BCD_Edge: { - DrawEdge(pParams->m_pGraphics, pParams->m_pWidget->GetStyles(), - &pParams->m_rtPart, &pParams->m_matrix); - break; - } - case FWL_PART_BCD_Background: { - FillBackground(pParams->m_pGraphics, &pParams->m_rtPart, - &pParams->m_matrix); - break; - } - default: {} - } - return TRUE; -} diff --git a/xfa/src/fwl/theme/carettp.cpp b/xfa/src/fwl/theme/carettp.cpp deleted file mode 100644 index 88b01d9f3d..0000000000 --- a/xfa/src/fwl/theme/carettp.cpp +++ /dev/null @@ -1,49 +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/include/fwl/theme/carettp.h" - -#include "xfa/include/fwl/basewidget/fwl_caret.h" -#include "xfa/include/fwl/core/fwl_widget.h" - -CFWL_CaretTP::CFWL_CaretTP() {} -CFWL_CaretTP::~CFWL_CaretTP() {} - -FX_BOOL CFWL_CaretTP::IsValidWidget(IFWL_Widget* pWidget) { - if (!pWidget) - return FALSE; - return pWidget->GetClassID() == FWL_CLASSHASH_Caret; -} -FX_BOOL CFWL_CaretTP::DrawBackground(CFWL_ThemeBackground* pParams) { - if (!pParams) - return FALSE; - switch (pParams->m_iPart) { - case FWL_PART_CAT_Background: { - if (!(pParams->m_dwStates & FWL_PARTSTATE_CAT_HightLight)) { - return TRUE; - } - DrawCaretBK(pParams->m_pGraphics, pParams->m_dwStates, - &(pParams->m_rtPart), (CFX_Color*)pParams->m_pData, - &(pParams->m_matrix)); - break; - } - } - return TRUE; -} -void CFWL_CaretTP::DrawCaretBK(CFX_Graphics* pGraphics, - FX_DWORD dwStates, - const CFX_RectF* pRect, - CFX_Color* crFill, - CFX_Matrix* pMatrix) { - CFX_Path path; - path.Create(); - CFX_Color crFilltemp; - crFill ? crFilltemp = *crFill : crFilltemp = ArgbEncode(255, 0, 0, 0); - CFX_RectF rect = *pRect; - path.AddRectangle(rect.left, rect.top, rect.width, rect.height); - pGraphics->SetFillColor(&crFilltemp); - pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); -} diff --git a/xfa/src/fwl/theme/checkboxtp.cpp b/xfa/src/fwl/theme/checkboxtp.cpp deleted file mode 100644 index ccad2bc733..0000000000 --- a/xfa/src/fwl/theme/checkboxtp.cpp +++ /dev/null @@ -1,532 +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/include/fwl/theme/checkboxtp.h" - -#include "xfa/include/fwl/basewidget/fwl_checkbox.h" -#include "xfa/include/fwl/core/fwl_widget.h" -#include "xfa/src/fde/tto/fde_textout.h" - -#define CHECKBOX_SIZE_SIGNMARGIN 3 -#define CHECKBOX_SIZE_SIGNBORDER 2 -#define CHECKBOX_SIZE_SIGNPATH 100 -#define CHECKBOX_COLOR_BOXLT1 (ArgbEncode(255, 172, 168, 153)) -#define CHECKBOX_COLOR_BOXLT2 (ArgbEncode(255, 113, 111, 100)) -#define CHECKBOX_COLOR_BOXRB1 (ArgbEncode(255, 241, 239, 226)) -#define CHECKBOX_COLOR_BOXRB2 (ArgbEncode(255, 255, 255, 255)) -#define CHECKBOX_FXGE_CoordinatesAdjust - -CFWL_CheckBoxTP::CFWL_CheckBoxTP() : m_pCheckPath(NULL) { - m_pThemeData = new CKBThemeData; - SetThemeData(0); -} -CFWL_CheckBoxTP::~CFWL_CheckBoxTP() { - if (m_pThemeData) { - delete m_pThemeData; - m_pThemeData = NULL; - } - if (m_pCheckPath) { - m_pCheckPath->Clear(); - delete m_pCheckPath; - m_pCheckPath = NULL; - } -} -FX_BOOL CFWL_CheckBoxTP::IsValidWidget(IFWL_Widget* pWidget) { - return pWidget && pWidget->GetClassID() == FWL_CLASSHASH_CheckBox; -} -FX_DWORD CFWL_CheckBoxTP::SetThemeID(IFWL_Widget* pWidget, - FX_DWORD dwThemeID, - FX_BOOL bChildren) { - if (m_pThemeData) { - SetThemeData(FWL_GetThemeColor(dwThemeID)); - } - return CFWL_WidgetTP::SetThemeID(pWidget, dwThemeID, bChildren); -} -FX_BOOL CFWL_CheckBoxTP::DrawText(CFWL_ThemeText* pParams) { - if (!m_pTextOut) - return FALSE; - m_pTextOut->SetTextColor((pParams->m_dwStates & FWL_PARTSTATE_CKB_Mask1) == - FWL_PARTSTATE_CKB_Disabled - ? FWLTHEME_CAPACITY_TextDisColor - : FWLTHEME_CAPACITY_TextColor); - return CFWL_WidgetTP::DrawText(pParams); -} -FX_BOOL CFWL_CheckBoxTP::DrawBackground(CFWL_ThemeBackground* pParams) { - if (!pParams) - return FALSE; - switch (pParams->m_iPart) { - case FWL_PART_CKB_Border: { - DrawBorder(pParams->m_pGraphics, &pParams->m_rtPart, &pParams->m_matrix); - break; - } - case FWL_PART_CKB_Edge: { - DrawEdge(pParams->m_pGraphics, pParams->m_pWidget->GetStyles(), - &pParams->m_rtPart, &pParams->m_matrix); - break; - } - case FWL_PART_CKB_Background: { - FillBackground(pParams->m_pGraphics, &pParams->m_rtPart, - &pParams->m_matrix); - if (pParams->m_dwStates & FWL_PARTSTATE_CKB_Focused) { - pParams->m_rtPart = *(CFX_RectF*)pParams->m_pData; - DrawFocus(pParams->m_pGraphics, &pParams->m_rtPart, &pParams->m_matrix); - } - break; - } - case FWL_PART_CKB_CheckBox: { - DrawBoxBk(pParams->m_pWidget, pParams->m_pGraphics, &pParams->m_rtPart, - pParams->m_dwStates, &pParams->m_matrix); - if (((pParams->m_dwStates & FWL_PARTSTATE_CKB_Mask2) == - FWL_PARTSTATE_CKB_Checked) | - ((pParams->m_dwStates & FWL_PARTSTATE_CKB_Mask2) == - FWL_PARTSTATE_CKB_Neutral)) { - DrawSign(pParams->m_pWidget, pParams->m_pGraphics, &pParams->m_rtPart, - pParams->m_dwStates, &pParams->m_matrix); - } - FX_BOOL bDisable = (pParams->m_dwStates & FWL_PARTSTATE_CKB_Mask1) == - FWL_PARTSTATE_CKB_Disabled; - DrawSignBorder(pParams->m_pWidget, pParams->m_pGraphics, - &pParams->m_rtPart, bDisable, &pParams->m_matrix); - break; - } - default: { return FALSE; } - } - return TRUE; -} -FWL_ERR CFWL_CheckBoxTP::Initialize() { - InitTTO(); - return CFWL_WidgetTP::Initialize(); -} -FWL_ERR CFWL_CheckBoxTP::Finalize() { - FinalizeTTO(); - return CFWL_WidgetTP::Finalize(); -} -void CFWL_CheckBoxTP::DrawBoxBk(IFWL_Widget* pWidget, - CFX_Graphics* pGraphics, - const CFX_RectF* pRect, - FX_DWORD dwStates, - CFX_Matrix* pMatrix) { - dwStates &= 0x03; - int32_t fillMode = FXFILL_WINDING; - FX_DWORD dwStyleEx = pWidget->GetStylesEx(); - dwStyleEx &= FWL_STYLEEXT_CKB_ShapeMask; - CFX_Path path; - path.Create(); - FX_FLOAT fRight = pRect->right(); - FX_FLOAT fBottom = pRect->bottom(); - FX_BOOL bClipSign = - (dwStates & FWL_PARTSTATE_CKB_Mask1) == FWL_PARTSTATE_CKB_Hovered; - if ((dwStyleEx == FWL_STYLEEXT_CKB_ShapeSolidSquare) || - (dwStyleEx == FWL_STYLEEXT_CKB_ShapeSunkenSquare)) { - path.AddRectangle(pRect->left, pRect->top, pRect->width, pRect->height); - if (bClipSign) { - fillMode = FXFILL_ALTERNATE; - path.AddRectangle(pRect->left + CHECKBOX_SIZE_SIGNMARGIN, - pRect->top + CHECKBOX_SIZE_SIGNMARGIN, - pRect->width - CHECKBOX_SIZE_SIGNMARGIN * 2, - pRect->height - CHECKBOX_SIZE_SIGNMARGIN * 2); - } - } else { -#ifdef CHECKBOX_FXGE_CoordinatesAdjust - CFX_RectF rect(*pRect); - rect.Deflate(0, 0, 1, 1); - path.AddEllipse(rect); -#else - path.AddEllipse(*pRect); -#endif - if (bClipSign) { - fillMode = FXFILL_ALTERNATE; -#ifdef CHECKBOX_FXGE_CoordinatesAdjust - CFX_RectF rtClip(rect); -#else - CFX_RectF rtClip(*pRect); -#endif - rtClip.Deflate(CHECKBOX_SIZE_SIGNMARGIN - 1, - CHECKBOX_SIZE_SIGNMARGIN - 1); - path.AddEllipse(rtClip); - } - } - int32_t iTheme = 1; - if ((dwStates & FWL_PARTSTATE_CKB_Mask1) == FWL_PARTSTATE_CKB_Hovered) { - iTheme = 2; - } else if ((dwStates & FWL_PARTSTATE_CKB_Mask1) == - FWL_PARTSTATE_CKB_Pressed) { - iTheme = 3; - } else if ((dwStates & FWL_PARTSTATE_CKB_Mask1) == - FWL_PARTSTATE_CKB_Disabled) { - iTheme = 4; - } - if ((dwStates & FWL_PARTSTATE_CKB_Mask2) == FWL_PARTSTATE_CKB_Checked) { - iTheme += 4; - } else if ((dwStates & FWL_PARTSTATE_CKB_Mask2) == - FWL_PARTSTATE_CKB_Neutral) { - iTheme += 8; - } - DrawAxialShading(pGraphics, pRect->left - 1, pRect->top - 1, fRight, fBottom, - m_pThemeData->clrBoxBk[iTheme][0], - m_pThemeData->clrBoxBk[iTheme][1], &path, fillMode, pMatrix); -} -void CFWL_CheckBoxTP::DrawSign(IFWL_Widget* pWidget, - CFX_Graphics* pGraphics, - const CFX_RectF* pRtBox, - FX_DWORD dwStates, - CFX_Matrix* pMatrix) { - CFX_RectF rtSign(*pRtBox); - rtSign.Deflate(CHECKBOX_SIZE_SIGNMARGIN, CHECKBOX_SIZE_SIGNMARGIN); - FX_DWORD dwColor = m_pThemeData->clrSignCheck; - FX_BOOL bCheck = TRUE; - if (((dwStates & FWL_PARTSTATE_CKB_Mask1) == FWL_PARTSTATE_CKB_Disabled) && - ((dwStates & FWL_PARTSTATE_CKB_Mask2) == FWL_PARTSTATE_CKB_Checked)) { - dwColor = m_pThemeData->clrSignBorderDisable; - } else if ((dwStates & FWL_PARTSTATE_CKB_Mask2) == - FWL_PARTSTATE_CKB_Neutral) { - switch (dwStates & FWL_PARTSTATE_CKB_Mask1) { - case FWL_PARTSTATE_CKB_Normal: { - bCheck = FALSE; - dwColor = m_pThemeData->clrSignNeutralNormal; - break; - } - case FWL_PARTSTATE_CKB_Hovered: { - bCheck = FALSE; - dwColor = m_pThemeData->clrSignNeutralHover; - break; - } - case FWL_PARTSTATE_CKB_Pressed: { - bCheck = FALSE, dwColor = m_pThemeData->clrSignNeutralPressed; - break; - } - case FWL_PARTSTATE_CKB_Disabled: { - bCheck = FALSE, dwColor = m_pThemeData->clrSignBorderDisable; - break; - } - } - } - if (bCheck) { - FX_DWORD dwStyle = pWidget->GetStylesEx(); - switch (dwStyle & FWL_STYLEEXT_CKB_SignShapeMask) { - case FWL_STYLEEXT_CKB_SignShapeCheck: { - DrawSignCheck(pGraphics, &rtSign, dwColor, pMatrix); - break; - } - case FWL_STYLEEXT_CKB_SignShapeCircle: { - rtSign.Deflate(1, 1); - DrawSignCircle(pGraphics, &rtSign, dwColor, pMatrix); - break; - } - case FWL_STYLEEXT_CKB_SignShapeCross: { - DrawSignCross(pGraphics, &rtSign, dwColor, pMatrix); - break; - } - case FWL_STYLEEXT_CKB_SignShapeDiamond: { - DrawSignDiamond(pGraphics, &rtSign, dwColor, pMatrix); - break; - } - case FWL_STYLEEXT_CKB_SignShapeSquare: { - DrawSignSquare(pGraphics, &rtSign, dwColor, pMatrix); - break; - } - case FWL_STYLEEXT_CKB_SignShapeStar: { - DrawSignStar(pGraphics, &rtSign, dwColor, pMatrix); - break; - } - } - } else { - FillSoildRect(pGraphics, ArgbEncode(255, 33, 161, 33), &rtSign, pMatrix); - } -} -void CFWL_CheckBoxTP::DrawSignNeutral(CFX_Graphics* pGraphics, - const CFX_RectF* pRtSign, - CFX_Matrix* pMatrix) { - ((CFX_RectF*)pRtSign)->Inflate(-3, -3); - FillSoildRect(pGraphics, m_pThemeData->clrSignNeutral, pRtSign, pMatrix); -} -void CFWL_CheckBoxTP::DrawSignCheck(CFX_Graphics* pGraphics, - const CFX_RectF* pRtSign, - FX_ARGB argbFill, - CFX_Matrix* pMatrix) { - if (!m_pCheckPath) { - initCheckPath(pRtSign->width); - } - CFX_Matrix mt; - mt.SetIdentity(); - mt.Translate(pRtSign->left, pRtSign->top); - mt.Concat(*pMatrix); - CFX_Color crFill(argbFill); - pGraphics->SaveGraphState(); - pGraphics->SetFillColor(&crFill); - pGraphics->FillPath(m_pCheckPath, FXFILL_WINDING, &mt); - pGraphics->RestoreGraphState(); -} -void CFWL_CheckBoxTP::DrawSignCircle(CFX_Graphics* pGraphics, - const CFX_RectF* pRtSign, - FX_ARGB argbFill, - CFX_Matrix* pMatrix) { - CFX_Path path; - path.Create(); - path.AddEllipse(*pRtSign); - CFX_Color crFill(argbFill); - pGraphics->SaveGraphState(); - pGraphics->SetFillColor(&crFill); - pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); - pGraphics->RestoreGraphState(); -} -void CFWL_CheckBoxTP::DrawSignCross(CFX_Graphics* pGraphics, - const CFX_RectF* pRtSign, - FX_ARGB argbFill, - CFX_Matrix* pMatrix) { - CFX_Path path; - path.Create(); - FX_FLOAT fRight = pRtSign->right(); - FX_FLOAT fBottom = pRtSign->bottom(); - path.AddLine(pRtSign->left, pRtSign->top, fRight, fBottom); - path.AddLine(pRtSign->left, fBottom, fRight, pRtSign->top); - CFX_Color crFill(argbFill); - pGraphics->SaveGraphState(); - pGraphics->SetStrokeColor(&crFill); - pGraphics->SetLineWidth(1.0f); - pGraphics->StrokePath(&path, pMatrix); - pGraphics->RestoreGraphState(); -} -void CFWL_CheckBoxTP::DrawSignDiamond(CFX_Graphics* pGraphics, - const CFX_RectF* pRtSign, - FX_ARGB argbFill, - CFX_Matrix* pMatrix) { - CFX_Path path; - path.Create(); - FX_FLOAT fWidth = pRtSign->width; - FX_FLOAT fHeight = pRtSign->height; - FX_FLOAT fBottom = pRtSign->bottom(); - path.MoveTo(pRtSign->left + fWidth / 2, pRtSign->top); - path.LineTo(pRtSign->left, pRtSign->top + fHeight / 2); - path.LineTo(pRtSign->left + fWidth / 2, fBottom); - path.LineTo(pRtSign->right(), pRtSign->top + fHeight / 2); - path.LineTo(pRtSign->left + fWidth / 2, pRtSign->top); - CFX_Color crFill(argbFill); - pGraphics->SaveGraphState(); - pGraphics->SetFillColor(&crFill); - pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); - pGraphics->RestoreGraphState(); -} -void CFWL_CheckBoxTP::DrawSignSquare(CFX_Graphics* pGraphics, - const CFX_RectF* pRtSign, - FX_ARGB argbFill, - CFX_Matrix* pMatrix) { - CFX_Path path; - path.Create(); - path.AddRectangle(pRtSign->left, pRtSign->top, pRtSign->width, - pRtSign->height); - CFX_Color crFill(argbFill); - pGraphics->SaveGraphState(); - pGraphics->SetFillColor(&crFill); - pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); - pGraphics->RestoreGraphState(); -} -void CFWL_CheckBoxTP::DrawSignStar(CFX_Graphics* pGraphics, - const CFX_RectF* pRtSign, - FX_ARGB argbFill, - CFX_Matrix* pMatrix) { - CFX_Path path; - path.Create(); - FX_FLOAT fBottom = pRtSign->bottom(); - FX_FLOAT fRadius = - (pRtSign->top - fBottom) / (1 + (FX_FLOAT)cos(FX_PI / 5.0f)); - CFX_PointF ptCenter((pRtSign->left + pRtSign->right()) / 2.0f, - (pRtSign->top + fBottom) / 2.0f); - FX_FLOAT px[5], py[5]; - FX_FLOAT fAngel = FX_PI / 10.0f; - for (int32_t i = 0; i < 5; i++) { - px[i] = ptCenter.x + fRadius * (FX_FLOAT)cos(fAngel); - py[i] = ptCenter.y + fRadius * (FX_FLOAT)sin(fAngel); - fAngel += FX_PI * 2 / 5.0f; - } - path.MoveTo(px[0], py[0]); - int32_t nNext = 0; - for (int32_t j = 0; j < 5; j++) { - nNext += 2; - if (nNext >= 5) { - nNext -= 5; - } - path.LineTo(px[nNext], py[nNext]); - } - CFX_Color crFill(argbFill); - pGraphics->SaveGraphState(); - pGraphics->SetFillColor(&crFill); - pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); - pGraphics->RestoreGraphState(); -} -void CFWL_CheckBoxTP::DrawSignBorder(IFWL_Widget* pWidget, - CFX_Graphics* pGraphics, - const CFX_RectF* pRtBox, - FX_BOOL bDisable, - CFX_Matrix* pMatrix) { - switch (pWidget->GetStylesEx() & FWL_STYLEEXT_CKB_ShapeMask) { - case FWL_STYLEEXT_CKB_ShapeSolidSquare: { - DrawAnnulusRect(pGraphics, bDisable ? m_pThemeData->clrSignBorderDisable - : m_pThemeData->clrSignBorderNormal, - pRtBox, 1, pMatrix); - break; - } - case FWL_STYLEEXT_CKB_ShapeSunkenSquare: { - Draw3DRect(pGraphics, FWLTHEME_EDGE_Sunken, CHECKBOX_SIZE_SIGNBORDER, - pRtBox, CHECKBOX_COLOR_BOXLT1, CHECKBOX_COLOR_BOXLT2, - CHECKBOX_COLOR_BOXRB1, CHECKBOX_COLOR_BOXRB2, pMatrix); - break; - } - case FWL_STYLEEXT_CKB_ShapeSolidCircle: { - DrawAnnulusCircle(pGraphics, bDisable ? m_pThemeData->clrSignBorderDisable - : m_pThemeData->clrSignBorderNormal, - pRtBox, 1, pMatrix); - break; - } - case FWL_STYLEEXT_CKB_ShapeSunkenCircle: { - Draw3DCircle(pGraphics, FWLTHEME_EDGE_Sunken, CHECKBOX_SIZE_SIGNBORDER, - pRtBox, CHECKBOX_COLOR_BOXLT1, CHECKBOX_COLOR_BOXLT2, - CHECKBOX_COLOR_BOXRB1, CHECKBOX_COLOR_BOXRB2, pMatrix); - break; - } - } -} -void CFWL_CheckBoxTP::SetThemeData(FX_DWORD dwID) { - FX_DWORD* pData = (FX_DWORD*)&m_pThemeData->clrBoxBk; - if (dwID) { - *pData++ = 0, *pData++ = 0, *pData++ = ArgbEncode(255, 220, 220, 215), - *pData++ = ArgbEncode(255, 255, 255, 255), - *pData++ = ArgbEncode(255, 255, 240, 207), - *pData++ = ArgbEncode(255, 248, 179, 48), - *pData++ = ArgbEncode(255, 176, 176, 167), - *pData++ = ArgbEncode(255, 241, 239, 239), - *pData++ = ArgbEncode(255, 255, 255, 255), - *pData++ = ArgbEncode(255, 255, 255, 255), - *pData++ = ArgbEncode(255, 220, 220, 215), - *pData++ = ArgbEncode(255, 255, 255, 255), - *pData++ = ArgbEncode(255, 255, 240, 207), - *pData++ = ArgbEncode(255, 248, 179, 48), - *pData++ = ArgbEncode(255, 176, 176, 167), - *pData++ = ArgbEncode(255, 241, 239, 239), - *pData++ = ArgbEncode(255, 255, 255, 255), - *pData++ = ArgbEncode(255, 255, 255, 255), - *pData++ = ArgbEncode(255, 220, 220, 215), - *pData++ = ArgbEncode(255, 255, 255, 255), - *pData++ = ArgbEncode(255, 255, 240, 207), - *pData++ = ArgbEncode(255, 248, 179, 48), - *pData++ = ArgbEncode(255, 176, 176, 167), - *pData++ = ArgbEncode(255, 241, 239, 239), - *pData++ = ArgbEncode(255, 255, 255, 255), - *pData++ = ArgbEncode(255, 255, 255, 255); - m_pThemeData->clrSignBorderNormal = ArgbEncode(255, 154, 167, 114); - m_pThemeData->clrSignBorderDisable = ArgbEncode(255, 202, 200, 187); - m_pThemeData->clrSignCheck = ArgbEncode(255, 164, 180, 138); - m_pThemeData->clrSignNeutral = ArgbEncode(2255, 28, 134, 26); - m_pThemeData->clrSignNeutralNormal = ArgbEncode(255, 114, 192, 113); - m_pThemeData->clrSignNeutralHover = ArgbEncode(255, 33, 161, 33); - m_pThemeData->clrSignNeutralPressed = ArgbEncode(255, 28, 134, 26); - } else { - *pData++ = 0, *pData++ = 0, *pData++ = ArgbEncode(255, 220, 220, 215), - *pData++ = ArgbEncode(255, 255, 255, 255), - *pData++ = ArgbEncode(255, 255, 240, 207), - *pData++ = ArgbEncode(255, 248, 179, 48), - *pData++ = ArgbEncode(255, 176, 176, 167), - *pData++ = ArgbEncode(255, 241, 239, 239), - *pData++ = ArgbEncode(255, 255, 255, 255), - *pData++ = ArgbEncode(255, 255, 255, 255), - *pData++ = ArgbEncode(255, 220, 220, 215), - *pData++ = ArgbEncode(255, 255, 255, 255), - *pData++ = ArgbEncode(255, 255, 240, 207), - *pData++ = ArgbEncode(255, 248, 179, 48), - *pData++ = ArgbEncode(255, 176, 176, 167), - *pData++ = ArgbEncode(255, 241, 239, 239), - *pData++ = ArgbEncode(255, 255, 255, 255), - *pData++ = ArgbEncode(255, 255, 255, 255), - *pData++ = ArgbEncode(255, 220, 220, 215), - *pData++ = ArgbEncode(255, 255, 255, 255), - *pData++ = ArgbEncode(255, 255, 240, 207), - *pData++ = ArgbEncode(255, 248, 179, 48), - *pData++ = ArgbEncode(255, 176, 176, 167), - *pData++ = ArgbEncode(255, 241, 239, 239), - *pData++ = ArgbEncode(255, 255, 255, 255), - *pData++ = ArgbEncode(255, 255, 255, 255); - m_pThemeData->clrSignBorderNormal = ArgbEncode(255, 28, 81, 128); - m_pThemeData->clrSignBorderDisable = ArgbEncode(255, 202, 200, 187); - m_pThemeData->clrSignCheck = ArgbEncode(255, 28, 81, 128); - m_pThemeData->clrSignNeutral = ArgbEncode(255, 28, 134, 26); - m_pThemeData->clrSignNeutralNormal = ArgbEncode(255, 114, 192, 113); - m_pThemeData->clrSignNeutralHover = ArgbEncode(255, 33, 161, 33); - m_pThemeData->clrSignNeutralPressed = ArgbEncode(255, 28, 134, 26); - } -} -void CFWL_CheckBoxTP::initCheckPath(FX_FLOAT fCheckLen) { - if (!m_pCheckPath) { - m_pCheckPath = new CFX_Path; - m_pCheckPath->Create(); - FX_FLOAT fWidth = CHECKBOX_SIZE_SIGNPATH; - FX_FLOAT fHeight = -CHECKBOX_SIZE_SIGNPATH; - FX_FLOAT fBottom = CHECKBOX_SIZE_SIGNPATH; - CFX_PointF pt1(fWidth / 15.0f, fBottom + fHeight * 2 / 5.0f); - CFX_PointF pt2(fWidth / 4.5f, fBottom + fHeight / 16.0f); - CFX_PointF pt3(fWidth / 3.0f, fBottom); - CFX_PointF pt4(fWidth * 14 / 15.0f, fBottom + fHeight * 15 / 16.0f); - CFX_PointF pt5(fWidth / 3.6f, fBottom + fHeight / 3.5f); - CFX_PointF pt12(fWidth / 7.0f, fBottom + fHeight * 2 / 7.0f); - CFX_PointF pt21(fWidth / 5.0f, fBottom + fHeight / 5.0f); - CFX_PointF pt23(fWidth / 4.4f, fBottom + fHeight * 0 / 16.0f); - CFX_PointF pt32(fWidth / 4.0f, fBottom); - CFX_PointF pt34(fWidth * (1 / 7.0f + 7 / 15.0f), - fBottom + fHeight * 4 / 5.0f); - CFX_PointF pt43(fWidth * (1 / 7.0f + 7 / 15.0f), - fBottom + fHeight * 4 / 5.0f); - CFX_PointF pt45(fWidth * 7 / 15.0f, fBottom + fHeight * 8 / 7.0f); - CFX_PointF pt54(fWidth / 3.4f, fBottom + fHeight / 3.5f); - CFX_PointF pt51(fWidth / 3.6f, fBottom + fHeight / 4.0f); - CFX_PointF pt15(fWidth / 3.5f, fBottom + fHeight * 3.5f / 5.0f); - m_pCheckPath->MoveTo(pt1.x, pt1.y); - FX_FLOAT px1 = pt12.x - pt1.x; - FX_FLOAT py1 = pt12.y - pt1.y; - FX_FLOAT px2 = pt21.x - pt2.x; - FX_FLOAT py2 = pt21.y - pt2.y; - m_pCheckPath->BezierTo(pt1.x + px1 * FWLTHEME_BEZIER, - pt1.y + py1 * FWLTHEME_BEZIER, - pt2.x + px2 * FWLTHEME_BEZIER, - pt2.y + py2 * FWLTHEME_BEZIER, pt2.x, pt2.y); - px1 = pt23.x - pt2.x; - py1 = pt23.y - pt2.y; - px2 = pt32.x - pt3.x; - py2 = pt32.y - pt3.y; - m_pCheckPath->BezierTo(pt2.x + px1 * FWLTHEME_BEZIER, - pt2.y + py1 * FWLTHEME_BEZIER, - pt3.x + px2 * FWLTHEME_BEZIER, - pt3.y + py2 * FWLTHEME_BEZIER, pt3.x, pt3.y); - px1 = pt34.x - pt3.x; - py1 = pt34.y - pt3.y; - px2 = pt43.x - pt4.x; - py2 = pt43.y - pt4.y; - m_pCheckPath->BezierTo(pt3.x + px1 * FWLTHEME_BEZIER, - pt3.y + py1 * FWLTHEME_BEZIER, - pt4.x + px2 * FWLTHEME_BEZIER, - pt4.y + py2 * FWLTHEME_BEZIER, pt4.x, pt4.y); - px1 = pt45.x - pt4.x; - py1 = pt45.y - pt4.y; - px2 = pt54.x - pt5.x; - py2 = pt54.y - pt5.y; - m_pCheckPath->BezierTo(pt4.x + px1 * FWLTHEME_BEZIER, - pt4.y + py1 * FWLTHEME_BEZIER, - pt5.x + px2 * FWLTHEME_BEZIER, - pt5.y + py2 * FWLTHEME_BEZIER, pt5.x, pt5.y); - px1 = pt51.x - pt5.x; - py1 = pt51.y - pt5.y; - px2 = pt15.x - pt1.x; - py2 = pt15.y - pt1.y; - m_pCheckPath->BezierTo(pt5.x + px1 * FWLTHEME_BEZIER, - pt5.y + py1 * FWLTHEME_BEZIER, - pt1.x + px2 * FWLTHEME_BEZIER, - pt1.y + py2 * FWLTHEME_BEZIER, pt1.x, pt1.y); - FX_FLOAT fScale = fCheckLen / CHECKBOX_SIZE_SIGNPATH; - CFX_Matrix mt; - mt.Set(1, 0, 0, 1, 0, 0); - mt.Scale(fScale, fScale); - CFX_PathData* pData = m_pCheckPath->GetPathData(); - pData->Transform(&mt); - } -} diff --git a/xfa/src/fwl/theme/comboboxtp.cpp b/xfa/src/fwl/theme/comboboxtp.cpp deleted file mode 100644 index 33be07d44c..0000000000 --- a/xfa/src/fwl/theme/comboboxtp.cpp +++ /dev/null @@ -1,156 +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/include/fwl/theme/comboboxtp.h" - -#include "xfa/include/fwl/basewidget/fwl_combobox.h" -#include "xfa/include/fwl/core/fwl_widget.h" - -#define FWLTHEME_CAPACITY_ComboFormHandler 8.0f - -CFWL_ComboBoxTP::CFWL_ComboBoxTP() { - m_dwThemeID = 0; -} -CFWL_ComboBoxTP::~CFWL_ComboBoxTP() {} -FX_BOOL CFWL_ComboBoxTP::IsValidWidget(IFWL_Widget* pWidget) { - if (!pWidget) - return FALSE; - return pWidget->GetClassID() == FWL_CLASSHASH_ComboBox; -} -FX_BOOL CFWL_ComboBoxTP::DrawBackground(CFWL_ThemeBackground* pParams) { - if (!pParams) - return FALSE; - switch (pParams->m_iPart) { - case FWL_PART_CMB_Border: { - DrawBorder(pParams->m_pGraphics, &pParams->m_rtPart, &pParams->m_matrix); - break; - } - case FWL_PART_CMB_Edge: { - DrawEdge(pParams->m_pGraphics, pParams->m_pWidget->GetStyles(), - &pParams->m_rtPart, &pParams->m_matrix); - break; - } - case FWL_PART_CMB_Background: { - CFX_Path path; - path.Create(); - CFX_RectF& rect = pParams->m_rtPart; - path.AddRectangle(rect.left, rect.top, rect.width, rect.height); - CFX_Color cr; - switch (pParams->m_dwStates) { - case FWL_PARTSTATE_CMB_Selected: - cr = FWLTHEME_COLOR_BKSelected; - break; - case FWL_PARTSTATE_CMB_Disabled: - cr = FWLTHEME_COLOR_EDGERB1; - break; - default: - cr = 0xFFFFFFFF; - } - pParams->m_pGraphics->SaveGraphState(); - pParams->m_pGraphics->SetFillColor(&cr); - pParams->m_pGraphics->FillPath(&path, FXFILL_WINDING, &pParams->m_matrix); - pParams->m_pGraphics->RestoreGraphState(); - break; - } - case FWL_PART_CMB_DropDownButton: { - DrawDropDownButton(pParams, pParams->m_dwStates, &pParams->m_matrix); - break; - } - case FWL_PART_CMB_StretcgHandler: { - DrawStrethHandler(pParams, 0, &pParams->m_matrix); - break; - } - default: { return FALSE; } - } - return TRUE; -} -void CFWL_ComboBoxTP::DrawStrethHandler(CFWL_ThemeBackground* pParams, - FX_DWORD dwStates, - CFX_Matrix* pMatrix) { - CFX_Path path; - path.Create(); - path.AddRectangle(pParams->m_rtPart.left, pParams->m_rtPart.top, - pParams->m_rtPart.width - 1, pParams->m_rtPart.height); - CFX_Color cr(ArgbEncode(0xff, 0xff, 0, 0)); - pParams->m_pGraphics->SetFillColor(&cr); - pParams->m_pGraphics->FillPath(&path, FXFILL_WINDING, &pParams->m_matrix); -} -void* CFWL_ComboBoxTP::GetCapacity(CFWL_ThemePart* pThemePart, - FX_DWORD dwCapacity) { - if (dwCapacity == FWL_WGTCAPACITY_CMB_ComboFormHandler) { - m_fValue = FWLTHEME_CAPACITY_ComboFormHandler; - return &m_fValue; - } - return CFWL_WidgetTP::GetCapacity(pThemePart, dwCapacity); -} -#ifdef THEME_XPSimilar -void CFWL_ComboBoxTP::DrawDropDownButton(CFWL_ThemeBackground* pParams, - FX_DWORD dwStates, - CFX_Matrix* pMatrix) { - FWLTHEME_STATE eState = FWLTHEME_STATE_Normal; - switch (dwStates) { - case FWL_PARTSTATE_CMB_Normal: { - eState = FWLTHEME_STATE_Normal; - break; - } - case FWL_PARTSTATE_CMB_Hovered: { - eState = FWLTHEME_STATE_Hover; - break; - } - case FWL_PARTSTATE_CMB_Pressed: { - eState = FWLTHEME_STATE_Pressed; - break; - } - case FWL_PARTSTATE_CMB_Disabled: { - eState = FWLTHEME_STATE_Disabale; - break; - } - default: {} - } - DrawArrowBtn(pParams->m_pGraphics, &pParams->m_rtPart, - FWLTHEME_DIRECTION_Down, eState, &pParams->m_matrix); -} -#else -void CFWL_ComboBoxTP::DrawDropDownButton(CFWL_ThemeBackground* pParams, - FX_DWORD dwStates, - CFX_Matrix* pMatrix) { - FX_BOOL bPressed = ((pParams->m_dwStates & FWL_CMBPARTSTATE_Pressed) == - FWL_CMBPARTSTATE_Pressed); - FX_FLOAT fWidth = bPressed ? 1.0f : 2.0f; - FWLTHEME_EDGE eType = bPressed ? FWLTHEME_EDGE_Flat : FWLTHEME_EDGE_Raised; - Draw3DRect(pParams->m_pGraphics, eType, fWidth, &pParams->m_rtPart, - FWLTHEME_COLOR_EDGELT1, FWLTHEME_COLOR_EDGELT2, - FWLTHEME_COLOR_EDGERB1, FWLTHEME_COLOR_EDGERB2, pMatrix); - CFX_Path path; - path.Create(); - path.AddRectangle(pParams->m_rtPart.left + fWidth, - pParams->m_rtPart.top + fWidth, - pParams->m_rtPart.width - 2 * fWidth, - pParams->m_rtPart.height - 2 * fWidth); - pParams->m_pGraphics->SaveGraphState(); - CFX_Color crFill(FWLTHEME_COLOR_Background); - pParams->m_pGraphics->SetFillColor(&crFill); - pParams->m_pGraphics->FillPath(&path, FXFILL_WINDING, &pParams->m_matrix); - pParams->m_pGraphics->RestoreGraphState(); - FX_ARGB argbFill = ArgbEncode(255, 77, 97, 133); - switch (pParams->m_dwStates & 0x03) { - case FWL_CMBPARTSTATE_Normal: { - } - case FWL_CMBPARTSTATE_Hovered: { - } - case FWL_CMBPARTSTATE_Pressed: { - argbFill = 0xFF000000; - break; - } - case FWL_CMBPARTSTATE_Disabled: { - argbFill = 0xFFF0F0F0; - break; - } - } - DrawArrow(pParams->m_pGraphics, &pParams->m_rtPart, FWLTHEME_DIRECTION_Down, - argbFill, bPressed, &pParams->m_matrix); -} -#endif diff --git a/xfa/src/fwl/theme/datetimepickertp.cpp b/xfa/src/fwl/theme/datetimepickertp.cpp deleted file mode 100644 index 5efe0b850e..0000000000 --- a/xfa/src/fwl/theme/datetimepickertp.cpp +++ /dev/null @@ -1,138 +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/include/fwl/theme/datetimepickertp.h" - -#include "xfa/include/fwl/basewidget/fwl_datetimepicker.h" - -CFWL_DateTimePickerTP::CFWL_DateTimePickerTP() { - m_pThemeData = new DTPThemeData; - initThemeData(); -} -CFWL_DateTimePickerTP::~CFWL_DateTimePickerTP() { - delete m_pThemeData; -} -FX_BOOL CFWL_DateTimePickerTP::IsValidWidget(IFWL_Widget* pWidget) { - if (!pWidget) - return FALSE; - return pWidget->GetClassID() == FWL_CLASSHASH_DateTimePicker; -} -FX_BOOL CFWL_DateTimePickerTP::DrawBackground(CFWL_ThemeBackground* pParams) { - if (!pParams) - return FALSE; - switch (pParams->m_iPart) { - case FWL_PART_DTP_Border: { - DrawBorder(pParams->m_pGraphics, &pParams->m_rtPart, &pParams->m_matrix); - break; - } - case FWL_PART_DTP_Edge: { - DrawEdge(pParams->m_pGraphics, pParams->m_pWidget->GetStyles(), - &pParams->m_rtPart, &pParams->m_matrix); - break; - } - case FWL_PART_DTP_DropDownButton: { - DrawDropDownButton(pParams, &pParams->m_matrix); - break; - } - default: {} - } - return TRUE; -} -#ifdef THEME_XPSimilar -void CFWL_DateTimePickerTP::DrawDropDownButton(CFWL_ThemeBackground* pParams, - CFX_Matrix* pMatrix) { - FX_DWORD dwStates = pParams->m_dwStates; - dwStates &= 0x03; - FWLTHEME_STATE eState = FWLTHEME_STATE_Normal; - switch (eState & dwStates) { - case FWL_PARTSTATE_DTP_Normal: { - eState = FWLTHEME_STATE_Normal; - break; - } - case FWL_PARTSTATE_DTP_Hovered: { - eState = FWLTHEME_STATE_Hover; - break; - } - case FWL_PARTSTATE_DTP_Pressed: { - eState = FWLTHEME_STATE_Pressed; - break; - } - case FWL_PARTSTATE_DTP_Disabled: { - eState = FWLTHEME_STATE_Disabale; - break; - } - default: {} - } - DrawArrowBtn(pParams->m_pGraphics, &pParams->m_rtPart, - FWLTHEME_DIRECTION_Down, eState, pMatrix); -} -#else -void CFWL_DateTimePickerTP::DrawDropDownButton(CFWL_ThemeBackground* pParams, - CFX_Matrix* pMatrix) { - FX_BOOL bPressed = ((pParams->m_dwStates & FWL_PARTSTATE_DTP_Pressed) == - FWL_PARTSTATE_DTP_Pressed); - FX_FLOAT fWidth = bPressed ? 1.0f : 2.0f; - FWLTHEME_EDGE eType = bPressed ? FWLTHEME_EDGE_Flat : FWLTHEME_EDGE_Raised; - Draw3DRect(pParams->m_pGraphics, eType, fWidth, &pParams->m_rtPart, - FWLTHEME_COLOR_EDGELT1, FWLTHEME_COLOR_EDGELT2, - FWLTHEME_COLOR_EDGERB1, FWLTHEME_COLOR_EDGERB2, pMatrix); - CFX_Path path; - path.Create(); - path.AddRectangle(pParams->m_rtPart.left + fWidth, - pParams->m_rtPart.top + fWidth, - pParams->m_rtPart.width - 2 * fWidth, - pParams->m_rtPart.height - 2 * fWidth); - pParams->m_pGraphics->SaveGraphState(); - CFX_Color crFill(FWLTHEME_COLOR_Background); - pParams->m_pGraphics->SetFillColor(&crFill); - pParams->m_pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); - pParams->m_pGraphics->RestoreGraphState(); - FX_ARGB argbFill = ArgbEncode(255, 77, 97, 133); - switch (pParams->m_dwStates & 0x03) { - case FWL_PARTSTATE_DTP_Normal: { - } - case FWL_PARTSTATE_DTP_Hovered: { - } - case FWL_PARTSTATE_DTP_Pressed: { - argbFill = 0xFF000000; - break; - } - case FWL_PARTSTATE_DTP_Disabled: { - argbFill = 0xFFF0F0F0; - break; - } - } - DrawArrow(pParams->m_pGraphics, &pParams->m_rtPart, FWLTHEME_DIRECTION_Down, - argbFill, bPressed, pMatrix); -} -#endif -void CFWL_DateTimePickerTP::initThemeData() { - FX_DWORD* pData = (FX_DWORD*)&m_pThemeData->BoxBkColor; - *pData++ = 0, *pData++ = 0, *pData++ = ArgbEncode(255, 220, 220, 215), - *pData++ = ArgbEncode(255, 255, 255, 255), - *pData++ = ArgbEncode(255, 255, 240, 207), - *pData++ = ArgbEncode(255, 248, 179, 48), - *pData++ = ArgbEncode(255, 176, 176, 167), - *pData++ = ArgbEncode(255, 241, 239, 239), - *pData++ = ArgbEncode(255, 255, 255, 255), - *pData++ = ArgbEncode(255, 255, 255, 255), - *pData++ = ArgbEncode(255, 220, 220, 215), - *pData++ = ArgbEncode(255, 255, 255, 255), - *pData++ = ArgbEncode(255, 255, 240, 207), - *pData++ = ArgbEncode(255, 248, 179, 48), - *pData++ = ArgbEncode(255, 176, 176, 167), - *pData++ = ArgbEncode(255, 241, 239, 239), - *pData++ = ArgbEncode(255, 255, 255, 255), - *pData++ = ArgbEncode(255, 255, 255, 255), - *pData++ = ArgbEncode(255, 220, 220, 215), - *pData++ = ArgbEncode(255, 255, 255, 255), - *pData++ = ArgbEncode(255, 255, 240, 207), - *pData++ = ArgbEncode(255, 248, 179, 48), - *pData++ = ArgbEncode(255, 176, 176, 167), - *pData++ = ArgbEncode(255, 241, 239, 239), - *pData++ = ArgbEncode(255, 255, 255, 255), - *pData++ = ArgbEncode(255, 255, 255, 255); -} diff --git a/xfa/src/fwl/theme/edittp.cpp b/xfa/src/fwl/theme/edittp.cpp deleted file mode 100644 index a206faffe8..0000000000 --- a/xfa/src/fwl/theme/edittp.cpp +++ /dev/null @@ -1,89 +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/include/fwl/theme/edittp.h" - -#include "xfa/include/fwl/basewidget/fwl_edit.h" -#include "xfa/include/fwl/core/fwl_widget.h" - -CFWL_EditTP::CFWL_EditTP() {} -CFWL_EditTP::~CFWL_EditTP() {} - -FX_BOOL CFWL_EditTP::IsValidWidget(IFWL_Widget* pWidget) { - if (!pWidget) - return FALSE; - return pWidget->GetClassID() == FWL_CLASSHASH_Edit; -} -FX_BOOL CFWL_EditTP::DrawBackground(CFWL_ThemeBackground* pParams) { - switch (pParams->m_iPart) { - case FWL_PART_EDT_Border: { - DrawBorder(pParams->m_pGraphics, &pParams->m_rtPart, &pParams->m_matrix); - break; - } - case FWL_PART_EDT_Edge: { - DrawEdge(pParams->m_pGraphics, pParams->m_pWidget->GetStyles(), - &pParams->m_rtPart, &pParams->m_matrix); - break; - } - case FWL_PART_EDT_Background: { - if (pParams->m_pPath) { - CFX_Graphics* pGraphics = pParams->m_pGraphics; - pGraphics->SaveGraphState(); - CFX_Color crSelected(FWL_GetThemeColor(m_dwThemeID) == 0 - ? FWLTHEME_COLOR_BKSelected - : FWLTHEME_COLOR_Green_BKSelected); - pGraphics->SetFillColor(&crSelected); - pGraphics->FillPath(pParams->m_pPath, FXFILL_WINDING, - &pParams->m_matrix); - pGraphics->RestoreGraphState(); - } else { - FX_BOOL bStatic = - pParams->m_dwData == FWL_PARTDATA_EDT_StaticBackground; - CFX_Path path; - path.Create(); - path.AddRectangle(pParams->m_rtPart.left, pParams->m_rtPart.top, - pParams->m_rtPart.width, pParams->m_rtPart.height); - CFX_Color cr(FWLTHEME_COLOR_Background); - if (!bStatic) { - if ((pParams->m_dwStates & FWL_PARTSTATE_EDT_Disable) == - FWL_PARTSTATE_EDT_Disable) { - cr.Set(FWLTHEME_COLOR_EDGERB1); - } else if ((pParams->m_dwStates & FWL_PARTSTATE_EDT_ReadOnly) == - FWL_PARTSTATE_EDT_ReadOnly) { - cr.Set(ArgbEncode(255, 236, 233, 216)); - } else { - cr.Set(0xFFFFFFFF); - } - } - pParams->m_pGraphics->SaveGraphState(); - pParams->m_pGraphics->SetFillColor(&cr); - pParams->m_pGraphics->FillPath(&path, FXFILL_WINDING, - &pParams->m_matrix); - pParams->m_pGraphics->RestoreGraphState(); - } - break; - } - case FWL_PART_EDT_CombTextLine: { - FX_ARGB cr = 0xFF000000; - FX_FLOAT fWidth = 1.0f; - CFX_Color crLine(cr); - pParams->m_pGraphics->SetStrokeColor(&crLine); - pParams->m_pGraphics->SetLineWidth(fWidth); - pParams->m_pGraphics->StrokePath(pParams->m_pPath, &pParams->m_matrix); - break; - } - default: { break; } - } - return TRUE; -} -FWL_ERR CFWL_EditTP::Initialize() { - InitTTO(); - return CFWL_WidgetTP::Initialize(); -} -FWL_ERR CFWL_EditTP::Finalize() { - FinalizeTTO(); - return CFWL_WidgetTP::Finalize(); -} diff --git a/xfa/src/fwl/theme/formtp.cpp b/xfa/src/fwl/theme/formtp.cpp deleted file mode 100644 index e8f3b6addc..0000000000 --- a/xfa/src/fwl/theme/formtp.cpp +++ /dev/null @@ -1,893 +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/include/fwl/theme/formtp.h" - -#include "xfa/include/fwl/core/fwl_form.h" -#include "xfa/include/fwl/core/fwl_widget.h" -#include "xfa/src/fde/tto/fde_textout.h" - -#define FWLTHEME_CAPACITY_CXFormBorder 3 -#define FWLTHEME_CAPACITY_CYFormBorder 3 -#define FWLTHEME_CAPACITY_CYNarrowCaption 18 -#define FWLTHEME_CAPACITY_CYCaption 29 -#define FWLTHEME_CAPACITY_BigIconSize 32 -#define FWLTHEME_CAPACITY_SmallIconSize 16 -#define FWLTHEME_CAPACITY_FormTextColor 0xFFFFFFFF -#define FWLTHEME_FORMBTN_Margin 5 -#define FWLTHEME_FORMBTN_Span 2 -#define FWLTHEME_FORMBTN_Size 21 - -CFWL_FormTP::CFWL_FormTP() : m_pActiveBitmap(NULL), m_pDeactivebitmap(NULL) { - m_pThemeData = new SBThemeData; - SetThemeData(0); - m_rtDisLBorder.Reset(); - m_rtDisRBorder.Reset(); - m_rtDisBBorder.Reset(); - m_rtDisCaption.Reset(); -} -CFWL_FormTP::~CFWL_FormTP() { - if (m_pThemeData) { - delete m_pThemeData; - m_pThemeData = NULL; - } -} -FWL_ERR CFWL_FormTP::Initialize() { - InitTTO(); - InitCaption(TRUE); - InitCaption(FALSE); - return CFWL_WidgetTP::Initialize(); -} -FWL_ERR CFWL_FormTP::Finalize() { - FinalizeTTO(); - if (m_pActiveBitmap) { - delete m_pActiveBitmap; - m_pActiveBitmap = NULL; - } - if (m_pDeactivebitmap) { - delete m_pDeactivebitmap; - m_pDeactivebitmap = NULL; - } - return CFWL_WidgetTP::Finalize(); -} -FX_BOOL CFWL_FormTP::IsValidWidget(IFWL_Widget* pWidget) { - if (!pWidget) - return FALSE; - FX_DWORD dwHash = pWidget->GetClassID(); - return dwHash == FWL_CLASSHASH_Form; -} -FX_DWORD CFWL_FormTP::SetThemeID(IFWL_Widget* pWidget, - FX_DWORD dwThemeID, - FX_BOOL bChildren) { - if (m_pThemeData) { - SetThemeData(FWL_GetThemeColor(dwThemeID)); - } - InitCaption(TRUE); - InitCaption(FALSE); - return CFWL_WidgetTP::SetThemeID(pWidget, dwThemeID, bChildren); -} -FX_BOOL CFWL_FormTP::DrawBackground(CFWL_ThemeBackground* pParams) { - if (!pParams) - return FALSE; - int32_t iActive = 0; - if (pParams->m_dwStates & FWL_PARTSTATE_FRM_Inactive) { - iActive = 1; - } - FWLTHEME_STATE eState = FWLTHEME_STATE_Normal; - switch (pParams->m_dwStates & 0x03) { - case FWL_PARTSTATE_FRM_Hover: { - eState = FWLTHEME_STATE_Hover; - break; - } - case FWL_PARTSTATE_FRM_Pressed: { - eState = FWLTHEME_STATE_Pressed; - break; - } - case FWL_PARTSTATE_FRM_Disabled: { - eState = FWLTHEME_STATE_Disabale; - break; - } - default: {} - } - switch (pParams->m_iPart) { - case FWL_PART_FRM_Border: { - DrawFormBorder(pParams->m_pGraphics, &pParams->m_rtPart, eState, - &pParams->m_matrix, iActive); - break; - } - case FWL_PART_FRM_Edge: { - DrawEdge(pParams->m_pGraphics, pParams->m_pWidget->GetStyles(), - &pParams->m_rtPart, &pParams->m_matrix); - break; - } - case FWL_PART_FRM_Background: { - FillBackground(pParams->m_pGraphics, &pParams->m_rtPart, - &pParams->m_matrix); - break; - } - case FWL_PART_FRM_Caption: { - DrawCaption(pParams->m_pGraphics, &pParams->m_rtPart, eState, - &pParams->m_matrix, iActive); - break; - } - case FWL_PART_FRM_NarrowCaption: { - DrawNarrowCaption(pParams->m_pGraphics, &pParams->m_rtPart, eState, - &pParams->m_matrix, iActive); - break; - } - case FWL_PART_FRM_CloseBox: { - DrawCloseBox(pParams->m_pGraphics, &pParams->m_rtPart, eState, - &pParams->m_matrix, iActive); - break; - } - case FWL_PART_FRM_MinimizeBox: { - DrawMinimizeBox(pParams->m_pGraphics, &pParams->m_rtPart, eState, - &pParams->m_matrix, iActive); - break; - } - case FWL_PART_FRM_MaximizeBox: { - DrawMaximizeBox(pParams->m_pGraphics, &pParams->m_rtPart, eState, - pParams->m_dwData, &pParams->m_matrix, iActive); - break; - } - case FWL_PART_FRM_Icon: { - DrawIconImage(pParams->m_pGraphics, pParams->m_pImage, &pParams->m_rtPart, - eState, &pParams->m_matrix, iActive); - break; - } - default: {} - } - return TRUE; -} -FX_BOOL CFWL_FormTP::DrawText(CFWL_ThemeText* pParams) { - if (!m_pTextOut) - return FALSE; - if (pParams->m_iPart == FWL_PART_FRM_Caption) { - m_pTextOut->SetTextColor(0xFFFFFFFF); - } else { - m_pTextOut->SetTextColor(0xFF000000); - } - return CFWL_WidgetTP::DrawText(pParams); -} -void* CFWL_FormTP::GetCapacity(CFWL_ThemePart* pThemePart, - FX_DWORD dwCapacity) { - FX_BOOL bDefPro = FALSE; - FX_BOOL bDwordVal = FALSE; - switch (dwCapacity) { - case FWL_WGTCAPACITY_CXBorder: { - m_fValue = FWLTHEME_CAPACITY_CXFormBorder; - break; - } - case FWL_WGTCAPACITY_CYBorder: { - m_fValue = FWLTHEME_CAPACITY_CYFormBorder; - break; - } - case FWL_WGTCAPACITY_FRM_CYCaption: { - m_fValue = FWLTHEME_CAPACITY_CYCaption; - break; - } - case FWL_WGTCAPACITY_FRM_CYNarrowCaption: { - m_fValue = FWLTHEME_CAPACITY_CYCaption; - break; - } - case FWL_WGTCAPACITY_TextColor: { - bDwordVal = TRUE; - m_dwValue = FWLTHEME_CAPACITY_FormTextColor; - break; - } - case FWL_WGTCAPACITY_FRM_BigIcon: { - m_fValue = FWLTHEME_CAPACITY_BigIconSize; - break; - } - case FWL_WGTCAPACITY_FRM_SmallIcon: { - m_fValue = FWLTHEME_CAPACITY_SmallIconSize; - break; - } - default: { bDefPro = TRUE; } - } - if (!bDefPro) { - if (bDwordVal) { - return &m_dwValue; - } - return &m_fValue; - } - return CFWL_WidgetTP::GetCapacity(pThemePart, dwCapacity); -} -FWL_ERR CFWL_FormTP::GetPartRect(CFWL_ThemePart* pThemePart, - CFX_RectF& rtPart) { - switch (pThemePart->m_iPart) { - case FWL_PART_FRM_CloseBox: { - CalCloseBox(pThemePart->m_pWidget, rtPart); - break; - } - case FWL_PART_FRM_MaximizeBox: { - CalMaxBox(pThemePart->m_pWidget, rtPart); - break; - } - case FWL_PART_FRM_MinimizeBox: { - CalMinBox(pThemePart->m_pWidget, rtPart); - break; - } - case FWL_PART_FRM_HeadText: { - CalCaption(pThemePart->m_pWidget, rtPart); - break; - } - case FWL_PART_FRM_Icon: { - CalIcon(pThemePart->m_pWidget, rtPart); - break; - } - default: {} - } - return FWL_ERR_Succeeded; -} -void CFWL_FormTP::CalCloseBox(IFWL_Widget* pWidget, CFX_RectF& rect) { - FX_DWORD dwStyles = pWidget->GetStyles(); - CFX_RectF rtWidget; - pWidget->GetWidgetRect(rtWidget); - rtWidget.Offset(-rtWidget.left, -rtWidget.top); - if (dwStyles & FWL_WGTSTYLE_CloseBox) { - rect.Set(rtWidget.left + FWLTHEME_FORMBTN_Margin + FWLTHEME_FORMBTN_Span, - rtWidget.top + FWLTHEME_FORMBTN_Margin, FWLTHEME_FORMBTN_Size, - FWLTHEME_FORMBTN_Size); - } else { - rect.Set(rtWidget.left + FWLTHEME_FORMBTN_Margin + FWLTHEME_FORMBTN_Span, - rtWidget.top + FWLTHEME_FORMBTN_Margin, 0, 0); - } -} -void CFWL_FormTP::CalMaxBox(IFWL_Widget* pWidget, CFX_RectF& rect) { - FX_DWORD dwStyles = pWidget->GetStyles(); - CFX_RectF rtWidget; - pWidget->GetWidgetRect(rtWidget); - rtWidget.Offset(-rtWidget.left, -rtWidget.top); - if (dwStyles & FWL_WGTSTYLE_MaximizeBox) { - rect.Set(rtWidget.left + FWLTHEME_FORMBTN_Margin + FWLTHEME_FORMBTN_Size + - FWLTHEME_FORMBTN_Span * 2, - rtWidget.top + FWLTHEME_FORMBTN_Margin, FWLTHEME_FORMBTN_Size, - FWLTHEME_FORMBTN_Size); - } else { - rect.Set(rtWidget.left + FWLTHEME_FORMBTN_Margin + FWLTHEME_FORMBTN_Size + - FWLTHEME_FORMBTN_Span * 2, - rtWidget.top + FWLTHEME_FORMBTN_Margin, 0, 0); - } -} -void CFWL_FormTP::CalMinBox(IFWL_Widget* pWidget, CFX_RectF& rect) { - FX_DWORD dwStyles = pWidget->GetStyles(); - CFX_RectF rtWidget; - pWidget->GetWidgetRect(rtWidget); - rtWidget.Offset(-rtWidget.left, -rtWidget.top); - if (dwStyles & FWL_WGTSTYLE_MinimizeBox) { - rect.Set(rtWidget.left + FWLTHEME_FORMBTN_Margin + - FWLTHEME_FORMBTN_Size * 2 + FWLTHEME_FORMBTN_Span * 3, - rtWidget.top + FWLTHEME_FORMBTN_Margin, FWLTHEME_FORMBTN_Size, - FWLTHEME_FORMBTN_Size); - } else { - rect.Set(rtWidget.left + FWLTHEME_FORMBTN_Margin + - FWLTHEME_FORMBTN_Size * 2 + FWLTHEME_FORMBTN_Span * 3, - rtWidget.top + FWLTHEME_FORMBTN_Margin, 0, 0); - } -} -void CFWL_FormTP::CalCaption(IFWL_Widget* pWidget, CFX_RectF& rect) { - CFX_RectF rtWidget; - pWidget->GetWidgetRect(rtWidget); - rtWidget.Offset(-rtWidget.left, -rtWidget.top); - rect.Set(rtWidget.left + FWLTHEME_FORMBTN_Margin, - rtWidget.top + FWLTHEME_FORMBTN_Margin - 2, - rtWidget.width - FWLTHEME_FORMBTN_Margin * 2, - FWLTHEME_FORMBTN_Size + 2 * FWLTHEME_FORMBTN_Margin + 4); -} -void CFWL_FormTP::CalIcon(IFWL_Widget* pWidget, CFX_RectF& rect) {} -void CFWL_FormTP::DrawFormBorder(CFX_Graphics* pGraphics, - const CFX_RectF* pRect, - FWLTHEME_STATE eState, - CFX_Matrix* pMatrix, - int32_t iActive) { - CFX_RectF rt; - rt.Set(pRect->left, pRect->top, 1, pRect->height); - FX_FLOAT fBottom, fRight; - fBottom = pRect->bottom(); - fRight = pRect->right(); - CFX_Path path; - path.Create(); - CFX_Color clrLine; - path.Clear(); - path.MoveTo(pRect->left, pRect->top); - path.LineTo(pRect->left, fBottom - 1); - path.LineTo(fRight - 1, fBottom - 1); - path.LineTo(fRight - 1, pRect->top); - clrLine = m_pThemeData->clrFormBorder[iActive][2]; - pGraphics->SetStrokeColor(&clrLine); - pGraphics->StrokePath(&path, pMatrix); - path.Clear(); - path.MoveTo(pRect->left + 1, pRect->top); - path.LineTo(pRect->left + 1, fBottom - 2); - path.LineTo(fRight - 2, fBottom - 2); - path.LineTo(fRight - 2, pRect->top); - clrLine = m_pThemeData->clrFormBorder[iActive][1]; - pGraphics->SetStrokeColor(&clrLine); - pGraphics->StrokePath(&path, pMatrix); - path.Clear(); - path.MoveTo(pRect->left + 2, pRect->top); - path.LineTo(pRect->left + 2, fBottom - 3); - path.LineTo(fRight - 3, fBottom - 3); - path.LineTo(fRight - 3, pRect->top); - clrLine = m_pThemeData->clrFormBorder[iActive][0]; - pGraphics->SetStrokeColor(&clrLine); - pGraphics->StrokePath(&path, pMatrix); - path.Clear(); - path.MoveTo(pRect->left + 3, pRect->top); - path.LineTo(pRect->left + 3, fBottom - 4); - path.LineTo(fRight - 4, fBottom - 4); - path.LineTo(fRight - 4, pRect->top); - clrLine = m_pThemeData->clrFormBorder[iActive][4]; - pGraphics->SetStrokeColor(&clrLine); - pGraphics->StrokePath(&path, pMatrix); - m_rtDisLBorder.Set(pRect->left, pRect->top + 29, 4, pRect->height - 29); - m_rtDisRBorder.Set(pRect->right() - 4, pRect->top + 29, 4, - pRect->height - 29); - m_rtDisBBorder.Set(pRect->left, pRect->bottom() - 4, pRect->width, 4); - m_rtDisCaption.Set(pRect->left, pRect->top, pRect->width, 29); -} -void CFWL_FormTP::DrawCaption(CFX_Graphics* pGraphics, - const CFX_RectF* pRect, - FWLTHEME_STATE eState, - CFX_Matrix* pMatrix, - int32_t iActive) { - CFX_RectF rt; - FX_FLOAT fBottom, fRight; - fBottom = pRect->bottom(); - fRight = pRect->right(); - rt.Set(pRect->left, pRect->top, pRect->width, 1); - FillSoildRect(pGraphics, m_pThemeData->clrHeadEdgeTop[iActive][0], &rt, - pMatrix); - rt.Offset(0, 1); - FillSoildRect(pGraphics, m_pThemeData->clrHeadEdgeTop[iActive][1], &rt, - pMatrix); - rt.Offset(0, 1); - FillSoildRect(pGraphics, m_pThemeData->clrHeadEdgeTop[iActive][2], &rt, - pMatrix); - rt.Set(pRect->left, pRect->bottom() - 1, pRect->width, 1); - FillSoildRect(pGraphics, m_pThemeData->clrHeadEdgeBottom[iActive][2], &rt, - pMatrix); - rt.Offset(0, -1); - FillSoildRect(pGraphics, m_pThemeData->clrHeadEdgeBottom[iActive][1], &rt, - pMatrix); - rt.Set(pRect->left, pRect->top, 1, pRect->height); - FillSoildRect(pGraphics, m_pThemeData->clrHeadEdgeLeft[iActive][2], &rt, - pMatrix); - rt.Set(pRect->left + 1, pRect->top + 1, 1, fBottom - 1); - FillSoildRect(pGraphics, m_pThemeData->clrHeadEdgeLeft[iActive][1], &rt, - pMatrix); - rt.Set(pRect->left + 2, pRect->top + 2, 1, fBottom - 2); - FillSoildRect(pGraphics, m_pThemeData->clrHeadEdgeLeft[iActive][0], &rt, - pMatrix); - rt.Set(fRight - 1, pRect->top, pRect->width, pRect->height); - FillSoildRect(pGraphics, m_pThemeData->clrHeadEdgeRight[iActive][2], &rt, - pMatrix); - rt.Set(fRight - 2, pRect->top + 1, 1, fBottom - 1); - FillSoildRect(pGraphics, m_pThemeData->clrHeadEdgeRight[iActive][1], &rt, - pMatrix); - rt.Set(fRight - 3, pRect->top + 2, 1, fBottom - 2); - FillSoildRect(pGraphics, m_pThemeData->clrHeadEdgeRight[iActive][0], &rt, - pMatrix); - CFX_RectF rect(*pRect); - rect.Set(rect.left + 3, rect.top + 3, rect.width - 6, rect.height - 5); - if (iActive == 0) { - pGraphics->StretchImage(m_pActiveBitmap, rect, pMatrix); - } else { - pGraphics->StretchImage(m_pDeactivebitmap, rect, pMatrix); - } -} -void CFWL_FormTP::DrawNarrowCaption(CFX_Graphics* pGraphics, - const CFX_RectF* pRect, - FWLTHEME_STATE eState, - CFX_Matrix* pMatrix, - int32_t iActive) {} -void CFWL_FormTP::DrawCloseBox(CFX_Graphics* pGraphics, - const CFX_RectF* pRect, - FWLTHEME_STATE eState, - CFX_Matrix* pMatrix, - int32_t iActive) { - FX_FLOAT fRight = pRect->right(); - FX_FLOAT fBottom = pRect->bottom(); - FX_FLOAT fWidth = pRect->width; - FX_FLOAT fHeight = pRect->height; - pGraphics->SaveGraphState(); - CFX_RectF rt(*pRect); - pGraphics->SetLineWidth(1.0f); - CFX_Path path; - path.Create(); - path.AddRectangle(rt.left + 1, rt.top, fWidth - 2, 1); - path.AddRectangle(rt.left, rt.top + 1, 1, fHeight - 2); - path.AddRectangle(fRight - 1, rt.top + 1, 1, fHeight - 2); - path.AddRectangle(rt.left + 1, fBottom - 1, fWidth - 2, 1); - CFX_Color crFill; - crFill = m_pThemeData->clrBtnEdgeOut[iActive]; - pGraphics->SetFillColor(&crFill); - pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); - path.Clear(); - path.AddRectangle(rt.left + 1, rt.top + 1, 1, 1); - path.AddRectangle(fRight - 2, rt.top + 1, 1, 1); - path.AddRectangle(rt.left + 1, fBottom - 2, 1, 1); - path.AddRectangle(fRight - 2, fBottom - 2, 1, 1); - crFill = m_pThemeData->clrBtnCornerLight[iActive][eState - 1]; - pGraphics->SetFillColor(&crFill); - pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); - path.Clear(); - path.AddRectangle(rt.left + 2, rt.top + 1, fWidth - 4, 1); - path.AddRectangle(rt.left + 1, rt.top + 2, 1, fHeight - 4); - crFill = m_pThemeData->clrCloseBtEdgeLight[iActive][eState - 1]; - pGraphics->SetFillColor(&crFill); - pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); - path.Clear(); - path.AddRectangle(fRight - 2, rt.top + 2, 1, fHeight - 4); - path.AddRectangle(rt.left + 2, fBottom - 2, fWidth - 4, 1); - crFill = m_pThemeData->clrCloseBtEdgeDark[iActive][eState - 1]; - pGraphics->SetFillColor(&crFill); - pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); - path.Clear(); - path.AddRectangle(pRect->left + 2, pRect->top + 2, fWidth - 4, fHeight - 4); - DrawAxialShading(pGraphics, pRect->left + 2, pRect->top + 2, fRight - 2, - fBottom - 2, - m_pThemeData->clrCloseBtBKStart[iActive][eState - 1], - m_pThemeData->clrCloseBtBKEnd[iActive][eState - 1], &path, - FXFILL_WINDING, pMatrix); - CFX_RectF rtX(*pRect); - rtX.Inflate(-5, -5); - path.Clear(); - FX_FLOAT frtXRight = rtX.right(); - FX_FLOAT frtXBottom = rtX.bottom(); - path.AddLine(rtX.left, rtX.top + 1, frtXRight - 1, frtXBottom); - path.AddLine(rtX.left, rtX.top, frtXRight, frtXBottom); - path.AddLine(rtX.left + 1, rtX.top, frtXRight, frtXBottom - 1); - path.AddLine(rtX.left, frtXBottom - 1, frtXRight - 1, rtX.top); - path.AddLine(rtX.left, frtXBottom, frtXRight, rtX.top); - path.AddLine(rtX.left + 1, frtXBottom, frtXRight, rtX.top + 1); - CFX_Color clrLine(0xffffffff); - pGraphics->SetLineWidth(1.0f); - pGraphics->SetStrokeColor(&clrLine); - pGraphics->StrokePath(&path, pMatrix); - pGraphics->RestoreGraphState(); -} -void CFWL_FormTP::DrawMinMaxBoxCommon(CFX_Graphics* pGraphics, - const CFX_RectF* pRect, - FWLTHEME_STATE eState, - CFX_Matrix* pMatrix, - int32_t iActive) { - pGraphics->SaveGraphState(); - FX_FLOAT fRight = pRect->right(); - FX_FLOAT fBottom = pRect->bottom(); - FX_FLOAT fWidth = pRect->width; - FX_FLOAT fHeight = pRect->height; - CFX_RectF rt(*pRect); - pGraphics->SetLineWidth(1.0f); - CFX_Path path; - path.Create(); - path.AddRectangle(rt.left + 1, rt.top, fWidth - 2, 1); - path.AddRectangle(rt.left, rt.top + 1, 1, fHeight - 2); - path.AddRectangle(fRight - 1, rt.top + 1, 1, fHeight - 2); - path.AddRectangle(rt.left + 1, fBottom - 1, fWidth - 2, 1); - CFX_Color crFill; - crFill = m_pThemeData->clrBtnEdgeOut[iActive]; - pGraphics->SetFillColor(&crFill); - pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); - path.Clear(); - path.AddRectangle(rt.left + 1, rt.top + 1, 1, 1); - path.AddRectangle(fRight - 2, rt.top + 1, 1, 1); - path.AddRectangle(rt.left + 1, fBottom - 2, 1, 1); - path.AddRectangle(fRight - 2, fBottom - 2, 1, 1); - crFill = m_pThemeData->clrBtnCornerLight[iActive][eState - 1]; - pGraphics->SetFillColor(&crFill); - pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); - path.Clear(); - path.AddRectangle(rt.left + 2, rt.top + 1, fWidth - 4, 1); - path.AddRectangle(rt.left + 1, rt.top + 2, 1, fHeight - 4); - crFill = m_pThemeData->clrNormalBtEdgeLight[iActive][eState - 1]; - pGraphics->SetFillColor(&crFill); - pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); - path.Clear(); - path.AddRectangle(fRight - 2, rt.top + 2, 1, fHeight - 4); - path.AddRectangle(rt.left + 2, fBottom - 2, fWidth - 4, 1); - crFill = m_pThemeData->clrNormalBtEdgeDark[iActive][eState - 1]; - pGraphics->SetFillColor(&crFill); - pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); - pGraphics->RestoreGraphState(); - path.Clear(); - path.AddRectangle(pRect->left + 2, pRect->top + 2, fWidth - 4, fHeight - 4); - DrawAxialShading(pGraphics, pRect->left + 2, pRect->top + 2, fRight - 2, - fBottom - 2, - m_pThemeData->clrNormalBtBKStart[iActive][eState - 1], - m_pThemeData->clrNormalBtBKEnd[iActive][eState - 1], &path, - FXFILL_WINDING, pMatrix); -} -void CFWL_FormTP::DrawMinimizeBox(CFX_Graphics* pGraphics, - const CFX_RectF* pRect, - FWLTHEME_STATE eState, - CFX_Matrix* pMatrix, - int32_t iActive) { - DrawMinMaxBoxCommon(pGraphics, pRect, eState, pMatrix); - CFX_RectF rtMin; - rtMin.Set(pRect->left + 5, pRect->top + 13, pRect->width - 14, - pRect->height - 18); - FillSoildRect(pGraphics, 0xFFFFFFFF, &rtMin, pMatrix); -} -void CFWL_FormTP::DrawMaximizeBox(CFX_Graphics* pGraphics, - const CFX_RectF* pRect, - FWLTHEME_STATE eState, - FX_BOOL bMax, - CFX_Matrix* pMatrix, - int32_t iActive) { - DrawMinMaxBoxCommon(pGraphics, pRect, eState, pMatrix); - FX_FLOAT fWidth = pRect->width; - FX_FLOAT fHeight = pRect->height; - if (bMax) { - CFX_Path path; - path.Create(); - path.AddLine(pRect->left + 7, pRect->top + 6, pRect->left + 14, - pRect->top + 6); - path.AddLine(pRect->left + 4, pRect->top + 9, pRect->left + 11, - pRect->top + 9); - pGraphics->SaveGraphState(); - pGraphics->SetLineWidth(2); - CFX_Color crStroke(0xFFFFFFFF); - pGraphics->SetStrokeColor(&crStroke); - pGraphics->StrokePath(&path, pMatrix); - pGraphics->SetLineWidth(1); - path.Clear(); - path.AddLine(pRect->left + 4, pRect->top + 10, pRect->left + 4, - pRect->top + 14); - path.AddLine(pRect->left + 10, pRect->top + 10, pRect->left + 10, - pRect->top + 14); - path.AddLine(pRect->left + 13, pRect->top + 7, pRect->left + 13, - pRect->top + 11); - path.AddLine(pRect->left + 4, pRect->top + 14, pRect->left + 10, - pRect->top + 14); - path.AddLine(pRect->left + 12, pRect->top + 11, pRect->left + 12, - pRect->top + 11); - pGraphics->StrokePath(&path, pMatrix); - pGraphics->RestoreGraphState(); - } else { - CFX_RectF rtMax(*pRect); - rtMax.Inflate(-5, -5); - CFX_Path path; - path.Create(); - path.AddRectangle(pRect->left + 5, pRect->top + 5, fWidth - 10, - fHeight - 10); - path.AddRectangle(pRect->left + 6, pRect->top + 8, fWidth - 12, - fHeight - 14); - pGraphics->SaveGraphState(); - CFX_Color crFill(0xFFFFFFFF); - pGraphics->SetFillColor(&crFill); - pGraphics->FillPath(&path, FXFILL_ALTERNATE, pMatrix); - pGraphics->RestoreGraphState(); - } -} -void CFWL_FormTP::DrawIconImage(CFX_Graphics* pGraphics, - CFX_DIBitmap* pDIBitmap, - const CFX_RectF* pRect, - FWLTHEME_STATE eState, - CFX_Matrix* pMatrix, - int32_t iActive) { - pGraphics->StretchImage(pDIBitmap, *pRect, pMatrix); -} -void CFWL_FormTP::SetThemeData(FX_DWORD dwID) { - m_pThemeData->clrTransWhite = ArgbEncode(0x65, 255, 255, 255); - m_pThemeData->clrCloseBtBKStart[0][0] = ArgbEncode(0xff, 240, 166, 148); - m_pThemeData->clrCloseBtBKEnd[0][0] = ArgbEncode(0xff, 228, 61, 5); - m_pThemeData->clrCloseBtBKStart[0][1] = ArgbEncode(0xff, 255, 184, 176); - m_pThemeData->clrCloseBtBKEnd[0][1] = ArgbEncode(0xff, 252, 107, 71); - m_pThemeData->clrCloseBtBKStart[0][2] = ArgbEncode(0xff, 141, 44, 20); - m_pThemeData->clrCloseBtBKEnd[0][2] = ArgbEncode(0xff, 202, 72, 33); - m_pThemeData->clrCloseBtEdgeLight[0][0] = ArgbEncode(0xff, 255, 122, 107); - m_pThemeData->clrCloseBtEdgeDark[0][0] = ArgbEncode(0xff, 218, 77, 54); - m_pThemeData->clrCloseBtEdgeLight[0][1] = ArgbEncode(0xff, 255, 93, 74); - m_pThemeData->clrCloseBtEdgeDark[0][1] = ArgbEncode(0xff, 218, 74, 51); - m_pThemeData->clrCloseBtEdgeLight[0][2] = ArgbEncode(0xff, 191, 61, 28); - m_pThemeData->clrCloseBtEdgeDark[0][2] = ArgbEncode(0xff, 93, 30, 13); - if (dwID) { - m_pThemeData->clrHeadBK[0][0] = ArgbEncode(0xff, 194, 205, 149); - m_pThemeData->clrHeadBK[0][1] = ArgbEncode(0xff, 170, 184, 131); - m_pThemeData->clrHeadBK[0][2] = ArgbEncode(0xff, 168, 182, 128); - m_pThemeData->clrHeadBK[0][3] = ArgbEncode(0xff, 194, 205, 149); - m_pThemeData->clrHeadEdgeLeft[0][0] = ArgbEncode(0xff, 117, 141, 94); - m_pThemeData->clrHeadEdgeLeft[0][1] = ArgbEncode(0xff, 139, 161, 105); - m_pThemeData->clrHeadEdgeLeft[0][2] = ArgbEncode(0xff, 171, 189, 133); - m_pThemeData->clrHeadEdgeRight[0][0] = ArgbEncode(0xff, 155, 175, 125); - m_pThemeData->clrHeadEdgeRight[0][1] = ArgbEncode(0xff, 128, 146, 103); - m_pThemeData->clrHeadEdgeRight[0][2] = ArgbEncode(0xff, 94, 118, 79); - m_pThemeData->clrHeadEdgeTop[0][0] = ArgbEncode(0xff, 139, 161, 105); - m_pThemeData->clrHeadEdgeTop[0][1] = ArgbEncode(0xff, 234, 245, 201); - m_pThemeData->clrHeadEdgeTop[0][2] = ArgbEncode(0xff, 194, 205, 149); - m_pThemeData->clrHeadEdgeBottom[0][0] = ArgbEncode(0xff, 175, 189, 133); - m_pThemeData->clrHeadEdgeBottom[0][1] = ArgbEncode(0xff, 153, 168, 121); - m_pThemeData->clrHeadEdgeBottom[0][2] = ArgbEncode(0xff, 150, 168, 103); - m_pThemeData->clrNormalBtBKStart[0][0] = ArgbEncode(0xff, 182, 195, 162); - m_pThemeData->clrNormalBtBKEnd[0][0] = ArgbEncode(0xff, 128, 144, 84); - m_pThemeData->clrNormalBtBKStart[0][1] = ArgbEncode(0xff, 234, 241, 208); - m_pThemeData->clrNormalBtBKEnd[0][1] = ArgbEncode(0xff, 169, 186, 112); - m_pThemeData->clrNormalBtBKStart[0][2] = ArgbEncode(0xff, 199, 199, 190); - m_pThemeData->clrNormalBtBKEnd[0][2] = ArgbEncode(0xff, 133, 148, 88); - m_pThemeData->clrNormalBtEdgeLight[0][0] = ArgbEncode(0xff, 163, 176, 137); - m_pThemeData->clrNormalBtEdgeDark[0][0] = ArgbEncode(0xff, 118, 135, 83); - m_pThemeData->clrNormalBtEdgeLight[0][1] = ArgbEncode(0xff, 154, 174, 105); - m_pThemeData->clrNormalBtEdgeDark[0][1] = ArgbEncode(0xff, 154, 174, 105); - m_pThemeData->clrNormalBtEdgeLight[0][2] = ArgbEncode(0xff, 172, 193, 123); - m_pThemeData->clrNormalBtEdgeDark[0][2] = ArgbEncode(0xff, 154, 174, 105); - m_pThemeData->clrBtnCornerLight[0][0] = ArgbEncode(0xff, 220, 220, 220); - m_pThemeData->clrBtnCornerLight[0][1] = ArgbEncode(0xff, 255, 255, 255); - m_pThemeData->clrBtnCornerLight[0][2] = ArgbEncode(0xff, 225, 225, 225); - m_pThemeData->clrBtnEdgeOut[0] = ArgbEncode(0xff, 255, 255, 255); - m_pThemeData->clrFormBorder[0][0] = ArgbEncode(0xff, 117, 141, 94); - m_pThemeData->clrFormBorder[0][1] = ArgbEncode(0xff, 139, 161, 105); - m_pThemeData->clrFormBorder[0][2] = ArgbEncode(0xff, 171, 189, 133); - m_pThemeData->clrFormBorder[0][3] = ArgbEncode(0xff, 164, 178, 127); - m_pThemeData->clrFormBorder[0][4] = ArgbEncode(0xff, 255, 255, 255); - m_pThemeData->clrFormBorderLight[0] = ArgbEncode(0xff, 171, 189, 133); - } else { - m_pThemeData->clrHeadBK[0][0] = ArgbEncode(0xff, 3, 114, 255); - m_pThemeData->clrHeadBK[0][1] = ArgbEncode(0xff, 0, 85, 226); - m_pThemeData->clrHeadBK[0][2] = ArgbEncode(0xff, 0, 85, 226); - m_pThemeData->clrHeadBK[0][3] = ArgbEncode(0xff, 3, 114, 255); - m_pThemeData->clrHeadEdgeLeft[0][2] = ArgbEncode(0xff, 0, 32, 200); - m_pThemeData->clrHeadEdgeLeft[0][1] = ArgbEncode(0xff, 0, 61, 220); - m_pThemeData->clrHeadEdgeLeft[0][0] = ArgbEncode(0xff, 0, 54, 210); - m_pThemeData->clrHeadEdgeRight[0][0] = ArgbEncode(0xff, 0, 56, 234); - m_pThemeData->clrHeadEdgeRight[0][1] = ArgbEncode(0xff, 0, 50, 193); - m_pThemeData->clrHeadEdgeRight[0][2] = ArgbEncode(0xff, 0, 19, 139); - m_pThemeData->clrHeadEdgeTop[0][0] = ArgbEncode(0xff, 0, 88, 238); - m_pThemeData->clrHeadEdgeTop[0][1] = ArgbEncode(0xff, 63, 151, 255); - m_pThemeData->clrHeadEdgeTop[0][2] = ArgbEncode(0xff, 3, 114, 255); - m_pThemeData->clrHeadEdgeBottom[0][0] = ArgbEncode(0xff, 0, 96, 252); - m_pThemeData->clrHeadEdgeBottom[0][1] = ArgbEncode(0xff, 63, 151, 255); - m_pThemeData->clrHeadEdgeBottom[0][2] = ArgbEncode(0xff, 0, 67, 207); - m_pThemeData->clrNormalBtBKStart[0][2] = ArgbEncode(0xff, 0, 49, 112); - m_pThemeData->clrNormalBtBKEnd[0][2] = ArgbEncode(0xff, 0, 87, 188); - m_pThemeData->clrNormalBtBKStart[0][0] = ArgbEncode(0xff, 154, 183, 250); - m_pThemeData->clrNormalBtBKEnd[0][0] = ArgbEncode(0xff, 17, 110, 248); - m_pThemeData->clrNormalBtBKStart[0][1] = ArgbEncode(0xff, 164, 194, 255); - m_pThemeData->clrNormalBtBKEnd[0][1] = ArgbEncode(0xff, 29, 158, 255); - m_pThemeData->clrNormalBtEdgeLight[0][0] = ArgbEncode(0xff, 68, 120, 245); - m_pThemeData->clrNormalBtEdgeDark[0][0] = ArgbEncode(0xff, 24, 72, 187); - m_pThemeData->clrNormalBtEdgeLight[0][1] = ArgbEncode(0xff, 72, 122, 245); - m_pThemeData->clrNormalBtEdgeDark[0][1] = ArgbEncode(0xff, 35, 87, 195); - m_pThemeData->clrNormalBtEdgeLight[0][2] = ArgbEncode(0xff, 60, 114, 244); - m_pThemeData->clrNormalBtEdgeDark[0][2] = ArgbEncode(0xff, 21, 70, 185); - m_pThemeData->clrBtnCornerLight[0][0] = ArgbEncode(0xff, 220, 220, 220); - m_pThemeData->clrBtnCornerLight[0][1] = ArgbEncode(0xff, 255, 255, 255); - m_pThemeData->clrBtnCornerLight[0][2] = ArgbEncode(0xff, 225, 225, 225); - m_pThemeData->clrBtnEdgeOut[0] = ArgbEncode(0xff, 255, 255, 255); - m_pThemeData->clrFormBorder[0][0] = ArgbEncode(0xff, 0, 72, 241); - m_pThemeData->clrFormBorder[0][1] = ArgbEncode(0xff, 0, 61, 220); - m_pThemeData->clrFormBorder[0][2] = ArgbEncode(0xff, 0, 30, 160); - m_pThemeData->clrFormBorder[0][3] = ArgbEncode(0xff, 0, 19, 140); - m_pThemeData->clrFormBorder[0][4] = ArgbEncode(0xff, 255, 255, 255); - m_pThemeData->clrFormBorderLight[0] = ArgbEncode(0xff, 22, 106, 239); - } - m_pThemeData->clrCloseBtBKStart[1][0] = m_pThemeData->clrCloseBtBKStart[0][0]; - m_pThemeData->clrCloseBtBKEnd[1][0] = m_pThemeData->clrCloseBtBKEnd[0][0]; - m_pThemeData->clrCloseBtBKStart[1][1] = m_pThemeData->clrCloseBtBKStart[0][1]; - m_pThemeData->clrCloseBtBKEnd[1][1] = m_pThemeData->clrCloseBtBKEnd[0][1]; - m_pThemeData->clrCloseBtBKStart[1][2] = m_pThemeData->clrCloseBtBKStart[0][2]; - m_pThemeData->clrCloseBtBKEnd[1][2] = m_pThemeData->clrCloseBtBKEnd[0][2]; - m_pThemeData->clrCloseBtEdgeLight[1][0] = - m_pThemeData->clrCloseBtEdgeLight[0][0]; - m_pThemeData->clrCloseBtEdgeDark[1][0] = - m_pThemeData->clrCloseBtEdgeDark[0][0]; - m_pThemeData->clrCloseBtEdgeLight[1][1] = - m_pThemeData->clrCloseBtEdgeLight[0][1]; - m_pThemeData->clrCloseBtEdgeDark[1][1] = - m_pThemeData->clrCloseBtEdgeDark[0][1]; - m_pThemeData->clrCloseBtEdgeLight[1][2] = - m_pThemeData->clrCloseBtEdgeLight[0][2]; - m_pThemeData->clrCloseBtEdgeDark[1][2] = - m_pThemeData->clrCloseBtEdgeDark[0][2]; - m_pThemeData->clrHeadBK[1][0] = m_pThemeData->clrHeadBK[0][0]; - m_pThemeData->clrHeadBK[1][1] = m_pThemeData->clrHeadBK[0][1]; - m_pThemeData->clrHeadBK[1][2] = m_pThemeData->clrHeadBK[0][2]; - m_pThemeData->clrHeadBK[1][3] = m_pThemeData->clrHeadBK[0][3]; - m_pThemeData->clrHeadEdgeLeft[1][2] = m_pThemeData->clrHeadEdgeLeft[0][2]; - m_pThemeData->clrHeadEdgeLeft[1][1] = m_pThemeData->clrHeadEdgeLeft[0][1]; - m_pThemeData->clrHeadEdgeLeft[1][0] = m_pThemeData->clrHeadEdgeLeft[0][0]; - m_pThemeData->clrHeadEdgeRight[1][0] = m_pThemeData->clrHeadEdgeRight[0][0]; - m_pThemeData->clrHeadEdgeRight[1][1] = m_pThemeData->clrHeadEdgeRight[0][1]; - m_pThemeData->clrHeadEdgeRight[1][2] = m_pThemeData->clrHeadEdgeRight[0][2]; - m_pThemeData->clrHeadEdgeTop[1][0] = m_pThemeData->clrHeadEdgeTop[0][0]; - m_pThemeData->clrHeadEdgeTop[1][1] = m_pThemeData->clrHeadEdgeTop[0][1]; - m_pThemeData->clrHeadEdgeTop[1][2] = m_pThemeData->clrHeadEdgeTop[0][2]; - m_pThemeData->clrHeadEdgeBottom[1][0] = m_pThemeData->clrHeadEdgeBottom[0][0]; - m_pThemeData->clrHeadEdgeBottom[1][1] = m_pThemeData->clrHeadEdgeBottom[0][1]; - m_pThemeData->clrHeadEdgeBottom[1][2] = m_pThemeData->clrHeadEdgeBottom[0][2]; - m_pThemeData->clrNormalBtBKStart[1][2] = - m_pThemeData->clrNormalBtBKStart[0][2]; - m_pThemeData->clrNormalBtBKEnd[1][2] = m_pThemeData->clrNormalBtBKEnd[0][2]; - m_pThemeData->clrNormalBtBKStart[1][0] = - m_pThemeData->clrNormalBtBKStart[0][0]; - m_pThemeData->clrNormalBtBKEnd[1][0] = m_pThemeData->clrNormalBtBKEnd[1][0]; - m_pThemeData->clrNormalBtBKStart[1][1] = - m_pThemeData->clrNormalBtBKStart[0][1]; - m_pThemeData->clrNormalBtBKEnd[1][1] = m_pThemeData->clrNormalBtBKEnd[0][1]; - m_pThemeData->clrNormalBtEdgeLight[1][0] = - m_pThemeData->clrNormalBtEdgeLight[0][0]; - m_pThemeData->clrNormalBtEdgeDark[1][0] = - m_pThemeData->clrNormalBtEdgeDark[0][0]; - m_pThemeData->clrNormalBtEdgeLight[1][1] = - m_pThemeData->clrNormalBtEdgeLight[0][1]; - m_pThemeData->clrNormalBtEdgeDark[1][1] = - m_pThemeData->clrNormalBtEdgeDark[0][1]; - m_pThemeData->clrNormalBtEdgeLight[1][2] = - m_pThemeData->clrNormalBtEdgeLight[0][2]; - m_pThemeData->clrNormalBtEdgeDark[1][2] = - m_pThemeData->clrNormalBtEdgeDark[0][2]; - m_pThemeData->clrBtnCornerLight[1][0] = m_pThemeData->clrBtnCornerLight[0][0]; - m_pThemeData->clrBtnCornerLight[1][1] = m_pThemeData->clrBtnCornerLight[0][1]; - m_pThemeData->clrBtnCornerLight[1][2] = m_pThemeData->clrBtnCornerLight[0][2]; - m_pThemeData->clrBtnEdgeOut[1] = m_pThemeData->clrBtnEdgeOut[0]; - m_pThemeData->clrFormBorder[1][0] = m_pThemeData->clrFormBorder[0][0]; - m_pThemeData->clrFormBorder[1][1] = m_pThemeData->clrFormBorder[0][1]; - m_pThemeData->clrFormBorder[1][2] = m_pThemeData->clrFormBorder[0][2]; - m_pThemeData->clrFormBorder[1][3] = m_pThemeData->clrFormBorder[0][3]; - m_pThemeData->clrFormBorder[1][4] = m_pThemeData->clrFormBorder[0][4]; - m_pThemeData->clrFormBorderLight[1] = m_pThemeData->clrFormBorderLight[0]; - DeactiveForm(); -} -void CFWL_FormTP::DeactiveForm() { - TransModeColor(m_pThemeData->clrTransWhite, m_pThemeData->clrHeadBK[1][0]); - TransModeColor(m_pThemeData->clrTransWhite, m_pThemeData->clrHeadBK[1][1]); - TransModeColor(m_pThemeData->clrTransWhite, m_pThemeData->clrHeadBK[1][2]); - TransModeColor(m_pThemeData->clrTransWhite, m_pThemeData->clrHeadBK[1][3]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrHeadEdgeLeft[1][0]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrHeadEdgeLeft[1][1]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrHeadEdgeLeft[1][2]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrHeadEdgeRight[1][0]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrHeadEdgeRight[1][1]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrHeadEdgeRight[1][2]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrHeadEdgeTop[1][0]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrHeadEdgeTop[1][1]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrHeadEdgeTop[1][2]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrHeadEdgeBottom[1][0]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrHeadEdgeBottom[1][1]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrHeadEdgeBottom[1][2]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrNormalBtBKStart[1][0]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrNormalBtBKStart[1][1]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrNormalBtBKStart[1][2]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrNormalBtBKEnd[1][0]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrNormalBtBKEnd[1][1]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrNormalBtBKEnd[1][2]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrNormalBtEdgeLight[1][0]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrNormalBtEdgeLight[1][1]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrNormalBtEdgeLight[1][2]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrNormalBtEdgeDark[1][0]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrNormalBtEdgeDark[1][1]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrNormalBtEdgeDark[1][2]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrBtnCornerLight[1][0]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrBtnCornerLight[1][1]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrBtnCornerLight[1][2]); - TransModeColor(m_pThemeData->clrTransWhite, m_pThemeData->clrBtnEdgeOut[1]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrFormBorder[1][0]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrFormBorder[1][1]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrFormBorder[1][2]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrFormBorder[1][3]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrFormBorder[1][4]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrFormBorderLight[1]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrCloseBtBKStart[1][0]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrCloseBtBKStart[1][1]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrCloseBtBKStart[1][2]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrCloseBtBKEnd[1][0]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrCloseBtBKEnd[1][1]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrCloseBtBKEnd[1][2]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrCloseBtEdgeLight[1][0]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrCloseBtEdgeLight[1][1]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrCloseBtEdgeLight[1][2]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrCloseBtEdgeDark[1][0]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrCloseBtEdgeDark[1][1]); - TransModeColor(m_pThemeData->clrTransWhite, - m_pThemeData->clrCloseBtEdgeDark[1][2]); -} -void CFWL_FormTP::TransModeColor(FX_ARGB clrFore, FX_ARGB& clrBack) { - int32_t iAlfaF, iRF, iGF, iBF; - int32_t iAlfaB, iRB, iGB, iBB; - ArgbDecode(clrFore, iAlfaF, iRF, iGF, iBF); - ArgbDecode(clrBack, iAlfaB, iRB, iGB, iBB); - clrBack = ArgbEncode(0xff, iRB + (iRF - iRB) * iAlfaF / 255, - iGB + (iGF - iGB) * iAlfaF / 255, - iBB + (iBF - iBB) * iAlfaF / 255); -} -void CFWL_FormTP::InitCaption(FX_BOOL bActive) { - if (bActive) { - CFX_FxgeDevice dev; - CFX_Graphics gs; - CFX_Path path; - path.Create(); - if (m_pActiveBitmap) { - delete m_pActiveBitmap; - m_pActiveBitmap = NULL; - } - m_pActiveBitmap = new CFX_DIBitmap; - m_pActiveBitmap->Create(1, FWLTHEME_CAPACITY_CYCaption, FXDIB_Argb); - dev.Attach(m_pActiveBitmap); - gs.Create(&dev); - path.AddRectangle(0, 0, 1, 5); - DrawAxialShading(&gs, 0, 0, 0, 5, m_pThemeData->clrHeadBK[0][0], - m_pThemeData->clrHeadBK[0][1], &path); - path.Clear(); - path.AddRectangle(0, 5, 1, 15); - DrawAxialShading(&gs, 0, 5, 0, 20, m_pThemeData->clrHeadBK[0][1], - m_pThemeData->clrHeadBK[0][2], &path); - path.Clear(); - path.AddRectangle(0, 20, 1, FWLTHEME_CAPACITY_CYCaption - 19); - DrawAxialShading(&gs, 0, 20, 0, FWLTHEME_CAPACITY_CYCaption, - m_pThemeData->clrHeadBK[0][2], - m_pThemeData->clrHeadBK[0][3], &path); - } else { - CFX_FxgeDevice dev; - CFX_Graphics gs; - CFX_Path path; - path.Create(); - if (m_pDeactivebitmap) { - delete m_pDeactivebitmap; - m_pDeactivebitmap = NULL; - } - m_pDeactivebitmap = new CFX_DIBitmap; - m_pDeactivebitmap->Create(1, FWLTHEME_CAPACITY_CYCaption, FXDIB_Argb); - dev.Attach(m_pDeactivebitmap); - gs.Create(&dev); - path.AddRectangle(0, 0, 1, 5); - DrawAxialShading(&gs, 0, 0, 0, 5, m_pThemeData->clrHeadBK[1][0], - m_pThemeData->clrHeadBK[1][1], &path); - path.Clear(); - path.AddRectangle(0, 5, 1, 15); - DrawAxialShading(&gs, 0, 5, 0, 20, m_pThemeData->clrHeadBK[1][1], - m_pThemeData->clrHeadBK[1][2], &path); - path.Clear(); - path.AddRectangle(0, 20, 1, FWLTHEME_CAPACITY_CYCaption - 19); - DrawAxialShading(&gs, 0, 20, 0, FWLTHEME_CAPACITY_CYCaption, - m_pThemeData->clrHeadBK[1][2], - m_pThemeData->clrHeadBK[1][3], &path); - } -} diff --git a/xfa/src/fwl/theme/listboxtp.cpp b/xfa/src/fwl/theme/listboxtp.cpp deleted file mode 100644 index 8ffe669835..0000000000 --- a/xfa/src/fwl/theme/listboxtp.cpp +++ /dev/null @@ -1,101 +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/include/fwl/theme/listboxtp.h" - -#include "xfa/include/fwl/basewidget/fwl_listbox.h" -#include "xfa/include/fwl/core/fwl_widget.h" - -CFWL_ListBoxTP::CFWL_ListBoxTP() {} -CFWL_ListBoxTP::~CFWL_ListBoxTP() {} - -FX_BOOL CFWL_ListBoxTP::IsValidWidget(IFWL_Widget* pWidget) { - if (!pWidget) - return FALSE; - return pWidget->GetClassID() == FWL_CLASSHASH_ListBox; -} -FX_BOOL CFWL_ListBoxTP::DrawBackground(CFWL_ThemeBackground* pParams) { - if (!pParams) - return FALSE; - switch (pParams->m_iPart) { - case FWL_PART_LTB_Border: { - DrawBorder(pParams->m_pGraphics, &pParams->m_rtPart, &pParams->m_matrix); - break; - } - case FWL_PART_LTB_Edge: { - DrawEdge(pParams->m_pGraphics, pParams->m_pWidget->GetStyles(), - &pParams->m_rtPart, &pParams->m_matrix); - break; - } - case FWL_PART_LTB_Background: { - FillSoildRect(pParams->m_pGraphics, ArgbEncode(255, 255, 255, 255), - &pParams->m_rtPart, &pParams->m_matrix); - if (pParams->m_pData) { - FillSoildRect(pParams->m_pGraphics, FWLTHEME_COLOR_Background, - (CFX_RectF*)pParams->m_pData, &pParams->m_matrix); - } - break; - } - case FWL_PART_LTB_ListItem: { - DrawListBoxItem(pParams->m_pGraphics, pParams->m_dwStates, - &pParams->m_rtPart, pParams->m_pData, &pParams->m_matrix); - break; - } - case FWL_PART_LTB_Icon: { - pParams->m_pGraphics->StretchImage(pParams->m_pImage, pParams->m_rtPart, - &pParams->m_matrix); - break; - } - case FWL_PART_LTB_Check: { - FX_DWORD color = 0xFF000000; - if (pParams->m_dwStates == FWL_PARTSTATE_LTB_Checked) { - color = 0xFFFF0000; - } else if (pParams->m_dwStates == FWL_PARTSTATE_LTB_UnChecked) { - color = 0xFF0000FF; - } - FillSoildRect(pParams->m_pGraphics, color, &pParams->m_rtPart, - &pParams->m_matrix); - } - default: {} - } - return TRUE; -} -FWL_ERR CFWL_ListBoxTP::Initialize() { - InitTTO(); - return CFWL_WidgetTP::Initialize(); -} -FWL_ERR CFWL_ListBoxTP::Finalize() { - FinalizeTTO(); - return CFWL_WidgetTP::Finalize(); -} -void CFWL_ListBoxTP::DrawListBoxItem(CFX_Graphics* pGraphics, - FX_DWORD dwStates, - const CFX_RectF* prtItem, - void* pData, - CFX_Matrix* pMatrix) { - if (dwStates & FWL_PARTSTATE_LTB_Selected) { - pGraphics->SaveGraphState(); - CFX_Color crFill(FWL_GetThemeColor(m_dwThemeID) == 0 - ? FWLTHEME_COLOR_BKSelected - : FWLTHEME_COLOR_Green_BKSelected); - pGraphics->SetFillColor(&crFill); - CFX_RectF rt(*prtItem); - CFX_Path path; - path.Create(); -#if (_FX_OS_ == _FX_MACOSX_) - path.AddRectangle(rt.left, rt.top, rt.width - 1, rt.height - 1); -#else - path.AddRectangle(rt.left, rt.top, rt.width, rt.height); -#endif - pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); - pGraphics->RestoreGraphState(); - } - if (dwStates & FWL_PARTSTATE_LTB_Focused) { - if (pData) { - DrawFocus(pGraphics, (CFX_RectF*)pData, pMatrix); - } - } -} diff --git a/xfa/src/fwl/theme/monthcalendartp.cpp b/xfa/src/fwl/theme/monthcalendartp.cpp deleted file mode 100644 index 0dea73f675..0000000000 --- a/xfa/src/fwl/theme/monthcalendartp.cpp +++ /dev/null @@ -1,582 +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/include/fwl/theme/monthcalendartp.h" - -#include "xfa/include/fwl/basewidget/fwl_monthcalendar.h" -#include "xfa/include/fwl/core/fwl_widget.h" -#include "xfa/src/fde/tto/fde_textout.h" - -#define FWL_THEMECAPACITY_MC_HEADER_WIDTH 200 -#define FWL_THEMECAPACITY_MC_HEADER_HEIGHT 30 -#define FWL_THEMECAPACITY_MC_HEADER_BTN_WIDTH 18 -#define FWL_THEMECAPACITY_MC_HEADER_BTN_HEIGHT 16 -#define FWL_THEMECAPACITY_MC_HEADER_BTN_HMARGIN 5 -#define FWL_THEMECAPACITY_MC_HEADER_BTN_VMARGIN \ - (FWL_THEMECAPACITY_MC_HEADER_HEIGHT - \ - FWL_THEMECAPACITY_MC_HEADER_BTN_HEIGHT) / \ - 2 -#define FWL_THEMECAPACITY_MC_HEADER_TEXTWIDHT 100 -#define FWL_THEMECAPACITY_MC_HEADER_TEXTHEIGHT 20 -#define FWL_THEMECAPACITY_MC_HEADER_TEXT_HMARGIN \ - (FWL_THEMECAPACITY_MC_HEADER_WIDTH - \ - FWL_THEMECAPACITY_MC_HEADER_TEXTWIDHT) / \ - 2 -#define FWL_THEMECAPACITY_MC_HEADER_TEXT_VMARGIN \ - (FWL_THEMECAPACITY_MC_HEADER_HEIGHT - \ - FWL_THEMECAPACITY_MC_HEADER_TEXTHEIGHT) / \ - 2 -#define FWL_THEMECAPACITY_MC_HSEP_WIDTH (FWL_THEMECAPACITY_MC_WEEK_WIDTH - 10) -#define FWL_THEMECAPACITY_MC_HSEP_HEIGHT 1 -#define FWL_THEMECAPACITY_MC_VSEP_WIDTH 1 -#define FWL_THEMECAPACITY_MC_VSEP_HEIGHT FWL_THEMECAPACITY_MC_WEEKNUM_HEIGHT -#define FWL_THEMECAPACITY_MC_WEEKNUM_WIDTH 26 -#define FWL_THEMECAPACITY_MC_SEP_DOFFSET -4 -#define FWL_THEMECAPACITY_MC_SEP_X 3 -#define FWL_THEMECAPACITY_MC_SEP_Y \ - (FWL_THEMECAPACITY_MC_HEADER_HEIGHT + FWL_THEMECAPACITY_MC_WEEK_HEIGHT + \ - FWL_THEMECAPACITY_MC_SEP_DOFFSET) -#define FWL_THEMECAPACITY_MC_WEEKNUM_HEIGHT \ - (6 * FWL_THEMECAPACITY_MC_DATES_CELL_HEIGHT) -#define FWL_THEMECAPACITY_MC_WEEK_WIDTH \ - (FWL_THEMECAPACITY_MC_DATES_CELL_WIDTH * 7) -#define FWL_THEMECAPACITY_MC_WEEK_HEIGHT FWL_THEMECAPACITY_MC_DATES_CELL_HEIGHT -#define FWL_THEMECAPACITY_MC_DATES_CELL_WIDTH \ - (FWL_THEMECAPACITY_MC_HEADER_WIDTH / 7) -#define FWL_THEMECAPACITY_MC_DATES_CELL_HEIGHT 16 -#define FWL_THEMECAPACITY_MC_TODAY_WIDHT FWL_THEMECAPACITY_MC_HEADER_WIDTH -#define FWL_THEMECAPACITY_MC_TODAY_HEIGHT FWL_THEMECAPACITY_MC_DATES_CELL_HEIGHT -#define FWL_THEMECAPACITY_MC_TODAY_FLAG_WIDHT \ - FWL_THEMECAPACITY_MC_DATES_CELL_WIDTH -#define FWL_MC_WIDTH 200 -#define FWL_MC_HEIGHT 160 - -CFWL_MonthCalendarTP::CFWL_MonthCalendarTP() { - m_pThemeData = new MCThemeData; - SetThemeData(0); -} -CFWL_MonthCalendarTP::~CFWL_MonthCalendarTP() { - delete m_pThemeData; -} -FX_BOOL CFWL_MonthCalendarTP::IsValidWidget(IFWL_Widget* pWidget) { - if (!pWidget) - return FALSE; - return pWidget->GetClassID() == FWL_CLASSHASH_MonthCalendar; -} -FX_DWORD CFWL_MonthCalendarTP::SetThemeID(IFWL_Widget* pWidget, - FX_DWORD dwThemeID, - FX_BOOL bChildren) { - if (m_pThemeData) { - SetThemeData(FWL_GetThemeColor(dwThemeID)); - } - return CFWL_WidgetTP::SetThemeID(pWidget, dwThemeID, bChildren); -} -FX_BOOL CFWL_MonthCalendarTP::DrawBackground(CFWL_ThemeBackground* pParams) { - if (!pParams) - return FALSE; - switch (pParams->m_iPart) { - case FWL_PART_MCD_Border: { - DrawBorder(pParams->m_pGraphics, &pParams->m_rtPart, &pParams->m_matrix); - break; - } - case FWL_PART_MCD_Edge: { - DrawEdge(pParams->m_pGraphics, pParams->m_pWidget->GetStyles(), - &pParams->m_rtPart, &pParams->m_matrix); - break; - } - case FWL_PART_MCD_Background: { - DrawTotalBK(pParams, &pParams->m_matrix); - break; - } - case FWL_PART_MCD_Header: { - DrawHeadBk(pParams, &pParams->m_matrix); - break; - } - case FWL_PART_MCD_LBtn: { -#ifdef THEME_XPSimilar - FWLTHEME_STATE eState = GetState(pParams->m_dwStates); - DrawArrowBtn(pParams->m_pGraphics, &pParams->m_rtPart, - FWLTHEME_DIRECTION_Left, eState, &pParams->m_matrix); -#else - DrawLButton(pParams, &pParams->m_matrix); -#endif - break; - } - case FWL_PART_MCD_RBtn: { -#ifdef THEME_XPSimilar - FWLTHEME_STATE eState = GetState(pParams->m_dwStates); - DrawArrowBtn(pParams->m_pGraphics, &pParams->m_rtPart, - FWLTHEME_DIRECTION_Right, eState, &pParams->m_matrix); -#else - DrawRButton(pParams, &pParams->m_matrix); -#endif - break; - } - case FWL_PART_MCD_HSeparator: { - DrawHSeperator(pParams, &pParams->m_matrix); - break; - } - case FWL_PART_MCD_DatesIn: { - DrawDatesInBK(pParams, &pParams->m_matrix); - break; - } - case FWL_PART_MCD_TodayCircle: { - DrawTodayCircle(pParams, &pParams->m_matrix); - break; - } - case FWL_PART_MCD_DateInCircle: { - DrawDatesInCircle(pParams, &pParams->m_matrix); - break; - } - case FWL_PART_MCD_WeekNumSep: { - DrawWeekNumSep(pParams, &pParams->m_matrix); - break; - } - default: {} - } - return TRUE; -} -FX_BOOL CFWL_MonthCalendarTP::DrawText(CFWL_ThemeText* pParams) { - if (!m_pTextOut) - return FALSE; - if ((pParams->m_iPart == FWL_PART_MCD_DatesIn) && - !(pParams->m_dwStates & FWL_ITEMSTATE_MCD_Flag) && - (pParams->m_dwStates & - (FWL_PARTSTATE_MCD_Hovered | FWL_PARTSTATE_MCD_Selected))) { - m_pTextOut->SetTextColor(0xFFFFFFFF); - } else if (pParams->m_iPart == FWL_PART_MCD_Caption) { - m_pTextOut->SetTextColor(m_pThemeData->clrCaption); - } else { - m_pTextOut->SetTextColor(0xFF000000); - } - return CFWL_WidgetTP::DrawText(pParams); -} -void* CFWL_MonthCalendarTP::GetCapacity(CFWL_ThemePart* pThemePart, - FX_DWORD dwCapacity) { - FX_BOOL bDefPro = FALSE; - FX_BOOL bDwordVal = FALSE; - switch (dwCapacity) { - case FWL_WGTCAPACITY_MC_HEADER_WIDTH: { - m_fValue = FWL_THEMECAPACITY_MC_HEADER_WIDTH; - break; - } - case FWL_WGTCAPACITY_MC_HEADER_Height: { - m_fValue = FWL_THEMECAPACITY_MC_HEADER_HEIGHT; - break; - } - case FWL_WGTCAPACITY_MC_HEADER_BTN_WIDTH: { - m_fValue = FWL_THEMECAPACITY_MC_HEADER_BTN_WIDTH; - break; - } - case FWL_WGTCAPACITY_MC_HEADER_BTN_HEIGHT: { - m_fValue = FWL_THEMECAPACITY_MC_HEADER_BTN_HEIGHT; - break; - } - case FWL_WGTCAPACITY_MC_HEADER_BTN_HMARGIN: { - bDwordVal = TRUE; - m_dwValue = FWL_THEMECAPACITY_MC_HEADER_BTN_HMARGIN; - break; - } - case FWL_WGTCAPACITY_MC_HEADER_BTN_VMARGIN: { - m_fValue = FWL_THEMECAPACITY_MC_HEADER_BTN_VMARGIN; - break; - } - case FWL_WGTCAPACITY_MC_HEADER_TEXTWIDHT: { - m_fValue = FWL_THEMECAPACITY_MC_HEADER_TEXTWIDHT; - break; - } - case FWL_WGTCAPACITY_MC_HEADER_TEXTHEIGHT: { - m_fValue = FWL_THEMECAPACITY_MC_HEADER_TEXTHEIGHT; - break; - } - case FWL_WGTCAPACITY_MC_HEADER_TEXT_HMARGIN: { - m_fValue = FWL_THEMECAPACITY_MC_HEADER_TEXT_HMARGIN; - break; - } - case FWL_WGTCAPACITY_MC_HEADER_TEXT_VMARGIN: { - m_fValue = FWL_THEMECAPACITY_MC_HEADER_TEXT_VMARGIN; - break; - } - case FWL_WGTCAPACITY_MC_HSEP_WIDTH: { - m_fValue = FWL_THEMECAPACITY_MC_HSEP_WIDTH; - break; - } - case FWL_WGTCAPACITY_MC_HSEP_HEIGHT: { - m_fValue = FWL_THEMECAPACITY_MC_HSEP_HEIGHT; - break; - } - case FWL_WGTCAPACITY_MC_VSEP_WIDTH: { - m_fValue = FWL_THEMECAPACITY_MC_VSEP_WIDTH; - break; - } - case FWL_WGTCAPACITY_MC_VSEP_HEIGHT: { - m_fValue = FWL_THEMECAPACITY_MC_VSEP_HEIGHT; - break; - } - case FWL_WGTCAPACITY_MC_WEEKNUM_WIDTH: { - m_fValue = FWL_THEMECAPACITY_MC_WEEKNUM_WIDTH; - break; - } - case FWL_WGTCAPACITY_MC_WEEKNUM_HEIGHT: { - m_fValue = FWL_THEMECAPACITY_MC_WEEKNUM_HEIGHT; - break; - } - case FWL_WGTCAPACITY_MC_WEEK_WIDTH: { - m_fValue = FWL_THEMECAPACITY_MC_WEEK_WIDTH; - break; - } - case FWL_WGTCAPACITY_MC_WEEK_HEIGHT: { - m_fValue = FWL_THEMECAPACITY_MC_WEEK_HEIGHT; - break; - } - case FWL_WGTCAPACITY_MC_SEP_DOFFSET: { - m_fValue = FWL_THEMECAPACITY_MC_SEP_DOFFSET; - break; - } - case FWL_WGTCAPACITY_MC_SEP_X: { - m_fValue = FWL_THEMECAPACITY_MC_SEP_X; - break; - } - case FWL_WGTCAPACITY_MC_SEP_Y: { - m_fValue = FWL_THEMECAPACITY_MC_SEP_Y; - break; - } - case FWL_WGTCAPACITY_MC_DATES_CELL_WIDTH: { - m_fValue = FWL_THEMECAPACITY_MC_DATES_CELL_WIDTH; - break; - } - case FWL_WGTCAPACITY_MC_DATES_CELL_HEIGHT: { - m_fValue = FWL_THEMECAPACITY_MC_DATES_CELL_HEIGHT; - break; - } - case FWL_WGTCAPACITY_MC_TODAY_WIDHT: { - m_fValue = FWL_THEMECAPACITY_MC_TODAY_WIDHT; - break; - } - case FWL_WGTCAPACITY_MC_TODAY_HEIGHT: { - m_fValue = FWL_THEMECAPACITY_MC_TODAY_HEIGHT; - break; - } - case FWL_WGTCAPACITY_MC_TODAY_FLAG_WIDHT: { - m_fValue = FWL_THEMECAPACITY_MC_TODAY_FLAG_WIDHT; - break; - } - case FWL_WGTCAPACITY_MC_WIDTH: { - m_fValue = FWL_MC_WIDTH; - break; - } - case FWL_WGTCAPACITY_MC_HEIGHT: { - m_fValue = FWL_MC_HEIGHT; - break; - } - case FWL_MCCAPACITY_Sun: { - wsResource = L"Sun"; - return &wsResource; - } - case FWL_MCCAPACITY_Mon: { - wsResource = L"Mon"; - return &wsResource; - } - case FWL_MCCAPACITY_Tue: { - wsResource = L"Tue"; - return &wsResource; - } - case FWL_MCCAPACITY_Wed: { - wsResource = L"Wed"; - return &wsResource; - } - case FWL_MCCAPACITY_Thu: { - wsResource = L"Thu"; - return &wsResource; - } - case FWL_MCCAPACITY_Fri: { - wsResource = L"Fri"; - return &wsResource; - } - case FWL_MCCAPACITY_Sat: { - wsResource = L"Sat"; - return &wsResource; - } - case FWL_MCCAPACITY_January: { - wsResource = L"January"; - return &wsResource; - } - case FWL_MCCAPACITY_February: { - wsResource = L"February"; - return &wsResource; - } - case FWL_MCCAPACITY_March: { - wsResource = L"March"; - return &wsResource; - } - case FWL_MCCAPACITY_April: { - wsResource = L"April"; - return &wsResource; - } - case FWL_MCCAPACITY_May: { - wsResource = L"May"; - return &wsResource; - } - case FWL_MCCAPACITY_June: { - wsResource = L"June"; - return &wsResource; - } - case FWL_MCCAPACITY_July: { - wsResource = L"July"; - return &wsResource; - } - case FWL_MCCAPACITY_August: { - wsResource = L"August"; - return &wsResource; - } - case FWL_MCCAPACITY_September: { - wsResource = L"September"; - return &wsResource; - } - case FWL_MCCAPACITY_October: { - wsResource = L"October"; - return &wsResource; - } - case FWL_MCCAPACITY_November: { - wsResource = L"November"; - return &wsResource; - } - case FWL_MCCAPACITY_December: { - wsResource = L"December"; - return &wsResource; - } - case FWL_MCCAPACITY_Today: { - wsResource = L"Today"; - return &wsResource; - } - default: { bDefPro = TRUE; } - } - if (!bDefPro) { - if (bDwordVal) { - return &m_dwValue; - } - return &m_fValue; - } - return CFWL_WidgetTP::GetCapacity(pThemePart, dwCapacity); -} -FWL_ERR CFWL_MonthCalendarTP::Initialize() { - InitTTO(); - return CFWL_WidgetTP::Initialize(); -} -FWL_ERR CFWL_MonthCalendarTP::Finalize() { - FinalizeTTO(); - return CFWL_WidgetTP::Finalize(); -} -FX_BOOL CFWL_MonthCalendarTP::DrawTotalBK(CFWL_ThemeBackground* pParams, - CFX_Matrix* pMatrix) { - CFX_Path path; - path.Create(); - CFX_RectF rtTotal(pParams->m_rtPart); - path.AddRectangle(rtTotal.left, rtTotal.top, rtTotal.width, rtTotal.height); - pParams->m_pGraphics->SaveGraphState(); - CFX_Color clrBK(m_pThemeData->clrBK); - pParams->m_pGraphics->SetFillColor(&clrBK); - pParams->m_pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); - pParams->m_pGraphics->RestoreGraphState(); - return TRUE; -} -FX_BOOL CFWL_MonthCalendarTP::DrawHeadBk(CFWL_ThemeBackground* pParams, - CFX_Matrix* pMatrix) { - CFX_Path path; - path.Create(); - CFX_RectF rtHead = pParams->m_rtPart; - path.AddRectangle(rtHead.left, rtHead.top, rtHead.width, rtHead.height); - pParams->m_pGraphics->SaveGraphState(); - CFX_Color clrHeadBK(m_pThemeData->clrBK); - pParams->m_pGraphics->SetFillColor(&clrHeadBK); - pParams->m_pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); - pParams->m_pGraphics->RestoreGraphState(); - return TRUE; -} -FX_BOOL CFWL_MonthCalendarTP::DrawLButton(CFWL_ThemeBackground* pParams, - CFX_Matrix* pMatrix) { - CFX_Path path; - path.Create(); - CFX_RectF rtLBtn; - rtLBtn = pParams->m_rtPart; - path.AddRectangle(rtLBtn.left, rtLBtn.top, rtLBtn.width, rtLBtn.height); - pParams->m_pGraphics->SaveGraphState(); - CFX_Color clrLBtnEdge(ArgbEncode(0xff, 205, 219, 243)); - pParams->m_pGraphics->SetStrokeColor(&clrLBtnEdge); - pParams->m_pGraphics->StrokePath(&path, pMatrix); - if ((pParams->m_dwStates & FWL_PARTSTATE_MCD_Pressed) == - FWL_PARTSTATE_MCD_Pressed) { - CFX_Color clrLBtnFill(ArgbEncode(0xff, 174, 198, 242)); - pParams->m_pGraphics->SetFillColor(&clrLBtnFill); - pParams->m_pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); - } else { - CFX_Color clrLBtnFill(ArgbEncode(0xff, 227, 235, 249)); - pParams->m_pGraphics->SetFillColor(&clrLBtnFill); - pParams->m_pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); - } - path.Clear(); - path.MoveTo(rtLBtn.left + rtLBtn.Width() / 3 * 2, - rtLBtn.top + rtLBtn.height / 4); - path.LineTo(rtLBtn.left + rtLBtn.Width() / 3, rtLBtn.top + rtLBtn.height / 2); - path.LineTo(rtLBtn.left + rtLBtn.Width() / 3 * 2, - rtLBtn.bottom() - rtLBtn.height / 4); - CFX_Color clrFlag(ArgbEncode(0xff, 50, 104, 205)); - pParams->m_pGraphics->SetStrokeColor(&clrFlag); - pParams->m_pGraphics->StrokePath(&path, pMatrix); - pParams->m_pGraphics->RestoreGraphState(); - return TRUE; -} -FX_BOOL CFWL_MonthCalendarTP::DrawRButton(CFWL_ThemeBackground* pParams, - CFX_Matrix* pMatrix) { - CFX_Path path; - path.Create(); - CFX_RectF rtRBtn; - rtRBtn = pParams->m_rtPart; - path.AddRectangle(rtRBtn.left, rtRBtn.top, rtRBtn.width, rtRBtn.height); - pParams->m_pGraphics->SaveGraphState(); - CFX_Color clrRBtnEdge(ArgbEncode(0xff, 205, 219, 243)); - pParams->m_pGraphics->SetStrokeColor(&clrRBtnEdge); - pParams->m_pGraphics->StrokePath(&path, pMatrix); - if ((pParams->m_dwStates & FWL_PARTSTATE_MCD_Pressed) == - FWL_PARTSTATE_MCD_Pressed) { - CFX_Color clrRBtnFill(ArgbEncode(0xff, 174, 198, 242)); - pParams->m_pGraphics->SetFillColor(&clrRBtnFill); - pParams->m_pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); - } else { - CFX_Color clrRBtnFill(ArgbEncode(0xff, 227, 235, 249)); - pParams->m_pGraphics->SetFillColor(&clrRBtnFill); - pParams->m_pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); - } - path.Clear(); - path.MoveTo(rtRBtn.left + rtRBtn.Width() / 3, rtRBtn.top + rtRBtn.height / 4); - path.LineTo(rtRBtn.left + rtRBtn.Width() / 3 * 2, - rtRBtn.top + rtRBtn.height / 2); - path.LineTo(rtRBtn.left + rtRBtn.Width() / 3, - rtRBtn.bottom() - rtRBtn.height / 4); - CFX_Color clrFlag(ArgbEncode(0xff, 50, 104, 205)); - pParams->m_pGraphics->SetStrokeColor(&clrFlag); - pParams->m_pGraphics->StrokePath(&path, pMatrix); - pParams->m_pGraphics->RestoreGraphState(); - return TRUE; -} -FX_BOOL CFWL_MonthCalendarTP::DrawHSeperator(CFWL_ThemeBackground* pParams, - CFX_Matrix* pMatrix) { - CFX_Path path; - path.Create(); - CFX_RectF rtHSep; - rtHSep = pParams->m_rtPart; - path.MoveTo(rtHSep.left, rtHSep.top + rtHSep.height / 2); - path.LineTo(rtHSep.right(), rtHSep.top + rtHSep.height / 2); - pParams->m_pGraphics->SaveGraphState(); - CFX_Color clrHSep(m_pThemeData->clrSeperator); - pParams->m_pGraphics->SetStrokeColor(&clrHSep); - pParams->m_pGraphics->StrokePath(&path, pMatrix); - pParams->m_pGraphics->RestoreGraphState(); - return TRUE; -} -FX_BOOL CFWL_MonthCalendarTP::DrawWeekNumSep(CFWL_ThemeBackground* pParams, - CFX_Matrix* pMatrix) { - CFX_Path path; - path.Create(); - CFX_RectF rtWeekSep; - rtWeekSep = pParams->m_rtPart; - path.MoveTo(rtWeekSep.left, rtWeekSep.top); - path.LineTo(rtWeekSep.left, rtWeekSep.bottom()); - pParams->m_pGraphics->SaveGraphState(); - CFX_Color clrHSep(m_pThemeData->clrSeperator); - pParams->m_pGraphics->SetStrokeColor(&clrHSep); - pParams->m_pGraphics->StrokePath(&path, pMatrix); - pParams->m_pGraphics->RestoreGraphState(); - return TRUE; -} -FX_BOOL CFWL_MonthCalendarTP::DrawDatesInBK(CFWL_ThemeBackground* pParams, - CFX_Matrix* pMatrix) { - pParams->m_pGraphics->SaveGraphState(); - if (pParams->m_dwStates & FWL_PARTSTATE_MCD_Selected) { - CFX_Path path; - path.Create(); - CFX_RectF rtSelDay; - rtSelDay = pParams->m_rtPart; - path.AddRectangle(rtSelDay.left, rtSelDay.top, rtSelDay.width, - rtSelDay.height); - CFX_Color clrSelDayBK; - clrSelDayBK = m_pThemeData->clrDatesSelectedBK; - pParams->m_pGraphics->SetFillColor(&clrSelDayBK); - pParams->m_pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); - } else if (pParams->m_dwStates & FWL_PARTSTATE_MCD_Hovered) { - CFX_Path path; - path.Create(); - CFX_RectF rtSelDay; - rtSelDay = pParams->m_rtPart; - path.AddRectangle(rtSelDay.left, rtSelDay.top, rtSelDay.width, - rtSelDay.height); - CFX_Color clrSelDayBK; - clrSelDayBK = m_pThemeData->clrDatesHoverBK; - pParams->m_pGraphics->SetFillColor(&clrSelDayBK); - pParams->m_pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); - } - pParams->m_pGraphics->RestoreGraphState(); - return FALSE; -} -FX_BOOL CFWL_MonthCalendarTP::DrawDatesInCircle(CFWL_ThemeBackground* pParams, - CFX_Matrix* pMatrix) { - CFX_Path path; - path.Create(); - CFX_RectF rtSelDay; - rtSelDay = pParams->m_rtPart; - path.AddRectangle(rtSelDay.left, rtSelDay.top, rtSelDay.width, - rtSelDay.height); - pParams->m_pGraphics->SaveGraphState(); - CFX_Color clrSelDayBK; - clrSelDayBK = m_pThemeData->clrDatesCircle; - pParams->m_pGraphics->SetStrokeColor(&clrSelDayBK); - pParams->m_pGraphics->StrokePath(&path, pMatrix); - pParams->m_pGraphics->RestoreGraphState(); - return TRUE; -} -FX_BOOL CFWL_MonthCalendarTP::DrawTodayCircle(CFWL_ThemeBackground* pParams, - CFX_Matrix* pMatrix) { - CFX_Path path; - path.Create(); - CFX_RectF rtTodayCircle; - rtTodayCircle = pParams->m_rtPart; - path.AddRectangle(rtTodayCircle.left, rtTodayCircle.top, rtTodayCircle.width, - rtTodayCircle.height); - pParams->m_pGraphics->SaveGraphState(); - CFX_Color clrTodayCircle; - clrTodayCircle = m_pThemeData->clrDatesCircle; - pParams->m_pGraphics->SetStrokeColor(&clrTodayCircle); - pParams->m_pGraphics->StrokePath(&path, pMatrix); - pParams->m_pGraphics->RestoreGraphState(); - return TRUE; -} -FWLTHEME_STATE CFWL_MonthCalendarTP::GetState(FX_DWORD dwFWLStates) { - if (dwFWLStates & FWL_PARTSTATE_MCD_Hovered) { - return FWLTHEME_STATE_Hover; - } else if (dwFWLStates & FWL_PARTSTATE_MCD_Pressed) { - return FWLTHEME_STATE_Pressed; - } - return FWLTHEME_STATE_Normal; -} -void CFWL_MonthCalendarTP::SetThemeData(FX_DWORD dwThemeID) { - if (dwThemeID == 0) { - m_pThemeData->clrCaption = ArgbEncode(0xff, 0, 153, 255); - m_pThemeData->clrSeperator = ArgbEncode(0xff, 141, 161, 239); - m_pThemeData->clrDatesHoverBK = ArgbEncode(0xff, 193, 211, 251); - m_pThemeData->clrDatesSelectedBK = ArgbEncode(0xff, 173, 188, 239); - m_pThemeData->clrDatesCircle = ArgbEncode(0xff, 103, 144, 209); - m_pThemeData->clrToday = ArgbEncode(0xff, 0, 0, 0); - m_pThemeData->clrBK = ArgbEncode(0xff, 255, 255, 255); - } else { - m_pThemeData->clrCaption = ArgbEncode(0xff, 128, 128, 0); - m_pThemeData->clrSeperator = ArgbEncode(0xff, 128, 128, 64); - m_pThemeData->clrDatesHoverBK = ArgbEncode(0xff, 217, 220, 191); - m_pThemeData->clrDatesSelectedBK = ArgbEncode(0xff, 204, 208, 183); - m_pThemeData->clrDatesCircle = ArgbEncode(0xff, 128, 128, 0); - m_pThemeData->clrToday = ArgbEncode(0xff, 0, 0, 0); - m_pThemeData->clrBK = ArgbEncode(0xff, 255, 255, 255); - } -} diff --git a/xfa/src/fwl/theme/pictureboxtp.cpp b/xfa/src/fwl/theme/pictureboxtp.cpp deleted file mode 100644 index 5d7c079e86..0000000000 --- a/xfa/src/fwl/theme/pictureboxtp.cpp +++ /dev/null @@ -1,36 +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/include/fwl/theme/pictureboxtp.h" - -#include "xfa/include/fwl/basewidget/fwl_picturebox.h" -#include "xfa/include/fwl/core/fwl_widget.h" - -CFWL_PictureBoxTP::CFWL_PictureBoxTP() {} -CFWL_PictureBoxTP::~CFWL_PictureBoxTP() {} - -FX_BOOL CFWL_PictureBoxTP::IsValidWidget(IFWL_Widget* pWidget) { - if (!pWidget) - return FALSE; - return pWidget->GetClassID() == FWL_CLASSHASH_PictureBox; -} -FX_BOOL CFWL_PictureBoxTP::DrawBackground(CFWL_ThemeBackground* pParams) { - if (!pParams) - return FALSE; - switch (pParams->m_iPart) { - case FWL_PART_PTB_Border: { - DrawBorder(pParams->m_pGraphics, &pParams->m_rtPart, &pParams->m_matrix); - break; - } - case FWL_PART_PTB_Edge: { - DrawEdge(pParams->m_pGraphics, pParams->m_pWidget->GetStyles(), - &pParams->m_rtPart, &pParams->m_matrix); - break; - } - default: {} - } - return TRUE; -} diff --git a/xfa/src/fwl/theme/pushbuttontp.cpp b/xfa/src/fwl/theme/pushbuttontp.cpp deleted file mode 100644 index 76e0eab7dc..0000000000 --- a/xfa/src/fwl/theme/pushbuttontp.cpp +++ /dev/null @@ -1,157 +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/include/fwl/theme/pushbuttontp.h" - -#include "xfa/include/fwl/basewidget/fwl_pushbutton.h" -#include "xfa/include/fwl/core/fwl_widget.h" - -#define PUSHBUTTON_SIZE_Corner 2 - -CFWL_PushButtonTP::CFWL_PushButtonTP() { - m_pThemeData = new PBThemeData; - SetThemeData(0); -} -CFWL_PushButtonTP::~CFWL_PushButtonTP() { - if (m_pThemeData) { - delete m_pThemeData; - } -} -FX_BOOL CFWL_PushButtonTP::IsValidWidget(IFWL_Widget* pWidget) { - return pWidget->GetClassID() == FWL_CLASSHASH_PushButton; -} -FX_DWORD CFWL_PushButtonTP::SetThemeID(IFWL_Widget* pWidget, - FX_DWORD dwThemeID, - FX_BOOL bChildren) { - SetThemeData(FWL_GetThemeColor(dwThemeID)); - return CFWL_WidgetTP::SetThemeID(pWidget, dwThemeID, bChildren); -} -FX_BOOL CFWL_PushButtonTP::DrawBackground(CFWL_ThemeBackground* pParams) { - switch (pParams->m_iPart) { - case FWL_PART_PSB_Border: { - DrawBorder(pParams->m_pGraphics, &pParams->m_rtPart, &pParams->m_matrix); - break; - } - case FWL_PART_PSB_Edge: { - DrawEdge(pParams->m_pGraphics, pParams->m_pWidget->GetStyles(), - &pParams->m_rtPart, &pParams->m_matrix); - break; - } - case FWL_PART_PSB_Background: { - CFX_RectF& rect = pParams->m_rtPart; - FX_FLOAT fRight = rect.right(); - FX_FLOAT fBottom = rect.bottom(); - CFX_Path strokePath; - strokePath.Create(); - strokePath.MoveTo(rect.left + PUSHBUTTON_SIZE_Corner, rect.top); - strokePath.LineTo(fRight - PUSHBUTTON_SIZE_Corner, rect.top); - strokePath.LineTo(fRight, rect.top + PUSHBUTTON_SIZE_Corner); - strokePath.LineTo(fRight, fBottom - PUSHBUTTON_SIZE_Corner); - strokePath.LineTo(fRight - PUSHBUTTON_SIZE_Corner, fBottom); - strokePath.LineTo(rect.left + PUSHBUTTON_SIZE_Corner, fBottom); - strokePath.LineTo(rect.left, fBottom - PUSHBUTTON_SIZE_Corner); - strokePath.LineTo(rect.left, rect.top + PUSHBUTTON_SIZE_Corner); - strokePath.LineTo(rect.left + PUSHBUTTON_SIZE_Corner, rect.top); - CFX_Path fillPath; - fillPath.Create(); - fillPath.AddSubpath(&strokePath); - CFX_Graphics* pGraphics = pParams->m_pGraphics; - pGraphics->SaveGraphState(); - CFX_RectF rtInner(rect); - rtInner.Deflate(PUSHBUTTON_SIZE_Corner + 1, PUSHBUTTON_SIZE_Corner + 1, - PUSHBUTTON_SIZE_Corner, PUSHBUTTON_SIZE_Corner); - fillPath.AddRectangle(rtInner.left, rtInner.top, rtInner.width, - rtInner.height); - int32_t iColor = GetColorID(pParams->m_dwStates); - DrawAxialShading(pGraphics, rect.left + PUSHBUTTON_SIZE_Corner, rect.top, - rect.left + PUSHBUTTON_SIZE_Corner, rect.bottom(), - m_pThemeData->clrStart[iColor], - m_pThemeData->clrEnd[iColor], &fillPath, - FXFILL_ALTERNATE, &pParams->m_matrix); - CFX_Color crStroke(m_pThemeData->clrBorder[iColor]); - pGraphics->SetStrokeColor(&crStroke); - pGraphics->StrokePath(&strokePath, &pParams->m_matrix); - fillPath.Clear(); - fillPath.AddRectangle(rtInner.left, rtInner.top, rtInner.width, - rtInner.height); - CFX_Color crFill(m_pThemeData->clrFill[iColor]); - pGraphics->SetFillColor(&crFill); - pGraphics->FillPath(&fillPath, FXFILL_WINDING, &pParams->m_matrix); - if (pParams->m_dwStates & FWL_PARTSTATE_PSB_Focused) { - rtInner.Inflate(1, 1, 0, 0); - DrawFocus(pGraphics, &rtInner, &pParams->m_matrix); - } - pGraphics->RestoreGraphState(); - break; - } - default: {} - } - return TRUE; -} -void* CFWL_PushButtonTP::GetCapacity(CFWL_ThemePart* pThemePart, - FX_DWORD dwCapacity) { - if (dwCapacity == FWL_WGTCAPACITY_PSB_Margin) { - m_fValue = 0; - return &m_fValue; - } - return CFWL_WidgetTP::GetCapacity(pThemePart, dwCapacity); -} -FWL_ERR CFWL_PushButtonTP::Initialize() { - InitTTO(); - return CFWL_WidgetTP::Initialize(); -} -FWL_ERR CFWL_PushButtonTP::Finalize() { - FinalizeTTO(); - return CFWL_WidgetTP::Finalize(); -} -void CFWL_PushButtonTP::SetThemeData(FX_DWORD dwID) { - if (dwID) { - m_pThemeData->clrBorder[0] = ArgbEncode(255, 55, 98, 6); - m_pThemeData->clrBorder[1] = ArgbEncode(255, 55, 98, 6); - m_pThemeData->clrBorder[2] = ArgbEncode(255, 55, 98, 6); - m_pThemeData->clrBorder[3] = ArgbEncode(255, 55, 98, 6); - m_pThemeData->clrBorder[4] = ArgbEncode(255, 172, 168, 153); - m_pThemeData->clrStart[0] = ArgbEncode(255, 255, 255, 246); - m_pThemeData->clrStart[1] = ArgbEncode(255, 223, 205, 180); - m_pThemeData->clrStart[2] = ArgbEncode(255, 252, 197, 149); - m_pThemeData->clrStart[3] = ArgbEncode(255, 194, 209, 143); - m_pThemeData->clrStart[4] = ArgbEncode(255, 216, 216, 216); - m_pThemeData->clrEnd[0] = ArgbEncode(255, 227, 209, 184); - m_pThemeData->clrEnd[1] = ArgbEncode(255, 248, 244, 228); - m_pThemeData->clrEnd[2] = ArgbEncode(255, 207, 114, 37); - m_pThemeData->clrEnd[3] = ArgbEncode(255, 144, 193, 84); - m_pThemeData->clrEnd[4] = ArgbEncode(255, 172, 168, 153); - m_pThemeData->clrFill[0] = ArgbEncode(255, 255, 255, 255); - m_pThemeData->clrFill[1] = ArgbEncode(255, 226, 225, 218); - m_pThemeData->clrFill[2] = ArgbEncode(255, 255, 255, 255); - m_pThemeData->clrFill[3] = ArgbEncode(255, 255, 255, 255); - m_pThemeData->clrFill[4] = ArgbEncode(255, 245, 244, 234); - } else { - m_pThemeData->clrBorder[0] = ArgbEncode(255, 0, 60, 116); - m_pThemeData->clrBorder[1] = ArgbEncode(255, 0, 60, 116); - m_pThemeData->clrBorder[2] = ArgbEncode(255, 0, 60, 116); - m_pThemeData->clrBorder[3] = ArgbEncode(255, 0, 60, 116); - m_pThemeData->clrBorder[4] = ArgbEncode(255, 201, 199, 186); - m_pThemeData->clrStart[0] = ArgbEncode(255, 255, 255, 255); - m_pThemeData->clrStart[1] = ArgbEncode(255, 209, 204, 193); - m_pThemeData->clrStart[2] = ArgbEncode(255, 255, 240, 207); - m_pThemeData->clrStart[3] = ArgbEncode(255, 206, 231, 255); - m_pThemeData->clrStart[4] = ArgbEncode(255, 245, 244, 234); - m_pThemeData->clrEnd[0] = ArgbEncode(255, 214, 208, 197); - m_pThemeData->clrEnd[1] = ArgbEncode(255, 242, 241, 238); - m_pThemeData->clrEnd[2] = ArgbEncode(255, 229, 151, 0); - m_pThemeData->clrEnd[3] = ArgbEncode(255, 105, 130, 238); - m_pThemeData->clrEnd[4] = ArgbEncode(255, 245, 244, 234); - m_pThemeData->clrFill[0] = ArgbEncode(255, 255, 255, 255); - m_pThemeData->clrFill[1] = ArgbEncode(255, 226, 225, 218); - m_pThemeData->clrFill[2] = ArgbEncode(255, 255, 255, 255); - m_pThemeData->clrFill[3] = ArgbEncode(255, 255, 255, 255); - m_pThemeData->clrFill[4] = ArgbEncode(255, 245, 244, 234); - } -} -int32_t CFWL_PushButtonTP::GetColorID(FX_DWORD dwStates) { - return dwStates &= FWL_PARTSTATE_PSB_Mask; -} diff --git a/xfa/src/fwl/theme/scrollbartp.cpp b/xfa/src/fwl/theme/scrollbartp.cpp deleted file mode 100644 index 424ff549e5..0000000000 --- a/xfa/src/fwl/theme/scrollbartp.cpp +++ /dev/null @@ -1,377 +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/include/fwl/theme/scrollbartp.h" - -#include "xfa/include/fwl/basewidget/fwl_scrollbar.h" -#include "xfa/include/fwl/core/fwl_widget.h" - -#define FWL_SCROLL_PawLen 12.5f - -CFWL_ScrollBarTP::CFWL_ScrollBarTP() { - m_pThemeData = new SBThemeData; - SetThemeData(0); -} -CFWL_ScrollBarTP::~CFWL_ScrollBarTP() { - if (m_pThemeData) { - delete m_pThemeData; - m_pThemeData = NULL; - } -} -FX_BOOL CFWL_ScrollBarTP::IsValidWidget(IFWL_Widget* pWidget) { - if (!pWidget) - return FALSE; - return pWidget->GetClassID() == FWL_CLASSHASH_ScrollBar; -} -void* CFWL_ScrollBarTP::GetCapacity(CFWL_ThemePart* pThemePart, - FX_DWORD dwCapacity) { - if (dwCapacity == FWL_CAPACITY_SCB_Size) { - m_fValue = 5; - return &m_fValue; - } - return CFWL_WidgetTP::GetCapacity(pThemePart, dwCapacity); -} -FX_DWORD CFWL_ScrollBarTP::SetThemeID(IFWL_Widget* pWidget, - FX_DWORD dwThemeID, - FX_BOOL bChildren) { - if (m_pThemeData) { - SetThemeData(FWL_GetThemeColor(dwThemeID)); - } - return CFWL_WidgetTP::SetThemeID(pWidget, dwThemeID, bChildren); -} -FX_BOOL CFWL_ScrollBarTP::DrawBackground(CFWL_ThemeBackground* pParams) { - if (!pParams) - return FALSE; - IFWL_Widget* pWidget = pParams->m_pWidget; - FWLTHEME_STATE eState = FWLTHEME_STATE_Normal; - switch (pParams->m_dwStates & 0x03) { - case FWL_PARTSTATE_SCB_Hovered: { - eState = FWLTHEME_STATE_Hover; - break; - } - case FWL_PARTSTATE_SCB_Pressed: { - eState = FWLTHEME_STATE_Pressed; - break; - } - case FWL_PARTSTATE_SCB_Disabled: { - eState = FWLTHEME_STATE_Disabale; - break; - } - } - CFX_Graphics* pGraphics = pParams->m_pGraphics; - CFX_RectF* pRect = &pParams->m_rtPart; - FX_BOOL bVert = pWidget->GetStylesEx(); - switch (pParams->m_iPart) { - case FWL_PART_SCB_ForeArrow: { - DrawMaxMinBtn(pGraphics, pRect, - bVert ? FWLTHEME_DIRECTION_Up : FWLTHEME_DIRECTION_Left, - eState, &pParams->m_matrix); - break; - } - case FWL_PART_SCB_BackArrow: { - DrawMaxMinBtn(pGraphics, pRect, - bVert ? FWLTHEME_DIRECTION_Down : FWLTHEME_DIRECTION_Right, - eState, &pParams->m_matrix); - break; - } - case FWL_PART_SCB_Thumb: { - DrawThumbBtn(pGraphics, pRect, bVert, eState, TRUE, &pParams->m_matrix); - break; - } - case FWL_PART_SCB_LowerTrack: { - DrawTrack(pGraphics, pRect, bVert, eState, TRUE, &pParams->m_matrix); - break; - } - case FWL_PART_SCB_UpperTrack: { - DrawTrack(pGraphics, pRect, bVert, eState, FALSE, &pParams->m_matrix); - break; - } - default: {} - } - return TRUE; -} -#ifdef THEME_XPSimilar -void CFWL_ScrollBarTP::DrawThumbBtn(CFX_Graphics* pGraphics, - const CFX_RectF* pRect, - FX_BOOL bVert, - FWLTHEME_STATE eState, - FX_BOOL bPawButton, - CFX_Matrix* pMatrix) { - if (eState < FWLTHEME_STATE_Normal || eState > FWLTHEME_STATE_Disabale) { - return; - } - CFX_Path path; - path.Create(); - CFX_RectF rect(*pRect); - if (bVert) { - rect.Deflate(1, 0); - if (rect.IsEmpty(0.1f)) { - return; - } - path.AddRectangle(rect.left, rect.top, rect.width, rect.height); - DrawAxialShading(pGraphics, rect.left, rect.top, rect.right(), rect.top, - m_pThemeData->clrBtnBK[eState - 1][0], - m_pThemeData->clrBtnBK[eState - 1][1], &path, - FXFILL_WINDING, pMatrix); - CFX_Color rcStroke; - rcStroke.Set(m_pThemeData->clrBtnBorder[eState - 1]); - pGraphics->SaveGraphState(); - pGraphics->SetStrokeColor(&rcStroke); - pGraphics->StrokePath(&path, pMatrix); - pGraphics->RestoreGraphState(); - } else { - rect.Deflate(0, 1); - if (rect.IsEmpty(0.1f)) { - return; - } - path.AddRectangle(rect.left, rect.top, rect.width, rect.height); - DrawAxialShading(pGraphics, rect.left, rect.top, rect.left, rect.bottom(), - m_pThemeData->clrBtnBK[eState - 1][0], - m_pThemeData->clrBtnBK[eState - 1][1], &path, - FXFILL_WINDING, pMatrix); - CFX_Color rcStroke; - rcStroke.Set(m_pThemeData->clrBtnBorder[eState - 1]); - pGraphics->SaveGraphState(); - pGraphics->SetStrokeColor(&rcStroke); - pGraphics->StrokePath(&path, pMatrix); - pGraphics->RestoreGraphState(); - } -} -void CFWL_ScrollBarTP::DrawPaw(CFX_Graphics* pGraphics, - const CFX_RectF* pRect, - FX_BOOL bVert, - FWLTHEME_STATE eState, - CFX_Matrix* pMatrix) { - CFX_Path path; - path.Create(); - if (bVert) { - FX_FLOAT fPawLen = FWL_SCROLL_PawLen; - if (pRect->width / 2 <= fPawLen) { - fPawLen = (pRect->width - 6) / 2; - } - FX_FLOAT fX = pRect->left + pRect->width / 4; - FX_FLOAT fY = pRect->top + pRect->height / 2; - path.MoveTo(fX, fY - 4); - path.LineTo(fX + fPawLen, fY - 4); - path.MoveTo(fX, fY - 2); - path.LineTo(fX + fPawLen, fY - 2); - path.MoveTo(fX, fY); - path.LineTo(fX + fPawLen, fY); - path.MoveTo(fX, fY + 2); - path.LineTo(fX + fPawLen, fY + 2); - CFX_Color clrLight(m_pThemeData->clrPawColorLight[eState - 1]); - pGraphics->SetLineWidth(1); - pGraphics->SetStrokeColor(&clrLight); - pGraphics->StrokePath(&path); - fX++; - path.Clear(); - path.MoveTo(fX, fY - 3); - path.LineTo(fX + fPawLen, fY - 3); - path.MoveTo(fX, fY - 1); - path.LineTo(fX + fPawLen, fY - 1); - path.MoveTo(fX, fY + 1); - path.LineTo(fX + fPawLen, fY + 1); - path.MoveTo(fX, fY + 3); - path.LineTo(fX + fPawLen, fY + 3); - CFX_Color clrDark(m_pThemeData->clrPawColorDark[eState - 1]); - pGraphics->SetLineWidth(1); - pGraphics->SetStrokeColor(&clrDark); - pGraphics->StrokePath(&path, pMatrix); - } else { - FX_FLOAT fPawLen = FWL_SCROLL_PawLen; - if (pRect->height / 2 <= fPawLen) { - fPawLen = (pRect->height - 6) / 2; - } - FX_FLOAT fX = pRect->left + pRect->width / 2; - FX_FLOAT fY = pRect->top + pRect->height / 4; - path.MoveTo(fX - 4, fY); - path.LineTo(fX - 4, fY + fPawLen); - path.MoveTo(fX - 2, fY); - path.LineTo(fX - 2, fY + fPawLen); - path.MoveTo(fX, fY); - path.LineTo(fX, fY + fPawLen); - path.MoveTo(fX + 2, fY); - path.LineTo(fX + 2, fY + fPawLen); - CFX_Color clrLight(m_pThemeData->clrPawColorLight[eState - 1]); - pGraphics->SetLineWidth(1); - pGraphics->SetStrokeColor(&clrLight); - pGraphics->StrokePath(&path, pMatrix); - fY++; - path.Clear(); - path.MoveTo(fX - 3, fY); - path.LineTo(fX - 3, fY + fPawLen); - path.MoveTo(fX - 1, fY); - path.LineTo(fX - 1, fY + fPawLen); - path.MoveTo(fX + 1, fY); - path.LineTo(fX + 1, fY + fPawLen); - path.MoveTo(fX + 3, fY); - path.LineTo(fX + 3, fY + fPawLen); - CFX_Color clrDark(m_pThemeData->clrPawColorDark[eState - 1]); - pGraphics->SetLineWidth(1); - pGraphics->SetStrokeColor(&clrDark); - pGraphics->StrokePath(&path, pMatrix); - } -} -void CFWL_ScrollBarTP::DrawTrack(CFX_Graphics* pGraphics, - const CFX_RectF* pRect, - FX_BOOL bVert, - FWLTHEME_STATE eState, - FX_BOOL bLowerTrack, - CFX_Matrix* pMatrix) { - if (eState < FWLTHEME_STATE_Normal || eState > FWLTHEME_STATE_Disabale) { - return; - } - pGraphics->SaveGraphState(); - CFX_Color colorLine(ArgbEncode(255, 238, 237, 229)); - CFX_Path path; - path.Create(); - FX_FLOAT fRight = pRect->right(); - FX_FLOAT fBottom = pRect->bottom(); - if (bVert) { - path.AddRectangle(pRect->left, pRect->top, 1, pRect->height); - path.AddRectangle(fRight - 1, pRect->top, 1, pRect->height); - } else { - path.AddRectangle(pRect->left, pRect->top, pRect->width, 1); - path.AddRectangle(pRect->left, fBottom - 1, pRect->width, 1); - } - pGraphics->SetFillColor(&colorLine); - pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); - path.Clear(); - path.AddRectangle(pRect->left + 1, pRect->top, pRect->width - 2, - pRect->height); - FX_FLOAT x1 = bVert ? pRect->left + 1 : pRect->left; - FX_FLOAT y1 = bVert ? pRect->top : pRect->top + 1; - FX_FLOAT x2 = bVert ? fRight - 1 : pRect->left; - FX_FLOAT y2 = bVert ? pRect->top : fBottom - 1; - pGraphics->RestoreGraphState(); - DrawAxialShading(pGraphics, x1, y1, x2, y2, m_pThemeData->clrTrackBKStart, - m_pThemeData->clrTrackBKEnd, &path, FXFILL_WINDING, pMatrix); -} -void CFWL_ScrollBarTP::DrawMaxMinBtn(CFX_Graphics* pGraphics, - const CFX_RectF* pRect, - FWLTHEME_DIRECTION eDict, - FWLTHEME_STATE eState, - CFX_Matrix* pMatrix) { - DrawTrack(pGraphics, pRect, - eDict == FWLTHEME_DIRECTION_Up || eDict == FWLTHEME_DIRECTION_Down, - eState, TRUE, pMatrix); - CFX_RectF rtArrowBtn(*pRect); - rtArrowBtn.Deflate(1, 1, 1, 1); - DrawArrowBtn(pGraphics, &rtArrowBtn, eDict, eState, pMatrix); -} -#else -void CFWL_ScrollBarTP::DrawThumbBtn(CFX_Graphics* pGraphics, - const CFX_RectF* pRect, - FX_BOOL bVert, - FWLTHEME_STATE eState, - FX_BOOL bPawButton, - CFX_Matrix* pMatrix) { - if (pRect->IsEmpty()) { - return; - } - CFX_RectF rtThumb(*pRect); - FX_FLOAT fWidth = 2; - Draw3DRect(pGraphics, FWLTHEME_EDGE_Raised, fWidth, pRect, - FWLTHEME_COLOR_EDGELT1, FWLTHEME_COLOR_EDGELT2, - FWLTHEME_COLOR_EDGERB1, FWLTHEME_COLOR_EDGERB2, pMatrix); - CFX_Path path; - path.Create(); - path.AddRectangle(pRect->left + fWidth, pRect->top + fWidth, - pRect->width - 2 * fWidth, pRect->height - 2 * fWidth); - pGraphics->SaveGraphState(); - CFX_Color crFill(FWLTHEME_COLOR_Background); - pGraphics->SetFillColor(&crFill); - pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); - pGraphics->RestoreGraphState(); -} -void CFWL_ScrollBarTP::DrawTrack(CFX_Graphics* pGraphics, - const CFX_RectF* pRect, - FX_BOOL bVert, - FWLTHEME_STATE eState, - FX_BOOL bLowerTrack, - CFX_Matrix* pMatrix) { - if (pRect->IsEmpty()) { - return; - } - CFX_Path path; - path.Create(); - path.AddRectangle(pRect->left, pRect->top, pRect->width, pRect->height); - pGraphics->SaveGraphState(); - CFX_Color clrFill(0xFFF0F0F0); - pGraphics->SetFillColor(&clrFill); - pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); - pGraphics->RestoreGraphState(); -} -void CFWL_ScrollBarTP::DrawMaxMinBtn(CFX_Graphics* pGraphics, - const CFX_RectF* pRect, - FWLTHEME_DIRECTION eDict, - FWLTHEME_STATE eState, - CFX_Matrix* pMatrix) { - CFX_RectF rtThumb(*pRect); - FX_FLOAT fWidth = eState == FWLTHEME_STATE_Pressed ? 1.0f : 2.0f; - FWLTHEME_EDGE eType = eState == FWLTHEME_STATE_Pressed ? FWLTHEME_EDGE_Flat - : FWLTHEME_EDGE_Raised; - Draw3DRect(pGraphics, eType, fWidth, pRect, FWLTHEME_COLOR_EDGELT1, - FWLTHEME_COLOR_EDGELT2, FWLTHEME_COLOR_EDGERB1, - FWLTHEME_COLOR_EDGERB2, pMatrix); - CFX_Path path; - path.Create(); - path.AddRectangle(pRect->left + fWidth, pRect->top + fWidth, - pRect->width - 2 * fWidth, pRect->height - 2 * fWidth); - pGraphics->SaveGraphState(); - CFX_Color crFill(FWLTHEME_COLOR_Background); - pGraphics->SetFillColor(&crFill); - pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); - pGraphics->RestoreGraphState(); - DrawArrow(pGraphics, pRect, eDict, - eState == FWLTHEME_STATE_Disabale ? 0xFFA0A0A0 : 0xFF000000, - eState == FWLTHEME_STATE_Pressed, pMatrix); -} -#endif -void CFWL_ScrollBarTP::SetThemeData(FX_DWORD dwID) { - m_pThemeData->clrPawColorLight[3] = ArgbEncode(0xff, 208, 223, 172); - m_pThemeData->clrPawColorDark[3] = ArgbEncode(0xff, 140, 157, 115); - m_pThemeData->clrBtnBK[3][0] = ArgbEncode(0xff, 164, 180, 139); - m_pThemeData->clrBtnBK[3][1] = ArgbEncode(0xff, 141, 157, 115); - m_pThemeData->clrBtnBorder[3] = ArgbEncode(0xff, 236, 233, 216); - if (dwID) { - m_pThemeData->clrPawColorLight[0] = ArgbEncode(0xff, 208, 223, 172); - m_pThemeData->clrPawColorDark[0] = ArgbEncode(0xff, 140, 157, 115); - m_pThemeData->clrBtnBK[0][0] = ArgbEncode(0xff, 162, 179, 141); - m_pThemeData->clrBtnBK[0][1] = ArgbEncode(0xff, 149, 167, 117); - m_pThemeData->clrBtnBorder[0] = ArgbEncode(0xff, 142, 153, 125); - m_pThemeData->clrPawColorLight[1] = ArgbEncode(0xff, 235, 245, 212); - m_pThemeData->clrPawColorDark[1] = ArgbEncode(0xff, 182, 198, 142); - m_pThemeData->clrBtnBK[1][0] = ArgbEncode(0xff, 200, 213, 170); - m_pThemeData->clrBtnBK[1][1] = ArgbEncode(0xff, 195, 208, 150); - m_pThemeData->clrBtnBorder[1] = ArgbEncode(0xff, 189, 203, 150); - m_pThemeData->clrPawColorLight[2] = ArgbEncode(0xff, 208, 223, 172); - m_pThemeData->clrPawColorDark[2] = ArgbEncode(0xff, 140, 157, 115); - m_pThemeData->clrBtnBK[2][0] = ArgbEncode(0xff, 164, 180, 139); - m_pThemeData->clrBtnBK[2][1] = ArgbEncode(0xff, 141, 157, 115); - m_pThemeData->clrBtnBorder[2] = ArgbEncode(0xff, 128, 146, 102); - m_pThemeData->clrTrackBKStart = ArgbEncode(0xff, 243, 241, 236); - m_pThemeData->clrTrackBKEnd = ArgbEncode(0xff, 254, 254, 251); - } else { - m_pThemeData->clrPawColorLight[0] = ArgbEncode(0xff, 238, 244, 254); - m_pThemeData->clrPawColorDark[0] = ArgbEncode(0xff, 140, 176, 248); - m_pThemeData->clrBtnBK[0][0] = ArgbEncode(0xff, 197, 213, 252); - m_pThemeData->clrBtnBK[0][1] = ArgbEncode(0xff, 182, 205, 251); - m_pThemeData->clrBtnBorder[0] = ArgbEncode(0xff, 148, 176, 221); - m_pThemeData->clrPawColorLight[1] = ArgbEncode(0xff, 252, 253, 255); - m_pThemeData->clrPawColorDark[1] = ArgbEncode(0xff, 156, 197, 255); - m_pThemeData->clrBtnBK[1][0] = ArgbEncode(0xff, 216, 232, 255); - m_pThemeData->clrBtnBK[1][1] = ArgbEncode(0xff, 204, 225, 255); - m_pThemeData->clrBtnBorder[1] = ArgbEncode(0xff, 218, 230, 254); - m_pThemeData->clrPawColorLight[2] = ArgbEncode(0xff, 207, 221, 253); - m_pThemeData->clrPawColorDark[2] = ArgbEncode(0xff, 131, 158, 216); - m_pThemeData->clrBtnBK[2][0] = ArgbEncode(0xff, 167, 190, 245); - m_pThemeData->clrBtnBK[2][1] = ArgbEncode(0xff, 146, 179, 249); - m_pThemeData->clrBtnBorder[2] = ArgbEncode(0xff, 124, 159, 211); - m_pThemeData->clrTrackBKStart = ArgbEncode(0xff, 243, 241, 236); - m_pThemeData->clrTrackBKEnd = ArgbEncode(0xff, 254, 254, 251); - } -} diff --git a/xfa/src/fwl/theme/widgettp.cpp b/xfa/src/fwl/theme/widgettp.cpp deleted file mode 100644 index c26a62c561..0000000000 --- a/xfa/src/fwl/theme/widgettp.cpp +++ /dev/null @@ -1,840 +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/include/fwl/theme/widgettp.h" - -#include <algorithm> - -#include "xfa/include/fwl/core/fwl_widgetmgr.h" -#include "xfa/src/fde/tto/fde_textout.h" - -static void FWL_SetChildThemeID(IFWL_Widget* pParent, FX_DWORD dwThemeID) { - IFWL_WidgetMgr* pWidgetMgr = FWL_GetWidgetMgr(); - IFWL_Widget* pChild = - pWidgetMgr->GetWidget(pParent, FWL_WGTRELATION_FirstChild); - while (pChild) { - IFWL_ThemeProvider* pTheme = pChild->GetThemeProvider(); - if (pTheme) { - pTheme->SetThemeID(pChild, dwThemeID, FALSE); - } - FWL_SetChildThemeID(pChild, dwThemeID); - pChild = pWidgetMgr->GetWidget(pChild, FWL_WGTRELATION_NextSibling); - } -} -FX_BOOL CFWL_WidgetTP::IsValidWidget(IFWL_Widget* pWidget) { - return FALSE; -} -FX_DWORD CFWL_WidgetTP::GetThemeID(IFWL_Widget* pWidget) { - return m_dwThemeID; -} -FX_DWORD CFWL_WidgetTP::SetThemeID(IFWL_Widget* pWidget, - FX_DWORD dwThemeID, - FX_BOOL bChildren) { - FX_DWORD dwOld = m_dwThemeID; - m_dwThemeID = dwThemeID; - if (CFWL_ArrowData::IsInstance()) { - CFWL_ArrowData::GetInstance()->SetColorData(FWL_GetThemeColor(dwThemeID)); - } - if (bChildren) { - FWL_SetChildThemeID(pWidget, dwThemeID); - } - return dwOld; -} -FWL_ERR CFWL_WidgetTP::GetThemeMatrix(IFWL_Widget* pWidget, - CFX_Matrix& matrix) { - matrix.Set(_ctm.a, _ctm.b, _ctm.c, _ctm.d, _ctm.e, _ctm.f); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_WidgetTP::SetThemeMatrix(IFWL_Widget* pWidget, - const CFX_Matrix& matrix) { - _ctm.Set(matrix.a, matrix.b, matrix.c, matrix.d, matrix.e, matrix.f); - return FWL_ERR_Succeeded; -} -FX_BOOL CFWL_WidgetTP::DrawBackground(CFWL_ThemeBackground* pParams) { - return TRUE; -} -FX_BOOL CFWL_WidgetTP::DrawText(CFWL_ThemeText* pParams) { - if (!m_pTextOut) { - InitTTO(); - } - int32_t iLen = pParams->m_wsText.GetLength(); - if (iLen <= 0) - return FALSE; - CFX_Graphics* pGraphics = pParams->m_pGraphics; - m_pTextOut->SetRenderDevice(pGraphics->GetRenderDevice()); - m_pTextOut->SetStyles(pParams->m_dwTTOStyles); - m_pTextOut->SetAlignment(pParams->m_iTTOAlign); - CFX_Matrix* pMatrix = &pParams->m_matrix; - pMatrix->Concat(*pGraphics->GetMatrix()); - m_pTextOut->SetMatrix(*pMatrix); - m_pTextOut->DrawLogicText(pParams->m_wsText, iLen, pParams->m_rtPart); - return TRUE; -} -void* CFWL_WidgetTP::GetCapacity(CFWL_ThemePart* pThemePart, - FX_DWORD dwCapacity) { - switch (dwCapacity) { - case FWL_WGTCAPACITY_CXBorder: { - m_fValue = FWLTHEME_CAPACITY_CXBorder; - break; - } - case FWL_WGTCAPACITY_CYBorder: { - m_fValue = FWLTHEME_CAPACITY_CYBorder; - break; - } - case FWL_WGTCAPACITY_EdgeFlat: { - m_fValue = FWLTHEME_CAPACITY_EdgeFlat; - break; - } - case FWL_WGTCAPACITY_EdgeRaised: { - m_fValue = FWLTHEME_CAPACITY_EdgeRaised; - break; - } - case FWL_WGTCAPACITY_EdgeSunken: { - m_fValue = FWLTHEME_CAPACITY_EdgeSunken; - break; - } - case FWL_WGTCAPACITY_FontSize: { - m_fValue = FWLTHEME_CAPACITY_FontSize; - break; - } - case FWL_WGTCAPACITY_TextColor: { - m_dwValue = FWLTHEME_CAPACITY_TextColor; - return &m_dwValue; - } - case FWL_WGTCAPACITY_ScrollBarWidth: { - m_fValue = FWLTHEME_CAPACITY_ScrollBarWidth; - break; - } - case FWL_WGTCAPACITY_Font: { - return m_pFDEFont; - } - case FWL_WGTCAPACITY_TextSelColor: { - m_dwValue = (m_dwThemeID == 0) ? FWLTHEME_CAPACITY_TextSelColor - : FWLTHEME_COLOR_Green_BKSelected; - return &m_dwValue; - } - case FWL_WGTCAPACITY_LineHeight: { - m_fValue = FWLTHEME_CAPACITY_LineHeight; - break; - } - case FWL_WGTCAPACITY_UIMargin: { - m_rtMargin.Set(0, 0, 0, 0); - return &m_rtMargin; - } - default: { return NULL; } - } - return &m_fValue; -} -FX_BOOL CFWL_WidgetTP::IsCustomizedLayout(IFWL_Widget* pWidget) { - return FWL_GetThemeLayout(m_dwThemeID); -} -FWL_ERR CFWL_WidgetTP::GetPartRect(CFWL_ThemePart* pThemePart, - CFX_RectF& rect) { - return FWL_ERR_Succeeded; -} -FX_BOOL CFWL_WidgetTP::IsInPart(CFWL_ThemePart* pThemePart, - FX_FLOAT fx, - FX_FLOAT fy) { - return TRUE; -} -FX_BOOL CFWL_WidgetTP::CalcTextRect(CFWL_ThemeText* pParams, CFX_RectF& rect) { - if (!pParams) - return FALSE; - if (!m_pTextOut) - return FALSE; - m_pTextOut->SetAlignment(pParams->m_iTTOAlign); - m_pTextOut->SetStyles(pParams->m_dwTTOStyles | FDE_TTOSTYLE_ArabicContext); - m_pTextOut->CalcLogicSize(pParams->m_wsText, pParams->m_wsText.GetLength(), - rect); - return TRUE; -} -FWL_ERR CFWL_WidgetTP::Initialize() { - m_dwThemeID = 0; - _ctm.SetIdentity(); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_WidgetTP::Finalize() { - if (!m_pTextOut) { - FinalizeTTO(); - } - return FWL_ERR_Succeeded; -} -CFWL_WidgetTP::~CFWL_WidgetTP() {} -FWL_ERR CFWL_WidgetTP::SetFont(IFWL_Widget* pWidget, - const FX_WCHAR* strFont, - FX_FLOAT fFontSize, - FX_ARGB rgbFont) { - if (!m_pTextOut) { - return FWL_ERR_Succeeded; - } - m_pFDEFont = CFWL_FontManager::GetInstance()->FindFont(strFont, 0, 0); - m_pTextOut->SetFont(m_pFDEFont); - m_pTextOut->SetFontSize(fFontSize); - m_pTextOut->SetTextColor(rgbFont); - return FWL_ERR_Succeeded; -} -FWL_ERR CFWL_WidgetTP::SetFont(IFWL_Widget* pWidget, - IFX_Font* pFont, - FX_FLOAT fFontSize, - FX_ARGB rgbFont) { - if (!m_pTextOut) { - return FWL_ERR_Succeeded; - } - m_pTextOut->SetFont(pFont); - m_pTextOut->SetFontSize(fFontSize); - m_pTextOut->SetTextColor(rgbFont); - return FWL_ERR_Succeeded; -} -IFX_Font* CFWL_WidgetTP::GetFont(IFWL_Widget* pWidget) { - return m_pFDEFont; -} -CFWL_WidgetTP::CFWL_WidgetTP() - : m_dwRefCount(1), m_pTextOut(NULL), m_pFDEFont(NULL), m_dwThemeID(0) {} -FX_ERR CFWL_WidgetTP::InitTTO() { - if (m_pTextOut) { - return FWL_ERR_Succeeded; - } - m_pFDEFont = - CFWL_FontManager::GetInstance()->FindFont(FX_WSTRC(L"Helvetica"), 0, 0); - m_pTextOut = IFDE_TextOut::Create(); - m_pTextOut->SetFont(m_pFDEFont); - m_pTextOut->SetFontSize(FWLTHEME_CAPACITY_FontSize); - m_pTextOut->SetTextColor(FWLTHEME_CAPACITY_TextColor); - m_pTextOut->SetEllipsisString(L"..."); - return FWL_ERR_Succeeded; -} -FX_ERR CFWL_WidgetTP::FinalizeTTO() { - if (m_pTextOut) { - m_pTextOut->Release(); - m_pTextOut = NULL; - } - return FWL_ERR_Succeeded; -} -#ifdef THEME_XPSimilar -void CFWL_WidgetTP::DrawEdge(CFX_Graphics* pGraphics, - FX_DWORD dwStyles, - const CFX_RectF* pRect, - CFX_Matrix* pMatrix) { - if (!pGraphics) - return; - if (!pRect) - return; - pGraphics->SaveGraphState(); - CFX_Color crStroke(FWL_GetThemeColor(m_dwThemeID) == 0 - ? ArgbEncode(255, 127, 157, 185) - : FWLTHEME_COLOR_Green_BKSelected); - pGraphics->SetStrokeColor(&crStroke); - CFX_Path path; - path.Create(); - path.AddRectangle(pRect->left, pRect->top, pRect->width - 1, - pRect->height - 1); - pGraphics->StrokePath(&path, pMatrix); - path.Clear(); - crStroke = ArgbEncode(255, 255, 255, 255); - pGraphics->SetStrokeColor(&crStroke); - path.AddRectangle(pRect->left + 1, pRect->top + 1, pRect->width - 3, - pRect->height - 3); - pGraphics->StrokePath(&path, pMatrix); - pGraphics->RestoreGraphState(); -} -#else -void CFWL_WidgetTP::DrawEdge(CFX_Graphics* pGraphics, - FX_DWORD dwStyles, - const CFX_RectF* pRect, - CFX_Matrix* pMatrix) { - if (!pGraphics) - return; - if (!pRect) - return; - FWLTHEME_EDGE eType; - FX_FLOAT fWidth; - switch (dwStyles & FWL_WGTSTYLE_EdgeMask) { - case FWL_WGTSTYLE_EdgeRaised: { - eType = FWLTHEME_EDGE_Raised, fWidth = FWLTHEME_CAPACITY_EdgeRaised; - break; - } - case FWL_WGTSTYLE_EdgeSunken: { - eType = FWLTHEME_EDGE_Sunken, fWidth = FWLTHEME_CAPACITY_EdgeSunken; - break; - } - case FWL_WGTSTYLE_EdgeFlat: - default: { return; } - } - Draw3DRect(pGraphics, eType, fWidth, pRect, FWLTHEME_COLOR_EDGELT1, - FWLTHEME_COLOR_EDGELT2, FWLTHEME_COLOR_EDGERB1, - FWLTHEME_COLOR_EDGERB2, pMatrix); -} -#endif -void CFWL_WidgetTP::Draw3DRect(CFX_Graphics* pGraphics, - FWLTHEME_EDGE eType, - FX_FLOAT fWidth, - const CFX_RectF* pRect, - FX_ARGB cr1, - FX_ARGB cr2, - FX_ARGB cr3, - FX_ARGB cr4, - CFX_Matrix* pMatrix) { - if (!pGraphics) - return; - if (!pRect) - return; - pGraphics->SaveGraphState(); - if (eType == FWLTHEME_EDGE_Flat) { - CFX_Path path; - path.Create(); - path.AddRectangle(pRect->left, pRect->top, pRect->width, pRect->height); - path.AddRectangle(pRect->left + 1, pRect->top + 1, pRect->width - 2, - pRect->height - 2); - CFX_Color cr(ArgbEncode(255, 100, 100, 100)); - pGraphics->SetFillColor(&cr); - pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); - path.Clear(); - path.AddRectangle(pRect->left + 1, pRect->top + 1, pRect->width - 2, - pRect->height - 2); - path.AddRectangle(pRect->left + 2, pRect->top + 2, pRect->width - 4, - pRect->height - 4); - cr.Set(0xFFFFFFFF); - pGraphics->SetFillColor(&cr); - pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); - } else { - FX_FLOAT fLeft = pRect->left; - FX_FLOAT fRight = pRect->right(); - FX_FLOAT fTop = pRect->top; - FX_FLOAT fBottom = pRect->bottom(); - FX_FLOAT fHalfWidth = fWidth / 2.0f; - CFX_Color crLT(eType == FWLTHEME_EDGE_Raised ? cr4 : cr1); - pGraphics->SetFillColor(&crLT); - CFX_Path pathLT; - pathLT.Create(); - pathLT.MoveTo(fLeft, fBottom - fHalfWidth); - pathLT.LineTo(fLeft, fTop); - pathLT.LineTo(fRight - fHalfWidth, fTop); - pathLT.LineTo(fRight - fHalfWidth, fTop + fHalfWidth); - pathLT.LineTo(fLeft + fHalfWidth, fTop + fHalfWidth); - pathLT.LineTo(fLeft + fHalfWidth, fBottom - fHalfWidth); - pathLT.LineTo(fLeft, fBottom - fHalfWidth); - pGraphics->FillPath(&pathLT, FXFILL_WINDING, pMatrix); - crLT = CFX_Color(eType == FWLTHEME_EDGE_Raised ? cr3 : cr2); - pGraphics->SetFillColor(&crLT); - pathLT.Clear(); - pathLT.MoveTo(fLeft + fHalfWidth, fBottom - fWidth); - pathLT.LineTo(fLeft + fHalfWidth, fTop + fHalfWidth); - pathLT.LineTo(fRight - fWidth, fTop + fHalfWidth); - pathLT.LineTo(fRight - fWidth, fTop + fWidth); - pathLT.LineTo(fLeft + fWidth, fTop + fWidth); - pathLT.LineTo(fLeft + fWidth, fBottom - fWidth); - pathLT.LineTo(fLeft + fHalfWidth, fBottom - fWidth); - pGraphics->FillPath(&pathLT, FXFILL_WINDING, pMatrix); - CFX_Color crRB(eType == FWLTHEME_EDGE_Raised ? cr1 : cr3); - pGraphics->SetFillColor(&crRB); - CFX_Path pathRB; - pathRB.Create(); - pathRB.MoveTo(fRight - fHalfWidth, fTop + fHalfWidth); - pathRB.LineTo(fRight - fHalfWidth, fBottom - fHalfWidth); - pathRB.LineTo(fLeft + fHalfWidth, fBottom - fHalfWidth); - pathRB.LineTo(fLeft + fHalfWidth, fBottom - fWidth); - pathRB.LineTo(fRight - fWidth, fBottom - fWidth); - pathRB.LineTo(fRight - fWidth, fTop + fHalfWidth); - pathRB.LineTo(fRight - fHalfWidth, fTop + fHalfWidth); - pGraphics->FillPath(&pathRB, FXFILL_WINDING, pMatrix); - crRB = CFX_Color(eType == FWLTHEME_EDGE_Raised ? cr2 : cr4); - pGraphics->SetFillColor(&crRB); - pathRB.Clear(); - pathRB.MoveTo(fRight, fTop); - pathRB.LineTo(fRight, fBottom); - pathRB.LineTo(fLeft, fBottom); - pathRB.LineTo(fLeft, fBottom - fHalfWidth); - pathRB.LineTo(fRight - fHalfWidth, fBottom - fHalfWidth); - pathRB.LineTo(fRight - fHalfWidth, fTop); - pathRB.LineTo(fRight, fTop); - pGraphics->FillPath(&pathRB, FXFILL_WINDING, pMatrix); - } - pGraphics->RestoreGraphState(); -} -void CFWL_WidgetTP::Draw3DCircle(CFX_Graphics* pGraphics, - FWLTHEME_EDGE eType, - FX_FLOAT fWidth, - const CFX_RectF* pRect, - FX_ARGB cr1, - FX_ARGB cr2, - FX_ARGB cr3, - FX_ARGB cr4, - CFX_Matrix* pMatrix) { - if (!pGraphics) - return; - if (!pRect) - return; - pGraphics->SaveGraphState(); - CFX_Path path; - path.Create(); - path.AddArc(pRect->left, pRect->top, pRect->width, pRect->height, - FWLTHEME_PI * 3 / 4, FWLTHEME_PI); - CFX_Color crFill1(eType == FWLTHEME_EDGE_Raised ? cr4 : cr1); - pGraphics->SetStrokeColor(&crFill1); - pGraphics->StrokePath(&path, pMatrix); - CFX_RectF rtInner(*pRect); - rtInner.Deflate(pRect->width / 4, pRect->height / 4); - path.Clear(); - path.AddArc(rtInner.left, rtInner.top, rtInner.width, rtInner.height, - FWLTHEME_PI * 3 / 4, FWLTHEME_PI); - CFX_Color crFill2(eType == FWLTHEME_EDGE_Raised ? cr3 : cr2); - pGraphics->SetStrokeColor(&crFill2); - pGraphics->StrokePath(&path, pMatrix); - path.Clear(); - path.AddArc(pRect->left, pRect->top, pRect->width, pRect->height, - FWLTHEME_PI * 7 / 4, FWLTHEME_PI); - CFX_Color crFill3(eType == FWLTHEME_EDGE_Raised ? cr1 : cr3); - pGraphics->SetStrokeColor(&crFill3); - pGraphics->StrokePath(&path, pMatrix); - path.AddArc(rtInner.left, rtInner.top, rtInner.width, rtInner.height, - FWLTHEME_PI * 7 / 4, FWLTHEME_PI); - CFX_Color crFill4(eType == FWLTHEME_EDGE_Raised ? cr2 : cr4); - pGraphics->SetStrokeColor(&crFill4); - pGraphics->StrokePath(&path, pMatrix); - pGraphics->RestoreGraphState(); -} -void CFWL_WidgetTP::DrawBorder(CFX_Graphics* pGraphics, - const CFX_RectF* pRect, - CFX_Matrix* pMatrix) { - if (!pGraphics) - return; - if (!pRect) - return; - CFX_Path path; - path.Create(); - path.AddRectangle(pRect->left, pRect->top, pRect->width, pRect->height); - path.AddRectangle(pRect->left + 1, pRect->top + 1, pRect->width - 2, - pRect->height - 2); - pGraphics->SaveGraphState(); - CFX_Color crFill(ArgbEncode(255, 0, 0, 0)); - pGraphics->SetFillColor(&crFill); - pGraphics->FillPath(&path, FXFILL_ALTERNATE, pMatrix); - pGraphics->RestoreGraphState(); -} -void CFWL_WidgetTP::FillBackground(CFX_Graphics* pGraphics, - const CFX_RectF* pRect, - CFX_Matrix* pMatrix) { - FillSoildRect(pGraphics, FWLTHEME_COLOR_Background, pRect, pMatrix); -} -void CFWL_WidgetTP::FillSoildRect(CFX_Graphics* pGraphics, - FX_ARGB fillColor, - const CFX_RectF* pRect, - CFX_Matrix* pMatrix) { - if (!pGraphics) - return; - if (!pRect) - return; - pGraphics->SaveGraphState(); - CFX_Color crFill(fillColor); - pGraphics->SetFillColor(&crFill); - CFX_Path path; - path.Create(); - path.AddRectangle(pRect->left, pRect->top, pRect->width, pRect->height); - pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); - pGraphics->RestoreGraphState(); -} -void CFWL_WidgetTP::DrawAxialShading(CFX_Graphics* pGraphics, - FX_FLOAT fx1, - FX_FLOAT fy1, - FX_FLOAT fx2, - FX_FLOAT fy2, - FX_ARGB beginColor, - FX_ARGB endColor, - CFX_Path* path, - int32_t fillMode, - CFX_Matrix* pMatrix) { - if (!pGraphics || !path) - return; - - CFX_PointF begPoint(fx1, fy1); - CFX_PointF endPoint(fx2, fy2); - CFX_Shading shading; - shading.CreateAxial(begPoint, endPoint, FALSE, FALSE, beginColor, endColor); - pGraphics->SaveGraphState(); - CFX_Color color1(&shading); - pGraphics->SetFillColor(&color1); - pGraphics->FillPath(path, fillMode, pMatrix); - pGraphics->RestoreGraphState(); -} -void CFWL_WidgetTP::DrawAnnulusRect(CFX_Graphics* pGraphics, - FX_ARGB fillColor, - const CFX_RectF* pRect, - FX_FLOAT fRingWidth, - CFX_Matrix* pMatrix) { - if (!pGraphics) - return; - if (!pRect) - return; - pGraphics->SaveGraphState(); - CFX_Color cr(fillColor); - pGraphics->SetFillColor(&cr); - CFX_Path path; - path.Create(); - CFX_RectF rtInner(*pRect); - rtInner.Deflate(fRingWidth, fRingWidth); - path.AddRectangle(rtInner.left, rtInner.top, rtInner.width, rtInner.height); - path.AddRectangle(pRect->left, pRect->top, pRect->width, pRect->height); - pGraphics->FillPath(&path, FXFILL_ALTERNATE, pMatrix); - pGraphics->RestoreGraphState(); -} -void CFWL_WidgetTP::DrawAnnulusCircle(CFX_Graphics* pGraphics, - FX_ARGB fillColor, - const CFX_RectF* pRect, - FX_FLOAT fWidth, - CFX_Matrix* pMatrix) { - if (!pGraphics) - return; - if (!pRect) - return; - if (fWidth > pRect->width / 2) { - return; - } - pGraphics->SaveGraphState(); - CFX_Color cr(fillColor); - pGraphics->SetFillColor(&cr); - CFX_Path path; - path.Create(); - path.AddEllipse(*pRect); - CFX_RectF rtIn(*pRect); - rtIn.Inflate(-fWidth, -fWidth); - path.AddEllipse(rtIn); - pGraphics->FillPath(&path, FXFILL_ALTERNATE, pMatrix); - pGraphics->RestoreGraphState(); -} -void CFWL_WidgetTP::DrawFocus(CFX_Graphics* pGraphics, - const CFX_RectF* pRect, - CFX_Matrix* pMatrix) { - if (!pGraphics) - return; - if (!pRect) - return; - pGraphics->SaveGraphState(); - CFX_Color cr(0xFF000000); - pGraphics->SetStrokeColor(&cr); - FX_FLOAT DashPattern[2] = {1, 1}; - pGraphics->SetLineDash(0.0f, DashPattern, 2); - CFX_Path path; - path.Create(); - path.AddRectangle(pRect->left, pRect->top, pRect->width, pRect->height); - pGraphics->StrokePath(&path, pMatrix); - pGraphics->RestoreGraphState(); -} -#define FWLTHEME_ARROW_Denominator 3 -void CFWL_WidgetTP::DrawArrow(CFX_Graphics* pGraphics, - const CFX_RectF* pRect, - FWLTHEME_DIRECTION eDict, - FX_ARGB argbFill, - FX_BOOL bPressed, - CFX_Matrix* pMatrix) { - CFX_RectF rtArrow(*pRect); - CFX_Path path; - path.Create(); - FX_FLOAT fBtn = - std::min(pRect->width, pRect->height) / FWLTHEME_ARROW_Denominator; - rtArrow.left = pRect->left + (pRect->width - fBtn) / 2; - rtArrow.top = pRect->top + (pRect->height - fBtn) / 2; - rtArrow.width = fBtn; - rtArrow.height = fBtn; - if (bPressed) { - rtArrow.Offset(1, 1); - } - switch (eDict) { - case FWLTHEME_DIRECTION_Up: { - path.MoveTo(rtArrow.left, rtArrow.bottom()); - path.LineTo(rtArrow.right(), rtArrow.bottom()); - path.LineTo(rtArrow.left + fBtn / 2, rtArrow.top); - path.LineTo(rtArrow.left, rtArrow.bottom()); - break; - } - case FWLTHEME_DIRECTION_Left: { - path.MoveTo(rtArrow.right(), rtArrow.top); - path.LineTo(rtArrow.right(), rtArrow.bottom()); - path.LineTo(rtArrow.left, rtArrow.top + fBtn / 2); - path.LineTo(rtArrow.right(), rtArrow.top); - break; - } - case FWLTHEME_DIRECTION_Right: { - path.MoveTo(rtArrow.left, rtArrow.top); - path.LineTo(rtArrow.left, rtArrow.bottom()); - path.LineTo(rtArrow.right(), rtArrow.top + fBtn / 2); - path.LineTo(rtArrow.left, rtArrow.top); - break; - } - case FWLTHEME_DIRECTION_Down: - default: { - path.MoveTo(rtArrow.left, rtArrow.top); - path.LineTo(rtArrow.right(), rtArrow.top); - path.LineTo(rtArrow.left + fBtn / 2, rtArrow.bottom()); - path.LineTo(rtArrow.left, rtArrow.top); - } - } - pGraphics->SaveGraphState(); - CFX_Color cr(argbFill); - pGraphics->SetFillColor(&cr); - pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); - pGraphics->RestoreGraphState(); -} -void CFWL_WidgetTP::DrawArrow(CFX_Graphics* pGraphics, - const CFX_RectF* pRect, - FWLTHEME_DIRECTION eDict, - FX_ARGB argSign, - CFX_Matrix* pMatrix) { - FX_BOOL bVert = - (eDict == FWLTHEME_DIRECTION_Up || eDict == FWLTHEME_DIRECTION_Down); - FX_FLOAT fLeft = - (FX_FLOAT)(((pRect->width - (bVert ? 9 : 6)) / 2 + pRect->left) + 0.5); - FX_FLOAT fTop = - (FX_FLOAT)(((pRect->height - (bVert ? 6 : 9)) / 2 + pRect->top) + 0.5); - CFX_Path path; - path.Create(); - switch (eDict) { - case FWLTHEME_DIRECTION_Down: { - path.MoveTo(fLeft, fTop + 1); - path.LineTo(fLeft + 4, fTop + 5); - path.LineTo(fLeft + 8, fTop + 1); - path.LineTo(fLeft + 7, fTop); - path.LineTo(fLeft + 4, fTop + 3); - path.LineTo(fLeft + 1, fTop); - break; - } - case FWLTHEME_DIRECTION_Up: { - path.MoveTo(fLeft, fTop + 4); - path.LineTo(fLeft + 4, fTop); - path.LineTo(fLeft + 8, fTop + 4); - path.LineTo(fLeft + 7, fTop + 5); - path.LineTo(fLeft + 4, fTop + 2); - path.LineTo(fLeft + 1, fTop + 5); - break; - } - case FWLTHEME_DIRECTION_Right: { - path.MoveTo(fLeft + 1, fTop); - path.LineTo(fLeft + 5, fTop + 4); - path.LineTo(fLeft + 1, fTop + 8); - path.LineTo(fLeft, fTop + 7); - path.LineTo(fLeft + 3, fTop + 4); - path.LineTo(fLeft, fTop + 1); - break; - } - case FWLTHEME_DIRECTION_Left: { - path.MoveTo(fLeft, fTop + 4); - path.LineTo(fLeft + 4, fTop); - path.LineTo(fLeft + 5, fTop + 1); - path.LineTo(fLeft + 2, fTop + 4); - path.LineTo(fLeft + 5, fTop + 7); - path.LineTo(fLeft + 4, fTop + 8); - break; - } - } - CFX_Color cr(argSign); - pGraphics->SetFillColor(&cr); - pGraphics->FillPath(&path, FXFILL_WINDING, pMatrix); -} -void CFWL_WidgetTP::DrawBtn(CFX_Graphics* pGraphics, - const CFX_RectF* pRect, - FWLTHEME_STATE eState, - CFX_Matrix* pMatrix) { - CFX_Path path; - path.Create(); - if (!CFWL_ArrowData::IsInstance()) { - CFWL_ArrowData::GetInstance()->SetColorData(FWL_GetThemeColor(m_dwThemeID)); - } - CFWL_ArrowData::CColorData* pColorData = - CFWL_ArrowData::GetInstance()->m_pColorData; - FX_FLOAT fRight = pRect->right(); - FX_FLOAT fBottom = pRect->bottom(); - path.AddRectangle(pRect->left, pRect->top, pRect->width, pRect->height); - DrawAxialShading(pGraphics, pRect->left, pRect->top, fRight, fBottom, - pColorData->clrStart[eState - 1], - pColorData->clrEnd[eState - 1], &path, FXFILL_WINDING, - pMatrix); - CFX_Color rcStroke; - rcStroke.Set(pColorData->clrBorder[eState - 1]); - pGraphics->SetStrokeColor(&rcStroke); - pGraphics->StrokePath(&path, pMatrix); -} -void CFWL_WidgetTP::DrawArrowBtn(CFX_Graphics* pGraphics, - const CFX_RectF* pRect, - FWLTHEME_DIRECTION eDict, - FWLTHEME_STATE eState, - CFX_Matrix* pMatrix) { - DrawBtn(pGraphics, pRect, eState, pMatrix); - if (!CFWL_ArrowData::IsInstance()) { - CFWL_ArrowData::GetInstance()->SetColorData(FWL_GetThemeColor(m_dwThemeID)); - } - CFWL_ArrowData::CColorData* pColorData = - CFWL_ArrowData::GetInstance()->m_pColorData; - DrawArrow(pGraphics, pRect, eDict, pColorData->clrSign[eState - 1], pMatrix); -} -FWLCOLOR CFWL_WidgetTP::BlendColor(FWLCOLOR srcColor, - FWLCOLOR renderColor, - uint8_t scale) { - FWLCOLOR dstColor; - uint8_t n = 255 - scale; - dstColor.a = (uint8_t)( - ((FX_WORD)srcColor.a * n + (FX_WORD)renderColor.a * scale) >> 8); - dstColor.r = (uint8_t)( - ((FX_WORD)srcColor.r * n + (FX_WORD)renderColor.r * scale) >> 8); - dstColor.g = (uint8_t)( - ((FX_WORD)srcColor.g * n + (FX_WORD)renderColor.g * scale) >> 8); - dstColor.b = (uint8_t)( - ((FX_WORD)srcColor.b * n + (FX_WORD)renderColor.b * scale) >> 8); - return dstColor; -} -CFWL_ArrowData::CFWL_ArrowData() : m_pColorData(NULL) { - SetColorData(0); -} -CFWL_FontData::CFWL_FontData() - : m_dwStyles(0), - m_dwCodePage(0), - m_pFont(0), - m_pFontMgr(NULL) -#if _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_ - , - m_pFontSource(NULL) -#endif -{ -} -CFWL_FontData::~CFWL_FontData() { - if (m_pFont) { - m_pFont->Release(); - } - if (m_pFontMgr) { - m_pFontMgr->Release(); - } -#if _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_ - if (m_pFontSource != NULL) { - m_pFontSource->Release(); - } -#endif -} -FX_BOOL CFWL_FontData::Equal(const CFX_WideStringC& wsFontFamily, - FX_DWORD dwFontStyles, - FX_WORD wCodePage) { - return m_wsFamily == wsFontFamily && m_dwStyles == dwFontStyles && - m_dwCodePage == wCodePage; -} -FX_BOOL CFWL_FontData::LoadFont(const CFX_WideStringC& wsFontFamily, - FX_DWORD dwFontStyles, - FX_WORD dwCodePage) { - m_wsFamily = wsFontFamily; - m_dwStyles = dwFontStyles; - m_dwCodePage = dwCodePage; - if (!m_pFontMgr) { -#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ - m_pFontMgr = IFX_FontMgr::Create(FX_GetDefFontEnumerator()); -#else - m_pFontSource = FX_CreateDefaultFontSourceEnum(); - m_pFontMgr = IFX_FontMgr::Create(m_pFontSource); -#endif - } - m_pFont = IFX_Font::LoadFont(wsFontFamily.GetPtr(), dwFontStyles, dwCodePage, - m_pFontMgr); - return m_pFont != NULL; -} - -CFWL_FontManager* CFWL_FontManager::s_FontManager = nullptr; -CFWL_FontManager* CFWL_FontManager::GetInstance() { - if (!s_FontManager) - s_FontManager = new CFWL_FontManager; - return s_FontManager; -} -void CFWL_FontManager::DestroyInstance() { - delete s_FontManager; - s_FontManager = nullptr; -} -CFWL_FontManager::CFWL_FontManager() {} -CFWL_FontManager::~CFWL_FontManager() {} -IFX_Font* CFWL_FontManager::FindFont(const CFX_WideStringC& wsFontFamily, - FX_DWORD dwFontStyles, - FX_WORD wCodePage) { - for (const auto& pData : m_FontsArray) { - if (pData->Equal(wsFontFamily, dwFontStyles, wCodePage)) - return pData->GetFont(); - } - std::unique_ptr<CFWL_FontData> pFontData(new CFWL_FontData); - if (!pFontData->LoadFont(wsFontFamily, dwFontStyles, wCodePage)) - return nullptr; - m_FontsArray.push_back(std::move(pFontData)); - return m_FontsArray.back()->GetFont(); -} -FX_BOOL FWLTHEME_Init() { - return TRUE; -} -void FWLTHEME_Release() { - CFWL_ArrowData::DestroyInstance(); - CFWL_FontManager::DestroyInstance(); -} -FX_DWORD FWL_GetThemeLayout(FX_DWORD dwThemeID) { - return 0xffff0000 & dwThemeID; -} -FX_DWORD FWL_GetThemeColor(FX_DWORD dwThemeID) { - return 0x0000ffff & dwThemeID; -} -FX_DWORD FWL_MakeThemeID(FX_DWORD dwLayout, FX_DWORD dwColor) { - return (dwLayout << 16) | (0x0000FFFF & dwColor); -} -CFWL_ArrowData* CFWL_ArrowData::m_pInstance = NULL; -CFWL_ArrowData* CFWL_ArrowData::GetInstance() { - if (!m_pInstance) { - m_pInstance = new CFWL_ArrowData; - } - return m_pInstance; -} -FX_BOOL CFWL_ArrowData::IsInstance() { - return (m_pInstance != NULL); -} -void CFWL_ArrowData::DestroyInstance() { - if (m_pInstance) { - delete m_pInstance; - m_pInstance = NULL; - } -} -CFWL_ArrowData::~CFWL_ArrowData() { - if (m_pColorData) { - delete m_pColorData; - m_pColorData = NULL; - } -} -void CFWL_ArrowData::SetColorData(FX_DWORD dwID) { - if (!m_pColorData) { - m_pColorData = new CColorData; - } - if (dwID) { - m_pColorData->clrBorder[0] = ArgbEncode(255, 142, 153, 125); - m_pColorData->clrBorder[1] = ArgbEncode(255, 157, 171, 119); - m_pColorData->clrBorder[2] = ArgbEncode(255, 118, 131, 97); - m_pColorData->clrBorder[3] = ArgbEncode(255, 172, 168, 153); - m_pColorData->clrStart[0] = ArgbEncode(255, 203, 215, 186); - m_pColorData->clrStart[1] = ArgbEncode(255, 218, 232, 185); - m_pColorData->clrStart[2] = ArgbEncode(255, 203, 215, 186); - m_pColorData->clrStart[3] = ArgbEncode(255, 254, 254, 251); - m_pColorData->clrEnd[0] = ArgbEncode(255, 149, 167, 117); - m_pColorData->clrEnd[1] = ArgbEncode(255, 198, 211, 155); - m_pColorData->clrEnd[2] = ArgbEncode(255, 149, 167, 117); - m_pColorData->clrEnd[3] = ArgbEncode(255, 243, 241, 236); - m_pColorData->clrSign[0] = ArgbEncode(255, 255, 255, 255); - m_pColorData->clrSign[1] = ArgbEncode(255, 255, 255, 255); - m_pColorData->clrSign[2] = ArgbEncode(255, 255, 255, 255); - m_pColorData->clrSign[3] = ArgbEncode(255, 128, 128, 128); - } else { - m_pColorData->clrBorder[0] = ArgbEncode(255, 202, 216, 249); - m_pColorData->clrBorder[1] = ArgbEncode(255, 171, 190, 233); - m_pColorData->clrBorder[2] = ArgbEncode(255, 135, 147, 219); - m_pColorData->clrBorder[3] = ArgbEncode(255, 172, 168, 153); - m_pColorData->clrStart[0] = ArgbEncode(255, 225, 234, 254); - m_pColorData->clrStart[1] = ArgbEncode(255, 253, 255, 255); - m_pColorData->clrStart[2] = ArgbEncode(255, 110, 142, 241); - m_pColorData->clrStart[3] = ArgbEncode(255, 254, 254, 251); - m_pColorData->clrEnd[0] = ArgbEncode(255, 175, 204, 251); - m_pColorData->clrEnd[1] = ArgbEncode(255, 185, 218, 251); - m_pColorData->clrEnd[2] = ArgbEncode(255, 210, 222, 235); - m_pColorData->clrEnd[3] = ArgbEncode(255, 243, 241, 236); - m_pColorData->clrSign[0] = ArgbEncode(255, 77, 97, 133); - m_pColorData->clrSign[1] = ArgbEncode(255, 77, 97, 133); - m_pColorData->clrSign[2] = ArgbEncode(255, 77, 97, 133); - m_pColorData->clrSign[3] = ArgbEncode(255, 128, 128, 128); - } -} |