diff options
author | Alexander Sulfrian <alexander@sulfrian.net> | 2010-05-09 19:17:52 +0200 |
---|---|---|
committer | Alexander Sulfrian <alexander@sulfrian.net> | 2013-01-05 17:17:48 +0100 |
commit | 1d595f048c9e59bbff14217e2fe3821ee3e1aaa1 (patch) | |
tree | fe92fea4e73324bd3645afb52c681d103624b853 /src/menu/software_mouse_pointer.cpp | |
parent | 3ca6e32a9ecaa8514b9a30711cec20cf80722c23 (diff) | |
download | usdx-1d595f048c9e59bbff14217e2fe3821ee3e1aaa1.tar.gz usdx-1d595f048c9e59bbff14217e2fe3821ee3e1aaa1.tar.xz usdx-1d595f048c9e59bbff14217e2fe3821ee3e1aaa1.zip |
changed from SDL rendering to OpenGL
draw, repaint methods do not have the SDL_Surface* parameter anymore
Diffstat (limited to 'src/menu/software_mouse_pointer.cpp')
-rw-r--r-- | src/menu/software_mouse_pointer.cpp | 79 |
1 files changed, 71 insertions, 8 deletions
diff --git a/src/menu/software_mouse_pointer.cpp b/src/menu/software_mouse_pointer.cpp index 47e00047..1723ce9b 100644 --- a/src/menu/software_mouse_pointer.cpp +++ b/src/menu/software_mouse_pointer.cpp @@ -25,14 +25,55 @@ */ #include "software_mouse_pointer.hpp" -#include <SDL/SDL.h> +#include <GL/gl.h> +#include <iostream> namespace usdx { SoftwareMousePointer::SoftwareMousePointer(Control* parent, EventManager* event_manager) : DrawableControl(parent), x(-1), y(-1) { - texture = new Image(L"game/themes/Deluxe/interface/cursor.png"); + this->vertices[0] = 0.0f; + this->vertices[1] = 40.0f; + this->vertices[2] = 0.0f; + this->vertices[3] = 40.0f; + this->vertices[4] = 40.0f; + this->vertices[5] = 0.0f; + this->vertices[6] = 40.0f; + this->vertices[7] = 0.0f; + this->vertices[8] = 0.0f; + this->vertices[9] = 0.0f; + this->vertices[10] = 0.0f; + this->vertices[11] = 0.0f; + + this->color[0] = 255; + this->color[1] = 255; + this->color[2] = 255; + this->color[3] = 100; + this->color[4] = 255; + this->color[5] = 255; + this->color[6] = 255; + this->color[7] = 100; + this->color[8] = 255; + this->color[9] = 255; + this->color[10] = 255; + this->color[11] = 100; + this->color[12] = 255; + this->color[13] = 255; + this->color[14] = 255; + this->color[15] = 100; + + this->texture[0] = 0.0f; + this->texture[1] = 1.0f; + this->texture[2] = 1.0f; + this->texture[3] = 1.0f; + this->texture[4] = 1.0f; + this->texture[5] = 0.0f; + this->texture[6] = 0.0f; + this->texture[7] = 0.0f; + + texture_normal = new Texture(L"game/themes/Deluxe/interface/cursor.png"); + texture_pressed = new Texture(L"game/themes/Deluxe/interface/cursor_pressed.png"); mouse_move_connection = event_manager->mouse_move.connect( boost::bind(&SoftwareMousePointer::on_mouse_move, this, _1, _2)); @@ -42,22 +83,44 @@ namespace usdx { mouse_move_connection.disconnect(); - if (texture != NULL) { - delete texture; - texture = NULL; + if (texture_normal != NULL) { + delete texture_normal; + texture_normal = NULL; } } - void SoftwareMousePointer::draw(SDL_Surface* display) const + void SoftwareMousePointer::draw(void) { + glLoadIdentity(); + + boost::mutex::scoped_lock lock(mutex); + if (x >= 0 && y >= 0) { - SDL_Rect rcDest = { x, y, 0, 0 }; - SDL_BlitSurface((SDL_Surface*)texture->get_surface(), NULL, display, &rcDest); + glTranslatef(x, y, 0.0f); + lock.unlock(); + + glBindTexture(GL_TEXTURE_2D, texture_normal->get_texture()); + + glEnableClientState(GL_VERTEX_ARRAY); + glEnableClientState(GL_TEXTURE_COORD_ARRAY); + glEnableClientState(GL_COLOR_ARRAY); + + glVertexPointer(3, GL_FLOAT, 0, vertices); + glColorPointer(4, GL_UNSIGNED_BYTE, 0, color); + glTexCoordPointer(2, GL_FLOAT, 0, texture); + + glDrawArrays(GL_QUADS, 0, 4); + + glDisableClientState(GL_VERTEX_ARRAY); + glDisableClientState(GL_TEXTURE_COORD_ARRAY); + glDisableClientState(GL_COLOR_ARRAY); } } void SoftwareMousePointer::on_mouse_move(int x, int y) { + boost::mutex::scoped_lock lock(mutex); + this->x = x; this->y = y; } |