ivideo/graph2d.h
Go to the documentation of this file.00001 /* 00002 Copyright (C) 2001 by Jorrit Tyberghein 00003 Copyright (C) 1998-2000 by Andrew Zabolotny <bit@eltech.ru> 00004 00005 This library is free software; you can redistribute it and/or 00006 modify it under the terms of the GNU Library General Public 00007 License as published by the Free Software Foundation; either 00008 version 2 of the License, or (at your option) any later version. 00009 00010 This library is distributed in the hope that it will be useful, 00011 but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00013 Library General Public License for more details. 00014 00015 You should have received a copy of the GNU Library General Public 00016 License along with this library; if not, write to the Free 00017 Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 00018 */ 00019 00020 #ifndef __CS_IVIDEO_GRAPH2D_H__ 00021 #define __CS_IVIDEO_GRAPH2D_H__ 00022 00031 #include <stdarg.h> 00032 #include "csutil/scf.h" 00033 #include "csgfx/rgbpixel.h" 00034 #include "ivideo/texture.h" 00035 #include "iengine/texture.h" 00036 #include "ivideo/cursor.h" 00037 00038 class csRect; 00039 struct iImage; 00040 struct iFontServer; 00041 struct iFont; 00042 struct iNativeWindow; 00043 struct iGraphics2D; 00044 00046 enum 00047 { 00052 CS_WRITE_BASELINE = (1 << 0), 00056 CS_WRITE_NOANTIALIAS = (1 << 1), 00057 }; 00058 00060 struct csPixelCoord 00061 { 00063 int x; 00065 int y; 00066 }; 00067 00071 struct csPixelFormat 00072 { 00078 uint32 RedMask, GreenMask, BlueMask; 00083 int RedShift, GreenShift, BlueShift; 00085 int RedBits, GreenBits, BlueBits; 00086 00093 int PalEntries; 00094 00104 int PixelBytes; 00105 00110 void complete () 00111 { 00112 #define COMPUTE(comp) \ 00113 { \ 00114 unsigned long i, tmp = comp##Mask; \ 00115 for (i = 0; tmp && !(tmp & 1); tmp >>= 1, i++) {} \ 00116 comp##Shift = i; \ 00117 for (i = 0; tmp & 1; tmp >>= 1, i++) {} \ 00118 comp##Bits = i; \ 00119 } 00120 COMPUTE (Red); 00121 COMPUTE (Green); 00122 COMPUTE (Blue); 00123 #undef COMPUTE 00124 } 00125 }; 00126 00128 struct csImageArea 00129 { 00130 int x, y, w, h; 00131 char *data; 00132 00133 inline csImageArea (int sx, int sy, int sw, int sh) 00134 { x = sx; y = sy; w = sw; h = sh; data = 0; } 00135 }; 00136 00137 SCF_VERSION (iOffscreenCanvasCallback, 1, 0, 0); 00138 00144 struct iOffscreenCanvasCallback : public iBase 00145 { 00147 virtual void FinishDraw (iGraphics2D* canvas) = 0; 00149 virtual void SetRGB (iGraphics2D* canvas, int idx, int r, int g, int b) = 0; 00150 }; 00151 00152 SCF_VERSION (iGraphics2D, 2, 4, 0); 00153 00159 struct iGraphics2D : public iBase 00160 { 00162 virtual bool Open () = 0; 00163 00165 virtual void Close () = 0; 00166 00168 virtual int GetWidth () = 0; 00169 00171 virtual int GetHeight () = 0; 00172 00174 virtual int GetPage () = 0; 00175 00177 virtual bool DoubleBuffer (bool Enable) = 0; 00178 00180 virtual bool GetDoubleBufferState () = 0; 00181 00183 virtual csPixelFormat *GetPixelFormat () = 0; 00184 00190 virtual int GetPixelBytes () = 0; 00191 00199 virtual int GetPalEntryCount () = 0; 00200 00202 virtual csRGBpixel *GetPalette () = 0; 00203 00205 virtual void SetRGB (int i, int r, int g, int b) = 0; 00207 virtual int FindRGB (int r, int g, int b) = 0; 00208 00214 virtual void SetClipRect (int nMinX, int nMinY, int nMaxX, int nMaxY) = 0; 00215 00217 virtual void GetClipRect(int& nMinX, int& nMinY, int& nMaxX, int& nMaxY) = 0; 00218 00223 virtual bool BeginDraw () = 0; 00224 00226 virtual void FinishDraw () = 0; 00227 00233 virtual void Print (csRect *pArea) = 0; 00234 00236 virtual void Clear (int color) = 0; 00237 00239 virtual void ClearAll (int color) = 0; 00240 00242 virtual void DrawLine (float x1, float y1, float x2, float y2, int color) = 0; 00243 00245 virtual void DrawBox (int x, int y, int w, int h, int color) = 0; 00246 00251 virtual bool ClipLine (float& x1, float& y1, float& x2, float& y2, 00252 int xmin, int ymin, int xmax, int ymax) = 0; 00253 00255 virtual void DrawPixel (int x, int y, int color) = 0; 00256 00258 virtual void DrawPixels (csPixelCoord* pixels, int num_pixels, int color) = 0; 00259 00261 virtual void Blit (int x, int y, int width, int height, 00262 unsigned char* data) = 0; 00263 00265 virtual unsigned char *GetPixelAt (int x, int y) = 0; 00266 00268 virtual void GetPixel (int x, int y, uint8 &oR, uint8 &oG, uint8 &oB) = 0; 00269 00275 virtual csImageArea *SaveArea (int x, int y, int w, int h) = 0; 00276 00278 virtual void RestoreArea (csImageArea *Area, bool Free) = 0; 00279 00281 virtual void FreeArea (csImageArea *Area) = 0; 00282 00287 virtual void Write (iFont *font, int x, int y, int fg, int bg, 00288 const char *str, uint flags = 0) = 0; 00289 00297 virtual void WriteBaseline (iFont *font, int x, int y, int fg, int bg, 00298 const char *str) = 0; 00299 00301 virtual void AllowResize (bool iAllow) = 0; 00302 00304 virtual bool Resize (int w, int h) = 0; 00305 00307 virtual iFontServer *GetFontServer () = 0; 00308 00316 virtual bool PerformExtension (char const* command, ...) = 0; 00317 00323 virtual bool PerformExtensionV (char const* command, va_list) = 0; 00324 00326 virtual csPtr<iImage> ScreenShot () = 0; 00327 00332 virtual iNativeWindow* GetNativeWindow () = 0; 00333 00335 virtual bool GetFullScreen () = 0; 00336 00340 virtual void SetFullScreen (bool b) = 0; 00341 00343 virtual bool SetMousePosition (int x, int y) = 0; 00344 00353 virtual bool SetMouseCursor (csMouseCursorID iShape) = 0; 00354 00362 virtual bool SetMouseCursor (iImage *image, csRGBcolor keycolor, 00363 int hotspot_x = 0, int hotspot_y = 0, 00364 csRGBcolor fg = csRGBcolor(255,255,255), 00365 csRGBcolor bg = csRGBcolor(0,0,0)) = 0; 00366 00372 virtual bool SetGamma (float gamma) = 0; 00373 00377 virtual float GetGamma () const = 0; 00378 00387 virtual csPtr<iGraphics2D> CreateOffscreenCanvas ( 00388 void* memory, int width, int height, int depth, 00389 iOffscreenCanvasCallback* ofscb) = 0; 00390 }; 00391 00394 #endif // __CS_IVIDEO_GRAPH2D_H__ 00395
Generated for Crystal Space by doxygen 1.2.18