Fetcher: Add browser icons, pulled from icons.res at runtime

This commit is contained in:
Ry 2023-10-12 16:49:37 -07:00
parent a033fae4ae
commit f6fed505cc
2 changed files with 30 additions and 2 deletions

View File

@ -10,6 +10,8 @@ MODULE Browser;
browserPrevPageButton: Fox32OSButtonWidget;
browserDiskId: INT;
browserFileList: ARRAY 341 OF CHAR;
browserHasIcons: CHAR;
browserIconsResPtr: PTR;
EXTERN browserMenuItemsRoot: POINTER TO CHAR;
EXTERN browserFileListFriendly: ARRAY 12 OF POINTER TO CHAR;
@ -36,14 +38,17 @@ MODULE Browser;
browserRunning := 1;
browserPage := 0;
browserDiskId := diskId;
browserHasIcons := 0;
browserIconsResPtr := iconsResPtr;
(* if icons.res was loaded, then pull the `dsk` resource from it *)
IF hasIcons THEN
tempDskIconResPtr := get_resource(iconsResPtr, "dsk", 4096);
tempDskIconResPtr := get_resource(browserIconsResPtr, "dsk", 4096);
IF tempDskIconResPtr THEN
copy_memory_bytes(tempDskIconResPtr, PTROF(desktopDiskIcon), 4096);
free_memory(tempDskIconResPtr);
END;
browserHasIcons := 1;
END;
(* create the window and draw its initial contents *)
@ -123,6 +128,29 @@ MODULE Browser;
fill_window(0FFFFFFFFH, PTROF(browserWindow));
SetupBrowserIconStructs();
draw_widgets_to_window(PTROF(browserWindow));
IF browserHasIcons THEN
DrawBrowserIcons();
END;
END;
PROCEDURE DrawBrowserIcons();
VAR i: INT;
icon: POINTER TO Fox32OSButtonWidget;
tempFileIconResPtr: PTR;
overlay: INT;
BEGIN
i := 0;
overlay := get_window_overlay_number(PTROF(browserWindow));
WHILE i <| 12 DO
icon := PTROF(browserIcons[i]);
tempFileIconResPtr := get_resource(browserIconsResPtr, icon^.text + string_length(icon^.text) - 3, 4096);
IF tempFileIconResPtr THEN
set_tilemap(tempFileIconResPtr, 32, 32);
draw_tile_to_overlay(0, icon^.x, icon^.y, overlay);
free_memory(tempFileIconResPtr);
END;
i := i + 1;
END;
END;
PROCEDURE SetupBrowserIconStructs();

View File

@ -10,7 +10,7 @@ MODULE OS;
set_window_flags, menu_update_event, menu_bar_click_event, close_menu, new_messagebox,
launch_fxf_from_disk, get_boot_disk_id, string_to_int, set_tilemap, draw_tile_to_overlay,
ryfs_get_file_list, copy_memory_bytes, IsRomDiskAvailable, end_current_task, sleep_task,
open, read, get_size, get_boot_disk_id, get_resource, allocate_memory, free_memory: INT;
open, read, get_size, get_boot_disk_id, get_resource, allocate_memory, free_memory, string_length: INT;
EXTERN PROCEDURE brk: INT;