| Crates.io | redpowder |
| lib.rs | redpowder |
| version | 0.3.0 |
| created_at | 2025-12-25 06:52:09.139813+00 |
| updated_at | 2026-01-03 05:51:31.440027+00 |
| description | SDK / Devkit para Redstone OS |
| homepage | |
| repository | https://github.com/redstone-os/redpowder |
| max_upload_size | |
| id | 2004271 |
| size | 150,511 |
SDK para desenvolvimento userland no RedstoneOS
gfx_typesrdsmath[dependencies]
redpowder = { path = "../sdk/redpowder" }
| Módulo | Função |
|---|---|
syscall |
Invocação de syscalls (inline asm) |
console |
print!, println!, reboot, poweroff |
fs |
Arquivos e diretórios (File, Dir, stat) |
process |
Processos (exit, spawn, yield) |
mem |
Memória (alloc, free, map) |
ipc |
IPC (Port, send, recv) |
time |
Tempo (sleep, clock) |
io |
Handle, Rights |
event |
Eventos e polling |
sys |
sysinfo, debug |
graphics |
Framebuffer, canvas, desenho |
input |
Mouse, teclado, touch |
window |
Janelas (protocolo Firefly) |
gfx |
Re-export completo de gfx_types |
math |
Re-export de rdsmath |
#![no_std]
#![no_main]
use redpowder::prelude::*;
#[no_mangle]
pub extern "C" fn _start() -> ! {
println!("Hello from RedstoneOS!");
// Geometria
let rect = Rect::new(10, 10, 100, 50);
let point = Point::new(50, 30);
println!("Rect contains point: {}", rect.contains_point(point));
// Cores
let bg = Color::from_hex(0x1e1e2e);
let fg = Color::WHITE;
// Math
let angle = PI / 4.0;
let s = sinf(angle);
let c = cosf(angle);
exit(0);
}
use redpowder::graphics::{Framebuffer, Color, Rect};
let mut fb = Framebuffer::new()?;
fb.clear(Color::BLACK);
fb.fill(Rect::new(10, 10, 100, 50), Color::RED);
use redpowder::graphics::{Canvas, Color, Rect};
let mut buffer = vec![0u32; 800 * 600];
let mut canvas = Canvas::new(&mut buffer, 800, 600);
canvas.clear(Color::from_hex(0x1e1e2e));
canvas.fill_rect(Rect::new(10, 10, 100, 50), Color::RED);
canvas.stroke_rect(Rect::new(10, 10, 100, 50), Color::WHITE, 1);
canvas.line(0, 0, 100, 100, Color::BLUE);
canvas.stroke_circle(50, 50, 30, Color::GREEN);
use redpowder::graphics::{draw_line, draw_circle, draw_rect};
use redpowder::prelude::*;
// Iteradores sobre os pontos
for point in draw_line(Line::new(Point::new(0, 0), Point::new(100, 100))) {
canvas.put_pixel(point.x, point.y, Color::WHITE);
}
for point in draw_circle(Circle::from_coords(50.0, 50.0, 30.0)) {
canvas.put_pixel(point.x, point.y, Color::GREEN);
}
use redpowder::window::{Window, WindowFlags};
use redpowder::prelude::*;
// Criar janela
let mut window = Window::create(100, 100, 400, 300, "Minha App")?;
// Ou com flags
let mut window = Window::create_with_flags(
100, 100, 400, 300,
WindowFlags::HAS_SHADOW | WindowFlags::BORDERLESS,
"App Premium"
)?;
// Desenhar no buffer
window.clear(Color::from_hex(0x1e1e2e));
window.fill_rect(Rect::new(10, 10, 100, 50), Color::RED);
// Apresentar
window.present()?;
// Loop de eventos
loop {
for event in window.poll_events() {
match event {
Event::Input(input) => { /* mouse, teclado */ }
Event::Resize(resize) => { /* redimensionado */ }
_ => {}
}
}
// Atualizar...
window.present()?;
}
use redpowder::input::{poll_mouse, MouseButton};
let mouse = poll_mouse()?;
println!("Mouse: ({}, {})", mouse.x, mouse.y);
if mouse.left_button() {
println!("Clique!");
}
if mouse.is_pressed(MouseButton::Right) {
println!("Botão direito!");
}
use redpowder::input::{poll_keyboard, read_key, KeyEvent, KeyCode};
// Ler um único evento
if let Some(event) = read_key()? {
if event.pressed {
match event.keycode() {
KeyCode::Enter => println!("Enter!"),
KeyCode::Esc => break,
key => {
if let Some(c) = key.to_char(false) {
print!("{}", c);
}
}
}
}
}
// Ler múltiplos eventos
let mut events = [KeyEvent::default(); 16];
let count = poll_keyboard(&mut events)?;
for event in &events[..count] {
// processar...
}
use redpowder::prelude::*;
// ou
use redpowder::math::*;
// Constantes
let pi = PI;
let tau = TAU;
// Trigonometria
let s = sinf(angle);
let c = cosf(angle);
let t = tanf(angle);
let a = atan2f(y, x);
// Raiz quadrada
let root = sqrtf(2.0);
// Interpolação
let value = lerpf(0.0, 100.0, 0.5); // = 50.0
let smooth = smoothstepf(0.0, 1.0, 0.5);
// Clamp
let clamped = clampf(150.0, 0.0, 100.0); // = 100.0
let sat = saturatef(1.5); // = 1.0
// Arredondamento
let floor = floorf(3.7); // = 3.0
let ceil = ceilf(3.2); // = 4.0
let round = roundf(3.5); // = 4.0
let abs = absf(-5.0); // = 5.0
graphics, window e inputgfx_types v0.2.0rdsmath v0.1.0Canvas, Framebuffer, primitivas de desenhoMIT License - RedstoneOS Team