#ifndef _AggCtrl_AggCtrl_h_ #define _AggCtrl_AggCtrl_h_ /* This package implements Ctrl which allows user to use Agg software rendering engine in Upp Autor: Jan DolinĂ¡r Usage: Just define onDraw method in your source and put in there the drawing stuff The Ctrl has pre-initialized rendering_buffer rbuf which is rendered in Paint(...) function You also can connect it to higher level Agg classes, or even draw other buffer with PaintAgg(...) Bugs: Currently only X11 is supported Doesn't work properly when used pixelformat has different bpp then system (on my system only 32bit pixel formats work...) */ #include //#include #include #include #include #include "PixFmts.h" #ifdef PLATFORM_X11 #include #elif defined(PLATFORM_WIN32) #include #include #include #include #endif class AggCtrl:public Upp::Ctrl{ public: typedef AggCtrl CLASSNAME; AggCtrl(agg::pix_format_e format=agg::pix_format_bgra32); ~AggCtrl(); virtual void Paint(Upp::Draw& draw); virtual void onDraw(Upp::Draw& dest); virtual void onInit(); virtual void onResize(int width,int height); void PaintAgg(Upp::Draw& dest); void PaintAgg(const agg::rendering_buffer* src,Upp::Draw& dest); void Resized(); void SetPixFmt(agg::pix_format_e format); agg::rendering_buffer rbuf; bool flip_y; private: unsigned bpp,sysbpp; agg::pix_format_e pixformat,sysformat; int cx,cy; #ifdef PLATFORM_X11 public: unsigned char* buf; private: XImage* ximg; int byte_order; unsigned long r_mask,g_mask,b_mask; #elif defined(PLATFORM_WIN32) void CreatePmap(unsigned width,unsigned height,agg::rendering_buffer* wnd); agg::pixel_map pmap; #endif }; #endif