1 // Copyright 2016 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/fxgraphics/cxfa_geshading.h" 8 9 CXFA_GEShading::CXFA_GEShading(const CFX_PointF& beginPoint, 10 const CFX_PointF& endPoint, 11 bool isExtendedBegin, 12 bool isExtendedEnd, 13 const FX_ARGB beginArgb, 14 const FX_ARGB endArgb) 15 : m_type(FX_SHADING_Axial), 16 m_beginPoint(beginPoint), 17 m_endPoint(endPoint), 18 m_beginRadius(0), 19 m_endRadius(0), 20 m_isExtendedBegin(isExtendedBegin), 21 m_isExtendedEnd(isExtendedEnd), 22 m_beginArgb(beginArgb), 23 m_endArgb(endArgb) { 24 InitArgbArray(); 25 } 26 27 CXFA_GEShading::CXFA_GEShading(const CFX_PointF& beginPoint, 28 const CFX_PointF& endPoint, 29 const float beginRadius, 30 const float endRadius, 31 bool isExtendedBegin, 32 bool isExtendedEnd, 33 const FX_ARGB beginArgb, 34 const FX_ARGB endArgb) 35 : m_type(FX_SHADING_Radial), 36 m_beginPoint(beginPoint), 37 m_endPoint(endPoint), 38 m_beginRadius(beginRadius), 39 m_endRadius(endRadius), 40 m_isExtendedBegin(isExtendedBegin), 41 m_isExtendedEnd(isExtendedEnd), 42 m_beginArgb(beginArgb), 43 m_endArgb(endArgb) { 44 InitArgbArray(); 45 } 46 47 CXFA_GEShading::~CXFA_GEShading() {} 48 49 void CXFA_GEShading::InitArgbArray() { 50 int32_t a1; 51 int32_t r1; 52 int32_t g1; 53 int32_t b1; 54 std::tie(a1, r1, g1, b1) = ArgbDecode(m_beginArgb); 55 56 int32_t a2; 57 int32_t r2; 58 int32_t g2; 59 int32_t b2; 60 std::tie(a2, r2, g2, b2) = ArgbDecode(m_endArgb); 61 62 float f = static_cast<float>(FX_SHADING_Steps - 1); 63 float aScale = 1.0 * (a2 - a1) / f; 64 float rScale = 1.0 * (r2 - r1) / f; 65 float gScale = 1.0 * (g2 - g1) / f; 66 float bScale = 1.0 * (b2 - b1) / f; 67 68 for (int32_t i = 0; i < FX_SHADING_Steps; i++) { 69 int32_t a3 = static_cast<int32_t>(i * aScale); 70 int32_t r3 = static_cast<int32_t>(i * rScale); 71 int32_t g3 = static_cast<int32_t>(i * gScale); 72 int32_t b3 = static_cast<int32_t>(i * bScale); 73 74 // TODO(dsinclair): Add overloads for FX_ARGB. pdfium:437 75 m_argbArray[i] = 76 FXARGB_TODIB(FXARGB_MAKE(a1 + a3, r1 + r3, g1 + g3, b1 + b3)); 77 } 78 } 79