/** ******************************************************************************* * @file draw/Image.h * @brief draw Imaging system (header) * @author Edouard DUPIN * @date 21/08/2012 * @par Project * draw * * @par Copyright * Copyright 2011 Edouard DUPIN, all right reserved * * This software is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY. * * Licence summary : * You can modify and redistribute the sources code and binaries. * You can send me the bug-fix * * Term of the licence in in the file licence.txt. * ******************************************************************************* */ #ifndef __DRAW_IMAGE_H__ #define __DRAW_IMAGE_H__ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define BASIC_GRADIENT #ifndef BASIC_GRADIENT class Grid { public: etk::Vector2D m_size; etk::Vector m_data; int32_t m_outsideVal; int32_t m_errorVal; Grid(ivec2 size) { m_size = size; m_outsideVal = 20; m_errorVal = 0; // basic element : int32_t tmpPoint = 0; // preallocate data with a basic bg elements : m_data.ReSize(m_size.x()*m_size.y(), tmpPoint); }; ~Grid(void) { }; void SetOutsideVal(int32_t newVal) { m_outsideVal = newVal; } void SetErrorVal(int32_t newVal) { m_errorVal = newVal; } void SetInide(etk::Vector2D pos) { if( pos.x()>=0 && pos.x()=0 && pos.y() pos) { if( pos.x()>=0 && pos.x()=0 && pos.y() pos) { ; if( pos.x()>0 && pos.x()0 && pos.y() pos, int32_t val) { if( pos.x()>0 && pos.x()0 && pos.y() m_data; int32_t m_outsideVal; int32_t m_errorVal; Grid(ivec2 size) { m_size = size; m_outsideVal = 20; m_errorVal = 0; // basic element : etk::Vector2D tmpPoint(0,0); // preallocate data with a basic bg elements : m_data.ReSize(m_size.x()*m_size.y(), tmpPoint); }; ~Grid(void) { }; void SetOutsideVal(int32_t newVal) { m_outsideVal = newVal; } void SetErrorVal(int32_t newVal) { m_errorVal = newVal; } void SetInide(ivec2 pos) { //if( pos.x>=0 && pos.x=0 && pos.y=0 && pos.x=0 && pos.y0 && pos.x0 && pos.y(m_errorVal,m_errorVal); }; void Set(ivec2 pos, ivec2 val) { //if( pos.x>0 && pos.x0 && pos.y rendererBase_t; typedef agg::renderer_scanline_aa_solid rendererSolid_t; class Image { private: ivec2 m_size; etk::Vector m_data; agg::rendering_buffer * m_renderingBuffer; agg::pixfmt_rgba32 * m_pixFrame; rendererBase_t * m_renderBase; rendererSolid_t * m_renderArea; agg::rasterizer_scanline_aa<> m_rasterizer; //!< AGG renderer system agg::scanline_p8 m_scanLine; //!< // curent color for the system ... agg::rgba8 m_fillColor; agg::rgba8 m_strokeColor; float m_strokeSize; public: // constructor : Image(ivec2 size); Image(void); // destructor ~Image(void); // initialiser void Init(void); // EWOL internal API for Texture system : public: void* GetTextureDataPointer(void) { return &m_data[0]; }; // ----------------------------------------------- // -- basic tools : // ----------------------------------------------- public : void Resize(ivec2 size); //void Resize(etk::Vector2D startPos, Vector2D size); ivec2 GetSize(void) const { return m_size; }; int32_t GetWidth(void) const { return m_size.x(); }; int32_t GetHeight(void) const { return m_size.y(); }; //void Move(etk::Vector2D pos); //void Rotate(float angle); // radian //void Zoom(float coefficient); void Clear(void) { for (int32_t iii=0; iii0 && pos.x()0 && pos.y()=0 && pos.x()=0 && pos.y() startPos, Vector2D size) const; //void SetData(uint8_t *data, etk::Vector2D size); // ----------------------------------------------- // -- Drawing tools : // ----------------------------------------------- public : void Begin(void); void End(void); void SetFillColor(draw::Color newColor) { m_fillColor = newColor; } void SetStrokeColor(draw::Color newColor) { m_strokeColor = newColor; } void SetStrokeSize(float thickness) { m_strokeSize = thickness; } void MoveTo(vec2 pos); void MoveToAbs(vec2 pos); void LineTo(vec2 pos); void LineToAbs(vec2 pos); void Join(void); void Draw(void); void Line(vec2 posStart, vec2 posEnd); void Dot(vec2 pos); void Rectangle(vec2 pos, vec2 size); void Circle(vec2 pos, float radius, float angleStart=0, float angleStop=2*M_PI); void Disc(vec2 pos, float radius, float angleStart=0, float angleStop=2*M_PI); // generate the distant field from the alpha value of the Image void DistanceField(void); void DistanceField(ivec2 pos, ivec2 size, int32_t upscaler=1, int32_t startPos=0); void SaveFile(const char * file) {}; private: }; }; #endif