14d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Copyright 2014 PDFium Authors. All rights reserved. 24d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Use of this source code is governed by a BSD-style license that can be 34d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// found in the LICENSE file. 44d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 54d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 64d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 74d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fwl/theme/cfwl_pushbuttontp.h" 84d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 94d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fwl/cfwl_pushbutton.h" 104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fwl/cfwl_themebackground.h" 114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fwl/cfwl_widget.h" 124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fwl/ifwl_themeprovider.h" 134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fxgraphics/cfx_color.h" 144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fxgraphics/cfx_path.h" 154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#define PUSHBUTTON_SIZE_Corner 2 174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCFWL_PushButtonTP::CFWL_PushButtonTP() : m_pThemeData(new PBThemeData) { 194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann SetThemeData(); 204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCFWL_PushButtonTP::~CFWL_PushButtonTP() {} 234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CFWL_PushButtonTP::DrawBackground(CFWL_ThemeBackground* pParams) { 254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann switch (pParams->m_iPart) { 264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann case CFWL_Part::Border: { 274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann DrawBorder(pParams->m_pGraphics, &pParams->m_rtPart, &pParams->m_matrix); 284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann break; 294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann case CFWL_Part::Background: { 314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_RectF& rect = pParams->m_rtPart; 324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann FX_FLOAT fRight = rect.right(); 334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann FX_FLOAT fBottom = rect.bottom(); 345ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann 354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_Path strokePath; 365ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann strokePath.MoveTo( 375ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann CFX_PointF(rect.left + PUSHBUTTON_SIZE_Corner, rect.top)); 385ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann strokePath.LineTo(CFX_PointF(fRight - PUSHBUTTON_SIZE_Corner, rect.top)); 395ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann strokePath.LineTo(CFX_PointF(fRight, rect.top + PUSHBUTTON_SIZE_Corner)); 405ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann strokePath.LineTo(CFX_PointF(fRight, fBottom - PUSHBUTTON_SIZE_Corner)); 415ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann strokePath.LineTo(CFX_PointF(fRight - PUSHBUTTON_SIZE_Corner, fBottom)); 425ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann strokePath.LineTo( 435ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann CFX_PointF(rect.left + PUSHBUTTON_SIZE_Corner, fBottom)); 445ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann strokePath.LineTo( 455ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann CFX_PointF(rect.left, fBottom - PUSHBUTTON_SIZE_Corner)); 465ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann strokePath.LineTo( 475ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann CFX_PointF(rect.left, rect.top + PUSHBUTTON_SIZE_Corner)); 485ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann strokePath.LineTo( 495ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann CFX_PointF(rect.left + PUSHBUTTON_SIZE_Corner, rect.top)); 505ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann 514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_Path fillPath; 524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann fillPath.AddSubpath(&strokePath); 535ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann 544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_Graphics* pGraphics = pParams->m_pGraphics; 554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pGraphics->SaveGraphState(); 565ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann 574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_RectF rtInner(rect); 584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rtInner.Deflate(PUSHBUTTON_SIZE_Corner + 1, PUSHBUTTON_SIZE_Corner + 1, 594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann PUSHBUTTON_SIZE_Corner, PUSHBUTTON_SIZE_Corner); 604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann fillPath.AddRectangle(rtInner.left, rtInner.top, rtInner.width, 614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rtInner.height); 625ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann 634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int32_t iColor = GetColorID(pParams->m_dwStates); 644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann DrawAxialShading(pGraphics, rect.left + PUSHBUTTON_SIZE_Corner, rect.top, 654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rect.left + PUSHBUTTON_SIZE_Corner, rect.bottom(), 664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pThemeData->clrStart[iColor], 674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pThemeData->clrEnd[iColor], &fillPath, 684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann FXFILL_ALTERNATE, &pParams->m_matrix); 695ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann 704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_Color crStroke(m_pThemeData->clrBorder[iColor]); 714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pGraphics->SetStrokeColor(&crStroke); 724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pGraphics->StrokePath(&strokePath, &pParams->m_matrix); 735ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann 744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann fillPath.Clear(); 754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann fillPath.AddRectangle(rtInner.left, rtInner.top, rtInner.width, 764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rtInner.height); 775ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann 784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_Color crFill(m_pThemeData->clrFill[iColor]); 794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pGraphics->SetFillColor(&crFill); 804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pGraphics->FillPath(&fillPath, FXFILL_WINDING, &pParams->m_matrix); 814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (pParams->m_dwStates & CFWL_PartState_Focused) { 824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann rtInner.Inflate(1, 1, 0, 0); 834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann DrawFocus(pGraphics, &rtInner, &pParams->m_matrix); 844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pGraphics->RestoreGraphState(); 864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann break; 874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann default: 894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann break; 904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CFWL_PushButtonTP::SetThemeData() { 944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pThemeData->clrBorder[0] = ArgbEncode(255, 0, 60, 116); 954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pThemeData->clrBorder[1] = ArgbEncode(255, 0, 60, 116); 964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pThemeData->clrBorder[2] = ArgbEncode(255, 0, 60, 116); 974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pThemeData->clrBorder[3] = ArgbEncode(255, 0, 60, 116); 984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pThemeData->clrBorder[4] = ArgbEncode(255, 201, 199, 186); 994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pThemeData->clrStart[0] = ArgbEncode(255, 255, 255, 255); 1004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pThemeData->clrStart[1] = ArgbEncode(255, 209, 204, 193); 1014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pThemeData->clrStart[2] = ArgbEncode(255, 255, 240, 207); 1024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pThemeData->clrStart[3] = ArgbEncode(255, 206, 231, 255); 1034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pThemeData->clrStart[4] = ArgbEncode(255, 245, 244, 234); 1044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pThemeData->clrEnd[0] = ArgbEncode(255, 214, 208, 197); 1054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pThemeData->clrEnd[1] = ArgbEncode(255, 242, 241, 238); 1064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pThemeData->clrEnd[2] = ArgbEncode(255, 229, 151, 0); 1074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pThemeData->clrEnd[3] = ArgbEncode(255, 105, 130, 238); 1084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pThemeData->clrEnd[4] = ArgbEncode(255, 245, 244, 234); 1094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pThemeData->clrFill[0] = ArgbEncode(255, 255, 255, 255); 1104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pThemeData->clrFill[1] = ArgbEncode(255, 226, 225, 218); 1114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pThemeData->clrFill[2] = ArgbEncode(255, 255, 255, 255); 1124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pThemeData->clrFill[3] = ArgbEncode(255, 255, 255, 255); 1134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pThemeData->clrFill[4] = ArgbEncode(255, 245, 244, 234); 1144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 1154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 1164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannint32_t CFWL_PushButtonTP::GetColorID(uint32_t dwStates) const { 1174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int32_t color = 0; 1184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (dwStates & CFWL_PartState_Disabled) 1194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann color += 4; 1204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (dwStates & CFWL_PartState_Default) { 1214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann color += 3; 1224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } else { 1234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (dwStates & CFWL_PartState_Hovered) 1244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann color += 2; 1254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (dwStates & CFWL_PartState_Pressed) 1264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann color += 1; 1274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 1284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return color; 1294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 130