OkmPaint: Initial commit
This commit is contained in:
parent
d5e9404413
commit
c101b58dea
8
Makefile
8
Makefile
|
@ -1,5 +1,6 @@
|
|||
RYFS := $(CURDIR)/meta/ryfs/ryfs.py
|
||||
FOX32ASM := ../fox32asm/target/release/fox32asm
|
||||
OKAMERON := $(CURDIR)/meta/okameron/okameron.lua
|
||||
GFX2INC := ../tools/gfx2inc/target/release/gfx2inc
|
||||
|
||||
IMAGE_SIZE := 16777216
|
||||
|
@ -15,7 +16,6 @@ base_image/kernel.fxf: kernel/main.asm $(wildcard kernel/*.asm kernel/*/*.asm)
|
|||
$(FOX32ASM) $< $@
|
||||
|
||||
base_image/sh.fxf: applications/sh/main.asm $(wildcard applications/sh/*.asm applications/sh/*/*.asm)
|
||||
echo $(wildcard applications/sh/**/*.asm)
|
||||
$(FOX32ASM) $< $@
|
||||
|
||||
base_image/barclock.fxf: applications/barclock/main.asm
|
||||
|
@ -30,6 +30,11 @@ base_image/serial.fxf: applications/serial/main.asm $(wildcard applications/term
|
|||
base_image/foxpaint.fxf: applications/foxpaint/main.asm
|
||||
$(FOX32ASM) $< $@
|
||||
|
||||
base_image/okmpaint.fxf: applications/okmpaint/OkmPaint.okm $(wildcard applications/okmpaint/*.okm)
|
||||
lua $(OKAMERON) -arch=fox32 -startup=applications/okmpaint/start.asm $< > applications/okmpaint/okmpaint.asm
|
||||
$(FOX32ASM) applications/okmpaint/okmpaint.asm $@
|
||||
rm applications/okmpaint/okmpaint.asm
|
||||
|
||||
base_image/bg.fxf: applications/bg/main.asm
|
||||
$(FOX32ASM) $< $@
|
||||
|
||||
|
@ -59,6 +64,7 @@ FILES = \
|
|||
base_image/terminal.fxf \
|
||||
base_image/serial.fxf \
|
||||
base_image/foxpaint.fxf \
|
||||
base_image/okmpaint.fxf \
|
||||
base_image/bg.fxf \
|
||||
base_image/bg.raw \
|
||||
base_image/launcher.fxf
|
||||
|
|
128
applications/okmpaint/OkmPaint.okm
Normal file
128
applications/okmpaint/OkmPaint.okm
Normal file
|
@ -0,0 +1,128 @@
|
|||
MODULE OkmPaint;
|
||||
EXTERN PROCEDURE new_window, destroy_window, draw_str_to_overlay, get_window_overlay_number,
|
||||
draw_widgets_to_window, draw_filled_rectangle_to_overlay, GetNextWindowEvent, DrawPixel,
|
||||
save_state_and_yield_task, start_dragging_window, handle_widget_click, fill_window,
|
||||
menu_update_event, menu_bar_click_event, close_menu: INT;
|
||||
EXTERN eventArgs: ARRAY 8 OF INT;
|
||||
EXTERN menuItemsRoot: POINTER TO CHAR;
|
||||
EXTERN EVENT_TYPE_MOUSE_CLICK,
|
||||
EVENT_TYPE_MOUSE_RELEASE,
|
||||
EVENT_TYPE_BUTTON_CLICK,
|
||||
EVENT_TYPE_MENU_BAR_CLICK,
|
||||
EVENT_TYPE_MENU_UPDATE,
|
||||
EVENT_TYPE_MENU_CLICK,
|
||||
EVENT_TYPE_MENU_ACK,
|
||||
WIDGET_TYPE_BUTTON: INT;
|
||||
|
||||
TYPE Fox32OSButtonWidget = RECORD
|
||||
next, id, type, text, fgColor, bgColor, width: INT;
|
||||
x, y: SHORT;
|
||||
END;
|
||||
|
||||
VAR running: CHAR;
|
||||
drawing: CHAR;
|
||||
size: CHAR;
|
||||
color: INT;
|
||||
canvasWindow: ARRAY 36 OF CHAR;
|
||||
|
||||
PROCEDURE Main();
|
||||
BEGIN
|
||||
running := 1;
|
||||
drawing := 0;
|
||||
size := 2;
|
||||
color := 0FFFFFFFFH;
|
||||
|
||||
new_window(PTROF(canvasWindow), "OkmPaint canvas", 256, 256, 128, 128, PTROF(menuItemsRoot), 0);
|
||||
|
||||
WHILE running DO
|
||||
GetNextWindowEvent(PTROF(canvasWindow));
|
||||
|
||||
(* mouse click event *)
|
||||
IF eventArgs[0] = PTROF(EVENT_TYPE_MOUSE_CLICK) THEN
|
||||
IF (eventArgs[1] <| 8) & (eventArgs[2] <| 16) THEN
|
||||
(* clicked the window's close box *)
|
||||
destroy_window(PTROF(canvasWindow));
|
||||
running := 0;
|
||||
ELSIF eventArgs[2] <| 16 THEN
|
||||
(* clicked the window's title bar *)
|
||||
start_dragging_window(PTROF(canvasWindow));
|
||||
ELSE
|
||||
drawing := 1;
|
||||
END;
|
||||
|
||||
(* mouse release event *)
|
||||
ELSIF eventArgs[0] = PTROF(EVENT_TYPE_MOUSE_RELEASE) THEN
|
||||
drawing := 0;
|
||||
|
||||
(* menu bar click event *)
|
||||
ELSIF eventArgs[0] = PTROF(EVENT_TYPE_MENU_BAR_CLICK) THEN
|
||||
menu_bar_click_event(PTROF(menuItemsRoot));
|
||||
|
||||
(* menu update event *)
|
||||
ELSIF eventArgs[0] = PTROF(EVENT_TYPE_MENU_UPDATE) THEN
|
||||
menu_update_event();
|
||||
|
||||
(* menu click event *)
|
||||
ELSIF eventArgs[0] = PTROF(EVENT_TYPE_MENU_CLICK) THEN
|
||||
MenuClickEvent(eventArgs[2], eventArgs[3]);
|
||||
|
||||
(* menu ack event *)
|
||||
ELSIF eventArgs[0] = PTROF(EVENT_TYPE_MENU_ACK) THEN
|
||||
close_menu(PTROF(menuItemsRoot));
|
||||
END;
|
||||
|
||||
IF drawing THEN
|
||||
DrawPixel();
|
||||
END;
|
||||
|
||||
save_state_and_yield_task();
|
||||
END;
|
||||
END;
|
||||
|
||||
PROCEDURE MenuClickEvent(rootIndex, itemIndex: INT;);
|
||||
BEGIN
|
||||
IF rootIndex = 0 THEN
|
||||
(* Canvas menu *)
|
||||
IF itemIndex = 0 THEN
|
||||
(* Clear to Black *)
|
||||
fill_window(0FF000000H, PTROF(canvasWindow));
|
||||
ELSIF itemIndex = 1 THEN
|
||||
(* Clear to White *)
|
||||
fill_window(0FFFFFFFFH, PTROF(canvasWindow));
|
||||
END;
|
||||
ELSIF rootIndex = 1 THEN
|
||||
(* Brush menu *)
|
||||
IF itemIndex = 0 THEN
|
||||
(* 2x2 *)
|
||||
size := 2;
|
||||
ELSIF itemIndex = 1 THEN
|
||||
(* 4x4 *)
|
||||
size := 4;
|
||||
ELSIF itemIndex = 2 THEN
|
||||
(* 8x8 *)
|
||||
size := 8;
|
||||
ELSIF itemIndex = 3 THEN
|
||||
(* 16x16 *)
|
||||
size := 16;
|
||||
END;
|
||||
ELSIF rootIndex = 2 THEN
|
||||
(* Color menu *)
|
||||
IF itemIndex = 0 THEN
|
||||
(* Black *)
|
||||
color := 0FF000000H;
|
||||
ELSIF itemIndex = 1 THEN
|
||||
(* White *)
|
||||
color := 0FFFFFFFFH;
|
||||
ELSIF itemIndex = 2 THEN
|
||||
(* Red *)
|
||||
color := 0FF0000FFH;
|
||||
ELSIF itemIndex = 3 THEN
|
||||
(* Green *)
|
||||
color := 0FF00FF00H;
|
||||
ELSIF itemIndex = 3 THEN
|
||||
(* Blue *)
|
||||
color := 0FFFF0000H;
|
||||
END;
|
||||
END;
|
||||
END;
|
||||
END.
|
74
applications/okmpaint/start.asm
Normal file
74
applications/okmpaint/start.asm
Normal file
|
@ -0,0 +1,74 @@
|
|||
call Main
|
||||
call end_current_task
|
||||
|
||||
DrawPixel:
|
||||
mov r0, canvasWindow
|
||||
call get_window_overlay_number
|
||||
mov r2, r0
|
||||
mov r5, r0
|
||||
call get_mouse_position
|
||||
call make_coordinates_relative_to_overlay
|
||||
movz.8 r2, [size]
|
||||
movz.8 r3, [size]
|
||||
mov r4, [color]
|
||||
call draw_filled_rectangle_to_overlay
|
||||
ret
|
||||
|
||||
GetNextWindowEvent:
|
||||
push r8
|
||||
call get_next_window_event
|
||||
mov r8, eventArgs
|
||||
mov [r8], r0
|
||||
add r8, 4
|
||||
mov [r8], r1
|
||||
add r8, 4
|
||||
mov [r8], r2
|
||||
add r8, 4
|
||||
mov [r8], r3
|
||||
add r8, 4
|
||||
mov [r8], r4
|
||||
add r8, 4
|
||||
mov [r8], r5
|
||||
add r8, 4
|
||||
mov [r8], r6
|
||||
add r8, 4
|
||||
mov [r8], r7
|
||||
pop r8
|
||||
ret
|
||||
|
||||
eventArgs: data.fill 0, 32
|
||||
|
||||
menuItemsRoot:
|
||||
data.8 3 ; number of menus
|
||||
data.32 menu_items_canvas_list data.32 menu_items_canvas_name ; pointer to menu list, pointer to menu name
|
||||
data.32 menu_items_brush_list data.32 menu_items_brush_name ; pointer to menu list, pointer to menu name
|
||||
data.32 menu_items_color_list data.32 menu_items_color_name ; pointer to menu list, pointer to menu name
|
||||
menu_items_canvas_name:
|
||||
data.8 6 data.strz "Canvas" ; text length, text, null-terminator
|
||||
menu_items_brush_name:
|
||||
data.8 5 data.strz "Brush" ; text length, text, null-terminator
|
||||
menu_items_color_name:
|
||||
data.8 5 data.strz "Color" ; text length, text, null-terminator
|
||||
menu_items_canvas_list:
|
||||
data.8 2 ; number of items
|
||||
data.8 16 ; menu width (usually longest item + 2)
|
||||
data.8 14 data.strz "Clear to Black" ; text length, text, null-terminator
|
||||
data.8 14 data.strz "Clear to White" ; text length, text, null-terminator
|
||||
menu_items_brush_list:
|
||||
data.8 4 ; number of items
|
||||
data.8 7 ; menu width (usually longest item + 2)
|
||||
data.8 3 data.strz "2x2" ; text length, text, null-terminator
|
||||
data.8 3 data.strz "4x4" ; text length, text, null-terminator
|
||||
data.8 3 data.strz "8x8" ; text length, text, null-terminator
|
||||
data.8 5 data.strz "16x16" ; text length, text, null-terminator
|
||||
menu_items_color_list:
|
||||
data.8 5 ; number of items
|
||||
data.8 7 ; menu width (usually longest item + 2)
|
||||
data.8 5 data.strz "Black" ; text length, text, null-terminator
|
||||
data.8 5 data.strz "White" ; text length, text, null-terminator
|
||||
data.8 3 data.strz "Red" ; text length, text, null-terminator
|
||||
data.8 5 data.strz "Green" ; text length, text, null-terminator
|
||||
data.8 4 data.strz "Blue" ; text length, text, null-terminator
|
||||
|
||||
#include "../../../fox32rom/fox32rom.def"
|
||||
#include "../../fox32os.def"
|
Loading…
Reference in New Issue
Block a user