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.12 by cebix, 2001-02-02T20:52:57Z

# Line 1 | Line 1
1   /*
2   *  video_amiga.cpp - Video/graphics emulation, AmigaOS specific stuff
3   *
4 < *  Basilisk II (C) 1997-2000 Christian Bauer
4 > *  Basilisk II (C) 1997-2001 Christian Bauer
5   *
6   *  This program is free software; you can redistribute it and/or modify
7   *  it under the terms of the GNU General Public License as published by
# Line 33 | Line 33
33   #include <proto/cybergraphics.h>
34  
35   #include "sysdeps.h"
36 + #include "cpu_emulation.h"
37   #include "main.h"
38   #include "adb.h"
39   #include "prefs.h"
# Line 57 | Line 58 | static int display_type = DISPLAY_WINDOW
58   static struct Screen *the_screen = NULL;
59   static struct Window *the_win = NULL;
60   static struct BitMap *the_bitmap = NULL;
61 + static UWORD *null_pointer = NULL;                              // Blank mouse pointer data
62 + static UWORD *current_pointer = (UWORD *)-1;    // Currently visible mouse pointer data
63   static LONG black_pen = -1, white_pen = -1;
64   static struct Process *periodic_proc = NULL;    // Periodic process
65  
# Line 282 | Line 285 | static bool init_screen_cgfx(ULONG mode_
285                          break;
286                  case 15:
287                  case 16:
288 <                        if (format != PIXFMT_RGB16) {
288 >                        // !!! PIXFMT_RGB15 is correct !!!
289 >                        if (format != PIXFMT_RGB15) {
290                                  ErrorAlert(GetString(STR_WRONG_SCREEN_FORMAT_ERR));
291                                  return false;
292                          }
# Line 352 | Line 356 | static bool init_screen_cgfx(ULONG mode_
356  
357   bool VideoInit(bool classic)
358   {
359 +        // Allocate blank mouse pointer data
360 +        null_pointer = (UWORD *)AllocMem(12, MEMF_PUBLIC | MEMF_CHIP | MEMF_CLEAR);
361 +        if (null_pointer == NULL) {
362 +                ErrorAlert(GetString(STR_NO_MEM_ERR));
363 +                return false;
364 +        }
365 +
366          // Read frame skip prefs
367          frame_skip = PrefsFindInt32("frameskip");
368          if (frame_skip == 0)
# Line 488 | Line 499 | void VideoExit(void)
499                          }
500                          break;
501          }
502 +
503 +        // Free mouse pointer
504 +        if (null_pointer) {
505 +                FreeMem(null_pointer, 12);
506 +                null_pointer = NULL;
507 +        }
508   }
509  
510  
# Line 600 | Line 617 | static __saveds void periodic_func(void)
617                                          case IDCMP_MOUSEMOVE:
618                                                  if (display_type == DISPLAY_SCREEN_P96 || display_type == DISPLAY_SCREEN_CGFX)
619                                                          ADBMouseMoved(mx, my);
620 <                                                else
620 >                                                else {
621                                                          ADBMouseMoved(mx - the_win->BorderLeft, my - the_win->BorderTop);
622 +                                                        if (mx < the_win->BorderLeft
623 +                                                         || my < the_win->BorderTop
624 +                                                         || mx >= the_win->BorderLeft + VideoMonitor.x
625 +                                                         || my >= the_win->BorderTop + VideoMonitor.y) {
626 +                                                                if (current_pointer) {
627 +                                                                        ClearPointer(the_win);
628 +                                                                        current_pointer = NULL;
629 +                                                                }
630 +                                                        } else {
631 +                                                                if (current_pointer != null_pointer) {
632 +                                                                        // Hide mouse pointer inside window
633 +                                                                        SetPointer(the_win, null_pointer, 1, 16, 0, 0);
634 +                                                                        current_pointer = null_pointer;
635 +                                                                }
636 +                                                        }
637 +                                                }
638                                                  break;
639  
640                                          case IDCMP_MOUSEBUTTONS:
# Line 622 | Line 655 | static __saveds void periodic_func(void)
655                                          case IDCMP_RAWKEY:
656                                                  if (qualifier & IEQUALIFIER_REPEAT)     // Keyboard repeat is done by MacOS
657                                                          break;
658 +                                                if ((qualifier & (IEQUALIFIER_LALT | IEQUALIFIER_LSHIFT | IEQUALIFIER_CONTROL)) ==
659 +                                                    (IEQUALIFIER_LALT | IEQUALIFIER_LSHIFT | IEQUALIFIER_CONTROL) && code == 0x5f) {
660 +                                                        SetInterruptFlag(INTFLAG_NMI);
661 +                                                        TriggerInterrupt();
662 +                                                        break;
663 +                                                }
664 +
665                                                  if (code & IECODE_UP_PREFIX)
666                                                          ADBKeyUp(keycode2mac[code & 0x7f]);
667                                                  else

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines