ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/cebix/BasiliskII/src/AmigaOS/video_amiga.cpp
(Generate patch)

Comparing BasiliskII/src/AmigaOS/video_amiga.cpp (file contents):
Revision 1.7 by cebix, 2000-07-22T16:20:55Z vs.
Revision 1.8 by cebix, 2000-07-22T18:25:48Z

# Line 57 | Line 57 | static int display_type = DISPLAY_WINDOW
57   static struct Screen *the_screen = NULL;
58   static struct Window *the_win = NULL;
59   static struct BitMap *the_bitmap = NULL;
60 + static UWORD *null_pointer = NULL;                              // Blank mouse pointer data
61 + static UWORD *current_pointer = (UWORD *)-1;    // Currently visible mouse pointer data
62   static LONG black_pen = -1, white_pen = -1;
63   static struct Process *periodic_proc = NULL;    // Periodic process
64  
# Line 352 | Line 354 | static bool init_screen_cgfx(ULONG mode_
354  
355   bool VideoInit(bool classic)
356   {
357 +        // Allocate blank mouse pointer data
358 +        null_pointer = (UWORD *)AllocMem(12, MEMF_PUBLIC | MEMF_CHIP | MEMF_CLEAR);
359 +        if (null_pointer == NULL) {
360 +                ErrorAlert(GetString(STR_NO_MEM_ERR));
361 +                return false;
362 +        }
363 +
364          // Read frame skip prefs
365          frame_skip = PrefsFindInt32("frameskip");
366          if (frame_skip == 0)
# Line 488 | Line 497 | void VideoExit(void)
497                          }
498                          break;
499          }
500 +
501 +        // Free mouse pointer
502 +        if (null_pointer) {
503 +                FreeMem(null_pointer, 12);
504 +                null_pointer = NULL;
505 +        }
506   }
507  
508  
# Line 600 | Line 615 | static __saveds void periodic_func(void)
615                                          case IDCMP_MOUSEMOVE:
616                                                  if (display_type == DISPLAY_SCREEN_P96 || display_type == DISPLAY_SCREEN_CGFX)
617                                                          ADBMouseMoved(mx, my);
618 <                                                else
618 >                                                else {
619                                                          ADBMouseMoved(mx - the_win->BorderLeft, my - the_win->BorderTop);
620 +                                                        if (mx < the_win->BorderLeft
621 +                                                         || my < the_win->BorderTop
622 +                                                         || mx >= the_win->BorderLeft + VideoMonitor.x
623 +                                                         || my >= the_win->BorderTop + VideoMonitor.y) {
624 +                                                                if (current_pointer) {
625 +                                                                        ClearPointer(the_win);
626 +                                                                        current_pointer = NULL;
627 +                                                                }
628 +                                                        } else {
629 +                                                                if (current_pointer != null_pointer) {
630 +                                                                        // Hide mouse pointer inside window
631 +                                                                        SetPointer(the_win, null_pointer, 1, 16, 0, 0);
632 +                                                                        current_pointer = null_pointer;
633 +                                                                }
634 +                                                        }
635 +                                                }
636                                                  break;
637  
638                                          case IDCMP_MOUSEBUTTONS:

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines