Allow dragging "unlimited" icons. Fixes #18

The number of draggable icons was restricted to a hardcoded limit
of 20, using a pre-allocated buffer (680 bytes) to hold a composite
polygon of the icon outlines.

Switch that to re-use the "save area" (used by MGTK to stash the
background of menus, so not in conflict), $800-$1AFF, which is
more than enough room for 127 icons (the maximum number supported).
This commit is contained in:
Joshua Bell 2019-01-13 12:26:32 -08:00
parent 74fb526ced
commit 0db0530367
3 changed files with 13 additions and 10 deletions

View File

@ -5,8 +5,9 @@
### Enhancements
* Current time shown on right side of menu bar, if system has a clock. (#7)
* Up to 13 volumes are shown on the desktop. (#20)
* Up to 12 Desk Accessories are shown in the menu. (#90)
* Up to 13 volumes are shown on the desktop (was 10). (#20)
* Up to 12 Desk Accessories are shown in the menu (was 8). (#90)
* Drag "unlimited" number of icons (was 20). (#18)
* Menus allow click-to-drop, click-to-select interaction. (#104)
* Add Special > Check Drive command to refresh a single drive. (#97)
* Show Text File DA: Keyboard support. Escape quits, arrows scroll. (#4)

View File

@ -298,13 +298,12 @@ highlight_count: ; number of highlighted icons
highlight_list: ; selected icons
.res 127, 0
max_draggable_items = 20
;;; Polygon holding the composite outlines of all icons being dragged.
;;; Re-use the "save area" ($800-$1AFF) since menus won't show during
;;; this operation.
;;; Polygon holding the composite outlines of all icons
;;; being dragged.
drag_outline_buffer:
.res max_draggable_items * (.sizeof(MGTK::Point) * 8 + 2), 0
drag_outline_buffer := save_area_buffer
max_draggable_items = save_area_size / (.sizeof(MGTK::Point) * 8 + 2)
;;; ============================================================

View File

@ -178,6 +178,9 @@ checkerboard_pattern3:
.byte %10101010
.byte $FF
save_area_buffer := $800
save_area_size = $1300
;; Copies of ROM bytes used for machine identification
.proc startdesktop_params
machine: .byte $06 ; ROM FBB3 ($06 = IIe or later)
@ -186,8 +189,8 @@ op_sys: .byte 0 ; 0=ProDOS
slot_num: .byte 0 ; Mouse slot, 0 = search
use_interrupts: .byte 0 ; 0=passive
sysfontptr: .addr DEFAULT_FONT
savearea: .addr $0800 ; $0800 - $1AFF
savesize: .word $1300
savearea: .addr save_area_buffer
savesize: .word save_area_size
.endproc
zp_use_flag0: