## Public API Reference

- Main Page
- Modules
- Namespaces
- Classes
- Files
- Related Pages

- File List
- File Members

# 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 "csutil/scf.h"
    00032 #include "csgfx/rgbpixel.h"
    00033 #include "ivideo/cursor.h"
    00034
    00035
    00036 struct iImage;
    00037 struct iFontServer;
    00038 struct iFont;
    00039 struct iNativeWindow;
    00040 struct iGraphics2D;
    00041
    00042 class csRect;
    00043
    00045 enum
    00046 {
    00051   CS_WRITE_BASELINE    = (1 << 0),
    00055   CS_WRITE_NOANTIALIAS = (1 << 1)
    00056 };
    00057
    00059 struct csPixelCoord
    00060 {
    00062   int x;
    00064   int y;
    00065 };
    00066
    00070 struct csPixelFormat
    00071 {
    00077   uint32 RedMask, GreenMask, BlueMask, AlphaMask;
    00082   int RedShift, GreenShift, BlueShift, AlphaShift;
    00084   int RedBits, GreenBits, BlueBits, AlphaBits;
    00085
    00092   int PalEntries;
    00093
    00101   int PixelBytes;
    00102
    00107   void complete ()
    00108   {
    00109 #define COMPUTE(comp)                                                   \
    00110     {                                                                   \
    00111       unsigned long i, tmp = comp##Mask;                                \
    00112       for (i = 0; tmp && !(tmp & 1); tmp >>= 1, i++) {}                 \
    00113       comp##Shift = i;                                                  \
    00114       for (i = 0; tmp & 1; tmp >>= 1, i++) {}                           \
    00115       comp##Bits = i;                                                   \
    00116     }
    00117     COMPUTE (Red);
    00118     COMPUTE (Green);
    00119     COMPUTE (Blue);
    00120     COMPUTE (Alpha);
    00121 #undef COMPUTE
    00122   }
    00123 };
    00124
    00126 struct csImageArea
    00127 {
    00128   int x, y, w, h;
    00129   char *data;
    00130
    00131   inline csImageArea (int sx, int sy, int sw, int sh)
    00132   { x = sx; y = sy; w = sw; h = sh; data = 0; }
    00133 };
    00134
    00135 SCF_VERSION (iOffscreenCanvasCallback, 1, 0, 0);
    00136
    00142 struct iOffscreenCanvasCallback : public iBase
    00143 {
    00145   virtual void FinishDraw (iGraphics2D* canvas) = 0;
    00147   virtual void SetRGB (iGraphics2D* canvas, int idx, int r, int g, int b) = 0;
    00148 };
    00149
    00173 struct iGraphics2D : public virtual iBase
    00174 {
    00175   SCF_INTERFACE (iGraphics2D, 3, 0, 0);
    00176
    00178   virtual bool Open () = 0;
    00179
    00181   virtual void Close () = 0;
    00182
    00184   virtual int GetWidth () = 0;
    00185
    00187   virtual int GetHeight () = 0;
    00188
    00190   virtual int GetPage () = 0;
    00191
    00193   virtual bool DoubleBuffer (bool Enable) = 0;
    00194
    00196   virtual bool GetDoubleBufferState () = 0;
    00197
    00199   virtual csPixelFormat const* GetPixelFormat () = 0;
    00200
    00206   virtual int GetPixelBytes () = 0;
    00207
    00215   virtual int GetPalEntryCount () = 0;
    00216
    00218   virtual csRGBpixel *GetPalette () = 0;
    00219
    00224   virtual void SetRGB (int i, int r, int g, int b) = 0;
    00233   virtual int FindRGB (int r, int g, int b, int a = 255) = 0;
    00234
    00238   virtual void GetRGB (int color, int& r, int& g, int& b) = 0;
    00242   virtual void GetRGB (int color, int& r, int& g, int& b, int& a) = 0;
    00243
    00249   virtual void SetClipRect (int nMinX, int nMinY, int nMaxX, int nMaxY) = 0;
    00250
    00252   virtual void GetClipRect(int& nMinX, int& nMinY, int& nMaxX, int& nMaxY) = 0;
    00253
    00258   virtual bool BeginDraw () = 0;
    00259
    00261   virtual void FinishDraw () = 0;
    00262
    00268   virtual void Print (csRect const* pArea) = 0;
    00269
    00271   virtual void Clear (int color) = 0;
    00272
    00274   virtual void ClearAll (int color) = 0;
    00275
    00277   virtual void DrawLine(float x1, float y1, float x2, float y2, int color) = 0;
    00278
    00280   virtual void DrawBox (int x, int y, int w, int h, int color) = 0;
    00281
    00286   virtual bool ClipLine (float& x1, float& y1, float& x2, float& y2,
    00287     int xmin, int ymin, int xmax, int ymax) = 0;
    00288
    00290   virtual void DrawPixel (int x, int y, int color) = 0;
    00291
    00293   virtual void DrawPixels(csPixelCoord const* pixels, int num_pixels,
    00294      int color) = 0;
    00295
    00297   virtual void Blit (int x, int y, int width, int height,
    00298     unsigned char const* data) = 0;
    00299
    00301   virtual unsigned char *GetPixelAt (int x, int y) = 0;
    00302
    00304   virtual void GetPixel (int x, int y, uint8 &oR, uint8 &oG, uint8 &oB) = 0;
    00306   virtual void GetPixel (int x, int y, uint8 &oR, uint8 &oG, uint8 &oB,
    00307         uint8 &oA) = 0;
    00308
    00314   virtual csImageArea *SaveArea (int x, int y, int w, int h) = 0;
    00315
    00317   virtual void RestoreArea (csImageArea *Area, bool Free) = 0;
    00318
    00320   virtual void FreeArea (csImageArea *Area) = 0;
    00321
    00330   virtual void Write (iFont *font, int x, int y, int fg, int bg,
    00331     const char *str, uint flags = 0) = 0;
    00332
    00340   CS_DEPRECATED_METHOD virtual void WriteBaseline (iFont *font,
    00341     int x, int y, int fg, int bg, const char *str) = 0;
    00342
    00344   virtual void AllowResize (bool iAllow) = 0;
    00345
    00347   virtual bool Resize (int w, int h) = 0;
    00348
    00350   virtual iFontServer *GetFontServer () = 0;
    00351
    00359   virtual bool PerformExtension (char const* command, ...) = 0;
    00360
    00366   virtual bool PerformExtensionV (char const* command, va_list) = 0;
    00367
    00369   virtual csPtr<iImage> ScreenShot () = 0;
    00370
    00375   virtual iNativeWindow* GetNativeWindow () = 0;
    00376
    00378   virtual bool GetFullScreen () = 0;
    00379
    00383   virtual void SetFullScreen (bool b) = 0;
    00384
    00386   virtual bool SetMousePosition (int x, int y) = 0;
    00387
    00396   virtual bool SetMouseCursor (csMouseCursorID iShape) = 0;
    00397
    00405   virtual bool SetMouseCursor (iImage *image, const csRGBcolor* keycolor = 0,
    00406                                int hotspot_x = 0, int hotspot_y = 0,
    00407                                csRGBcolor fg = csRGBcolor(255,255,255),
    00408                                csRGBcolor bg = csRGBcolor(0,0,0)) = 0;
    00409
    00415   virtual bool SetGamma (float gamma) = 0;
    00416
    00420   virtual float GetGamma () const = 0;
    00421
    00425   virtual const char* GetName () const = 0;
    00426
    00435   virtual csPtr<iGraphics2D> CreateOffscreenCanvas (
    00436         void* memory, int width, int height, int depth,
    00437         iOffscreenCanvasCallback* ofscb) = 0;
    00438 };
    00439
    00442 #endif // __CS_IVIDEO_GRAPH2D_H__
    00443