#![no_std] #![no_main] use alloc::vec::Vec; use cstr_core::{cstr, CStr}; use kos::{ graphics::{display_message, Color, Dot, Size}, input::fetch_key, system::{get_lang, Lang}, threads::{exit, fetch_event, Event}, windows::{ define_button, define_window, end_window_draw, get_button_id, put_pixel, start_window_draw, WindowKind, WindowParams, CLOSE_BUTTON, }, }; const HEADER: &CStr = cstr!("Hey Kolibri"); const MSG: &CStr = cstr!("Hello GSoC 2024"); const BTN: u32 = 42; const COLORS: [(u8, u8, u8); 3] = [(255, 0, 0), (0, 255, 0), (0, 0, 255)]; #[macro_use] extern crate alloc; fn draw_window(c: usize) { start_window_draw(); define_window( Dot { x: 50, y: 50 }, Size { width: 500, height: 500, }, WindowParams { color: Color::rgb(0xff, 0xff, 0xff), kind: WindowKind::Themed, title: Some(HEADER), }, ); for i in 60..300 { for j in 60..300 { put_pixel(Dot { x: i, y: j }, Some(Color::rgb(255, 0, 0)), None); } } for i in 200..440 { for j in 200..440 { put_pixel(Dot { x: i, y: j }, None, Some(true)); } } end_window_draw(); return; } fn button_handler(c: &mut usize) { let btn_id = get_button_id(); if btn_id.is_some() { match btn_id.unwrap() { CLOSE_BUTTON => exit(), BTN => { *c += 1; draw_window(*c); } _ => {} } } } #[no_mangle] fn kol_main() { let mut c = 0; while let Some(ev) = fetch_event((Event::Redraw as u32) | (Event::KeyPress as u32) | (Event::BtnPress as u32)) { match ev { Event::Redraw => draw_window(c), Event::KeyPress => drop(fetch_key()), Event::BtnPress => button_handler(&mut c), _ => break, } } }