1#ifndef _SVGVIEW_VIEW_H 2#define _SVGVIEW_VIEW_H 3 4// Standard Includes ----------------------------------------------------------- 5#include <expat.h> 6 7// System Includes ------------------------------------------------------------- 8#include <InterfaceKit.h> 9#include <SupportKit.h> 10#include <TranslationUtils.h> 11 12// Project Includes ------------------------------------------------------------ 13#include "Matrix.h" 14 15// Local Includes -------------------------------------------------------------- 16 17// Local Defines --------------------------------------------------------------- 18struct named_color { 19 const char *name; 20 rgb_color color; 21}; 22 23struct named_gradient { 24 const char *name; 25 rgb_color color; 26 bool started; 27}; 28 29enum { 30 STROKE_FLAG = 0x01, 31 FILL_FLAG = 0x02, 32 STROKE_WIDTH_FLAG = 0x04, 33 LINE_MODE_FLAG = 0x08, 34 FONT_SIZE_FLAG = 0x10, 35 MATRIX_FLAG = 0x20, 36 37}; 38 39struct _state_ { 40 41 _state_() { set_default_values(); } 42 _state_(_state_ &state) { *this = state; } 43 void set_default_values() 44 { 45 fFlags = 0; 46 fCurrentColor.red = 0; fCurrentColor.green = 0; 47 fCurrentColor.blue = 0; fCurrentColor.alpha = 255; 48 fStrokeColor.red = 0; fStrokeColor.green = 0; 49 fStrokeColor.blue = 0; fStrokeColor.alpha = 255; 50 fStroke = false; 51 fFillColor.red = 0; fFillColor.green = 0; 52 fFillColor.blue = 0; fFillColor.alpha = 255; 53 fFill = true; 54 fStrokeWidth = 1.0f; 55 fLineCap = B_BUTT_CAP; 56 fLineJoin = B_MITER_JOIN; 57 fLineMiterLimit = B_DEFAULT_MITER_LIMIT; 58 fFontSize = 9.0f; 59 } 60 61 uint32 fFlags; 62 rgb_color fCurrentColor; 63 rgb_color fStrokeColor; 64 bool fStroke; 65 rgb_color fFillColor; 66 bool fFill; 67 float fStrokeWidth; 68 cap_mode fLineCap; 69 join_mode fLineJoin; 70 float fLineMiterLimit; 71 float fFontSize; 72 BMatrix fMatrix; 73}; 74 75// Globals --------------------------------------------------------------------- 76 77// Svg2PictureView class ------------------------------------------------------- 78class Svg2PictureView : public BView { 79 80public: 81 Svg2PictureView(BRect frame, const char *fileName); 82 ~Svg2PictureView(); 83 84 virtual void AttachedToWindow(); 85 virtual void Draw(BRect updateRect); 86 87private: 88 bool HasAttribute(const XML_Char **attributes, const char *name); 89 float GetFloatAttribute(const XML_Char **attributes, const char *name); 90 const char *GetStringAttribute(const XML_Char **attributes, const char *name); 91 rgb_color GetColorAttribute(const XML_Char **attributes, const char *name, uint8 alpha); 92 void GetPolygonAttribute(const XML_Char **attributes, const char *name, BShape &shape); 93 void GetMatrixAttribute(const XML_Char **attributes, const char *name, BMatrix *matrix); 94 void GetShapeAttribute(const XML_Char **attributes, const char *name, BShape &shape); 95 void CheckAttributes(const XML_Char **attributes); 96 void StartElement(const XML_Char *name, const XML_Char **attributes); 97 void EndElement(const XML_Char *name); 98 void CharacterDataHandler(const XML_Char *s, int len); 99 100 void Push(); 101 void Pop(); 102 103static void _StartElement(Svg2PictureView *view, const XML_Char *name, const XML_Char **attributes); 104static void _EndElement(Svg2PictureView *view, const XML_Char *name); 105static void _CharacterDataHandler(Svg2PictureView *view, const XML_Char *s, int len); 106 107 _state_ fState; 108 BList fStack; 109 named_gradient *fGradient; 110 BList fGradients; 111 BPoint fTextPosition; 112 BString fText; 113 114 BString fFileName; 115 BPicture *fPicture; 116}; 117//------------------------------------------------------------------------------ 118 119#endif // _SVGVIEW_VIEW_H 120