CrystalSpace

Public API Reference

cstool/pen.h
Go to the documentation of this file.
00001 /*
00002   Copyright (C) 2005 by Christopher Nelson
00003 
00004   This library is free software; you can redistribute it and/or
00005   modify it under the terms of the GNU Library General Public
00006   License as published by the Free Software Foundation; either
00007   version 2 of the License, or (at your option) any later version.
00008 
00009   This library is distributed in the hope that it will be useful,
00010   but WITHOUT ANY WARRANTY; without even the implied warranty of
00011   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00012   Library General Public License for more details.
00013 
00014   You should have received a copy of the GNU Library General Public
00015   License along with this library; if not, write to the Free
00016   Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
00017 */
00018 
00019 #ifndef __CS_CSTOOL_PEN_H__
00020 #define __CS_CSTOOL_PEN_H__
00021 
00026 #include "csgeom/poly3d.h"
00027 #include "csgeom/polyidx.h"
00028 #include "csgeom/vector4.h"
00029 #include "csgeom/vector2.h"
00030 #include "csutil/cscolor.h"
00031 #include "csutil/dirtyaccessarray.h"
00032 #include "csutil/ref.h"
00033 #include "csutil/refarr.h"
00034 #include "csutil/memfile.h"
00035 
00036 #include "ivideo/graph2d.h"
00037 #include "ivideo/graph3d.h"
00038 #include "ivideo/texture.h"
00039 
00040 struct iFont;
00041 
00042 enum CS_PEN_TEXT_ALIGN
00043 {
00044   CS_PEN_TA_TOP,
00045   CS_PEN_TA_BOT,
00046   CS_PEN_TA_LEFT,
00047   CS_PEN_TA_RIGHT,
00048   CS_PEN_TA_CENTER
00049 };
00050 
00051 enum CS_PEN_FLAGS
00052 {
00053   CS_PEN_FILL = 1,
00054   CS_PEN_SWAPCOLORS= 2,
00055   CS_PEN_TEXTURE_ONLY=4,
00056   CS_PEN_TEXTURE = 5 /* fill | 4 */
00057 };
00058 
00059 
00063 struct iPen
00064 {
00065 protected:
00066   virtual ~iPen() {}
00067 public:
00072   virtual void SetFlag(uint flag) = 0;
00073 
00078   virtual void ClearFlag(uint flag) = 0;
00079 
00083   virtual void SetMixMode(uint mode) = 0;
00084 
00092   virtual void SetColor (float r, float g, float b, float a) = 0;
00093 
00097   virtual void SetColor(const csColor4 &color) = 0;
00098 
00103   virtual void SetTexture(csRef<iTextureHandle> tex) = 0;
00104 
00108   virtual void SwapColors() = 0;
00109 
00113   virtual void SetPenWidth(float width)=0;
00114 
00118   virtual void ClearTransform() = 0;
00119 
00123   virtual void PushTransform() = 0;
00124 
00129   virtual void PopTransform() = 0;
00130 
00134   virtual void SetOrigin(const csVector3 &o) = 0;
00135 
00139   virtual void Translate(const csVector3 &t) = 0;
00140 
00144   virtual void Rotate(const float &a) = 0;
00145 
00149   virtual void DrawLine (uint x1, uint y1, uint x2, uint y2) = 0;
00150 
00154   virtual void DrawPoint (uint x1, uint y2) = 0;
00155 
00159   virtual void DrawRect (uint x1, uint y1, uint x2, uint y2) = 0;
00160 
00165   virtual void DrawMiteredRect (uint x1, uint y1, uint x2, uint y2,
00166     uint miter) = 0;
00167 
00172   virtual void DrawRoundedRect (uint x1, uint y1, uint x2, uint y2,
00173     uint roundness) = 0;
00174 
00182   virtual void DrawArc(uint x1, uint y1, uint x2, uint y2, float start_angle,
00183         float end_angle) = 0;
00184 
00188   virtual void DrawTriangle(uint x1, uint y1, uint x2, uint y2, uint x3, uint y3) = 0;
00189 
00193   virtual void Write(iFont *font, uint x1, uint y1, const char *text) = 0;
00194 
00198   virtual void WriteLines(iFont *font, uint x1, uint y1, const csStringArray& lines) = 0;
00199 
00204   virtual void WriteBoxed(iFont *font, uint x1, uint y1, uint x2, uint y2,
00205     uint h_align, uint v_align, const char *text) = 0;
00206 
00212   virtual void WriteLinesBoxed(iFont *font, uint x1, uint y1, uint x2, uint y2,
00213     uint h_align, uint v_align, const csStringArray& lines) = 0;
00214 };
00215 
00217 class CS_CRYSTALSPACE_EXPORT csPen : public iPen
00218 {
00220   csRef<iGraphics3D> g3d;
00221 
00223   csRef<iGraphics2D> g2d;
00224 
00226   csSimpleRenderMesh mesh;
00227 
00229   csPolyIndexed poly_idx;
00230 
00232   csPoly3D poly;
00233 
00235   csVector4 color;
00236 
00238   csVector4 alt_color;
00239 
00241   csRef<iTextureHandle> tex;
00242 
00244   csVector3 tt;
00245 
00247   csDirtyAccessArray<csVector4> colors;
00248 
00250   csDirtyAccessArray<csVector2> texcoords;
00251 
00253   csArray<csReversibleTransform> transforms;
00254 
00256   csArray<csVector3> translations;
00257 
00259   float pen_width;
00260 
00262   uint flags;
00263 
00265   struct point
00266   {
00267     float x,y;
00268   };
00269 
00271   csArray<point> line_points;
00272 
00274   point last[2];
00275 
00278   float sh_w, sh_h;
00279 
00282   bool gen_tex_coords;
00283 
00284 protected:
00288   void Start();
00289 
00297   void AddVertex(float x, float y, bool force_add=false);
00298 
00303   inline void AddTexCoord(float x, float y);
00304 
00308   void SetupMesh();
00309 
00313   void DrawMesh(csRenderMeshType mesh_type);
00314 
00318   void SetAutoTexture(float w, float h);
00319 
00325   void AddThickPoints(float x1, float y1, float x2, float y2);
00326 
00327 public:
00328   csPen(iGraphics2D *_g2d, iGraphics3D *_g3d);
00329   virtual ~csPen();
00330 
00331   virtual void SetFlag(uint flag);
00332   virtual void ClearFlag(uint flag);
00333 
00334   virtual void SetMixMode(uint mode);
00335 
00336   virtual void SetColor (float r, float g, float b, float a);
00337   virtual void SetColor(const csColor4 &color);
00338 
00339   virtual void SetTexture(csRef<iTextureHandle> tex);
00340 
00341   virtual void SwapColors();
00342 
00343   virtual void SetPenWidth(float width);
00344 
00345   virtual void ClearTransform();
00346   virtual void PushTransform();
00347   virtual void PopTransform();
00348 
00349   virtual void SetOrigin(const csVector3 &o);
00350   virtual void Translate(const csVector3 &t);
00351   virtual void Rotate(const float &a);
00352 
00353   virtual void DrawLine (uint x1, uint y1, uint x2, uint y2);
00354   void DrawThickLine(uint x1, uint y1, uint x2, uint y2);
00355   virtual void DrawPoint (uint x1, uint y2);
00356   virtual void DrawRect (uint x1, uint y1, uint x2, uint y2);
00357   virtual void DrawMiteredRect (uint x1, uint y1, uint x2, uint y2,
00358     uint miter);
00359   virtual void DrawRoundedRect (uint x1, uint y1, uint x2, uint y2,
00360     uint roundness);
00361   virtual void DrawArc(uint x1, uint y1, uint x2, uint y2,
00362         float start_angle=0, float end_angle=6.2831853);
00363   virtual void DrawTriangle(uint x1, uint y1, uint x2, uint y2, uint x3, uint y3);
00364 
00365   virtual void Write(iFont *font, uint x1, uint y1, const char *text);
00366   virtual void WriteLines(iFont *font, uint x1, uint y1, const csStringArray& lines);
00367 
00368   virtual void WriteBoxed(iFont *font, uint x1, uint y1, uint x2, uint y2,
00369     uint h_align, uint v_align, const char *text);
00370   virtual void WriteLinesBoxed(iFont *font, uint x1, uint y1, uint x2, uint y2,
00371     uint h_align, uint v_align, const csStringArray& lines);
00372 };
00373 
00374 #endif

Generated for Crystal Space 2.0 by doxygen 1.7.6.1