[Scummvm-cvs-logs] CVS: scummvm/backends/wince pocketpc.cpp,1.7,1.8 screen.cpp,1.2,1.3 screen.h,1.2,1.3
Nicolas Bacca
arisme at users.sourceforge.net
Fri Oct 25 16:45:02 CEST 2002
Update of /cvsroot/scummvm/scummvm/backends/wince
In directory usw-pr-cvs1:/tmp/cvs-serv29139
Modified Files:
pocketpc.cpp screen.cpp screen.h
Log Message:
Fix overlay in portrait mode - better blitting (about time :)) - simon GUI fixes
Index: pocketpc.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/backends/wince/pocketpc.cpp,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -d -r1.7 -r1.8
--- pocketpc.cpp 24 Oct 2002 22:06:00 -0000 1.7
+++ pocketpc.cpp 25 Oct 2002 23:44:15 -0000 1.8
@@ -92,6 +92,22 @@
int format;
} pseudoGAPI;
+typedef struct {
+ int x, y, w, h;
+} dirty_square;
+
+#define MAX_NUMBER_OF_DIRTY_SQUARES 32
+
+#define AddDirtyRect(xi,yi,wi,hi) \
+ if (num_of_dirty_square < MAX_NUMBER_OF_DIRTY_SQUARES) { \
+ ds[num_of_dirty_square].x = xi; \
+ ds[num_of_dirty_square].y = yi; \
+ ds[num_of_dirty_square].w = wi; \
+ ds[num_of_dirty_square].h = hi; \
+ num_of_dirty_square++; \
+ }
+
+
/* Hardcode the video buffer for some devices for which there is no GAPI */
/* and no GameX support */
@@ -312,6 +328,8 @@
#endif
GameDetector detector;
+Engine *engine;
+bool is_simon;
NewGui *g_gui;
extern Scumm *g_scumm;
//extern SimonState *g_simon;
@@ -553,6 +571,10 @@
bool gfx_mode_switch;
+dirty_square ds[MAX_NUMBER_OF_DIRTY_SQUARES];
+int num_of_dirty_square;
+
+
SoundProc *real_soundproc;
const char KEYBOARD_MAPPING_ALPHA_HIGH[] = {"ABCDEFGHIJKLM"};
@@ -821,7 +843,7 @@
/* Start the engine */
- Engine *engine = Engine::createFromDetector(&detector, system);
+ engine = Engine::createFromDetector(&detector, system);
keypad_init();
load_key_mapping();
@@ -831,6 +853,8 @@
else
hide_cursor = TRUE;
+ is_simon = (detector._gameId >= GID_SIMON_FIRST);
+
engine->go();
//return 0;
@@ -1106,10 +1130,8 @@
else {
switch(toolbar_selection) {
case ToolbarSaveLoad:
- if (detector._gameId >= GID_SIMON_FIRST &&
- detector._gameId <= GID_SIMON_LAST) {
+ if (is_simon)
break;
- }
/*if (GetScreenMode()) {*/
/*
draw_keyboard = true;
@@ -1126,15 +1148,8 @@
toolbar_drawn = false;
break;
case ToolbarSkip:
- if (detector._gameId >= GID_SIMON_FIRST) {
-
-// !!! FIX SIMON !!!
-
- //g_simon->_exit_cutscene = true;
-
-
-// !!! FIX SIMON !!!
-
+ if (is_simon) {
+ ((SimonState*)engine)->_exit_cutscene = true;
break;
}
wm->_event.event_code = EVENT_KEYDOWN;
@@ -1489,6 +1504,8 @@
}
palette_update();
+
+ num_of_dirty_square = MAX_NUMBER_OF_DIRTY_SQUARES;
}
void OSystem_WINCE3::load_gfx_mode() {
@@ -1509,6 +1526,7 @@
LimitScreenGeometry();
_screenWidth = w;
_screenHeight = h;
+ num_of_dirty_square = MAX_NUMBER_OF_DIRTY_SQUARES;
}
void OSystem_WINCE3::copy_rect(const byte *buf, int pitch, int x, int y, int w, int h) {
@@ -1517,12 +1535,15 @@
if (!hide_cursor && _mouse_drawn)
undraw_mouse();
+ AddDirtyRect(x, y, w, h);
+
dst = _gfx_buf + y * 320 + x;
do {
memcpy(dst, buf, w);
dst += 320;
buf += pitch;
} while (--h);
+
}
void OSystem_WINCE3::update_screen() {
@@ -1534,8 +1555,19 @@
Set_565((int16*)_overlay_buf, 320, 0, 0, 320, 200);
checkToolbar();
}
- else
- Blt(_gfx_buf);
+ else {
+ if (num_of_dirty_square >= MAX_NUMBER_OF_DIRTY_SQUARES) {
+ Blt(_gfx_buf); // global redraw
+ num_of_dirty_square = 0;
+ }
+ else {
+ int i;
+ for (i=0; i<num_of_dirty_square; i++) {
+ Blt_part(_gfx_buf + (320 * ds[i].y) + ds[i].x, ds[i].x, ds[i].y, ds[i].w, ds[i].h, 320);
+ }
+ num_of_dirty_square = 0;
+ }
+ }
}
bool OSystem_WINCE3::show_mouse(bool visible) {
@@ -1593,6 +1625,7 @@
return;
}
+ AddDirtyRect(xdraw, ydraw, real_w, real_h);
_ms_old.x = xdraw;
_ms_old.y = ydraw;
_ms_old.w = real_w;
@@ -1629,6 +1662,8 @@
int old_h = _ms_old.h;
+ AddDirtyRect(_ms_old.x, _ms_old.y, _ms_old.w, _ms_old.h);
+
byte *dst = _gfx_buf + (_ms_old.y * 320) + _ms_old.x;
byte *bak = _ms_backup;
@@ -1820,6 +1855,7 @@
undraw_mouse();
_overlay_visible = false;
toolbar_drawn = false;
+ num_of_dirty_square = MAX_NUMBER_OF_DIRTY_SQUARES;
}
void OSystem_WINCE3::clear_overlay() {
Index: screen.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/backends/wince/screen.cpp,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- screen.cpp 22 Oct 2002 22:58:34 -0000 1.2
+++ screen.cpp 25 Oct 2002 23:44:15 -0000 1.3
@@ -121,22 +121,22 @@
/* Using vectorized function to save on branches */
typedef void (*tCls)();
typedef void (*tBlt)(UBYTE*);
-typedef void (*tBlt_part)(UBYTE*,int, int, int, int, UBYTE*);
+typedef void (*tBlt_part)(UBYTE*,int, int, int, int, UBYTE*, int);
typedef void (*tSet_565)(INT16 *buffer, int pitch, int x, int y, int width, int height);
void mono_Cls();
void mono_Blt(UBYTE*);
-void mono_Blt_part(UBYTE*, int, int, int, int, UBYTE*);
+void mono_Blt_part(UBYTE*, int, int, int, int, UBYTE*, int);
void palette_Cls();
void palette_Blt(UBYTE*);
-void palette_Blt_part(UBYTE*, int, int, int, int, UBYTE*);
+void palette_Blt_part(UBYTE*, int, int, int, int, UBYTE*, int);
void hicolor_Cls();
void hicolor555_Blt(UBYTE*);
-void hicolor555_Blt_part(UBYTE*, int, int, int, int, UBYTE*);
+void hicolor555_Blt_part(UBYTE*, int, int, int, int, UBYTE*, int);
void hicolor565_Blt(UBYTE*);
-void hicolor565_Blt_part(UBYTE*, int, int, int, int, UBYTE*);
+void hicolor565_Blt_part(UBYTE*, int, int, int, int, UBYTE*, int);
void hicolor565_Get_565(INT16*, int, int, int, int, int);
void hicolor565_Set_565(INT16*, int, int, int, int, int);
void hicolor555_Set_565(INT16*, int, int, int, int, int);
@@ -577,14 +577,14 @@
void drawSoundItem(int x, int y) {
if (!sound_activated)
- pBlt_part(image_expand(item_soundOn), x, y, 32, 32, item_soundOn_colors);
+ pBlt_part(image_expand(item_soundOn), x, y, 32, 32, item_soundOn_colors, 0);
else
- pBlt_part(image_expand(item_soundOff), x, y, 32, 32, item_soundOff_colors);
+ pBlt_part(image_expand(item_soundOff), x, y, 32, 32, item_soundOff_colors, 0);
}
void drawWait() {
- pBlt_part(image_expand(item_toolbar), 0, 0, 320, 40, item_toolbar_colors);
- pBlt_part(image_expand(item_loading), 28, 10, 100, 25, item_loading_colors);
+ pBlt_part(image_expand(item_toolbar), 0, 0, 320, 40, item_toolbar_colors, 0);
+ pBlt_part(image_expand(item_loading), 28, 10, 100, 25, item_loading_colors, 0);
}
void drawBlankGameSelection() {
@@ -592,7 +592,7 @@
image_expand(item_startup);
/* Store empty comment */
memcpy(comment_zone, decomp + (206 * 220), 8 * 220);
- pBlt_part(decomp, _game_selection_X_offset, _game_selection_Y_offset, 220, 250, item_startup_colors);
+ pBlt_part(decomp, _game_selection_X_offset, _game_selection_Y_offset, 220, 250, item_startup_colors, 0);
}
void drawCommentString(char *comment) {
@@ -600,27 +600,27 @@
memcpy(decomp + (206 * 220), comment_zone, 8 * 220);
/* Draw new comment */
printString(comment, 24, 206, 2);
- pBlt_part(decomp + (206 * 220), _game_selection_X_offset, _game_selection_Y_offset + 206, 220, 8, item_startup_colors);
+ pBlt_part(decomp + (206 * 220), _game_selection_X_offset, _game_selection_Y_offset + 206, 220, 8, item_startup_colors, 0);
}
void drawStandardString(char *game, int index) {
printString(game, 24, 70 + (15 * index), 2);
//pBlt_part(decomp, GAME_SELECTION_X_OFFSET + 24, GAME_SELECTION_Y_OFFSET + 70 + (12 * index), 220, 8, item_startup_colors);
- pBlt_part(decomp + ((70 + (15 * index)) * 220), _game_selection_X_offset, _game_selection_Y_offset + 70 + (15 * index), 220, 8, item_startup_colors);
+ pBlt_part(decomp + ((70 + (15 * index)) * 220), _game_selection_X_offset, _game_selection_Y_offset + 70 + (15 * index), 220, 8, item_startup_colors, 0);
}
void drawHighlightedString(char *game, int index) {
/* Replace former highlighted string */
if (_highlighted_index != -1) {
memcpy(decomp + ((70 + (15 * _highlighted_index)) * 220), highlighted_zone, 8 * 220);
- pBlt_part(decomp + ((70 + (15 * _highlighted_index)) * 220), _game_selection_X_offset, _game_selection_Y_offset + 70 + (15 * _highlighted_index), 220, 8, item_startup_colors);
+ pBlt_part(decomp + ((70 + (15 * _highlighted_index)) * 220), _game_selection_X_offset, _game_selection_Y_offset + 70 + (15 * _highlighted_index), 220, 8, item_startup_colors, 0);
}
/* Save non highlighted string */
_highlighted_index = index;
memcpy(highlighted_zone, decomp + ((70 + (15 * index)) * 220), 8 * 220);
/* Draw new highlighted string */
printString(game, 24, 70 + (15 * index), 2, 3);
- pBlt_part(decomp + ((70 + (15 * index)) * 220), _game_selection_X_offset, _game_selection_Y_offset + 70 + (15 * index), 220, 8, item_startup_colors);
+ pBlt_part(decomp + ((70 + (15 * index)) * 220), _game_selection_X_offset, _game_selection_Y_offset + 70 + (15 * index), 220, 8, item_startup_colors, 0);
}
void resetLastHighlighted() {
@@ -638,45 +638,45 @@
if (currentScreenMode) {
if (draw_keyboard) {
- pBlt_part(image_expand(item_keyboard), 0, 200, 320, 40, item_keyboard_colors);
+ pBlt_part(image_expand(item_keyboard), 0, 200, 320, 40, item_keyboard_colors, 0);
}
else {
- pBlt_part(image_expand(item_toolbar), 0, 200, 320, 40, item_toolbar_colors);
+ pBlt_part(image_expand(item_toolbar), 0, 200, 320, 40, item_toolbar_colors, 0);
x = 10;
y = 204;
- pBlt_part(image_expand(item_disk), x, y, 32, 32, item_disk_colors);
+ pBlt_part(image_expand(item_disk), x, y, 32, 32, item_disk_colors, 0);
x += 40;
- pBlt_part(image_expand(item_skip), x, y, 32, 32, item_skip_colors);
+ pBlt_part(image_expand(item_skip), x, y, 32, 32, item_skip_colors, 0);
x += 40;
drawSoundItem(x, y);
if (_gfx_mode_switch) {
x += 40;
pBlt_part(image_expand(item_monkeyPortrait), x, y, 32, 32,
- item_monkeyPortrait_colors);
+ item_monkeyPortrait_colors, 0);
}
}
}
else {
if (draw_keyboard) {
pBlt_part(image_expand(item_keyboardPortrait), 0, 240, 320, 80,
- item_keyboardPortrait_colors);
+ item_keyboardPortrait_colors, 0);
}
else {
pBlt_part(image_expand(item_toolbarPortrait), 0, 240, 320, 80,
- item_toolbarPortrait_colors);
+ item_toolbarPortrait_colors, 0);
/*drawToolbarItem(item_toolbarPortrait_colors, item_toolbarPortrait,
0, 240, 240, 80);*/
x = 10;
y = 240;
- pBlt_part(image_expand(item_disk), x, y, 32, 32, item_disk_colors);
+ pBlt_part(image_expand(item_disk), x, y, 32, 32, item_disk_colors, 0);
x += 40;
- pBlt_part(image_expand(item_skip), x, y, 32, 32, item_skip_colors);
+ pBlt_part(image_expand(item_skip), x, y, 32, 32, item_skip_colors, 0);
x += 40;
drawSoundItem(x, y);
if (_gfx_mode_switch) {
x += 40;
pBlt_part(image_expand(item_monkeyLandscape), x, y, 32, 32,
- item_monkeyLandscape_colors);
+ item_monkeyLandscape_colors, 0);
}
}
}
@@ -733,6 +733,14 @@
}
+void Blt_part(UBYTE * src_ptr, int x, int y, int width, int height, int pitch) {
+ pBlt_part(src_ptr, x, y, width, height, NULL, pitch);
+
+ if (toolbar_available && !toolbar_drawn && !hide_toolbar)
+ drawAllToolbar();
+
+}
+
void checkToolbar() {
if (toolbar_available && !toolbar_drawn && !hide_toolbar)
drawAllToolbar();
@@ -771,10 +779,12 @@
static long linestep;
static UBYTE bitmask;
static int bitshift;
+ static long skipmask;
scraddr = (UBYTE*)dynamicGXBeginDraw();
pixelstep = geom[useMode].pixelstep;
linestep = (pixelstep > 0) ? -1 : 1;
+ skipmask = geom[useMode].xSkipMask;
bitshift = 0;
bitmask = (1<<gxdp.cBPP)-1;
@@ -800,13 +810,14 @@
/* Turtle warning !!! */
for (i=0; i<width; i++) {
+ if (skipmask == 0xffffffff || (long)i & skipmask) {
+ *dst = ((*dst)&~bitmask)|(COLORCONVMONO(
+ RED_FROM_565(*(buffer + i)),
+ GREEN_FROM_565(*(buffer + i)),
+ BLUE_FROM_565(*(buffer + i))) << bitshift);
- *dst = ((*dst)&~bitmask)|(COLORCONVMONO(
- RED_FROM_565(*(buffer + i)),
- GREEN_FROM_565(*(buffer + i)),
- BLUE_FROM_565(*(buffer + i))) << bitshift);
-
- dst += pixelstep;
+ dst += pixelstep;
+ }
}
ADVANCE_PARTIAL(scraddr, linestep);
@@ -821,12 +832,12 @@
void mono_Blt(UBYTE *src_ptr) {
- mono_Blt_part(src_ptr, 0, 0, _geometry_w, _geometry_h, NULL);
+ mono_Blt_part(src_ptr, 0, 0, _geometry_w, _geometry_h, NULL, 0);
}
void mono_Blt_part(UBYTE * scr_ptr, int x, int y, int width, int height,
- UBYTE * own_palette)
+ UBYTE * own_palette, int pitch)
{
// Mono blit routines contain good deal of voodoo
static UBYTE *src;
@@ -878,7 +889,7 @@
/* Update offsets to the current line */
scraddr += y * linestep;
- scr_ptr_limit = scr_ptr + width * height;
+ scr_ptr_limit = scr_ptr + (pitch ? pitch : width) * height;
src_limit = scr_ptr + width;
@@ -960,8 +971,8 @@
ADVANCE_PARTIAL(scraddr, linestep);
- scr_ptr += width;
- src_limit += width;
+ scr_ptr += (pitch ? pitch : width);
+ src_limit += (pitch ? pitch : width);
}
}
else if(skipmask != 0xffffffff)
@@ -995,8 +1006,8 @@
ADVANCE_PARTIAL(scraddr, linestep);
- scr_ptr += width;
- src_limit += width;
+ scr_ptr += (pitch ? pitch : width);
+ src_limit += (pitch ? pitch : width);
}
}
else
@@ -1027,8 +1038,8 @@
ADVANCE_PARTIAL(scraddr, linestep);
- scr_ptr += width;
- src_limit += width;
+ scr_ptr += (pitch ? pitch : width);
+ src_limit += (pitch ? pitch : width);
}
}
}
@@ -1048,7 +1059,7 @@
/* Update offsets to the current line */
scraddr += y * linestep;
- scr_ptr_limit = scr_ptr + width * height;
+ scr_ptr_limit = scr_ptr + (pitch ? pitch : width) * height;
src_limit = scr_ptr + width;
if(skipmask != 0xffffffff)
@@ -1088,8 +1099,8 @@
scraddr += linestep;
- scr_ptr += width;
- src_limit += width;
+ scr_ptr += (pitch ? pitch : width);
+ src_limit += (pitch ? pitch : width);
}
}
else
@@ -1126,8 +1137,8 @@
scraddr += linestep;
- scr_ptr += width;
- src_limit += width;
+ scr_ptr += (pitch ? pitch : width);
+ src_limit += (pitch ? pitch : width);
}
}
}
@@ -1165,8 +1176,8 @@
scraddr += linestep;
- scr_ptr += width;
- src_limit += width;
+ scr_ptr += (pitch ? pitch : width);
+ src_limit += (pitch ? pitch : width);
}
}
else
@@ -1201,8 +1212,8 @@
scraddr += linestep;
- scr_ptr += width;
- src_limit += width;
+ scr_ptr += (pitch ? pitch : width);
+ src_limit += (pitch ? pitch : width);
}
}
}
@@ -1219,6 +1230,7 @@
static UBYTE *dst;
static long pixelstep;
static long linestep;
+ static long skipmask;
unsigned char color_match[500];
memset(color_match, 255, sizeof(color_match));
@@ -1226,6 +1238,7 @@
pixelstep = geom[useMode].pixelstep;
linestep = geom[useMode].linestep;
+ skipmask = geom[useMode].xSkipMask;
if(scraddr)
{
@@ -1249,10 +1262,11 @@
/* HUGE Turtle warning !!! */
for (i=0; i<width; i++) {
-
+ if (skipmask == 0xffffffff || (long)i & skipmask) {
*dst++ = best_match(RED_FROM_565(*(buffer + i)),
GREEN_FROM_565(*(buffer + i)),
BLUE_FROM_565(*(buffer + i)), 236) + 10;
+ }
}
buffer += pitch;
@@ -1266,11 +1280,11 @@
void palette_Blt(UBYTE *src_ptr) {
- palette_Blt_part(src_ptr, 0, 0, _geometry_w, _geometry_h, NULL);
+ palette_Blt_part(src_ptr, 0, 0, _geometry_w, _geometry_h, NULL, 0);
}
void palette_Blt_part(UBYTE * scr_ptr,int x, int y, int width, int height,
- UBYTE * own_palette)
+ UBYTE * own_palette, int pitch)
{
static UBYTE *src;
static UBYTE *dst;
@@ -1315,7 +1329,7 @@
/* Update offsets to the current line */
scraddr += y * linestep;
- scr_ptr_limit = scr_ptr + width * height;
+ scr_ptr_limit = scr_ptr + (pitch ? pitch : width) * height;
src_limit = scr_ptr + width;
/* Internal pixel loops */
@@ -1355,8 +1369,8 @@
src ++;
}
scraddr += linestep;
- scr_ptr += width;
- src_limit += width;
+ scr_ptr += (pitch ? pitch : width);
+ src_limit += (pitch ? pitch : width);
}
}
else
@@ -1394,8 +1408,8 @@
src ++;
}
scraddr += linestep;
- scr_ptr += width;
- src_limit += width;
+ scr_ptr += (pitch ? pitch : width);
+ src_limit += (pitch ? pitch : width);
}
}
@@ -1411,11 +1425,13 @@
static UBYTE *dst;
static long pixelstep;
static long linestep;
-
+ static long skipmask;
+
scraddr = (UBYTE*)dynamicGXBeginDraw();
pixelstep = geom[useMode].pixelstep;
linestep = geom[useMode].linestep;
+ skipmask = geom[useMode].xSkipMask;
if(scraddr)
{
@@ -1439,10 +1455,13 @@
/* Turtle warning !!! */
for (i=0; i<width; i++) {
- *(unsigned short*)dst = COLORCONV555(
- RED_FROM_565(*(buffer + i)), GREEN_FROM_565(*(buffer + i)), BLUE_FROM_565(*(buffer + i))
- );
- dst += 2;
+ if (skipmask == 0xffffffff || (long)i & skipmask) {
+
+ *(unsigned short*)dst = COLORCONV555(
+ RED_FROM_565(*(buffer + i)), GREEN_FROM_565(*(buffer + i)), BLUE_FROM_565(*(buffer + i))
+ );
+ dst += pixelstep;
+ }
}
buffer += pitch;
@@ -1456,12 +1475,12 @@
void hicolor555_Blt(UBYTE *src_ptr) {
- hicolor555_Blt_part(src_ptr, 0, 0, _geometry_w, _geometry_h, NULL);
+ hicolor555_Blt_part(src_ptr, 0, 0, _geometry_w, _geometry_h, NULL, 0);
}
void hicolor555_Blt_part(UBYTE * scr_ptr,int x, int y, int width, int height,
- UBYTE * own_palette)
+ UBYTE * own_palette, int pitch)
{
static UBYTE *src;
static UBYTE *dst;
@@ -1500,7 +1519,7 @@
/* Update offsets to the current line */
scraddr += y * linestep;
- scr_ptr_limit = scr_ptr + width * height;
+ scr_ptr_limit = scr_ptr + (pitch ? pitch : width) * height;
src_limit = scr_ptr + width;
/* Internal pixel loops */
@@ -1577,8 +1596,8 @@
src += 4;
}
scraddr += linestep;
- scr_ptr += width;
- src_limit += width;
+ scr_ptr += (pitch ? pitch : width);
+ src_limit += (pitch ? pitch : width);
}
}
else if(skipmask != 0xffffffff)
@@ -1611,8 +1630,8 @@
src ++;
}
scraddr += linestep;
- scr_ptr += width;
- src_limit += width;
+ scr_ptr += (pitch ? pitch : width);
+ src_limit += (pitch ? pitch : width);
}
}
else
@@ -1643,8 +1662,8 @@
}
scraddr += linestep;
- scr_ptr += width;
- src_limit += width;
+ scr_ptr += (pitch ? pitch : width);
+ src_limit += (pitch ? pitch : width);
}
}
@@ -1656,7 +1675,7 @@
void hicolor565_Blt(UBYTE *src_ptr) {
- hicolor565_Blt_part(src_ptr, 0, 0, _geometry_w, _geometry_h, NULL);
+ hicolor565_Blt_part(src_ptr, 0, 0, _geometry_w, _geometry_h, NULL, 0);
}
@@ -1666,11 +1685,13 @@
static UBYTE *dst;
static long pixelstep;
static long linestep;
+ static long skipmask;
scraddr = (UBYTE*)dynamicGXBeginDraw();
pixelstep = geom[useMode].pixelstep;
linestep = geom[useMode].linestep;
+ skipmask = geom[useMode].xSkipMask;
if(scraddr)
{
@@ -1690,10 +1711,17 @@
/* skip non updated pixels for this line */
- for (i=0; i < x; i++)
- dst += pixelstep;
+ for (i=0; i < x; i++) {
+ dst += pixelstep;
+ }
- memcpy(dst, buffer, width * 2);
+ for (i=0; i<width; i++) {
+ if (skipmask == 0xffffffff || (long)i & skipmask) {
+ *(unsigned short*)dst = buffer[i];
+ dst += pixelstep;
+ }
+ }
+ //memcpy(dst, buffer, width * 2);
buffer += pitch;
scraddr += linestep;
@@ -1705,7 +1733,7 @@
}
void hicolor565_Blt_part(UBYTE * scr_ptr, int x, int y, int width, int height,
- UBYTE * own_palette)
+ UBYTE * own_palette, int pitch)
{
static UBYTE *src;
static UBYTE *dst;
@@ -1744,7 +1772,7 @@
/* Update offsets to the current line */
scraddr += y * linestep;
- scr_ptr_limit = scr_ptr + width * height;
+ scr_ptr_limit = scr_ptr + (pitch ? pitch : width) * height;
src_limit = scr_ptr + width;
/* Internal pixel loops */
@@ -1822,8 +1850,8 @@
}
scraddr += linestep;
- scr_ptr += width;
- src_limit += width;
+ scr_ptr += (pitch ? pitch : width);
+ src_limit += (pitch ? pitch : width);
}
}
else if(skipmask != 0xffffffff)
@@ -1856,8 +1884,8 @@
}
scraddr += linestep;
- scr_ptr += width;
- src_limit += width;
+ scr_ptr += (pitch ? pitch : width);
+ src_limit += (pitch ? pitch : width);
}
}
else
@@ -1887,8 +1915,8 @@
}
scraddr += linestep;
- scr_ptr += width;
- src_limit += width;
+ scr_ptr += (pitch ? pitch : width);
+ src_limit += (pitch ? pitch : width);
}
}
@@ -1983,7 +2011,7 @@
}
void Set_565(INT16 *buffer, int pitch, int x, int y, int width, int height) {
- pSet_565(buffer, pitch, x, y, width, height);
+ pSet_565(buffer, pitch, x, y, width, height);
}
void NULL_Set_565(INT16 *buffer, int pitch, int x, int y, int width, int height) {
Index: screen.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/backends/wince/screen.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- screen.h 22 Oct 2002 22:58:34 -0000 1.2
+++ screen.h 25 Oct 2002 23:44:15 -0000 1.3
@@ -45,6 +45,7 @@
void SetPalEntry(int ent, UBYTE r, UBYTE g, UBYTE b);
void Blt(UBYTE * scr_ptr);
+void Blt_part(UBYTE * src_ptr, int x, int y, int width, int height, int pitch);
void checkToolbar();
void Get_565(UBYTE *src, INT16 *buffer, int pitch, int x, int y, int width, int height);
More information about the Scummvm-git-logs
mailing list