1e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// Copyright 2014 PDFium Authors. All rights reserved. 2e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// Use of this source code is governed by a BSD-style license that can be 3e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// found in the LICENSE file. 4e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 5ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 74d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "fpdfsdk/pdfwindow/PWL_ScrollBar.h" 8e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 94d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fxge/cfx_pathdata.h" 104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fxge/cfx_renderdevice.h" 114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "fpdfsdk/pdfwindow/PWL_Utils.h" 124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "fpdfsdk/pdfwindow/PWL_Wnd.h" 13e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 14ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannPWL_FLOATRANGE::PWL_FLOATRANGE() { 15ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann Default(); 16e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 17e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 18ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannPWL_FLOATRANGE::PWL_FLOATRANGE(FX_FLOAT min, FX_FLOAT max) { 19ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann Set(min, max); 20e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 21e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 22ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid PWL_FLOATRANGE::Default() { 23ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fMin = 0; 24ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fMax = 0; 25e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 26e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 27ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid PWL_FLOATRANGE::Set(FX_FLOAT min, FX_FLOAT max) { 28ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (min > max) { 29ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fMin = max; 30ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fMax = min; 31ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 32ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fMin = min; 33ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fMax = max; 34ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 35e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 36e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool PWL_FLOATRANGE::In(FX_FLOAT x) const { 38ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return (IsFloatBigger(x, fMin) || IsFloatEqual(x, fMin)) && 39ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann (IsFloatSmaller(x, fMax) || IsFloatEqual(x, fMax)); 40e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 41e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 42ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_FLOAT PWL_FLOATRANGE::GetWidth() const { 43ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return fMax - fMin; 44e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 45e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 46ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannPWL_SCROLL_PRIVATEDATA::PWL_SCROLL_PRIVATEDATA() { 47ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann Default(); 48e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 49e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 50ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid PWL_SCROLL_PRIVATEDATA::Default() { 51ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ScrollRange.Default(); 52ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fScrollPos = ScrollRange.fMin; 53ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fClientWidth = 0; 54ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fBigStep = 10; 55ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fSmallStep = 1; 56e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 57e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 58ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid PWL_SCROLL_PRIVATEDATA::SetScrollRange(FX_FLOAT min, FX_FLOAT max) { 59ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ScrollRange.Set(min, max); 60e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 61ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (IsFloatSmaller(fScrollPos, ScrollRange.fMin)) 62ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fScrollPos = ScrollRange.fMin; 63ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (IsFloatBigger(fScrollPos, ScrollRange.fMax)) 64ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fScrollPos = ScrollRange.fMax; 65e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 66e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 67ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid PWL_SCROLL_PRIVATEDATA::SetClientWidth(FX_FLOAT width) { 68ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fClientWidth = width; 69e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 70e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 71ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid PWL_SCROLL_PRIVATEDATA::SetSmallStep(FX_FLOAT step) { 72ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fSmallStep = step; 73e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 74e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 75ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid PWL_SCROLL_PRIVATEDATA::SetBigStep(FX_FLOAT step) { 76ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fBigStep = step; 77e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 78e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool PWL_SCROLL_PRIVATEDATA::SetPos(FX_FLOAT pos) { 80ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (ScrollRange.In(pos)) { 81ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fScrollPos = pos; 824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return true; 83ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return false; 85e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 86e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 87ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid PWL_SCROLL_PRIVATEDATA::AddSmall() { 88ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!SetPos(fScrollPos + fSmallStep)) 89ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann SetPos(ScrollRange.fMax); 90e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 91e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 92ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid PWL_SCROLL_PRIVATEDATA::SubSmall() { 93ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!SetPos(fScrollPos - fSmallStep)) 94ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann SetPos(ScrollRange.fMin); 95e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 96e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 97ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid PWL_SCROLL_PRIVATEDATA::AddBig() { 98ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!SetPos(fScrollPos + fBigStep)) 99ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann SetPos(ScrollRange.fMax); 100e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 101e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 102ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid PWL_SCROLL_PRIVATEDATA::SubBig() { 103ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!SetPos(fScrollPos - fBigStep)) 104ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann SetPos(ScrollRange.fMin); 105e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 106e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 107ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCPWL_SBButton::CPWL_SBButton(PWL_SCROLLBAR_TYPE eScrollBarType, 108ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann PWL_SBBUTTON_TYPE eButtonType) { 109ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_eScrollBarType = eScrollBarType; 110ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_eSBButtonType = eButtonType; 111e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 1124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_bMouseDown = false; 113e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 114e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 115ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCPWL_SBButton::~CPWL_SBButton() {} 116e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 117ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCFX_ByteString CPWL_SBButton::GetClassName() const { 118ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return "CPWL_SBButton"; 119e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 120e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 121ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPWL_SBButton::OnCreate(PWL_CREATEPARAM& cp) { 122ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann cp.eCursorType = FXCT_ARROW; 123e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 124e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 125ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPWL_SBButton::GetThisAppearanceStream(CFX_ByteTextBuf& sAppStream) { 126ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPWL_Wnd::GetThisAppearanceStream(sAppStream); 127ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 128ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!IsVisible()) 129ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 130ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 131ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteTextBuf sButton; 132ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_FloatRect rectWnd = GetWindowRect(); 134ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 135ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (rectWnd.IsEmpty()) 136ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 137ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 138ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann sAppStream << "q\n"; 139ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1405ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann CFX_PointF ptCenter = GetCenterPoint(); 141ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 142ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann switch (m_eScrollBarType) { 143ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case SBT_HSCROLL: 144ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann switch (m_eSBButtonType) { 145ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case PSBT_MIN: { 1465ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann CFX_PointF pt1(ptCenter.x - PWL_TRIANGLE_HALFLEN * 0.5f, ptCenter.y); 1475ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann CFX_PointF pt2(ptCenter.x + PWL_TRIANGLE_HALFLEN * 0.5f, 1485ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann ptCenter.y + PWL_TRIANGLE_HALFLEN); 1495ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann CFX_PointF pt3(ptCenter.x + PWL_TRIANGLE_HALFLEN * 0.5f, 1505ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann ptCenter.y - PWL_TRIANGLE_HALFLEN); 151ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 152ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (rectWnd.right - rectWnd.left > PWL_TRIANGLE_HALFLEN * 2 && 153ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rectWnd.top - rectWnd.bottom > PWL_TRIANGLE_HALFLEN) { 154ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann sButton << "0 g\n"; 155ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann sButton << pt1.x << " " << pt1.y << " m\n"; 156ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann sButton << pt2.x << " " << pt2.y << " l\n"; 157ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann sButton << pt3.x << " " << pt3.y << " l\n"; 158ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann sButton << pt1.x << " " << pt1.y << " l f\n"; 159ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 160ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann sAppStream << sButton; 161ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 162ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } break; 163ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case PSBT_MAX: { 1645ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann CFX_PointF pt1(ptCenter.x + PWL_TRIANGLE_HALFLEN * 0.5f, ptCenter.y); 1655ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann CFX_PointF pt2(ptCenter.x - PWL_TRIANGLE_HALFLEN * 0.5f, 1665ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann ptCenter.y + PWL_TRIANGLE_HALFLEN); 1675ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann CFX_PointF pt3(ptCenter.x - PWL_TRIANGLE_HALFLEN * 0.5f, 1685ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann ptCenter.y - PWL_TRIANGLE_HALFLEN); 169ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 170ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (rectWnd.right - rectWnd.left > PWL_TRIANGLE_HALFLEN * 2 && 171ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rectWnd.top - rectWnd.bottom > PWL_TRIANGLE_HALFLEN) { 172ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann sButton << "0 g\n"; 173ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann sButton << pt1.x << " " << pt1.y << " m\n"; 174ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann sButton << pt2.x << " " << pt2.y << " l\n"; 175ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann sButton << pt3.x << " " << pt3.y << " l\n"; 176ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann sButton << pt1.x << " " << pt1.y << " l f\n"; 177ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 178ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann sAppStream << sButton; 179ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 180ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } break; 181ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann default: 182ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 183ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 184ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 185ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case SBT_VSCROLL: 186ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann switch (m_eSBButtonType) { 187ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case PSBT_MIN: { 1885ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann CFX_PointF pt1(ptCenter.x - PWL_TRIANGLE_HALFLEN, 1895ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann ptCenter.y - PWL_TRIANGLE_HALFLEN * 0.5f); 1905ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann CFX_PointF pt2(ptCenter.x + PWL_TRIANGLE_HALFLEN, 1915ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann ptCenter.y - PWL_TRIANGLE_HALFLEN * 0.5f); 1925ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann CFX_PointF pt3(ptCenter.x, ptCenter.y + PWL_TRIANGLE_HALFLEN * 0.5f); 193ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 194ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (rectWnd.right - rectWnd.left > PWL_TRIANGLE_HALFLEN * 2 && 195ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rectWnd.top - rectWnd.bottom > PWL_TRIANGLE_HALFLEN) { 196ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann sButton << "0 g\n"; 197ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann sButton << pt1.x << " " << pt1.y << " m\n"; 198ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann sButton << pt2.x << " " << pt2.y << " l\n"; 199ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann sButton << pt3.x << " " << pt3.y << " l\n"; 200ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann sButton << pt1.x << " " << pt1.y << " l f\n"; 201ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 202ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann sAppStream << sButton; 203ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 204ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } break; 205ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case PSBT_MAX: { 2065ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann CFX_PointF pt1(ptCenter.x - PWL_TRIANGLE_HALFLEN, 2075ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann ptCenter.y + PWL_TRIANGLE_HALFLEN * 0.5f); 2085ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann CFX_PointF pt2(ptCenter.x + PWL_TRIANGLE_HALFLEN, 2095ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann ptCenter.y + PWL_TRIANGLE_HALFLEN * 0.5f); 2105ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann CFX_PointF pt3(ptCenter.x, ptCenter.y - PWL_TRIANGLE_HALFLEN * 0.5f); 211ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 212ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (rectWnd.right - rectWnd.left > PWL_TRIANGLE_HALFLEN * 2 && 213ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rectWnd.top - rectWnd.bottom > PWL_TRIANGLE_HALFLEN) { 214ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann sButton << "0 g\n"; 215ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann sButton << pt1.x << " " << pt1.y << " m\n"; 216ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann sButton << pt2.x << " " << pt2.y << " l\n"; 217ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann sButton << pt3.x << " " << pt3.y << " l\n"; 218ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann sButton << pt1.x << " " << pt1.y << " l f\n"; 219ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 220ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann sAppStream << sButton; 221ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 222ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } break; 223ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann default: 224ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 225ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 226ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 227ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann default: 228ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 229ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 230ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 231ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann sAppStream << "Q\n"; 232e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 233e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 234ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPWL_SBButton::DrawThisAppearance(CFX_RenderDevice* pDevice, 235ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_Matrix* pUser2Device) { 236ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!IsVisible()) 237ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 238ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 2394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_FloatRect rectWnd = GetWindowRect(); 240ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (rectWnd.IsEmpty()) 241ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 242ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 2435ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann CFX_PointF ptCenter = GetCenterPoint(); 2445ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann int32_t nTransparency = GetTransparency(); 245ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 246ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann switch (m_eScrollBarType) { 247ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case SBT_HSCROLL: 248ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPWL_Wnd::DrawThisAppearance(pDevice, pUser2Device); 249ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann switch (m_eSBButtonType) { 250ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case PSBT_MIN: { 2515ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann CFX_PointF pt1(ptCenter.x - PWL_TRIANGLE_HALFLEN * 0.5f, ptCenter.y); 2525ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann CFX_PointF pt2(ptCenter.x + PWL_TRIANGLE_HALFLEN * 0.5f, 2535ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann ptCenter.y + PWL_TRIANGLE_HALFLEN); 2545ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann CFX_PointF pt3(ptCenter.x + PWL_TRIANGLE_HALFLEN * 0.5f, 2555ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann ptCenter.y - PWL_TRIANGLE_HALFLEN); 256ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 257ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (rectWnd.right - rectWnd.left > PWL_TRIANGLE_HALFLEN * 2 && 258ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rectWnd.top - rectWnd.bottom > PWL_TRIANGLE_HALFLEN) { 259ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_PathData path; 2605ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann path.AppendPoint(pt1, FXPT_TYPE::MoveTo, false); 2615ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann path.AppendPoint(pt2, FXPT_TYPE::LineTo, false); 2625ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann path.AppendPoint(pt3, FXPT_TYPE::LineTo, false); 2635ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann path.AppendPoint(pt1, FXPT_TYPE::LineTo, false); 264ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 2654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pDevice->DrawPath(&path, pUser2Device, nullptr, 2665ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann PWL_DEFAULT_BLACKCOLOR.ToFXColor(nTransparency), 267ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 0, FXFILL_ALTERNATE); 268ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 269ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } break; 270ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case PSBT_MAX: { 2715ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann CFX_PointF pt1(ptCenter.x + PWL_TRIANGLE_HALFLEN * 0.5f, ptCenter.y); 2725ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann CFX_PointF pt2(ptCenter.x - PWL_TRIANGLE_HALFLEN * 0.5f, 2735ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann ptCenter.y + PWL_TRIANGLE_HALFLEN); 2745ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann CFX_PointF pt3(ptCenter.x - PWL_TRIANGLE_HALFLEN * 0.5f, 2755ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann ptCenter.y - PWL_TRIANGLE_HALFLEN); 276ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 277ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (rectWnd.right - rectWnd.left > PWL_TRIANGLE_HALFLEN * 2 && 278ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rectWnd.top - rectWnd.bottom > PWL_TRIANGLE_HALFLEN) { 279ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_PathData path; 2805ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann path.AppendPoint(pt1, FXPT_TYPE::MoveTo, false); 2815ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann path.AppendPoint(pt2, FXPT_TYPE::LineTo, false); 2825ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann path.AppendPoint(pt3, FXPT_TYPE::LineTo, false); 2835ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann path.AppendPoint(pt1, FXPT_TYPE::LineTo, false); 284ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 2854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pDevice->DrawPath(&path, pUser2Device, nullptr, 2865ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann PWL_DEFAULT_BLACKCOLOR.ToFXColor(nTransparency), 287ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 0, FXFILL_ALTERNATE); 288ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 289ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } break; 290ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann default: 291ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 292ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 293ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 294ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case SBT_VSCROLL: 295ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann switch (m_eSBButtonType) { 296ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case PSBT_MIN: { 297ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann // draw border 2984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_FloatRect rcDraw = rectWnd; 299ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPWL_Utils::DrawStrokeRect(pDevice, pUser2Device, rcDraw, 3005ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann ArgbEncode(nTransparency, 100, 100, 100), 301ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 0.0f); 302ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 303ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann // draw inner border 304ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rcDraw = CPWL_Utils::DeflateRect(rectWnd, 0.5f); 305ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPWL_Utils::DrawStrokeRect(pDevice, pUser2Device, rcDraw, 3065ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann ArgbEncode(nTransparency, 255, 255, 255), 307ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1.0f); 308ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 309ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann // draw background 310ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 311ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rcDraw = CPWL_Utils::DeflateRect(rectWnd, 1.0f); 312ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 313ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (IsEnabled()) 3144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPWL_Utils::DrawShadow(pDevice, pUser2Device, true, false, rcDraw, 3155ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann nTransparency, 80, 220); 316ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann else 317ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPWL_Utils::DrawFillRect(pDevice, pUser2Device, rcDraw, 318ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ArgbEncode(255, 255, 255, 255)); 319ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 320ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann // draw arrow 321ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 322ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (rectWnd.top - rectWnd.bottom > 6.0f) { 323ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT fX = rectWnd.left + 1.5f; 324ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT fY = rectWnd.bottom; 3255ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann CFX_PointF pts[7] = {CFX_PointF(fX + 2.5f, fY + 4.0f), 3265ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann CFX_PointF(fX + 2.5f, fY + 3.0f), 3275ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann CFX_PointF(fX + 4.5f, fY + 5.0f), 3285ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann CFX_PointF(fX + 6.5f, fY + 3.0f), 3295ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann CFX_PointF(fX + 6.5f, fY + 4.0f), 3305ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann CFX_PointF(fX + 4.5f, fY + 6.0f), 3315ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann CFX_PointF(fX + 2.5f, fY + 4.0f)}; 332ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 333ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (IsEnabled()) 334ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPWL_Utils::DrawFillArea( 335ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pDevice, pUser2Device, pts, 7, 3365ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann ArgbEncode(nTransparency, 255, 255, 255)); 337ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann else 3385ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann CPWL_Utils::DrawFillArea( 3395ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann pDevice, pUser2Device, pts, 7, 3405ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann PWL_DEFAULT_HEAVYGRAYCOLOR.ToFXColor(255)); 341ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 342ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } break; 343ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case PSBT_MAX: { 344ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann // draw border 3454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_FloatRect rcDraw = rectWnd; 346ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPWL_Utils::DrawStrokeRect(pDevice, pUser2Device, rcDraw, 3475ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann ArgbEncode(nTransparency, 100, 100, 100), 348ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 0.0f); 349ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 350ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann // draw inner border 351ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rcDraw = CPWL_Utils::DeflateRect(rectWnd, 0.5f); 352ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPWL_Utils::DrawStrokeRect(pDevice, pUser2Device, rcDraw, 3535ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann ArgbEncode(nTransparency, 255, 255, 255), 354ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1.0f); 355ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 356ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann // draw background 357ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rcDraw = CPWL_Utils::DeflateRect(rectWnd, 1.0f); 358ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (IsEnabled()) 3594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPWL_Utils::DrawShadow(pDevice, pUser2Device, true, false, rcDraw, 3605ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann nTransparency, 80, 220); 361ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann else 362ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPWL_Utils::DrawFillRect(pDevice, pUser2Device, rcDraw, 363ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ArgbEncode(255, 255, 255, 255)); 364ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 365ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann // draw arrow 366ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 367ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (rectWnd.top - rectWnd.bottom > 6.0f) { 368ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT fX = rectWnd.left + 1.5f; 369ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT fY = rectWnd.bottom; 370ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 3715ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann CFX_PointF pts[7] = {CFX_PointF(fX + 2.5f, fY + 5.0f), 3725ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann CFX_PointF(fX + 2.5f, fY + 6.0f), 3735ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann CFX_PointF(fX + 4.5f, fY + 4.0f), 3745ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann CFX_PointF(fX + 6.5f, fY + 6.0f), 3755ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann CFX_PointF(fX + 6.5f, fY + 5.0f), 3765ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann CFX_PointF(fX + 4.5f, fY + 3.0f), 3775ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann CFX_PointF(fX + 2.5f, fY + 5.0f)}; 378ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 379ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (IsEnabled()) 380ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPWL_Utils::DrawFillArea( 381ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pDevice, pUser2Device, pts, 7, 3825ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann ArgbEncode(nTransparency, 255, 255, 255)); 383ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann else 3845ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann CPWL_Utils::DrawFillArea( 3855ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann pDevice, pUser2Device, pts, 7, 3865ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann PWL_DEFAULT_HEAVYGRAYCOLOR.ToFXColor(255)); 387ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 388ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } break; 389ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case PSBT_POS: { 390ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann // draw border 3914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_FloatRect rcDraw = rectWnd; 392ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPWL_Utils::DrawStrokeRect(pDevice, pUser2Device, rcDraw, 3935ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann ArgbEncode(nTransparency, 100, 100, 100), 394ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 0.0f); 395ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 396ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann // draw inner border 397ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rcDraw = CPWL_Utils::DeflateRect(rectWnd, 0.5f); 398ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPWL_Utils::DrawStrokeRect(pDevice, pUser2Device, rcDraw, 3995ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann ArgbEncode(nTransparency, 255, 255, 255), 400ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1.0f); 401ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 402ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (IsEnabled()) { 403ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann // draw shadow effect 404ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 4055ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann CFX_PointF ptTop = CFX_PointF(rectWnd.left, rectWnd.top - 1.0f); 4065ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann CFX_PointF ptBottom = 4075ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann CFX_PointF(rectWnd.left, rectWnd.bottom + 1.0f); 408ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 409ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ptTop.x += 1.5f; 410ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ptBottom.x += 1.5f; 411ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 412ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom, 4135ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann ArgbEncode(nTransparency, 210, 210, 210), 414ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1.0f); 415ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 416ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ptTop.x += 1.0f; 417ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ptBottom.x += 1.0f; 418ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 419ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom, 4205ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann ArgbEncode(nTransparency, 220, 220, 220), 421ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1.0f); 422ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 423ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ptTop.x += 1.0f; 424ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ptBottom.x += 1.0f; 425ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 426ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom, 4275ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann ArgbEncode(nTransparency, 240, 240, 240), 428ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1.0f); 429ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 430ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ptTop.x += 1.0f; 431ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ptBottom.x += 1.0f; 432ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 433ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom, 4345ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann ArgbEncode(nTransparency, 240, 240, 240), 435ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1.0f); 436ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 437ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ptTop.x += 1.0f; 438ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ptBottom.x += 1.0f; 439ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 440ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom, 4415ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann ArgbEncode(nTransparency, 210, 210, 210), 442ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1.0f); 443ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 444ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ptTop.x += 1.0f; 445ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ptBottom.x += 1.0f; 446ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 447ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom, 4485ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann ArgbEncode(nTransparency, 180, 180, 180), 449ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1.0f); 450ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 451ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ptTop.x += 1.0f; 452ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ptBottom.x += 1.0f; 453ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 454ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom, 4555ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann ArgbEncode(nTransparency, 150, 150, 150), 456ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1.0f); 457ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 458ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ptTop.x += 1.0f; 459ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ptBottom.x += 1.0f; 460ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 461ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom, 4625ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann ArgbEncode(nTransparency, 150, 150, 150), 463ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1.0f); 464ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 465ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ptTop.x += 1.0f; 466ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ptBottom.x += 1.0f; 467ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 468ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom, 4695ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann ArgbEncode(nTransparency, 180, 180, 180), 470ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1.0f); 471ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 472ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ptTop.x += 1.0f; 473ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ptBottom.x += 1.0f; 474ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 475ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom, 4765ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann ArgbEncode(nTransparency, 210, 210, 210), 477ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1.0f); 478ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 479ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPWL_Utils::DrawFillRect(pDevice, pUser2Device, rcDraw, 480ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ArgbEncode(255, 255, 255, 255)); 481ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 482ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 483ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann // draw friction 484ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 485ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (rectWnd.Height() > 8.0f) { 4865ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann FX_COLORREF crStroke = ArgbEncode(nTransparency, 120, 120, 120); 487ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!IsEnabled()) 4885ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann crStroke = PWL_DEFAULT_HEAVYGRAYCOLOR.ToFXColor(255); 489ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 490ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT nFrictionWidth = 5.0f; 491ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT nFrictionHeight = 5.5f; 492e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 4935ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann CFX_PointF ptLeft = 4945ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann CFX_PointF(ptCenter.x - nFrictionWidth / 2.0f, 4955ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann ptCenter.y - nFrictionHeight / 2.0f + 0.5f); 4965ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann CFX_PointF ptRight = 4975ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann CFX_PointF(ptCenter.x + nFrictionWidth / 2.0f, 4985ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann ptCenter.y - nFrictionHeight / 2.0f + 0.5f); 499e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 500ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptLeft, ptRight, 501ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann crStroke, 1.0f); 502e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 503ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ptLeft.y += 2.0f; 504ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ptRight.y += 2.0f; 505e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 506ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptLeft, ptRight, 507ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann crStroke, 1.0f); 508e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 509ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ptLeft.y += 2.0f; 510ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ptRight.y += 2.0f; 511ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 512ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptLeft, ptRight, 513ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann crStroke, 1.0f); 514ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 515ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } break; 516ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann default: 517ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 518ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 519ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 520ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann default: 521ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 522ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 523e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 524e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 5255ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool CPWL_SBButton::OnLButtonDown(const CFX_PointF& point, uint32_t nFlag) { 526ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPWL_Wnd::OnLButtonDown(point, nFlag); 527e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 528ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (CPWL_Wnd* pParent = GetParentWindow()) 529ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pParent->OnNotify(this, PNM_LBUTTONDOWN, 0, (intptr_t)&point); 530e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 5314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_bMouseDown = true; 532ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann SetCapture(); 533e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 5344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return true; 535e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 536e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 5375ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool CPWL_SBButton::OnLButtonUp(const CFX_PointF& point, uint32_t nFlag) { 538ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPWL_Wnd::OnLButtonUp(point, nFlag); 539e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 540ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (CPWL_Wnd* pParent = GetParentWindow()) 541ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pParent->OnNotify(this, PNM_LBUTTONUP, 0, (intptr_t)&point); 542e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 5434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_bMouseDown = false; 544ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ReleaseCapture(); 545e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 5464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return true; 547e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 548e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 5495ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool CPWL_SBButton::OnMouseMove(const CFX_PointF& point, uint32_t nFlag) { 550ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPWL_Wnd::OnMouseMove(point, nFlag); 551ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 552ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (CPWL_Wnd* pParent = GetParentWindow()) { 553ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pParent->OnNotify(this, PNM_MOUSEMOVE, 0, (intptr_t)&point); 554ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 555e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 5564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return true; 557e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 558e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 559ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCPWL_ScrollBar::CPWL_ScrollBar(PWL_SCROLLBAR_TYPE sbType) 560ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann : m_sbType(sbType), 5614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pMinButton(nullptr), 5624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pMaxButton(nullptr), 5634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pPosButton(nullptr), 5644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_bMouseDown(false), 5654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_bMinOrMax(false), 5664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_bNotifyForever(true) {} 567ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 568ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCPWL_ScrollBar::~CPWL_ScrollBar() {} 569ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 570ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCFX_ByteString CPWL_ScrollBar::GetClassName() const { 571ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return "CPWL_ScrollBar"; 572e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 573e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 574ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPWL_ScrollBar::OnCreate(PWL_CREATEPARAM& cp) { 575ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann cp.eCursorType = FXCT_ARROW; 576e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 577e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 578ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPWL_ScrollBar::RePosChildWnd() { 5794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_FloatRect rcClient = GetClientRect(); 5804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_FloatRect rcMinButton, rcMaxButton; 581ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT fBWidth = 0; 582ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 583ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann switch (m_sbType) { 584ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case SBT_HSCROLL: 585ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (rcClient.right - rcClient.left > 586ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann PWL_SCROLLBAR_BUTTON_WIDTH * 2 + PWL_SCROLLBAR_POSBUTTON_MINWIDTH + 587ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 2) { 5884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rcMinButton = CFX_FloatRect(rcClient.left, rcClient.bottom, 5894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rcClient.left + PWL_SCROLLBAR_BUTTON_WIDTH, 5904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rcClient.top); 5914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rcMaxButton = 5924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_FloatRect(rcClient.right - PWL_SCROLLBAR_BUTTON_WIDTH, 5934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rcClient.bottom, rcClient.right, rcClient.top); 594ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 595ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fBWidth = (rcClient.right - rcClient.left - 596ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann PWL_SCROLLBAR_POSBUTTON_MINWIDTH - 2) / 597ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 2; 598ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 599ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (fBWidth > 0) { 6004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rcMinButton = CFX_FloatRect(rcClient.left, rcClient.bottom, 6014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rcClient.left + fBWidth, rcClient.top); 6024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rcMaxButton = CFX_FloatRect(rcClient.right - fBWidth, rcClient.bottom, 6034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rcClient.right, rcClient.top); 604ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 6054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann SetVisible(false); 606ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 607ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 608ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 609ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case SBT_VSCROLL: 610ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (IsFloatBigger(rcClient.top - rcClient.bottom, 611ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann PWL_SCROLLBAR_BUTTON_WIDTH * 2 + 612ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann PWL_SCROLLBAR_POSBUTTON_MINWIDTH + 2)) { 6134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rcMinButton = CFX_FloatRect(rcClient.left, 6144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rcClient.top - PWL_SCROLLBAR_BUTTON_WIDTH, 6154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rcClient.right, rcClient.top); 6164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rcMaxButton = 6174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_FloatRect(rcClient.left, rcClient.bottom, rcClient.right, 6184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rcClient.bottom + PWL_SCROLLBAR_BUTTON_WIDTH); 619ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 620ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fBWidth = (rcClient.top - rcClient.bottom - 621ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann PWL_SCROLLBAR_POSBUTTON_MINWIDTH - 2) / 622ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 2; 623ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 624ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (IsFloatBigger(fBWidth, 0)) { 6254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rcMinButton = CFX_FloatRect(rcClient.left, rcClient.top - fBWidth, 6264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rcClient.right, rcClient.top); 6274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rcMaxButton = 6284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_FloatRect(rcClient.left, rcClient.bottom, rcClient.right, 6294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rcClient.bottom + fBWidth); 630ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 6314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann SetVisible(false); 632ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 633ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 634ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 635ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 636ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 637ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_pMinButton) 6384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pMinButton->Move(rcMinButton, true, false); 639ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_pMaxButton) 6404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pMaxButton->Move(rcMaxButton, true, false); 6414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann MovePosButton(false); 642e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 643e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 644ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPWL_ScrollBar::GetThisAppearanceStream(CFX_ByteTextBuf& sAppStream) { 6454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_FloatRect rectWnd = GetWindowRect(); 646e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 647ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (IsVisible() && !rectWnd.IsEmpty()) { 648ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteTextBuf sButton; 649e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 650ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann sButton << "q\n"; 651ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann sButton << "0 w\n" 6524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann << CPWL_Utils::GetColorAppStream(GetBackgroundColor(), true) 6534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann .AsStringC(); 654ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann sButton << rectWnd.left << " " << rectWnd.bottom << " " 655ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann << rectWnd.right - rectWnd.left << " " 656ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann << rectWnd.top - rectWnd.bottom << " re b Q\n"; 657e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 658ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann sAppStream << sButton; 659ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 660e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 661e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 662ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPWL_ScrollBar::DrawThisAppearance(CFX_RenderDevice* pDevice, 663ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_Matrix* pUser2Device) { 6644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_FloatRect rectWnd = GetWindowRect(); 665ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 666ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (IsVisible() && !rectWnd.IsEmpty()) { 667ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPWL_Utils::DrawFillRect(pDevice, pUser2Device, rectWnd, 668ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann GetBackgroundColor(), GetTransparency()); 669ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 670ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPWL_Utils::DrawStrokeLine( 671ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pDevice, pUser2Device, 6725ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann CFX_PointF(rectWnd.left + 2.0f, rectWnd.top - 2.0f), 6735ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann CFX_PointF(rectWnd.left + 2.0f, rectWnd.bottom + 2.0f), 674ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ArgbEncode(GetTransparency(), 100, 100, 100), 1.0f); 675ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 676ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPWL_Utils::DrawStrokeLine( 677ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pDevice, pUser2Device, 6785ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann CFX_PointF(rectWnd.right - 2.0f, rectWnd.top - 2.0f), 6795ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann CFX_PointF(rectWnd.right - 2.0f, rectWnd.bottom + 2.0f), 680ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ArgbEncode(GetTransparency(), 100, 100, 100), 1.0f); 681ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 682e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 683e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 6845ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool CPWL_ScrollBar::OnLButtonDown(const CFX_PointF& point, uint32_t nFlag) { 685ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPWL_Wnd::OnLButtonDown(point, nFlag); 686ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 687ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (HasFlag(PWS_AUTOTRANSPARENT)) { 688ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (GetTransparency() != 255) { 689ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann SetTransparency(255); 690ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann InvalidateRect(); 691ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 692ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 693ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 6944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_FloatRect rcMinArea, rcMaxArea; 695ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 696ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_pPosButton && m_pPosButton->IsVisible()) { 6974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_FloatRect rcClient = GetClientRect(); 6984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_FloatRect rcPosButton = m_pPosButton->GetWindowRect(); 699ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 700ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann switch (m_sbType) { 701ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case SBT_HSCROLL: 7024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rcMinArea = 7034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_FloatRect(rcClient.left + PWL_SCROLLBAR_BUTTON_WIDTH, 7044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rcClient.bottom, rcPosButton.left, rcClient.top); 7054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rcMaxArea = CFX_FloatRect(rcPosButton.right, rcClient.bottom, 7064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rcClient.right - PWL_SCROLLBAR_BUTTON_WIDTH, 7074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rcClient.top); 708ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 709ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 710ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case SBT_VSCROLL: 7114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rcMinArea = 7124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_FloatRect(rcClient.left, rcPosButton.top, rcClient.right, 7134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rcClient.top - PWL_SCROLLBAR_BUTTON_WIDTH); 7144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rcMaxArea = CFX_FloatRect(rcClient.left, 7154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rcClient.bottom + PWL_SCROLLBAR_BUTTON_WIDTH, 7164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rcClient.right, rcPosButton.bottom); 717ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 718ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 719ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 720ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rcMinArea.Normalize(); 721ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rcMaxArea.Normalize(); 722ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 7235ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann if (rcMinArea.Contains(point)) { 724ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_sData.SubBig(); 7254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann MovePosButton(true); 726ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann NotifyScrollWindow(); 727ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 728ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 7295ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann if (rcMaxArea.Contains(point)) { 730ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_sData.AddBig(); 7314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann MovePosButton(true); 732ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann NotifyScrollWindow(); 733ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 734ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 735ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 7364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return true; 737e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 738e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 7395ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannbool CPWL_ScrollBar::OnLButtonUp(const CFX_PointF& point, uint32_t nFlag) { 740ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPWL_Wnd::OnLButtonUp(point, nFlag); 741e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 742ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (HasFlag(PWS_AUTOTRANSPARENT)) { 7435ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann if (GetTransparency() != PWL_SCROLLBAR_TRANSPARENCY) { 7445ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann SetTransparency(PWL_SCROLLBAR_TRANSPARENCY); 745ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann InvalidateRect(); 746ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 747ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 748e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 749ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann EndTimer(); 7504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_bMouseDown = false; 751e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 7524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return true; 753e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 754e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 755ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPWL_ScrollBar::OnNotify(CPWL_Wnd* pWnd, 7564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann uint32_t msg, 757ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann intptr_t wParam, 758ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann intptr_t lParam) { 759ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPWL_Wnd::OnNotify(pWnd, msg, wParam, lParam); 760ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 761ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann switch (msg) { 762ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case PNM_LBUTTONDOWN: 763ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pWnd == m_pMinButton) { 7645ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann OnMinButtonLBDown(*(CFX_PointF*)lParam); 765ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 766ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 767ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pWnd == m_pMaxButton) { 7685ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann OnMaxButtonLBDown(*(CFX_PointF*)lParam); 769ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 770ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 771ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pWnd == m_pPosButton) { 7725ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann OnPosButtonLBDown(*(CFX_PointF*)lParam); 773ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 774ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 775ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case PNM_LBUTTONUP: 776ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pWnd == m_pMinButton) { 7775ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann OnMinButtonLBUp(*(CFX_PointF*)lParam); 778ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 779ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 780ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pWnd == m_pMaxButton) { 7815ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann OnMaxButtonLBUp(*(CFX_PointF*)lParam); 782ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 783ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 784ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pWnd == m_pPosButton) { 7855ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann OnPosButtonLBUp(*(CFX_PointF*)lParam); 786ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 787ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 788ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case PNM_MOUSEMOVE: 789ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pWnd == m_pMinButton) { 7905ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann OnMinButtonMouseMove(*(CFX_PointF*)lParam); 791ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 792ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 793ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pWnd == m_pMaxButton) { 7945ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann OnMaxButtonMouseMove(*(CFX_PointF*)lParam); 795ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 796ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 797ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pWnd == m_pPosButton) { 7985ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann OnPosButtonMouseMove(*(CFX_PointF*)lParam); 799ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 800ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 801ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case PNM_SETSCROLLINFO: { 8024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann PWL_SCROLL_INFO* pInfo = reinterpret_cast<PWL_SCROLL_INFO*>(lParam); 8034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (pInfo && *pInfo != m_OriginInfo) { 8044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_OriginInfo = *pInfo; 8054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann FX_FLOAT fMax = 8064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pInfo->fContentMax - pInfo->fContentMin - pInfo->fPlateWidth; 8074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann fMax = fMax > 0.0f ? fMax : 0.0f; 8084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann SetScrollRange(0, fMax, pInfo->fPlateWidth); 8094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann SetScrollStep(pInfo->fBigStep, pInfo->fSmallStep); 810ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 811ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } break; 812ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case PNM_SETSCROLLPOS: { 813ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT fPos = *(FX_FLOAT*)lParam; 814ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann switch (m_sbType) { 815ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case SBT_HSCROLL: 816ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fPos = fPos - m_OriginInfo.fContentMin; 817ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 818ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case SBT_VSCROLL: 819ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fPos = m_OriginInfo.fContentMax - fPos; 820ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 821ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 822ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann SetScrollPos(fPos); 823ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } break; 824ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 825e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 826e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 827ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPWL_ScrollBar::CreateButtons(const PWL_CREATEPARAM& cp) { 828ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann PWL_CREATEPARAM scp = cp; 829ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann scp.pParentWnd = this; 830ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann scp.dwBorderWidth = 2; 8314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann scp.nBorderStyle = BorderStyle::BEVELED; 832ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 833ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann scp.dwFlags = 834ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann PWS_VISIBLE | PWS_CHILD | PWS_BORDER | PWS_BACKGROUND | PWS_NOREFRESHCLIP; 835ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 836ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!m_pMinButton) { 837ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pMinButton = new CPWL_SBButton(m_sbType, PSBT_MIN); 838ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pMinButton->Create(scp); 839ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 840ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 841ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!m_pMaxButton) { 842ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pMaxButton = new CPWL_SBButton(m_sbType, PSBT_MAX); 843ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pMaxButton->Create(scp); 844ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 845ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 846ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!m_pPosButton) { 847ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pPosButton = new CPWL_SBButton(m_sbType, PSBT_POS); 8484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pPosButton->SetVisible(false); 849ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pPosButton->Create(scp); 850ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 851e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 852e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 853ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_FLOAT CPWL_ScrollBar::GetScrollBarWidth() const { 854ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!IsVisible()) 855ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 0; 856e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 857ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return PWL_SCROLLBAR_WIDTH; 858e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 859e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 860ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPWL_ScrollBar::SetScrollRange(FX_FLOAT fMin, 861ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT fMax, 862ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT fClientWidth) { 863ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_pPosButton) { 864ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_sData.SetScrollRange(fMin, fMax); 865ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_sData.SetClientWidth(fClientWidth); 866ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 867ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (IsFloatSmaller(m_sData.ScrollRange.GetWidth(), 0.0f)) { 8684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pPosButton->SetVisible(false); 869ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 8704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pPosButton->SetVisible(true); 8714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann MovePosButton(true); 872ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 873ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 874e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 875e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 876ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPWL_ScrollBar::SetScrollPos(FX_FLOAT fPos) { 877ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT fOldPos = m_sData.fScrollPos; 878e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 879ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_sData.SetPos(fPos); 880e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 881ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!IsFloatEqual(m_sData.fScrollPos, fOldPos)) 8824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann MovePosButton(true); 883e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 884e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 885ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPWL_ScrollBar::SetScrollStep(FX_FLOAT fBigStep, FX_FLOAT fSmallStep) { 886ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_sData.SetBigStep(fBigStep); 887ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_sData.SetSmallStep(fSmallStep); 888e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 889e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 8904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CPWL_ScrollBar::MovePosButton(bool bRefresh) { 891ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ASSERT(m_pMinButton); 892ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ASSERT(m_pMaxButton); 893e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 894ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_pPosButton->IsVisible()) { 8954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_FloatRect rcClient; 8964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_FloatRect rcPosArea, rcPosButton; 897e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 898ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rcClient = GetClientRect(); 899ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rcPosArea = GetScrollArea(); 900e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 901ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT fLeft, fRight, fTop, fBottom; 902e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 903ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann switch (m_sbType) { 904ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case SBT_HSCROLL: 905ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fLeft = TrueToFace(m_sData.fScrollPos); 906ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fRight = TrueToFace(m_sData.fScrollPos + m_sData.fClientWidth); 907e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 908ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (fRight - fLeft < PWL_SCROLLBAR_POSBUTTON_MINWIDTH) 909ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fRight = fLeft + PWL_SCROLLBAR_POSBUTTON_MINWIDTH; 910e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 911ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (fRight > rcPosArea.right) { 912ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fRight = rcPosArea.right; 913ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fLeft = fRight - PWL_SCROLLBAR_POSBUTTON_MINWIDTH; 914ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 915e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 9164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rcPosButton = 9174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_FloatRect(fLeft, rcPosArea.bottom, fRight, rcPosArea.top); 918e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 919ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 920ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case SBT_VSCROLL: 921ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fBottom = TrueToFace(m_sData.fScrollPos + m_sData.fClientWidth); 922ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fTop = TrueToFace(m_sData.fScrollPos); 923e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 924ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (IsFloatSmaller(fTop - fBottom, PWL_SCROLLBAR_POSBUTTON_MINWIDTH)) 925ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fBottom = fTop - PWL_SCROLLBAR_POSBUTTON_MINWIDTH; 926ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 927ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (IsFloatSmaller(fBottom, rcPosArea.bottom)) { 928ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fBottom = rcPosArea.bottom; 929ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fTop = fBottom + PWL_SCROLLBAR_POSBUTTON_MINWIDTH; 930ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 931e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 9324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rcPosButton = 9334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_FloatRect(rcPosArea.left, fBottom, rcPosArea.right, fTop); 934ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 935ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 936ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 937ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 9384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pPosButton->Move(rcPosButton, true, bRefresh); 939ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 940e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 941e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 9425ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannvoid CPWL_ScrollBar::OnMinButtonLBDown(const CFX_PointF& point) { 943ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_sData.SubSmall(); 9444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann MovePosButton(true); 945ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann NotifyScrollWindow(); 946ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 9474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_bMinOrMax = true; 948ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 949ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann EndTimer(); 950ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann BeginTimer(100); 951e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 952e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 9535ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannvoid CPWL_ScrollBar::OnMinButtonLBUp(const CFX_PointF& point) {} 954ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 9555ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannvoid CPWL_ScrollBar::OnMinButtonMouseMove(const CFX_PointF& point) {} 956ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 9575ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannvoid CPWL_ScrollBar::OnMaxButtonLBDown(const CFX_PointF& point) { 958ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_sData.AddSmall(); 9594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann MovePosButton(true); 960ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann NotifyScrollWindow(); 961ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 9624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_bMinOrMax = false; 963ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 964ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann EndTimer(); 965ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann BeginTimer(100); 966e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 967e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 9685ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannvoid CPWL_ScrollBar::OnMaxButtonLBUp(const CFX_PointF& point) {} 969ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 9705ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannvoid CPWL_ScrollBar::OnMaxButtonMouseMove(const CFX_PointF& point) {} 971ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 9725ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannvoid CPWL_ScrollBar::OnPosButtonLBDown(const CFX_PointF& point) { 9734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_bMouseDown = true; 974ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 975ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_pPosButton) { 9764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_FloatRect rcPosButton = m_pPosButton->GetWindowRect(); 977ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 978ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann switch (m_sbType) { 979ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case SBT_HSCROLL: 980ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_nOldPos = point.x; 981ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_fOldPosButton = rcPosButton.left; 982ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 983ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case SBT_VSCROLL: 984ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_nOldPos = point.y; 985ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_fOldPosButton = rcPosButton.top; 986ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 987ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 988ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 989e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 990e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 9915ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannvoid CPWL_ScrollBar::OnPosButtonLBUp(const CFX_PointF& point) { 992ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_bMouseDown) { 993ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!m_bNotifyForever) 994ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann NotifyScrollWindow(); 995ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 9964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_bMouseDown = false; 997e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 998e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 9995ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmannvoid CPWL_ScrollBar::OnPosButtonMouseMove(const CFX_PointF& point) { 1000ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT fOldScrollPos = m_sData.fScrollPos; 1001e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 1002ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT fNewPos = 0; 1003e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 1004ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann switch (m_sbType) { 1005ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case SBT_HSCROLL: 1006ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (FXSYS_fabs(point.x - m_nOldPos) < 1) 1007ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 1008ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fNewPos = FaceToTrue(m_fOldPosButton + point.x - m_nOldPos); 1009ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 1010ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case SBT_VSCROLL: 1011ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (FXSYS_fabs(point.y - m_nOldPos) < 1) 1012ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 1013ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fNewPos = FaceToTrue(m_fOldPosButton + point.y - m_nOldPos); 1014ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 1015ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1016e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 1017ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_bMouseDown) { 1018ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann switch (m_sbType) { 1019ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case SBT_HSCROLL: 1020e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 1021ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (IsFloatSmaller(fNewPos, m_sData.ScrollRange.fMin)) { 1022ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fNewPos = m_sData.ScrollRange.fMin; 1023ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1024ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1025ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (IsFloatBigger(fNewPos, m_sData.ScrollRange.fMax)) { 1026ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fNewPos = m_sData.ScrollRange.fMax; 1027ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1028ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1029ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_sData.SetPos(fNewPos); 1030ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1031ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 1032ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case SBT_VSCROLL: 1033e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 1034ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (IsFloatSmaller(fNewPos, m_sData.ScrollRange.fMin)) { 1035ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fNewPos = m_sData.ScrollRange.fMin; 1036ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1037e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 1038ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (IsFloatBigger(fNewPos, m_sData.ScrollRange.fMax)) { 1039ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fNewPos = m_sData.ScrollRange.fMax; 1040ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1041e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 1042ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_sData.SetPos(fNewPos); 1043e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 1044ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 1045ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1046e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 1047ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!IsFloatEqual(fOldScrollPos, m_sData.fScrollPos)) { 10484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann MovePosButton(true); 1049ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1050ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_bNotifyForever) 1051ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann NotifyScrollWindow(); 1052ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1053ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1054ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1055ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1056ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPWL_ScrollBar::NotifyScrollWindow() { 1057ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (CPWL_Wnd* pParent = GetParentWindow()) { 1058ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT fPos; 1059ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann switch (m_sbType) { 1060ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case SBT_HSCROLL: 1061ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fPos = m_OriginInfo.fContentMin + m_sData.fScrollPos; 1062ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 1063ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case SBT_VSCROLL: 1064ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fPos = m_OriginInfo.fContentMax - m_sData.fScrollPos; 1065ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 1066ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1067ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pParent->OnNotify(this, PNM_SCROLLWINDOW, (intptr_t)m_sbType, 1068ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann (intptr_t)&fPos); 1069ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1070e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 1071e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 10724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCFX_FloatRect CPWL_ScrollBar::GetScrollArea() const { 10734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_FloatRect rcClient = GetClientRect(); 10744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_FloatRect rcArea; 1075ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1076ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!m_pMinButton || !m_pMaxButton) 1077ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return rcClient; 1078ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 10794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_FloatRect rcMin = m_pMinButton->GetWindowRect(); 10804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_FloatRect rcMax = m_pMaxButton->GetWindowRect(); 1081ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1082ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT fMinWidth = rcMin.right - rcMin.left; 1083ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT fMinHeight = rcMin.top - rcMin.bottom; 1084ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT fMaxWidth = rcMax.right - rcMax.left; 1085ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT fMaxHeight = rcMax.top - rcMax.bottom; 1086ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1087ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann switch (m_sbType) { 1088ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case SBT_HSCROLL: 1089ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (rcClient.right - rcClient.left > fMinWidth + fMaxWidth + 2) { 10904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rcArea = CFX_FloatRect(rcClient.left + fMinWidth + 1, rcClient.bottom, 10914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rcClient.right - fMaxWidth - 1, rcClient.top); 1092ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 10934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rcArea = CFX_FloatRect(rcClient.left + fMinWidth + 1, rcClient.bottom, 10944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rcClient.left + fMinWidth + 1, rcClient.top); 1095ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1096ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 1097ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case SBT_VSCROLL: 1098ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (rcClient.top - rcClient.bottom > fMinHeight + fMaxHeight + 2) { 10994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rcArea = CFX_FloatRect(rcClient.left, rcClient.bottom + fMinHeight + 1, 11004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rcClient.right, rcClient.top - fMaxHeight - 1); 1101ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 11024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rcArea = 11034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_FloatRect(rcClient.left, rcClient.bottom + fMinHeight + 1, 11044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rcClient.right, rcClient.bottom + fMinHeight + 1); 1105ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1106ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 1107ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1108ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1109ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rcArea.Normalize(); 1110ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1111ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return rcArea; 1112e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 1113e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 1114ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_FLOAT CPWL_ScrollBar::TrueToFace(FX_FLOAT fTrue) { 11154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_FloatRect rcPosArea; 1116ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rcPosArea = GetScrollArea(); 1117e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 1118ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT fFactWidth = m_sData.ScrollRange.GetWidth() + m_sData.fClientWidth; 1119ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fFactWidth = fFactWidth == 0 ? 1 : fFactWidth; 1120e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 1121ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT fFace = 0; 1122ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1123ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann switch (m_sbType) { 1124ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case SBT_HSCROLL: 1125ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fFace = rcPosArea.left + 1126ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fTrue * (rcPosArea.right - rcPosArea.left) / fFactWidth; 1127ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 1128ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case SBT_VSCROLL: 1129ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fFace = rcPosArea.top - 1130ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fTrue * (rcPosArea.top - rcPosArea.bottom) / fFactWidth; 1131ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 1132ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1133ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1134ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return fFace; 1135e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 1136e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 1137ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_FLOAT CPWL_ScrollBar::FaceToTrue(FX_FLOAT fFace) { 11384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_FloatRect rcPosArea; 1139ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rcPosArea = GetScrollArea(); 1140ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1141ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT fFactWidth = m_sData.ScrollRange.GetWidth() + m_sData.fClientWidth; 1142ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fFactWidth = fFactWidth == 0 ? 1 : fFactWidth; 1143ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1144ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT fTrue = 0; 1145ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1146ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann switch (m_sbType) { 1147ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case SBT_HSCROLL: 1148ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fTrue = (fFace - rcPosArea.left) * fFactWidth / 1149ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann (rcPosArea.right - rcPosArea.left); 1150ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 1151ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case SBT_VSCROLL: 1152ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fTrue = (rcPosArea.top - fFace) * fFactWidth / 1153ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann (rcPosArea.top - rcPosArea.bottom); 1154ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 1155ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1156ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1157ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return fTrue; 1158e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 1159e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 1160ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPWL_ScrollBar::CreateChildWnd(const PWL_CREATEPARAM& cp) { 1161ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CreateButtons(cp); 1162e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 1163e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 1164ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPWL_ScrollBar::TimerProc() { 1165ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann PWL_SCROLL_PRIVATEDATA sTemp = m_sData; 1166ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_bMinOrMax) 1167ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_sData.SubSmall(); 1168ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann else 1169ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_sData.AddSmall(); 1170ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 11714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (sTemp != m_sData) { 11724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann MovePosButton(true); 1173ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann NotifyScrollWindow(); 1174ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1175ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1176