(sunset) fix mouse cursor and one multi-program crash bug
This commit is contained in:
parent
530b62aa3d
commit
986077435f
6
Cargo.lock
generated
6
Cargo.lock
generated
|
@ -213,12 +213,12 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "hbbytecode"
|
name = "hbbytecode"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://git.ablecorp.us/AbleOS/holey-bytes.git#3491814b4f1723e6b1f3ae485ed5d3b5cad16df0"
|
source = "git+https://git.ablecorp.us/AbleOS/holey-bytes.git#08fc9d6ab6a8dd539255bf45d892f4b7f08776c5"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "hblang"
|
name = "hblang"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://git.ablecorp.us/AbleOS/holey-bytes.git#3491814b4f1723e6b1f3ae485ed5d3b5cad16df0"
|
source = "git+https://git.ablecorp.us/AbleOS/holey-bytes.git#08fc9d6ab6a8dd539255bf45d892f4b7f08776c5"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"hashbrown",
|
"hashbrown",
|
||||||
"hbbytecode",
|
"hbbytecode",
|
||||||
|
@ -229,7 +229,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "hbvm"
|
name = "hbvm"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://git.ablecorp.us/AbleOS/holey-bytes.git#3491814b4f1723e6b1f3ae485ed5d3b5cad16df0"
|
source = "git+https://git.ablecorp.us/AbleOS/holey-bytes.git#08fc9d6ab6a8dd539255bf45d892f4b7f08776c5"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"hbbytecode",
|
"hbbytecode",
|
||||||
]
|
]
|
||||||
|
|
|
@ -61,8 +61,8 @@ impl hbvm::mem::Memory for Memory {
|
||||||
|
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
fn log_instr(&mut self, at: Address, regs: &[hbvm::value::Value]) {
|
fn log_instr(&mut self, at: Address, regs: &[hbvm::value::Value]) {
|
||||||
//log::debug!("exec: [{:02x}] {}", at.get(), unsafe {
|
log::debug!("exec: [{:02x}] {}", at.get(), unsafe {
|
||||||
// self.logger.display_instr(at, regs)
|
self.logger.display_instr(at, regs)
|
||||||
//});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
string := @use("string.hb")
|
|
||||||
|
|
||||||
$await := fn(buffer_id: uint): void {
|
$await := fn(buffer_id: uint): void {
|
||||||
return @eca(7, buffer_id)
|
return @eca(7, buffer_id)
|
||||||
}
|
}
|
||||||
|
@ -30,7 +28,7 @@ $create_nameless := fn(): uint {
|
||||||
return @eca(1, 0)
|
return @eca(1, 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
$delete_buffer := fn(buffer_id: uint): void {
|
$delete := fn(buffer_id: uint): void {
|
||||||
return @eca(2, buffer_id)
|
return @eca(2, buffer_id)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -26,6 +26,9 @@ $max := fn($T: type, a: T, b: T): T {
|
||||||
return @itf(a > b) * a + @itf(a <= b) * b
|
return @itf(a > b) * a + @itf(a <= b) * b
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
$clamp := fn($T: type, x: T, minimum: T, maximum: T): T {
|
||||||
|
return max(T, min(T, x, maximum), minimum)
|
||||||
|
}
|
||||||
$sign := fn($T: type, x: T): i8 {
|
$sign := fn($T: type, x: T): i8 {
|
||||||
if signed_int(T) {
|
if signed_int(T) {
|
||||||
return @intcast(x >> @sizeof(T) * 8 - 1) | x != 0
|
return @intcast(x >> @sizeof(T) * 8 - 1) | x != 0
|
||||||
|
|
|
@ -100,7 +100,8 @@ collect_frames := fn(): void {
|
||||||
send_header(message.ack, window.data.channel.client)
|
send_header(message.ack, window.data.channel.client)
|
||||||
ptr := await_message(^Color, window.data.channel.server)
|
ptr := await_message(^Color, window.data.channel.server)
|
||||||
if ptr.header.kind != message.ack {
|
if ptr.header.kind != message.ack {
|
||||||
return
|
i += 1
|
||||||
|
continue
|
||||||
}
|
}
|
||||||
window.surface.put_surface(
|
window.surface.put_surface(
|
||||||
Surface.(
|
Surface.(
|
||||||
|
|
|
@ -6,14 +6,14 @@ horizon_api := @use("lib:horizon_api");
|
||||||
.{set_color, render_label_to_surface, Label} := horizon_api.widgets.label
|
.{set_color, render_label_to_surface, Label} := horizon_api.widgets.label
|
||||||
|
|
||||||
stn := @use("stn");
|
stn := @use("stn");
|
||||||
.{Vec2} := stn.math
|
.{Vec2, clamp} := stn.math
|
||||||
|
|
||||||
psf := @embed("sysdata:assets/consolefonts/tamsyn/10x20r.psf")
|
psf := @embed("sysdata:assets/consolefonts/tamsyn/10x20r.psf")
|
||||||
img := @embed("sysdata:assets/wallpaper.qoi")
|
img := @embed("sysdata:assets/wallpaper.qoi")
|
||||||
|
|
||||||
Mouse := struct {
|
Mouse := struct {
|
||||||
x: uint,
|
x: int,
|
||||||
y: uint,
|
y: int,
|
||||||
// TODO: Make this configurable via wm config
|
// TODO: Make this configurable via wm config
|
||||||
cursor_width: u8,
|
cursor_width: u8,
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@ Mouse := struct {
|
||||||
center_x := max_x / 2
|
center_x := max_x / 2
|
||||||
center_y := max_y / 2
|
center_y := max_y / 2
|
||||||
|
|
||||||
return Self.(center_x, center_y, 3, max_x, max_y)
|
return Self.(@bitcast(center_x), @bitcast(center_y), 3, max_x, max_y)
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
center := fn(self: Self){
|
center := fn(self: Self){
|
||||||
|
@ -63,51 +63,26 @@ main := fn(): int {
|
||||||
loop {
|
loop {
|
||||||
mouse_event := intouch.recieve_mouse_event()
|
mouse_event := intouch.recieve_mouse_event()
|
||||||
if mouse_event != null {
|
if mouse_event != null {
|
||||||
change_x := @as(i16, mouse_event.x_change)
|
mouse.x = clamp(int, mouse.x + mouse_event.x_change, mouse.cursor_width, @bitcast(screen.width - mouse.cursor_width))
|
||||||
change_x = change_x << 8
|
mouse.y = clamp(int, mouse.y - mouse_event.y_change, mouse.cursor_width, @bitcast(screen.height - mouse.cursor_width))
|
||||||
change_x = change_x >> 8
|
|
||||||
|
|
||||||
mouse.x += change_x
|
|
||||||
if mouse.x <= 0 {
|
|
||||||
mouse.x = 0
|
|
||||||
}
|
|
||||||
if mouse.x >= screen.width - 20 {
|
|
||||||
mouse.x = @intcast(screen.width - 21)
|
|
||||||
}
|
|
||||||
|
|
||||||
change_y := @as(i16, mouse_event.y_change)
|
|
||||||
change_y = change_y << 8
|
|
||||||
change_y = change_y >> 8
|
|
||||||
|
|
||||||
mouse.y -= change_y
|
|
||||||
if mouse.y < 0 {
|
|
||||||
mouse.y = 1
|
|
||||||
}
|
|
||||||
if mouse.y >= screen.height - 20 {
|
|
||||||
mouse.y = @intcast(screen.height - 21)
|
|
||||||
}
|
|
||||||
|
|
||||||
if mouse_event.left {
|
if mouse_event.left {
|
||||||
text_label.set_label_text("LEFT CLICK")
|
text_label.set_label_text("LEFT CLICK")
|
||||||
}
|
} else if mouse_event.middle {
|
||||||
if mouse_event.middle {
|
|
||||||
text_label.set_label_text("MIDDLE CLICK")
|
text_label.set_label_text("MIDDLE CLICK")
|
||||||
}
|
} else if mouse_event.right {
|
||||||
if mouse_event.right {
|
|
||||||
text_label.set_label_text("RIGHT CLICK")
|
text_label.set_label_text("RIGHT CLICK")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
screen.clear(render.BLACK)
|
|
||||||
screen.put_surface(wallpaper, .(0, 0), false)
|
screen.put_surface(wallpaper, .(0, 0), false)
|
||||||
|
|
||||||
screen.put_rect(.(0, 0), .(screen.width - 1, screen.height - 1), sunset.server.DECO_COLOUR)
|
screen.put_rect(.(0, 0), .(screen.width - 1, screen.height - 1), sunset.server.DECO_COLOUR)
|
||||||
}
|
}
|
||||||
|
|
||||||
if sunset.server.incoming() {
|
_ = sunset.server.incoming()
|
||||||
sunset.server.collect_frames()
|
sunset.server.collect_frames()
|
||||||
sunset.server.render_clients(screen)
|
sunset.server.render_clients(screen)
|
||||||
}
|
|
||||||
|
|
||||||
{
|
{
|
||||||
/* Omnibar */
|
/* Omnibar */
|
||||||
|
@ -119,8 +94,9 @@ main := fn(): int {
|
||||||
|
|
||||||
// Mouse cursor
|
// Mouse cursor
|
||||||
{
|
{
|
||||||
screen.put_filled_circle(.(mouse.x, mouse.y), mouse.cursor_width, sunset.server.DECO_COLOUR_DARKER)
|
p := Vec2(uint).(@bitcast(mouse.x), @bitcast(mouse.y))
|
||||||
screen.put_circle(.(mouse.x, mouse.y), mouse.cursor_width, sunset.server.DECO_COLOUR)
|
screen.put_filled_circle(p, mouse.cursor_width, sunset.server.DECO_COLOUR_DARKER)
|
||||||
|
screen.put_circle(p, mouse.cursor_width, sunset.server.DECO_COLOUR)
|
||||||
}
|
}
|
||||||
|
|
||||||
screen.sync()
|
screen.sync()
|
||||||
|
|
|
@ -38,8 +38,8 @@ resolution = "1024x768x24"
|
||||||
# [boot.limine.ableos.modules.ps2_driver]
|
# [boot.limine.ableos.modules.ps2_driver]
|
||||||
# path = "boot:///ps2_driver.hbf"
|
# path = "boot:///ps2_driver.hbf"
|
||||||
|
|
||||||
# [boot.limine.ableos.modules.sunset_client_2]
|
# [boot.limine.ableos.modules.sunset_client]
|
||||||
# path = "boot:///sunset_client_2.hbf"
|
# path = "boot:///sunset_client.hbf"
|
||||||
|
|
||||||
# [boot.limine.ableos.modules.ablefetch]
|
# [boot.limine.ableos.modules.ablefetch]
|
||||||
# path = "boot:///ablefetch.hbf"
|
# path = "boot:///ablefetch.hbf"
|
||||||
|
|
Loading…
Reference in a new issue