1*3ac0a46fSAndroid Build Coastguard Worker // Copyright 2016 The PDFium Authors 2*3ac0a46fSAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*3ac0a46fSAndroid Build Coastguard Worker // found in the LICENSE file. 4*3ac0a46fSAndroid Build Coastguard Worker 5*3ac0a46fSAndroid Build Coastguard Worker // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6*3ac0a46fSAndroid Build Coastguard Worker 7*3ac0a46fSAndroid Build Coastguard Worker #ifndef XFA_FXFA_PARSER_CXFA_BOX_H_ 8*3ac0a46fSAndroid Build Coastguard Worker #define XFA_FXFA_PARSER_CXFA_BOX_H_ 9*3ac0a46fSAndroid Build Coastguard Worker 10*3ac0a46fSAndroid Build Coastguard Worker #include <tuple> 11*3ac0a46fSAndroid Build Coastguard Worker #include <vector> 12*3ac0a46fSAndroid Build Coastguard Worker 13*3ac0a46fSAndroid Build Coastguard Worker #include "core/fxcrt/fx_coordinates.h" 14*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fgas/graphics/cfgas_gepath.h" 15*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fxfa/parser/cxfa_node.h" 16*3ac0a46fSAndroid Build Coastguard Worker 17*3ac0a46fSAndroid Build Coastguard Worker class CFGAS_GEGraphics; 18*3ac0a46fSAndroid Build Coastguard Worker class CXFA_Edge; 19*3ac0a46fSAndroid Build Coastguard Worker class CXFA_Fill; 20*3ac0a46fSAndroid Build Coastguard Worker class CXFA_Stroke; 21*3ac0a46fSAndroid Build Coastguard Worker 22*3ac0a46fSAndroid Build Coastguard Worker class CXFA_Box : public CXFA_Node { 23*3ac0a46fSAndroid Build Coastguard Worker public: 24*3ac0a46fSAndroid Build Coastguard Worker CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED; 25*3ac0a46fSAndroid Build Coastguard Worker ~CXFA_Box() override; 26*3ac0a46fSAndroid Build Coastguard Worker 27*3ac0a46fSAndroid Build Coastguard Worker XFA_AttributeValue GetPresence(); 28*3ac0a46fSAndroid Build Coastguard Worker std::tuple<XFA_AttributeValue, bool, float> Get3DStyle(); 29*3ac0a46fSAndroid Build Coastguard Worker 30*3ac0a46fSAndroid Build Coastguard Worker size_t CountEdges(); 31*3ac0a46fSAndroid Build Coastguard Worker CXFA_Edge* GetEdgeIfExists(size_t nIndex); 32*3ac0a46fSAndroid Build Coastguard Worker CXFA_Fill* GetOrCreateFillIfPossible(); 33*3ac0a46fSAndroid Build Coastguard Worker 34*3ac0a46fSAndroid Build Coastguard Worker std::vector<CXFA_Stroke*> GetStrokes(); 35*3ac0a46fSAndroid Build Coastguard Worker 36*3ac0a46fSAndroid Build Coastguard Worker void Draw(CFGAS_GEGraphics* pGS, 37*3ac0a46fSAndroid Build Coastguard Worker const CFX_RectF& rtWidget, 38*3ac0a46fSAndroid Build Coastguard Worker const CFX_Matrix& matrix, 39*3ac0a46fSAndroid Build Coastguard Worker bool forceRound); 40*3ac0a46fSAndroid Build Coastguard Worker 41*3ac0a46fSAndroid Build Coastguard Worker protected: 42*3ac0a46fSAndroid Build Coastguard Worker CXFA_Box(CXFA_Document* pDoc, 43*3ac0a46fSAndroid Build Coastguard Worker XFA_PacketType ePacket, 44*3ac0a46fSAndroid Build Coastguard Worker Mask<XFA_XDPPACKET> validPackets, 45*3ac0a46fSAndroid Build Coastguard Worker XFA_ObjectType oType, 46*3ac0a46fSAndroid Build Coastguard Worker XFA_Element eType, 47*3ac0a46fSAndroid Build Coastguard Worker pdfium::span<const PropertyData> properties, 48*3ac0a46fSAndroid Build Coastguard Worker pdfium::span<const AttributeData> attributes, 49*3ac0a46fSAndroid Build Coastguard Worker CJX_Object* js_node); 50*3ac0a46fSAndroid Build Coastguard Worker 51*3ac0a46fSAndroid Build Coastguard Worker XFA_AttributeValue GetHand(); 52*3ac0a46fSAndroid Build Coastguard Worker 53*3ac0a46fSAndroid Build Coastguard Worker private: 54*3ac0a46fSAndroid Build Coastguard Worker bool IsCircular(); 55*3ac0a46fSAndroid Build Coastguard Worker absl::optional<int32_t> GetStartAngle(); 56*3ac0a46fSAndroid Build Coastguard Worker absl::optional<int32_t> GetSweepAngle(); 57*3ac0a46fSAndroid Build Coastguard Worker 58*3ac0a46fSAndroid Build Coastguard Worker std::vector<CXFA_Stroke*> GetStrokesInternal(bool bNull); 59*3ac0a46fSAndroid Build Coastguard Worker void DrawFill(const std::vector<CXFA_Stroke*>& strokes, 60*3ac0a46fSAndroid Build Coastguard Worker CFGAS_GEGraphics* pGS, 61*3ac0a46fSAndroid Build Coastguard Worker CFX_RectF rtWidget, 62*3ac0a46fSAndroid Build Coastguard Worker const CFX_Matrix& matrix, 63*3ac0a46fSAndroid Build Coastguard Worker bool forceRound); 64*3ac0a46fSAndroid Build Coastguard Worker void StrokeArcOrRounded(CFGAS_GEGraphics* pGS, 65*3ac0a46fSAndroid Build Coastguard Worker CFX_RectF rtWidget, 66*3ac0a46fSAndroid Build Coastguard Worker const CFX_Matrix& matrix, 67*3ac0a46fSAndroid Build Coastguard Worker bool forceRound); 68*3ac0a46fSAndroid Build Coastguard Worker void GetPathArcOrRounded(CFX_RectF rtDraw, 69*3ac0a46fSAndroid Build Coastguard Worker bool forceRound, 70*3ac0a46fSAndroid Build Coastguard Worker CFGAS_GEPath* fillPath); 71*3ac0a46fSAndroid Build Coastguard Worker }; 72*3ac0a46fSAndroid Build Coastguard Worker 73*3ac0a46fSAndroid Build Coastguard Worker #endif // XFA_FXFA_PARSER_CXFA_BOX_H_ 74