| Index: xfa/fwl/core/cfwl_form.cpp
|
| diff --git a/xfa/fwl/core/cfwl_form.cpp b/xfa/fwl/core/cfwl_form.cpp
|
| deleted file mode 100644
|
| index 5b494fe1e22c73ea40e127add6b41f8163f17599..0000000000000000000000000000000000000000
|
| --- a/xfa/fwl/core/cfwl_form.cpp
|
| +++ /dev/null
|
| @@ -1,624 +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/fwl/core/cfwl_form.h"
|
| -
|
| -#include <utility>
|
| -
|
| -#include "third_party/base/ptr_util.h"
|
| -#include "xfa/fde/tto/fde_textout.h"
|
| -#include "xfa/fwl/core/cfwl_app.h"
|
| -#include "xfa/fwl/core/cfwl_event.h"
|
| -#include "xfa/fwl/core/cfwl_formproxy.h"
|
| -#include "xfa/fwl/core/cfwl_msgmouse.h"
|
| -#include "xfa/fwl/core/cfwl_notedriver.h"
|
| -#include "xfa/fwl/core/cfwl_noteloop.h"
|
| -#include "xfa/fwl/core/cfwl_sysbtn.h"
|
| -#include "xfa/fwl/core/cfwl_themebackground.h"
|
| -#include "xfa/fwl/core/cfwl_themepart.h"
|
| -#include "xfa/fwl/core/cfwl_themetext.h"
|
| -#include "xfa/fwl/core/cfwl_widgetmgr.h"
|
| -#include "xfa/fwl/core/ifwl_themeprovider.h"
|
| -#include "xfa/fwl/theme/cfwl_widgettp.h"
|
| -
|
| -namespace {
|
| -
|
| -const int kSystemButtonSize = 21;
|
| -const int kSystemButtonMargin = 5;
|
| -const int kSystemButtonSpan = 2;
|
| -
|
| -} // namespace
|
| -
|
| -namespace {
|
| -
|
| -const uint8_t kCornerEnlarge = 10;
|
| -
|
| -} // namespace
|
| -
|
| -CFWL_Form::CFWL_Form(const CFWL_App* app,
|
| - std::unique_ptr<CFWL_WidgetProperties> properties,
|
| - CFWL_Widget* pOuter)
|
| - : CFWL_Widget(app, std::move(properties), pOuter),
|
| -#if (_FX_OS_ == _FX_MACOSX_)
|
| - m_bMouseIn(false),
|
| -#endif
|
| - m_pCloseBox(nullptr),
|
| - m_pMinBox(nullptr),
|
| - m_pMaxBox(nullptr),
|
| - m_pSubFocus(nullptr),
|
| - m_fCXBorder(0),
|
| - m_fCYBorder(0),
|
| - m_iCaptureBtn(-1),
|
| - m_iSysBox(0),
|
| - m_bLButtonDown(false),
|
| - m_bMaximized(false),
|
| - m_bSetMaximize(false),
|
| - m_bDoModalFlag(false) {
|
| - m_rtRelative.Reset();
|
| - m_rtRestore.Reset();
|
| -
|
| - RegisterForm();
|
| - RegisterEventTarget(nullptr);
|
| -}
|
| -
|
| -CFWL_Form::~CFWL_Form() {
|
| - UnregisterEventTarget();
|
| - UnRegisterForm();
|
| - RemoveSysButtons();
|
| -}
|
| -
|
| -FWL_Type CFWL_Form::GetClassID() const {
|
| - return FWL_Type::Form;
|
| -}
|
| -
|
| -bool CFWL_Form::IsInstance(const CFX_WideStringC& wsClass) const {
|
| - if (wsClass == CFX_WideStringC(FWL_CLASS_Form))
|
| - return true;
|
| - return CFWL_Widget::IsInstance(wsClass);
|
| -}
|
| -
|
| -void CFWL_Form::GetClientRect(CFX_RectF& rect) {
|
| - rect = m_pProperties->m_rtWidget;
|
| - rect.Offset(-rect.left, -rect.top);
|
| -}
|
| -
|
| -void CFWL_Form::Update() {
|
| - if (m_iLock > 0)
|
| - return;
|
| - if (!m_pProperties->m_pThemeProvider)
|
| - m_pProperties->m_pThemeProvider = GetAvailableTheme();
|
| -
|
| - Layout();
|
| -}
|
| -
|
| -FWL_WidgetHit CFWL_Form::HitTest(FX_FLOAT fx, FX_FLOAT fy) {
|
| - GetAvailableTheme();
|
| -
|
| - if (m_pCloseBox && m_pCloseBox->m_rtBtn.Contains(fx, fy))
|
| - return FWL_WidgetHit::CloseBox;
|
| - if (m_pMaxBox && m_pMaxBox->m_rtBtn.Contains(fx, fy))
|
| - return FWL_WidgetHit::MaxBox;
|
| - if (m_pMinBox && m_pMinBox->m_rtBtn.Contains(fx, fy))
|
| - return FWL_WidgetHit::MinBox;
|
| -
|
| - CFX_RectF rtCap;
|
| - rtCap.Set(m_fCYBorder, m_fCXBorder,
|
| - 0 - kSystemButtonSize * m_iSysBox - 2 * m_fCYBorder,
|
| - 0 - m_fCXBorder);
|
| - if (rtCap.Contains(fx, fy))
|
| - return FWL_WidgetHit::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 + kCornerEnlarge);
|
| - FX_FLOAT fHeight = m_rtRelative.height - 2 * (m_fCXBorder + kCornerEnlarge);
|
| -
|
| - CFX_RectF rt;
|
| - rt.Set(0, m_fCXBorder + kCornerEnlarge, m_fCYBorder, fHeight);
|
| - if (rt.Contains(fx, fy))
|
| - return FWL_WidgetHit::Left;
|
| -
|
| - rt.Set(m_rtRelative.width - m_fCYBorder, m_fCXBorder + kCornerEnlarge,
|
| - m_fCYBorder, fHeight);
|
| - if (rt.Contains(fx, fy))
|
| - return FWL_WidgetHit::Right;
|
| -
|
| - rt.Set(m_fCYBorder + kCornerEnlarge, 0, fWidth, m_fCXBorder);
|
| - if (rt.Contains(fx, fy))
|
| - return FWL_WidgetHit::Top;
|
| -
|
| - rt.Set(m_fCYBorder + kCornerEnlarge, m_rtRelative.height - m_fCXBorder,
|
| - fWidth, m_fCXBorder);
|
| - if (rt.Contains(fx, fy))
|
| - return FWL_WidgetHit::Bottom;
|
| -
|
| - rt.Set(0, 0, m_fCYBorder + kCornerEnlarge, m_fCXBorder + kCornerEnlarge);
|
| - if (rt.Contains(fx, fy))
|
| - return FWL_WidgetHit::LeftTop;
|
| -
|
| - rt.Set(0, m_rtRelative.height - m_fCXBorder - kCornerEnlarge,
|
| - m_fCYBorder + kCornerEnlarge, m_fCXBorder + kCornerEnlarge);
|
| - if (rt.Contains(fx, fy))
|
| - return FWL_WidgetHit::LeftBottom;
|
| -
|
| - rt.Set(m_rtRelative.width - m_fCYBorder - kCornerEnlarge, 0,
|
| - m_fCYBorder + kCornerEnlarge, m_fCXBorder + kCornerEnlarge);
|
| - if (rt.Contains(fx, fy))
|
| - return FWL_WidgetHit::RightTop;
|
| -
|
| - rt.Set(m_rtRelative.width - m_fCYBorder - kCornerEnlarge,
|
| - m_rtRelative.height - m_fCXBorder - kCornerEnlarge,
|
| - m_fCYBorder + kCornerEnlarge, m_fCXBorder + kCornerEnlarge);
|
| - if (rt.Contains(fx, fy))
|
| - return FWL_WidgetHit::RightBottom;
|
| - }
|
| - return FWL_WidgetHit::Client;
|
| -}
|
| -
|
| -void CFWL_Form::DrawWidget(CFX_Graphics* pGraphics, const CFX_Matrix* pMatrix) {
|
| - if (!pGraphics)
|
| - return;
|
| - if (!m_pProperties->m_pThemeProvider)
|
| - return;
|
| -
|
| - IFWL_ThemeProvider* pTheme = m_pProperties->m_pThemeProvider;
|
| - bool bInactive = !IsActive();
|
| - int32_t iState = bInactive ? CFWL_PartState_Inactive : CFWL_PartState_Normal;
|
| - if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_FRM_NoDrawClient) == 0)
|
| - DrawBackground(pGraphics, pTheme);
|
| -
|
| -#ifdef FWL_UseMacSystemBorder
|
| - return;
|
| -#endif
|
| - CFWL_ThemeBackground param;
|
| - param.m_pWidget = this;
|
| - 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 = CFWL_Part::Border;
|
| - pTheme->DrawBackground(¶m);
|
| - }
|
| - if ((m_pProperties->m_dwStyleExes & FWL_WGTSTYLE_EdgeMask) !=
|
| - FWL_WGTSTYLE_EdgeNone) {
|
| - CFX_RectF rtEdge;
|
| - GetEdgeRect(rtEdge);
|
| - param.m_iPart = CFWL_Part::Edge;
|
| - param.m_rtPart = rtEdge;
|
| - param.m_dwStates = iState;
|
| - pTheme->DrawBackground(¶m);
|
| - }
|
| -
|
| -#if (_FX_OS_ == _FX_MACOSX_)
|
| - {
|
| - if (m_pCloseBox) {
|
| - param.m_iPart = CFWL_Part::CloseBox;
|
| - param.m_dwStates = m_pCloseBox->GetPartState();
|
| - if (m_pProperties->m_dwStates & FWL_WGTSTATE_Deactivated)
|
| - param.m_dwStates = CFWL_PartState_Disabled;
|
| - else if (CFWL_PartState_Normal == param.m_dwStates && m_bMouseIn)
|
| - param.m_dwStates = CFWL_PartState_Hovered;
|
| - param.m_rtPart = m_pCloseBox->m_rtBtn;
|
| - pTheme->DrawBackground(¶m);
|
| - }
|
| - if (m_pMaxBox) {
|
| - param.m_iPart = CFWL_Part::MaximizeBox;
|
| - param.m_dwStates = m_pMaxBox->GetPartState();
|
| - if (m_pProperties->m_dwStates & FWL_WGTSTATE_Deactivated)
|
| - param.m_dwStates = CFWL_PartState_Disabled;
|
| - else if (CFWL_PartState_Normal == param.m_dwStates && m_bMouseIn)
|
| - param.m_dwStates = CFWL_PartState_Hovered;
|
| - param.m_rtPart = m_pMaxBox->m_rtBtn;
|
| - param.m_bMaximize = m_bMaximized;
|
| - pTheme->DrawBackground(¶m);
|
| - }
|
| - if (m_pMinBox) {
|
| - param.m_iPart = CFWL_Part::MinimizeBox;
|
| - param.m_dwStates = m_pMinBox->GetPartState();
|
| - if (m_pProperties->m_dwStates & FWL_WGTSTATE_Deactivated)
|
| - param.m_dwStates = CFWL_PartState_Disabled;
|
| - else if (CFWL_PartState_Normal == param.m_dwStates && m_bMouseIn)
|
| - param.m_dwStates = CFWL_PartState_Hovered;
|
| - param.m_rtPart = m_pMinBox->m_rtBtn;
|
| - pTheme->DrawBackground(¶m);
|
| - }
|
| - m_bMouseIn = false;
|
| - }
|
| -#else
|
| - {
|
| - if (m_pCloseBox) {
|
| - param.m_iPart = CFWL_Part::CloseBox;
|
| - param.m_dwStates = m_pCloseBox->GetPartState();
|
| - param.m_rtPart = m_pCloseBox->m_rtBtn;
|
| - pTheme->DrawBackground(¶m);
|
| - }
|
| - if (m_pMaxBox) {
|
| - param.m_iPart = CFWL_Part::MaximizeBox;
|
| - param.m_dwStates = m_pMaxBox->GetPartState();
|
| - param.m_rtPart = m_pMaxBox->m_rtBtn;
|
| - param.m_bMaximize = m_bMaximized;
|
| - pTheme->DrawBackground(¶m);
|
| - }
|
| - if (m_pMinBox) {
|
| - param.m_iPart = CFWL_Part::MinimizeBox;
|
| - param.m_dwStates = m_pMinBox->GetPartState();
|
| - param.m_rtPart = m_pMinBox->m_rtBtn;
|
| - pTheme->DrawBackground(¶m);
|
| - }
|
| - }
|
| -#endif
|
| -}
|
| -
|
| -CFWL_Widget* CFWL_Form::DoModal() {
|
| - const CFWL_App* pApp = GetOwnerApp();
|
| - if (!pApp)
|
| - return nullptr;
|
| -
|
| - CFWL_NoteDriver* pDriver = pApp->GetNoteDriver();
|
| - if (!pDriver)
|
| - return nullptr;
|
| -
|
| - m_pNoteLoop = pdfium::MakeUnique<CFWL_NoteLoop>();
|
| - m_pNoteLoop->SetMainForm(this);
|
| -
|
| - pDriver->PushNoteLoop(m_pNoteLoop.get());
|
| - m_bDoModalFlag = true;
|
| - RemoveStates(FWL_WGTSTATE_Invisible);
|
| - pDriver->Run();
|
| -
|
| -#if _FX_OS_ != _FX_MACOSX_
|
| - pDriver->PopNoteLoop();
|
| -#endif
|
| -
|
| - m_pNoteLoop.reset();
|
| - return nullptr;
|
| -}
|
| -
|
| -void CFWL_Form::EndDoModal() {
|
| - if (!m_pNoteLoop)
|
| - return;
|
| -
|
| - m_bDoModalFlag = false;
|
| -
|
| -#if (_FX_OS_ == _FX_MACOSX_)
|
| - m_pNoteLoop->EndModalLoop();
|
| - const CFWL_App* pApp = GetOwnerApp();
|
| - if (!pApp)
|
| - return;
|
| -
|
| - CFWL_NoteDriver* pDriver =
|
| - static_cast<CFWL_NoteDriver*>(pApp->GetNoteDriver());
|
| - if (!pDriver)
|
| - return;
|
| -
|
| - pDriver->PopNoteLoop();
|
| - SetStates(FWL_WGTSTATE_Invisible);
|
| -#else
|
| - SetStates(FWL_WGTSTATE_Invisible);
|
| - m_pNoteLoop->EndModalLoop();
|
| -#endif
|
| -}
|
| -
|
| -void CFWL_Form::DrawBackground(CFX_Graphics* pGraphics,
|
| - IFWL_ThemeProvider* pTheme) {
|
| - CFWL_ThemeBackground param;
|
| - param.m_pWidget = this;
|
| - param.m_iPart = CFWL_Part::Background;
|
| - param.m_pGraphics = pGraphics;
|
| - param.m_rtPart = m_rtRelative;
|
| - param.m_rtPart.Deflate(m_fCYBorder, m_fCXBorder, m_fCYBorder, m_fCXBorder);
|
| - pTheme->DrawBackground(¶m);
|
| -}
|
| -
|
| -void CFWL_Form::RemoveSysButtons() {
|
| - delete m_pCloseBox;
|
| - m_pCloseBox = nullptr;
|
| - delete m_pMinBox;
|
| - m_pMinBox = nullptr;
|
| - delete m_pMaxBox;
|
| - m_pMaxBox = nullptr;
|
| -}
|
| -
|
| -CFWL_SysBtn* CFWL_Form::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;
|
| - return nullptr;
|
| -}
|
| -
|
| -CFWL_SysBtn* CFWL_Form::GetSysBtnByState(uint32_t 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;
|
| - return nullptr;
|
| -}
|
| -
|
| -CFWL_SysBtn* CFWL_Form::GetSysBtnByIndex(int32_t nIndex) {
|
| - if (nIndex < 0)
|
| - return nullptr;
|
| -
|
| - CFX_ArrayTemplate<CFWL_SysBtn*> arrBtn;
|
| - if (m_pMinBox)
|
| - arrBtn.Add(m_pMinBox);
|
| - if (m_pMaxBox)
|
| - arrBtn.Add(m_pMaxBox);
|
| - if (m_pCloseBox)
|
| - arrBtn.Add(m_pCloseBox);
|
| - return arrBtn[nIndex];
|
| -}
|
| -
|
| -int32_t CFWL_Form::GetSysBtnIndex(CFWL_SysBtn* pBtn) {
|
| - CFX_ArrayTemplate<CFWL_SysBtn*> 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);
|
| -}
|
| -
|
| -void CFWL_Form::GetEdgeRect(CFX_RectF& rtEdge) {
|
| - rtEdge = m_rtRelative;
|
| - if (m_pProperties->m_dwStyles & FWL_WGTSTYLE_Border) {
|
| - FX_FLOAT fCX = GetBorderSize(true);
|
| - FX_FLOAT fCY = GetBorderSize(false);
|
| - rtEdge.Deflate(fCX, fCY, fCX, fCY);
|
| - }
|
| -}
|
| -
|
| -void CFWL_Form::SetWorkAreaRect() {
|
| - m_rtRestore = m_pProperties->m_rtWidget;
|
| - CFWL_WidgetMgr* pWidgetMgr = GetOwnerApp()->GetWidgetMgr();
|
| - if (!pWidgetMgr)
|
| - return;
|
| -
|
| - m_bSetMaximize = true;
|
| - Repaint(&m_rtRelative);
|
| -}
|
| -
|
| -void CFWL_Form::Layout() {
|
| - GetRelativeRect(m_rtRelative);
|
| -
|
| -#ifndef FWL_UseMacSystemBorder
|
| - ResetSysBtn();
|
| -#endif
|
| -}
|
| -
|
| -void CFWL_Form::ResetSysBtn() {
|
| - m_fCXBorder =
|
| - *static_cast<FX_FLOAT*>(GetThemeCapacity(CFWL_WidgetCapacity::CXBorder));
|
| - m_fCYBorder =
|
| - *static_cast<FX_FLOAT*>(GetThemeCapacity(CFWL_WidgetCapacity::CYBorder));
|
| - RemoveSysButtons();
|
| -
|
| - m_iSysBox = 0;
|
| - if (m_pProperties->m_dwStyles & FWL_WGTSTYLE_CloseBox) {
|
| - m_pCloseBox = new CFWL_SysBtn;
|
| - m_pCloseBox->m_rtBtn.Set(
|
| - m_rtRelative.right() - kSystemButtonMargin - kSystemButtonSize,
|
| - kSystemButtonMargin, kSystemButtonSize, kSystemButtonSize);
|
| - m_iSysBox++;
|
| - }
|
| - if (m_pProperties->m_dwStyles & FWL_WGTSTYLE_MaximizeBox) {
|
| - m_pMaxBox = new CFWL_SysBtn;
|
| - if (m_pCloseBox) {
|
| - m_pMaxBox->m_rtBtn.Set(
|
| - m_pCloseBox->m_rtBtn.left - kSystemButtonSpan - kSystemButtonSize,
|
| - m_pCloseBox->m_rtBtn.top, kSystemButtonSize, kSystemButtonSize);
|
| - } else {
|
| - m_pMaxBox->m_rtBtn.Set(
|
| - m_rtRelative.right() - kSystemButtonMargin - kSystemButtonSize,
|
| - kSystemButtonMargin, kSystemButtonSize, kSystemButtonSize);
|
| - }
|
| - m_iSysBox++;
|
| - }
|
| - if (m_pProperties->m_dwStyles & FWL_WGTSTYLE_MinimizeBox) {
|
| - m_pMinBox = new CFWL_SysBtn;
|
| - if (m_pMaxBox) {
|
| - m_pMinBox->m_rtBtn.Set(
|
| - m_pMaxBox->m_rtBtn.left - kSystemButtonSpan - kSystemButtonSize,
|
| - m_pMaxBox->m_rtBtn.top, kSystemButtonSize, kSystemButtonSize);
|
| - } else if (m_pCloseBox) {
|
| - m_pMinBox->m_rtBtn.Set(
|
| - m_pCloseBox->m_rtBtn.left - kSystemButtonSpan - kSystemButtonSize,
|
| - m_pCloseBox->m_rtBtn.top, kSystemButtonSize, kSystemButtonSize);
|
| - } else {
|
| - m_pMinBox->m_rtBtn.Set(
|
| - m_rtRelative.right() - kSystemButtonMargin - kSystemButtonSize,
|
| - kSystemButtonMargin, kSystemButtonSize, kSystemButtonSize);
|
| - }
|
| - m_iSysBox++;
|
| - }
|
| -}
|
| -
|
| -void CFWL_Form::RegisterForm() {
|
| - const CFWL_App* pApp = GetOwnerApp();
|
| - if (!pApp)
|
| - return;
|
| -
|
| - CFWL_NoteDriver* pDriver =
|
| - static_cast<CFWL_NoteDriver*>(pApp->GetNoteDriver());
|
| - if (!pDriver)
|
| - return;
|
| -
|
| - pDriver->RegisterForm(this);
|
| -}
|
| -
|
| -void CFWL_Form::UnRegisterForm() {
|
| - const CFWL_App* pApp = GetOwnerApp();
|
| - if (!pApp)
|
| - return;
|
| -
|
| - CFWL_NoteDriver* pDriver =
|
| - static_cast<CFWL_NoteDriver*>(pApp->GetNoteDriver());
|
| - if (!pDriver)
|
| - return;
|
| -
|
| - pDriver->UnRegisterForm(this);
|
| -}
|
| -
|
| -void CFWL_Form::OnProcessMessage(CFWL_Message* pMessage) {
|
| -#ifndef FWL_UseMacSystemBorder
|
| - if (!pMessage)
|
| - return;
|
| -
|
| - switch (pMessage->GetType()) {
|
| - case CFWL_Message::Type::Mouse: {
|
| - CFWL_MsgMouse* pMsg = static_cast<CFWL_MsgMouse*>(pMessage);
|
| - switch (pMsg->m_dwCmd) {
|
| - case FWL_MouseCommand::LeftButtonDown:
|
| - OnLButtonDown(pMsg);
|
| - break;
|
| - case FWL_MouseCommand::LeftButtonUp:
|
| - OnLButtonUp(pMsg);
|
| - break;
|
| - case FWL_MouseCommand::Move:
|
| - OnMouseMove(pMsg);
|
| - break;
|
| - case FWL_MouseCommand::Leave:
|
| - OnMouseLeave(pMsg);
|
| - break;
|
| - case FWL_MouseCommand::LeftButtonDblClk:
|
| - OnLButtonDblClk(pMsg);
|
| - break;
|
| - default:
|
| - break;
|
| - }
|
| - break;
|
| - }
|
| - default:
|
| - break;
|
| - }
|
| -#endif // FWL_UseMacSystemBorder
|
| -}
|
| -
|
| -void CFWL_Form::OnDrawWidget(CFX_Graphics* pGraphics,
|
| - const CFX_Matrix* pMatrix) {
|
| - DrawWidget(pGraphics, pMatrix);
|
| -}
|
| -
|
| -void CFWL_Form::OnLButtonDown(CFWL_MsgMouse* pMsg) {
|
| - SetGrab(true);
|
| - m_bLButtonDown = true;
|
| -
|
| - CFWL_SysBtn* pPressBtn = GetSysBtnAtPoint(pMsg->m_fx, pMsg->m_fy);
|
| - m_iCaptureBtn = GetSysBtnIndex(pPressBtn);
|
| -
|
| - if (!pPressBtn)
|
| - return;
|
| -
|
| - pPressBtn->SetPressed();
|
| - Repaint(&pPressBtn->m_rtBtn);
|
| -}
|
| -
|
| -void CFWL_Form::OnLButtonUp(CFWL_MsgMouse* pMsg) {
|
| - SetGrab(false);
|
| - m_bLButtonDown = false;
|
| - CFWL_SysBtn* pPointBtn = GetSysBtnAtPoint(pMsg->m_fx, pMsg->m_fy);
|
| - CFWL_SysBtn* pPressedBtn = GetSysBtnByIndex(m_iCaptureBtn);
|
| - if (!pPressedBtn || pPointBtn != pPressedBtn)
|
| - return;
|
| - if (pPressedBtn == GetSysBtnByState(FWL_SYSBUTTONSTATE_Pressed))
|
| - pPressedBtn->SetNormal();
|
| - if (pPressedBtn == m_pMaxBox) {
|
| - if (m_bMaximized) {
|
| - SetWidgetRect(m_rtRestore);
|
| - Update();
|
| - Repaint(nullptr);
|
| - } else {
|
| - SetWorkAreaRect();
|
| - Update();
|
| - }
|
| - m_bMaximized = !m_bMaximized;
|
| - } else if (pPressedBtn != m_pMinBox) {
|
| - CFWL_Event eClose(CFWL_Event::Type::Close, this);
|
| - DispatchEvent(&eClose);
|
| - }
|
| -}
|
| -
|
| -void CFWL_Form::OnMouseMove(CFWL_MsgMouse* pMsg) {
|
| - if (m_bLButtonDown)
|
| - return;
|
| -
|
| - CFX_RectF rtInvalidate;
|
| - rtInvalidate.Reset();
|
| - CFWL_SysBtn* pPointBtn = GetSysBtnAtPoint(pMsg->m_fx, pMsg->m_fy);
|
| - CFWL_SysBtn* pOldHover = GetSysBtnByState(FWL_SYSBUTTONSTATE_Hover);
|
| -
|
| -#if _FX_OS_ == _FX_MACOSX_
|
| - {
|
| - if (pOldHover && pPointBtn != pOldHover)
|
| - pOldHover->SetNormal();
|
| - if (pPointBtn && pPointBtn != pOldHover)
|
| - pPointBtn->SetHover();
|
| - if (m_pCloseBox)
|
| - rtInvalidate = m_pCloseBox->m_rtBtn;
|
| - if (m_pMaxBox) {
|
| - if (rtInvalidate.IsEmpty())
|
| - rtInvalidate = m_pMaxBox->m_rtBtn;
|
| - else
|
| - rtInvalidate.Union(m_pMaxBox->m_rtBtn);
|
| - }
|
| - if (m_pMinBox) {
|
| - if (rtInvalidate.IsEmpty())
|
| - rtInvalidate = m_pMinBox->m_rtBtn;
|
| - else
|
| - rtInvalidate.Union(m_pMinBox->m_rtBtn);
|
| - }
|
| - if (!rtInvalidate.IsEmpty() &&
|
| - rtInvalidate.Contains(pMsg->m_fx, pMsg->m_fy)) {
|
| - 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())
|
| - Repaint(&rtInvalidate);
|
| -}
|
| -
|
| -void CFWL_Form::OnMouseLeave(CFWL_MsgMouse* pMsg) {
|
| - CFWL_SysBtn* pHover = GetSysBtnByState(FWL_SYSBUTTONSTATE_Hover);
|
| - if (!pHover)
|
| - return;
|
| -
|
| - pHover->SetNormal();
|
| - Repaint(&pHover->m_rtBtn);
|
| -}
|
| -
|
| -void CFWL_Form::OnLButtonDblClk(CFWL_MsgMouse* pMsg) {
|
| - if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_FRM_Resize) &&
|
| - HitTest(pMsg->m_fx, pMsg->m_fy) == FWL_WidgetHit::Titlebar) {
|
| - if (m_bMaximized)
|
| - SetWidgetRect(m_rtRestore);
|
| - else
|
| - SetWorkAreaRect();
|
| -
|
| - Update();
|
| - m_bMaximized = !m_bMaximized;
|
| - }
|
| -}
|
|
|