Skip to content

Commit c21a785

Browse files
author
ripsaw8080
committed
Implement update region in mouse driver; only text modes for now. Fixes mouse pointer problems in Microsoft Programmer's Library.
git-svn-id: http://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@4062 ed541006-0bf7-43e9-8c4d-6fc63c346d47
1 parent 30aae1a commit c21a785

File tree

1 file changed

+15
-11
lines changed

1 file changed

+15
-11
lines changed

src/ints/mouse.cpp

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -113,8 +113,8 @@ static struct {
113113
Bit16u dspeed_val;
114114
float senv_x;
115115
float senv_y;
116-
Bit16u updateRegion_x[2];
117-
Bit16u updateRegion_y[2];
116+
Bit16s updateRegion_x[2];
117+
Bit16s updateRegion_y[2];
118118
Bit16u doubleSpeedThreshold;
119119
Bit16u language;
120120
Bit16u cursorType;
@@ -251,6 +251,11 @@ void DrawCursorText() {
251251
// Restore Background
252252
RestoreCursorBackgroundText();
253253

254+
// Check if cursor in update region
255+
if ((POS_Y <= mouse.updateRegion_y[1]) && (POS_Y >= mouse.updateRegion_y[0]) &&
256+
(POS_X <= mouse.updateRegion_x[1]) && (POS_X >= mouse.updateRegion_x[0])) {
257+
return;
258+
}
254259

255260
// Save Background
256261
mouse.backposx = POS_X>>3;
@@ -674,10 +679,7 @@ void Mouse_AfterNewVideoMode(bool setmode) {
674679
mouse.language = 0;
675680
mouse.page = 0;
676681
mouse.doubleSpeedThreshold = 64;
677-
mouse.updateRegion_x[0] = 1;
678-
mouse.updateRegion_y[0] = 1;
679-
mouse.updateRegion_x[1] = 1;
680-
mouse.updateRegion_y[1] = 1;
682+
mouse.updateRegion_y[1] = -1; //offscreen
681683
mouse.cursorType = 0; //Test
682684
mouse.enabled=true;
683685

@@ -716,6 +718,7 @@ static Bitu INT33_Handler(void) {
716718
break;
717719
case 0x01: /* Show Mouse */
718720
if(mouse.hidden) mouse.hidden--;
721+
mouse.updateRegion_y[1] = -1; //offscreen
719722
Mouse_AutoLock(true);
720723
DrawCursor();
721724
break;
@@ -838,11 +841,12 @@ static Bitu INT33_Handler(void) {
838841
case 0x0f: /* Define mickey/pixel rate */
839842
Mouse_SetMickeyPixelRate(reg_cx,reg_dx);
840843
break;
841-
case 0x10: /* Define screen region for updating */
842-
mouse.updateRegion_x[0]=reg_cx;
843-
mouse.updateRegion_y[0]=reg_dx;
844-
mouse.updateRegion_x[1]=reg_si;
845-
mouse.updateRegion_y[1]=reg_di;
844+
case 0x10: /* Define screen region for updating */
845+
mouse.updateRegion_x[0]=(Bit16s)reg_cx;
846+
mouse.updateRegion_y[0]=(Bit16s)reg_dx;
847+
mouse.updateRegion_x[1]=(Bit16s)reg_si;
848+
mouse.updateRegion_y[1]=(Bit16s)reg_di;
849+
DrawCursor();
846850
break;
847851
case 0x11: /* Get number of buttons */
848852
reg_ax=0xffff;

0 commit comments

Comments
 (0)