From 0db0530367bd5614ee7505111a2c4192c91cb757 Mon Sep 17 00:00:00 2001 From: Joshua Bell Date: Sun, 13 Jan 2019 12:26:32 -0800 Subject: [PATCH] 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). --- RELEASE-NOTES.md | 5 +++-- desktop/desktop_aux.s | 11 +++++------ desktop/desktop_res.s | 7 +++++-- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md index b3a7ae8..e1aa6f6 100644 --- a/RELEASE-NOTES.md +++ b/RELEASE-NOTES.md @@ -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) diff --git a/desktop/desktop_aux.s b/desktop/desktop_aux.s index cd24c83..cfaf0d1 100644 --- a/desktop/desktop_aux.s +++ b/desktop/desktop_aux.s @@ -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) ;;; ============================================================ diff --git a/desktop/desktop_res.s b/desktop/desktop_res.s index ec9d672..6d3706e 100644 --- a/desktop/desktop_res.s +++ b/desktop/desktop_res.s @@ -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: