[Scummvm-cvs-logs] SF.net SVN: scummvm:[38820] scummvm/trunk/engines/sci/gfx/gfx_driver.cpp
wjpalenstijn at users.sourceforge.net
wjpalenstijn at users.sourceforge.net
Mon Feb 23 23:36:19 CET 2009
Revision: 38820
http://scummvm.svn.sourceforge.net/scummvm/?rev=38820&view=rev
Author: wjpalenstijn
Date: 2009-02-23 22:36:19 +0000 (Mon, 23 Feb 2009)
Log Message:
-----------
SCI: reinstate pointer scaling for xfact/yfact
Modified Paths:
--------------
scummvm/trunk/engines/sci/gfx/gfx_driver.cpp
Modified: scummvm/trunk/engines/sci/gfx/gfx_driver.cpp
===================================================================
--- scummvm/trunk/engines/sci/gfx/gfx_driver.cpp 2009-02-23 22:09:06 UTC (rev 38819)
+++ scummvm/trunk/engines/sci/gfx/gfx_driver.cpp 2009-02-23 22:36:19 UTC (rev 38820)
@@ -36,7 +36,7 @@
struct _scummvm_driver_state {
gfx_pixmap_t *priority[2];
byte *visual[3];
- byte *pointer_data[2];
+ uint8 *pointer_data;
int xsize, ysize;
//int buckystate;
bool update_screen;
@@ -57,8 +57,7 @@
S->xsize = xfact * 320;
S->ysize = yfact * 200;
- S->pointer_data[0] = NULL;
- S->pointer_data[1] = NULL;
+ S->pointer_data = NULL;
//S->buckystate = 0;
for (i = 0; i < 2; i++) {
@@ -101,11 +100,8 @@
S->visual[i] = NULL;
}
- for (i = 0; i < 2; i++)
- if (S->pointer_data[i]) {
- delete[] S->pointer_data[i];
- S->pointer_data[i] = NULL;
- }
+ delete[] S->pointer_data;
+ S->pointer_data = NULL;
delete S;
}
@@ -264,11 +260,42 @@
// Mouse pointer operations
+static uint8 *create_scaled_cursor(gfx_driver_t *drv, gfx_pixmap_t *pointer, int mode)
+{
+ int linewidth = pointer->xl;
+ int lines = pointer->yl;
+ uint8 *data = new uint8[linewidth*lines];
+ uint8 *linebase = data, *pos;
+ uint8 *src = pointer->index_data;
+
+ for (int yc = 0; yc < pointer->index_yl; yc++) {
+ pos = linebase;
+
+ for (int xc = 0; xc < pointer->index_xl; xc++) {
+ for (int scalectr = 0; scalectr < drv->mode->xfact; scalectr++) {
+ *pos++ = *src;
+ }
+ src++;
+ }
+ for (int scalectr = 1; scalectr < drv->mode->yfact; scalectr++)
+ memcpy(linebase + linewidth * scalectr, linebase, linewidth);
+ linebase += linewidth * drv->mode->yfact;
+ }
+ return data;
+}
+
+
static int scummvm_set_pointer(gfx_driver_t *drv, gfx_pixmap_t *pointer) {
if (pointer == NULL) {
g_system->showMouse(false);
} else {
- g_system->setMouseCursor(pointer->index_data, pointer->xl, pointer->yl, pointer->xoffset, pointer->yoffset);
+ if (drv->mode->xfact > 1 || drv->mode->yfact > 1) {
+ delete[] S->pointer_data;
+ S->pointer_data = create_scaled_cursor(drv, pointer, 1);
+ g_system->setMouseCursor(S->pointer_data, pointer->xl, pointer->yl, pointer->xoffset, pointer->yoffset);
+ } else {
+ g_system->setMouseCursor(pointer->index_data, pointer->xl, pointer->yl, pointer->xoffset, pointer->yoffset);
+ }
g_system->showMouse(true);
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Scummvm-git-logs
mailing list