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/graph3d.h" 00037 #include "ivideo/texture.h" 00038 00039 struct iFont; 00040 struct iGraphics2D; 00041 struct iGraphics3D; 00042 00043 enum CS_PEN_TEXT_ALIGN 00044 { 00045 CS_PEN_TA_TOP, 00046 CS_PEN_TA_BOT, 00047 CS_PEN_TA_LEFT, 00048 CS_PEN_TA_RIGHT, 00049 CS_PEN_TA_CENTER 00050 }; 00051 00052 enum CS_PEN_FLAGS 00053 { 00054 CS_PEN_FILL = 1, 00055 CS_PEN_SWAPCOLORS= 2, 00056 CS_PEN_TEXTURE_ONLY=4, 00057 CS_PEN_TEXTURE = 5 /* fill | 4 */ 00058 }; 00059 00060 00064 struct iPen 00065 { 00066 protected: 00067 virtual ~iPen() {} 00068 public: 00073 virtual void SetFlag(uint flag) = 0; 00074 00079 virtual void ClearFlag(uint flag) = 0; 00080 00084 virtual void SetMixMode(uint mode) = 0; 00085 00093 virtual void SetColor (float r, float g, float b, float a) = 0; 00094 00098 virtual void SetColor(const csColor4 &color) = 0; 00099 00104 virtual void SetTexture(csRef<iTextureHandle> tex) = 0; 00105 00109 virtual void SwapColors() = 0; 00110 00114 virtual void SetPenWidth(float width)=0; 00115 00119 virtual void ClearTransform() = 0; 00120 00124 virtual void PushTransform() = 0; 00125 00130 virtual void PopTransform() = 0; 00131 00135 virtual void SetOrigin(const csVector3 &o) = 0; 00136 00140 virtual void Translate(const csVector3 &t) = 0; 00141 00145 virtual void Rotate(const float &a) = 0; 00146 00150 virtual void DrawLine (uint x1, uint y1, uint x2, uint y2) = 0; 00151 00155 virtual void DrawPoint (uint x1, uint y2) = 0; 00156 00160 virtual void DrawRect (uint x1, uint y1, uint x2, uint y2) = 0; 00161 00166 virtual void DrawMiteredRect (uint x1, uint y1, uint x2, uint y2, 00167 uint miter) = 0; 00168 00173 virtual void DrawRoundedRect (uint x1, uint y1, uint x2, uint y2, 00174 uint roundness) = 0; 00175 00183 virtual void DrawArc(uint x1, uint y1, uint x2, uint y2, float start_angle, 00184 float end_angle) = 0; 00185 00189 virtual void DrawTriangle(uint x1, uint y1, uint x2, uint y2, uint x3, uint y3) = 0; 00190 00194 virtual void Write(iFont *font, uint x1, uint y1, char *text) = 0; 00195 00200 virtual void WriteBoxed(iFont *font, uint x1, uint y1, uint x2, uint y2, 00201 uint h_align, uint v_align, char *text) = 0; 00202 }; 00203 00205 class CS_CRYSTALSPACE_EXPORT csPen : public iPen 00206 { 00208 csRef<iGraphics3D> g3d; 00209 00211 csRef<iGraphics2D> g2d; 00212 00214 csSimpleRenderMesh mesh; 00215 00217 csPolyIndexed poly_idx; 00218 00220 csPoly3D poly; 00221 00223 csVector4 color; 00224 00226 csVector4 alt_color; 00227 00229 csRef<iTextureHandle> tex; 00230 00232 csVector3 tt; 00233 00235 csDirtyAccessArray<csVector4> colors; 00236 00238 csDirtyAccessArray<csVector2> texcoords; 00239 00241 csArray<csReversibleTransform> transforms; 00242 00244 csArray<csVector3> translations; 00245 00247 float pen_width; 00248 00250 uint flags; 00251 00253 struct point 00254 { 00255 float x,y; 00256 }; 00257 00259 csArray<point> line_points; 00260 00262 point last[2]; 00263 00266 float sh_w, sh_h; 00267 00270 bool gen_tex_coords; 00271 00272 protected: 00276 void Start(); 00277 00285 void AddVertex(float x, float y, bool force_add=false); 00286 00291 inline void AddTexCoord(float x, float y); 00292 00296 void SetupMesh(); 00297 00301 void DrawMesh(csRenderMeshType mesh_type); 00302 00306 void SetAutoTexture(float w, float h); 00307 00313 void AddThickPoints(float x1, float y1, float x2, float y2); 00314 00315 public: 00316 csPen(iGraphics2D *_g2d, iGraphics3D *_g3d); 00317 virtual ~csPen(); 00318 00323 virtual void SetFlag(uint flag); 00324 00329 virtual void ClearFlag(uint flag); 00330 00331 00335 virtual void SetMixMode(uint mode); 00336 00340 virtual void SetColor (float r, float g, float b, float a); 00341 00345 virtual void SetColor(const csColor4 &color); 00346 00351 virtual void SetTexture(csRef<iTextureHandle> tex); 00352 00356 virtual void SwapColors(); 00357 00361 virtual void SetPenWidth(float width); 00362 00366 virtual void ClearTransform(); 00367 00371 virtual void PushTransform(); 00372 00377 virtual void PopTransform(); 00378 00382 virtual void SetOrigin(const csVector3 &o); 00383 00387 virtual void Translate(const csVector3 &t); 00388 00392 virtual void Rotate(const float &a); 00393 00397 virtual void DrawLine (uint x1, uint y1, uint x2, uint y2); 00398 00402 void DrawThickLine(uint x1, uint y1, uint x2, uint y2); 00403 00407 virtual void DrawPoint (uint x1, uint y2); 00408 00412 virtual void DrawRect (uint x1, uint y1, uint x2, uint y2); 00413 00418 virtual void DrawMiteredRect (uint x1, uint y1, uint x2, uint y2, 00419 uint miter); 00420 00425 virtual void DrawRoundedRect (uint x1, uint y1, uint x2, uint y2, 00426 uint roundness); 00427 00435 virtual void DrawArc(uint x1, uint y1, uint x2, uint y2, 00436 float start_angle=0, float end_angle=6.2831853); 00437 00441 virtual void DrawTriangle(uint x1, uint y1, uint x2, uint y2, uint x3, uint y3); 00442 00446 virtual void Write(iFont *font, uint x1, uint y1, char *text); 00447 00452 virtual void WriteBoxed(iFont *font, uint x1, uint y1, uint x2, uint y2, 00453 uint h_align, uint v_align, char *text); 00454 }; 00455 00456 00457 00460 class CS_CRYSTALSPACE_EXPORT csMemoryPen : public iPen 00461 { 00463 csMemFile *buf; 00464 00466 csRefArray<iTextureHandle> textures; 00467 00468 public: 00469 csMemoryPen():buf(0) { Clear(); } 00470 virtual ~csMemoryPen() {} 00471 00472 00474 00476 virtual void Clear(); 00477 00479 void Draw(iPen *_pen_); 00480 00485 virtual void SetFlag(uint flag); 00486 00491 virtual void ClearFlag(uint flag); 00492 00493 00497 virtual void SetMixMode(uint mode); 00498 00502 virtual void SetColor (float r, float g, float b, float a); 00503 00507 virtual void SetColor(const csColor4 &color); 00508 00513 virtual void SetTexture(csRef<iTextureHandle> tex); 00514 00518 virtual void SwapColors(); 00519 00524 virtual void SetPenWidth(float width); 00525 00529 virtual void ClearTransform(); 00530 00534 virtual void PushTransform(); 00535 00540 virtual void PopTransform(); 00541 00545 virtual void SetOrigin(const csVector3 &o); 00546 00550 virtual void Translate(const csVector3 &t); 00551 00555 virtual void Rotate(const float &a); 00556 00560 virtual void DrawLine (uint x1, uint y1, uint x2, uint y2); 00561 00565 virtual void DrawPoint (uint x1, uint y2); 00566 00570 virtual void DrawRect (uint x1, uint y1, uint x2, uint y2); 00571 00576 virtual void DrawMiteredRect (uint x1, uint y1, uint x2, uint y2, uint miter); 00577 00582 virtual void DrawRoundedRect (uint x1, uint y1, uint x2, uint y2, 00583 uint roundness); 00584 00592 virtual void DrawArc(uint x1, uint y1, uint x2, uint y2, float start_angle, 00593 float end_angle); 00594 00598 virtual void DrawTriangle(uint x1, uint y1, uint x2, uint y2, uint x3, uint y3); 00599 00603 virtual void Write(iFont *font, uint x1, uint y1, char *text); 00604 00609 virtual void WriteBoxed(iFont *font, uint x1, uint y1, uint x2, uint y2, 00610 uint h_align, uint v_align, char *text); 00611 00612 }; 00613 00614 00615 00616 #endif
Generated for Crystal Space by doxygen 1.4.7