summaryrefslogtreecommitdiffstats
path: root/Project/wxGLString.h
diff options
context:
space:
mode:
Diffstat (limited to 'Project/wxGLString.h')
-rw-r--r--Project/wxGLString.h202
1 files changed, 202 insertions, 0 deletions
diff --git a/Project/wxGLString.h b/Project/wxGLString.h
new file mode 100644
index 0000000..9765080
--- /dev/null
+++ b/Project/wxGLString.h
@@ -0,0 +1,202 @@
+#ifndef _glstring_
+#define _glstring_
+
+#ifdef __WXMAC__
+#include "OpenGL/gl.h"
+#else
+#include <GL/gl.h>
+#endif
+
+#include "wx/wx.h"
+#include <vector>
+
+class TextTexture;
+
+/** base class for renderable elements. You won't create this one directly,
+but may use its public members from wxGLString since it inherits from TextGLDrawable.
+This class will be useful if you wish to apply effects to the text like rotation or
+scaling. */
+class TextGLDrawable
+{
+ friend class wxGLString;
+ friend class wxGLStringArray;
+ friend class wxGLStringNumber;
+protected:
+
+ double x,y, angle;
+ float xscale, yscale;
+ TextTexture* image;
+ bool xflip, yflip;
+
+ float tex_coord_x1, tex_coord_y1;
+ float tex_coord_x2, tex_coord_y2;
+ int w, h, texw, texh;
+
+ TextGLDrawable(TextTexture* image=(TextTexture*)0);
+ void setImage(TextTexture* image);
+ void move(double x, double y);
+public:
+
+ void render() const;
+
+ /** allows you to flip the rendering vertically and/or horizontally */
+ void setFlip(bool x, bool y);
+
+ /** scale the rendering , horizontally and vertically (allows stretching) */
+ void scale(float x, float y);
+
+ /** scale the rendering and keep the same aspect ratio */
+ void scale(float k);
+
+ /** rotate the rendering by 'angle' degrees */
+ void rotate(int angle);
+
+ /** returns the width of this element */
+ int getWidth() const { return w; }
+ /** returns the height of this element */
+ int getheight() const { return h; }
+
+};
+
+class wxGLStringArray;
+
+/** wxGLString is the simplest class you can use. It draws a single string on a single line.
+If you plan to render multiple strings, this class is not the fastest.
+
+Use example :
+
+wxGLString my_message(wxT("Hello World"));
+...
+if(first_render)
+ my_message.consolidate(&dc);
+
+glColor3f(0,0,0); // black text
+my_message.bind();
+my_message.render(x, y);
+*/
+class wxGLString : public wxString, public TextGLDrawable
+{
+protected:
+ TextTexture* img;
+ wxFont font;
+
+ friend class wxGLStringArray;
+
+ void calculateSize(wxDC* dc, const bool ignore_font=false /* when from array */);
+ void consolidateFromArray(wxDC* dc, double x, double y);
+public:
+ /** constructs an empty GLString. Set string later with operator=. */
+ wxGLString();
+ /** constructs a GLstring with 'message' as contents. */
+ wxGLString(wxString message);
+ virtual ~wxGLString();
+
+ /** call just before render() - binds the OpenGL. If you render the same string many
+ times, or render from an array, bind only once, this will improve performance */
+ void bind() const;
+
+ /** set how to draw string for next consolidate() - has no immediate effect,
+ you need to call consolidate() to get results */
+ void setFont(wxFont font);
+
+ /** consolidates the current string info into a GL string. call this after
+ setting up strings, font and color (if necessary), and before rendering.
+ The wxDC argument is only used to calculate text extents and will not be rendered on. */
+ virtual void consolidate(wxDC* dc);
+
+ /** render this string at coordinates (x,y). Must be called after bind(). */
+ void render(const double x, const double y);
+
+ /** changes the string of this element */
+ void operator=(wxString& string);
+};
+
+
+/** This class allows rendering numbers.
+
+Use example :
+
+wxGLNumberRenderer glnumbers;
+...
+if(first_render)
+ glnumbers.consolidate();
+
+glColor3f(0,0,0); // black numbers
+glnumbers.bind();
+glnumbers.renderNumber( 3.141593f, x, y );
+*/
+class wxGLNumberRenderer : public wxGLString
+{
+ int* number_location;
+ int space_w;
+public:
+ wxGLNumberRenderer();
+ virtual ~wxGLNumberRenderer();
+
+ /** inits the class to be ready to render.
+ The wxDC argument is only used to calculate text extents and will not be rendered on. */
+ void consolidate(wxDC* dc);
+
+ /** render this number at coordinates (x,y), where wxString s contains the string
+ representation of a number. Must be called after bind(). */
+ void renderNumber(wxString s, double x, double y);
+ /** render this number at coordinates (x,y). Must be called after bind(). */
+ void renderNumber(int i, double x, double y);
+ /** render this number at coordinates (x,y). Must be called after bind(). */
+ void renderNumber(float f, double x, double y);
+};
+
+
+/** This class is useful to render a serie of strings that are usually rendered at the same time.
+It behaves exactly like wxGLString but is more efficient.
+
+
+Use example :
+
+wxGLStringArray my_messages();
+my_messages.addString("wxMac");
+my_messages.addString("wxGTK");
+my_messages.addString("wxMSW");
+...
+
+glColor3f(0,0,0); // black text
+my_messages.bind();
+my_messages.get(0).render( x, y );
+my_messages.get(1).render( x, y + 25 );
+my_messages.get(2).render( x, y + 50 );
+*/
+class wxGLStringArray
+{
+ std::vector<wxGLString> strings;
+ TextTexture* img;
+ wxFont font;
+public:
+ /** constructs an empty array - add elements later using addString */
+ wxGLStringArray();
+ /** construct an array with 'strings_arg' elemnts in it */
+ wxGLStringArray(const wxString strings_arg[], int amount);
+ ~wxGLStringArray();
+
+ /** get a sub-element - useful mainly for rendering, e.g. my_array.get(0).render(x, y); */
+ wxGLString& get(const int id);
+
+ /** call just before render() - binds the OpenGL. If you render the same string many
+ times, or render from an array, bind only once, this will improve performance */
+ void bind();
+
+ /** add a string to the list for next consolidate() - has no
+ immediate effect, you need to call consolidate() to get results */
+ void addString(wxString string);
+
+ /** set how to draw string for next consolidate() - has no immediate effect,
+ you need to call consolidate() to get results */
+ void setFont(wxFont font);
+
+ /** consolidates the current string info into a GL string. call this after
+ setting up strings, font and color (if necessary), and before rendering.
+ The wxDC argument is only used to calculate text extents and will not be rendered on. */
+ void consolidate(wxDC* dc);
+};
+
+
+#endif