aboutsummaryrefslogtreecommitdiffstats
path: root/src/menu/software_mouse_pointer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/menu/software_mouse_pointer.cpp')
-rw-r--r--src/menu/software_mouse_pointer.cpp79
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;
}