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, char *text) = 0; 00194 00199 virtual void WriteBoxed(iFont *font, uint x1, uint y1, uint x2, uint y2, 00200 uint h_align, uint v_align, char *text) = 0; 00201 }; 00202 00204 class CS_CRYSTALSPACE_EXPORT csPen : public iPen 00205 { 00207 csRef<iGraphics3D> g3d; 00208 00210 csRef<iGraphics2D> g2d; 00211 00213 csSimpleRenderMesh mesh; 00214 00216 csPolyIndexed poly_idx; 00217 00219 csPoly3D poly; 00220 00222 csVector4 color; 00223 00225 csVector4 alt_color; 00226 00228 csRef<iTextureHandle> tex; 00229 00231 csVector3 tt; 00232 00234 csDirtyAccessArray<csVector4> colors; 00235 00237 csDirtyAccessArray<csVector2> texcoords; 00238 00240 csArray<csReversibleTransform> transforms; 00241 00243 csArray<csVector3> translations; 00244 00246 float pen_width; 00247 00249 uint flags; 00250 00252 struct point 00253 { 00254 float x,y; 00255 }; 00256 00258 csArray<point> line_points; 00259 00261 point last[2]; 00262 00265 float sh_w, sh_h; 00266 00269 bool gen_tex_coords; 00270 00271 protected: 00275 void Start(); 00276 00284 void AddVertex(float x, float y, bool force_add=false); 00285 00290 inline void AddTexCoord(float x, float y); 00291 00295 void SetupMesh(); 00296 00300 void DrawMesh(csRenderMeshType mesh_type); 00301 00305 void SetAutoTexture(float w, float h); 00306 00312 void AddThickPoints(float x1, float y1, float x2, float y2); 00313 00314 public: 00315 csPen(iGraphics2D *_g2d, iGraphics3D *_g3d); 00316 virtual ~csPen(); 00317 00322 virtual void SetFlag(uint flag); 00323 00328 virtual void ClearFlag(uint flag); 00329 00330 00334 virtual void SetMixMode(uint mode); 00335 00339 virtual void SetColor (float r, float g, float b, float a); 00340 00344 virtual void SetColor(const csColor4 &color); 00345 00350 virtual void SetTexture(csRef<iTextureHandle> tex); 00351 00355 virtual void SwapColors(); 00356 00360 virtual void SetPenWidth(float width); 00361 00365 virtual void ClearTransform(); 00366 00370 virtual void PushTransform(); 00371 00376 virtual void PopTransform(); 00377 00381 virtual void SetOrigin(const csVector3 &o); 00382 00386 virtual void Translate(const csVector3 &t); 00387 00391 virtual void Rotate(const float &a); 00392 00396 virtual void DrawLine (uint x1, uint y1, uint x2, uint y2); 00397 00401 void DrawThickLine(uint x1, uint y1, uint x2, uint y2); 00402 00406 virtual void DrawPoint (uint x1, uint y2); 00407 00411 virtual void DrawRect (uint x1, uint y1, uint x2, uint y2); 00412 00417 virtual void DrawMiteredRect (uint x1, uint y1, uint x2, uint y2, 00418 uint miter); 00419 00424 virtual void DrawRoundedRect (uint x1, uint y1, uint x2, uint y2, 00425 uint roundness); 00426 00434 virtual void DrawArc(uint x1, uint y1, uint x2, uint y2, 00435 float start_angle=0, float end_angle=6.2831853); 00436 00440 virtual void DrawTriangle(uint x1, uint y1, uint x2, uint y2, uint x3, uint y3); 00441 00445 virtual void Write(iFont *font, uint x1, uint y1, char *text); 00446 00451 virtual void WriteBoxed(iFont *font, uint x1, uint y1, uint x2, uint y2, 00452 uint h_align, uint v_align, char *text); 00453 }; 00454 00455 00456 00459 class CS_CRYSTALSPACE_EXPORT csMemoryPen : public iPen 00460 { 00462 csMemFile *buf; 00463 00465 csRefArray<iTextureHandle> textures; 00466 00467 public: 00468 csMemoryPen():buf(0) { Clear(); } 00469 virtual ~csMemoryPen() {} 00470 00471 00473 00475 virtual void Clear(); 00476 00478 void Draw(iPen *_pen_); 00479 00484 virtual void SetFlag(uint flag); 00485 00490 virtual void ClearFlag(uint flag); 00491 00492 00496 virtual void SetMixMode(uint mode); 00497 00501 virtual void SetColor (float r, float g, float b, float a); 00502 00506 virtual void SetColor(const csColor4 &color); 00507 00512 virtual void SetTexture(csRef<iTextureHandle> tex); 00513 00517 virtual void SwapColors(); 00518 00523 virtual void SetPenWidth(float width); 00524 00528 virtual void ClearTransform(); 00529 00533 virtual void PushTransform(); 00534 00539 virtual void PopTransform(); 00540 00544 virtual void SetOrigin(const csVector3 &o); 00545 00549 virtual void Translate(const csVector3 &t); 00550 00554 virtual void Rotate(const float &a); 00555 00559 virtual void DrawLine (uint x1, uint y1, uint x2, uint y2); 00560 00564 virtual void DrawPoint (uint x1, uint y2); 00565 00569 virtual void DrawRect (uint x1, uint y1, uint x2, uint y2); 00570 00575 virtual void DrawMiteredRect (uint x1, uint y1, uint x2, uint y2, uint miter); 00576 00581 virtual void DrawRoundedRect (uint x1, uint y1, uint x2, uint y2, 00582 uint roundness); 00583 00591 virtual void DrawArc(uint x1, uint y1, uint x2, uint y2, float start_angle, 00592 float end_angle); 00593 00597 virtual void DrawTriangle(uint x1, uint y1, uint x2, uint y2, uint x3, uint y3); 00598 00602 virtual void Write(iFont *font, uint x1, uint y1, char *text); 00603 00608 virtual void WriteBoxed(iFont *font, uint x1, uint y1, uint x2, uint y2, 00609 uint h_align, uint v_align, char *text); 00610 00611 }; 00612 00613 00614 00615 #endif
Generated for Crystal Space 1.4.1 by doxygen 1.7.1