1
0
Fork 0
forked from AbleOS/ableos
This commit is contained in:
peony 2024-11-10 13:00:45 +01:00
commit 2d2bec803f
29 changed files with 92 additions and 135 deletions

View file

Before

Width:  |  Height:  |  Size: 100 KiB

After

Width:  |  Height:  |  Size: 100 KiB

View file

Before

Width:  |  Height:  |  Size: 100 KiB

After

Width:  |  Height:  |  Size: 100 KiB

View file

@ -1,5 +1,13 @@
// Image := struct { render := @use("../../../../libraries/render/src/lib.hb");
// magic: uint, .{Surface} := render
// is_dirty: bool,
// surface: Surface, Image := struct {
// } magic: uint,
is_dirty: bool,
surface: Surface,
}
image_from_surface := fn(surface: Surface): Image {
img := Image.(4, true, surface)
return img
}

View file

@ -4,20 +4,20 @@
/* source: /* source:
https://github.com/phoboslab/qoi/blob/master/qoi.h */ https://github.com/phoboslab/qoi/blob/master/qoi.h */
QOI_SRGB := 0 $QOI_SRGB := 0
QOI_LINEAR := 1 $QOI_LINEAR := 1
QOI_OP_INDEX := 0x0 $QOI_OP_INDEX := 0x0
QOI_OP_DIFF := 0x40 $QOI_OP_DIFF := 0x40
QOI_OP_LUMA := 0x80 $QOI_OP_LUMA := 0x80
QOI_OP_RUN := 0xC0 $QOI_OP_RUN := 0xC0
QOI_OP_RGB := 0xFE $QOI_OP_RGB := 0xFE
QOI_OP_RGBA := 0xFF $QOI_OP_RGBA := 0xFF
QOI_MASK_2 := 0xC0 $QOI_MASK_2 := 0xC0
QOI_COLOR_HASH := fn(c: Color): u8 { QOI_COLOR_HASH := fn(c: Color): u8 {
return (c.r * 3 + c.g * 5 + c.b * 7 + c.a * 11) % 64 return (c.r * 3 + c.g * 5 + c.b * 7 + c.a * 11) % 64
} }
QOI_MAGIC := 0x716F6966 $QOI_MAGIC := 0x716F6966
QOI_PIXELS_MAX := 400000000 $QOI_PIXELS_MAX := 400000000
QuiteOkayHeader := packed struct { QuiteOkayHeader := packed struct {
magic: u32, magic: u32,

View file

@ -17,22 +17,22 @@ indexptr := mode.indexptr
// Colours // Colours
Color := packed struct {b: u8, g: u8, r: u8, a: u8} Color := packed struct {b: u8, g: u8, r: u8, a: u8}
white := Color.(255, 255, 255, 255) $white := Color.(255, 255, 255, 255)
black := Color.(0, 0, 0, 255) $black := Color.(0, 0, 0, 255)
gray := Color.(127, 127, 127, 255) $gray := Color.(127, 127, 127, 255)
red := Color.(0, 0, 205, 255) $red := Color.(0, 0, 205, 255)
green := Color.(0, 205, 0, 255) $green := Color.(0, 205, 0, 255)
yellow := Color.(0, 205, 205, 255) $yellow := Color.(0, 205, 205, 255)
blue := Color.(205, 0, 0, 255) $blue := Color.(205, 0, 0, 255)
magenta := Color.(205, 0, 205, 255) $magenta := Color.(205, 0, 205, 255)
cyan := Color.(205, 205, 0, 255) $cyan := Color.(205, 205, 0, 255)
light_gray := Color.(229, 229, 229, 255) $light_gray := Color.(229, 229, 229, 255)
light_red := Color.(0, 0, 255, 255) $light_red := Color.(0, 0, 255, 255)
light_green := Color.(0, 255, 0, 255) $light_green := Color.(0, 255, 0, 255)
light_yellow := Color.(0, 255, 255, 255) $light_yellow := Color.(0, 255, 255, 255)
light_blue := Color.(255, 0, 0, 255) $light_blue := Color.(255, 0, 0, 255)
light_magenta := Color.(255, 0, 255, 255) $light_magenta := Color.(255, 0, 255, 255)
light_cyan := Color.(255, 255, 0, 255) $light_cyan := Color.(255, 255, 0, 255)
// Drawing // Drawing
put_pixel := mode.put_pixel put_pixel := mode.put_pixel

View file

@ -1,2 +0,0 @@
# app bar
The app bar is a mini-bar meant to launch applications.

View file

@ -1,11 +0,0 @@
[package]
name = "app_bar"
authors = ["able"]
[dependants.libraries]
[dependants.binaries]
hblang.version = "1.0.0"
[build]
command = "hblang src/main.hb"

View file

@ -1,35 +0,0 @@
stn := @use("../../../libraries/stn/src/lib.hb");
.{string, memory, buffer, random, log} := stn;
.{Vec2} := stn.math
horizon_api := @use("../../../libraries/horizon_api/src/lib.hb")
render := @use("../../../libraries/render/src/lib.hb")
psf := @embed("../../../consolefonts/tamsyn/10x20r.psf")
main := fn(): int {
screen := render.init(true)
// Clear the screen to black.
render.clear(screen, render.black)
x := 0
mem_buf := memory.request_page(1)
color := random.any(render.Color)
str := "Window Title Bar\0"
font := render.text.font_from_psf2(@bitcast(&psf))
loop {
// Clear the screen
render.clear(screen, render.black)
render.put_rect(screen, .(0, 0), .(screen.width - 1, 26), render.white)
// Sync the screen
render.sync(screen)
}
return 0
}

View file

@ -21,7 +21,8 @@ Window := struct {
y: int, y: int,
} }
psf := @embed("../../../consolefonts/tamsyn/10x20r.psf") psf := @embed("../../../assets/consolefonts/tamsyn/10x20r.psf")
img := @embed("../../../assets/wallpaper.qoi")
main := fn(): int { main := fn(): int {
win_buff := buffer.create("XHorizon\0") win_buff := buffer.create("XHorizon\0")
@ -35,6 +36,11 @@ main := fn(): int {
// Clear the screen to black. // Clear the screen to black.
render.clear(screen, render.black) render.clear(screen, render.black)
wallpaper := render.image.from(@bitcast(&img))
if wallpaper == null {
return 1
}
window := render.new_surface(screen.width / 3, screen.height / 3) window := render.new_surface(screen.width / 3, screen.height / 3)
mem_buf := memory.request_page(1) mem_buf := memory.request_page(1)
@ -47,12 +53,14 @@ main := fn(): int {
mouse_x := @as(i16, 0) mouse_x := @as(i16, 0)
mouse_y := @as(i16, 0) mouse_y := @as(i16, 0)
text_label := new_label("Hi\0") text_label := new_label("Hi\0")
// widgets := "()\0" // widgets := "()\0"
// ui := sexpr_parser(widgets) // ui := sexpr_parser(widgets)
loop { loop {
// Clear the screen // Clear the screen
render.clear(screen, render.black) render.clear(screen, render.black)
render.put_surface(screen, wallpaper, .(0, 0), false)
// TODO: Read the window buffer here // TODO: Read the window buffer here
{ {
@ -101,7 +109,7 @@ main := fn(): int {
{ {
pos := Vec2(uint).(1, screen.height - 21) pos := Vec2(uint).(1, screen.height - 21)
render_label_to_surface(screen, text_label, font, pos) render_label_to_surface(screen, text_label, font, pos)
render.put_rect(screen, .(0, screen.height - 21), .(screen.width - 1, screen.height - 1), render.white) render.put_rect(screen, .(0, screen.height - 21), .(screen.width - 1, 20), render.white)
} }
{ {
@ -137,9 +145,11 @@ main := fn(): int {
if mouse_event.left { if mouse_event.left {
set_label_text(text_label, "LEFT CLICK\0") set_label_text(text_label, "LEFT CLICK\0")
} else if mouse_event.middle { }
if mouse_event.middle {
set_label_text(text_label, "MIDDLE CLICK\0") set_label_text(text_label, "MIDDLE CLICK\0")
} else if mouse_event.right { }
if mouse_event.right {
set_label_text(text_label, "RIGHT CLICK\0") set_label_text(text_label, "RIGHT CLICK\0")
} }
} }
@ -147,7 +157,12 @@ main := fn(): int {
render.put_rect(screen, .(0, 0), .(screen.width - 1, screen.height - 1), render.white) render.put_rect(screen, .(0, 0), .(screen.width - 1, screen.height - 1), render.white)
// render mouse // render mouse
render.put_rect(screen, .(mouse_x, mouse_y), .(20, 20), render.white) lum := render.indexptr(screen, mouse_x, mouse_y)
if lum.r / 3 + lum.g / 3 + lum.b / 3 < 128 {
render.put_rect(screen, .(mouse_x, mouse_y), .(20, 20), render.white)
} else {
render.put_rect(screen, .(mouse_x, mouse_y), .(20, 20), render.black)
}
// Send events to focused window // Send events to focused window
} }

View file

@ -6,22 +6,11 @@ intouch := @use("../../../libraries/intouch/src/lib.hb");
i9 := packed struct {sign: bool, value: u8} i9 := packed struct {sign: bool, value: u8}
Button := struct {id: u8} Button := struct {id: u8}
LeftButton := Button.(1) $LeftButton := Button.(1)
RightButton := Button.(2) $RightButton := Button.(2)
MiddleButton := Button.(4) $MiddleButton := Button.(4)
Button4 := Button.(8) $Button4 := Button.(8)
Button5 := Button.(16) $Button5 := Button.(16)
mouse_moved := fn(delta: Vec2(i9)): void {
// log.info("Mouse movement.\0")
}
button_event := fn(button: Button, pressed: bool): void {
if pressed {
// log.info("Mouse-button pressed.\0")
} else {
// log.info("Mouse-button released.\0")
}
}
send_byte := fn(target: u8, data: u8): void { send_byte := fn(target: u8, data: u8): void {
loop if (memory.inb(0x64) & 2) == 0 break loop if (memory.inb(0x64) & 2) == 0 break
@ -41,7 +30,6 @@ send_command_byte := fn(byte: u8): void {
@inline(send_byte, 0x64, 0xD4) @inline(send_byte, 0x64, 0xD4)
@inline(send_byte, 0x60, byte) @inline(send_byte, 0x60, byte)
loop if memory.inb(0x60) == 0xFA { loop if memory.inb(0x60) == 0xFA {
log.info("ACK\0")
return return
} }
} }
@ -61,13 +49,13 @@ set_linear_scaling := fn(): void @inline(send_command_byte, 0xE6)
resend_packet := fn(): void @inline(send_command_byte, 0xFE) resend_packet := fn(): void @inline(send_command_byte, 0xFE)
SampleRate := struct {value: u8} SampleRate := struct {value: u8}
sr10 := SampleRate.(10) $sr10 := SampleRate.(10)
sr20 := SampleRate.(20) $sr20 := SampleRate.(20)
sr40 := SampleRate.(40) $sr40 := SampleRate.(40)
sr60 := SampleRate.(60) $sr60 := SampleRate.(60)
sr80 := SampleRate.(80) $sr80 := SampleRate.(80)
sr100 := SampleRate.(100) $sr100 := SampleRate.(100)
sr200 := SampleRate.(200) $sr200 := SampleRate.(200)
set_sample_rate := fn(sample_rate: SampleRate): void { set_sample_rate := fn(sample_rate: SampleRate): void {
@inline(send_command_byte, 0xE6) @inline(send_command_byte, 0xE6)
@ -75,10 +63,10 @@ set_sample_rate := fn(sample_rate: SampleRate): void {
} }
Resolution := struct {value: u8} Resolution := struct {value: u8}
res_1count_per_mm := Resolution.(0) $res_1count_per_mm := Resolution.(0)
res_2count_per_mm := Resolution.(1) $res_2count_per_mm := Resolution.(1)
res_4count_per_mm := Resolution.(2) $res_4count_per_mm := Resolution.(2)
res_8count_per_mm := Resolution.(3) $res_8count_per_mm := Resolution.(3)
set_resolution := fn(resolution: Resolution): void { set_resolution := fn(resolution: Resolution): void {
@inline(send_command_byte, 0xE6) @inline(send_command_byte, 0xE6)
@ -122,28 +110,22 @@ main := fn(): int {
changes := button_states ^ status & 7 changes := button_states ^ status & 7
if (changes & LeftButton.id) != 0 { if (changes & LeftButton.id) != 0 | (status & LeftButton.id) != 0 {
if (status & LeftButton.id) != 0 { event.left = true
event.left = true } else {
} else { event.left = false
event.left = false
}
} }
if (changes & MiddleButton.id) != 0 { if (changes & MiddleButton.id) != 0 | (status & MiddleButton.id) != 0 {
if (status & MiddleButton.id) != 0 { event.middle = true
event.middle = true } else {
} else { event.middle = false
event.middle = false
}
} }
if (changes & RightButton.id) != 0 { if (changes & RightButton.id) != 0 | (status & RightButton.id) != 0 {
if (status & RightButton.id) != 0 { event.right = true
event.right = true } else {
} else { event.right = false
event.right = false
}
} }
button_states ^= changes button_states ^= changes

View file

@ -6,8 +6,8 @@ render := @use("../../../../libraries/render/src/lib.hb")
example := fn(): void { example := fn(): void {
screen := render.init(true) screen := render.init(true)
image_qoi := render.image.from(@bitcast(&@embed("./assets/mini.qoi"))) image_qoi := render.image.from(@bitcast(&@embed("../../../../assets/mini.qoi")))
image_bmp := render.image.from(@bitcast(&@embed("./assets/mini.bmp"))) image_bmp := render.image.from(@bitcast(&@embed("../../../../assets/mini.bmp")))
if image_qoi == null | image_bmp == null { if image_qoi == null | image_bmp == null {
log.error("failed to load images for whatever reason\0") log.error("failed to load images for whatever reason\0")

View file

@ -13,8 +13,8 @@ render := @use("../../../../libraries/render/src/lib.hb")
- shift key support - shift key support
*/ */
psf := @embed("../../../../consolefonts/tamsyn/10x20r.psf") psf := @embed("../../../../assets/consolefonts/tamsyn/10x20r.psf")
img := @embed("./assets/wallpaper.qoi") img := @embed("../../../../assets/wallpaper.qoi")
is_shift_pressed := false is_shift_pressed := false
is_ctrl_pressed := false is_ctrl_pressed := false