1// Copyright 2014 PDFium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6
7#include "xfa/src/foxitlib.h"
8CFWL_EditTP::CFWL_EditTP() {}
9CFWL_EditTP::~CFWL_EditTP() {}
10FX_BOOL CFWL_EditTP::IsValidWidget(IFWL_Widget* pWidget) {
11  if (!pWidget)
12    return FALSE;
13  return pWidget->GetClassID() == FWL_CLASSHASH_Edit;
14}
15FX_BOOL CFWL_EditTP::DrawBackground(CFWL_ThemeBackground* pParams) {
16  switch (pParams->m_iPart) {
17    case FWL_PART_EDT_Border: {
18      DrawBorder(pParams->m_pGraphics, &pParams->m_rtPart, &pParams->m_matrix);
19      break;
20    }
21    case FWL_PART_EDT_Edge: {
22      DrawEdge(pParams->m_pGraphics, pParams->m_pWidget->GetStyles(),
23               &pParams->m_rtPart, &pParams->m_matrix);
24      break;
25    }
26    case FWL_PART_EDT_Background: {
27      if (pParams->m_pPath) {
28        CFX_Graphics* pGraphics = pParams->m_pGraphics;
29        pGraphics->SaveGraphState();
30        CFX_Color crSelected(FWL_GetThemeColor(m_dwThemeID) == 0
31                                 ? FWLTHEME_COLOR_BKSelected
32                                 : FWLTHEME_COLOR_Green_BKSelected);
33        pGraphics->SetFillColor(&crSelected);
34        pGraphics->FillPath(pParams->m_pPath, FXFILL_WINDING,
35                            &pParams->m_matrix);
36        pGraphics->RestoreGraphState();
37      } else {
38        FX_BOOL bStatic =
39            pParams->m_dwData == FWL_PARTDATA_EDT_StaticBackground;
40        CFX_Path path;
41        path.Create();
42        path.AddRectangle(pParams->m_rtPart.left, pParams->m_rtPart.top,
43                          pParams->m_rtPart.width, pParams->m_rtPart.height);
44        CFX_Color cr(FWLTHEME_COLOR_Background);
45        if (!bStatic) {
46          if ((pParams->m_dwStates & FWL_PARTSTATE_EDT_Disable) ==
47              FWL_PARTSTATE_EDT_Disable) {
48            cr.Set(FWLTHEME_COLOR_EDGERB1);
49          } else if ((pParams->m_dwStates & FWL_PARTSTATE_EDT_ReadOnly) ==
50                     FWL_PARTSTATE_EDT_ReadOnly) {
51            cr.Set(ArgbEncode(255, 236, 233, 216));
52          } else {
53            cr.Set(0xFFFFFFFF);
54          }
55        }
56        pParams->m_pGraphics->SaveGraphState();
57        pParams->m_pGraphics->SetFillColor(&cr);
58        pParams->m_pGraphics->FillPath(&path, FXFILL_WINDING,
59                                       &pParams->m_matrix);
60        pParams->m_pGraphics->RestoreGraphState();
61      }
62      break;
63    }
64    case FWL_PART_EDT_CombTextLine: {
65      FX_ARGB cr = 0xFF000000;
66      FX_FLOAT fWidth = 1.0f;
67      CFX_Color crLine(cr);
68      pParams->m_pGraphics->SetStrokeColor(&crLine);
69      pParams->m_pGraphics->SetLineWidth(fWidth);
70      pParams->m_pGraphics->StrokePath(pParams->m_pPath, &pParams->m_matrix);
71      break;
72    }
73    default: { break; }
74  }
75  return TRUE;
76}
77FWL_ERR CFWL_EditTP::Initialize() {
78  InitTTO();
79  return CFWL_WidgetTP::Initialize();
80}
81FWL_ERR CFWL_EditTP::Finalize() {
82  FinalizeTTO();
83  return CFWL_WidgetTP::Finalize();
84}
85