init
This commit is contained in:
commit
227bba597a
3 changed files with 128 additions and 0 deletions
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
/target
|
||||
Cargo.lock
|
12
Cargo.toml
Normal file
12
Cargo.toml
Normal file
|
@ -0,0 +1,12 @@
|
|||
[package]
|
||||
name = "guwu"
|
||||
version = "0.1.0"
|
||||
edition = "2018"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
gtk = "^0.14.0"
|
||||
relm = "^0.22.0"
|
||||
relm-derive = "^0.22.0"
|
||||
uwuify = "0.2.2"
|
114
src/main.rs
Normal file
114
src/main.rs
Normal file
|
@ -0,0 +1,114 @@
|
|||
use gtk::prelude::FrameExt;
|
||||
use gtk::prelude::OrientableExt;
|
||||
use gtk::prelude::TextBufferExt;
|
||||
use gtk::prelude::TextViewExt;
|
||||
use gtk::prelude::WidgetExt;
|
||||
use gtk::{Inhibit, Orientation};
|
||||
use relm::Widget;
|
||||
use relm::{connect, Relm};
|
||||
use relm_derive::{widget, Msg};
|
||||
|
||||
fn main() {
|
||||
let res = Win::run(());
|
||||
let _ = dbg!(res);
|
||||
}
|
||||
|
||||
pub struct Model {
|
||||
relm: Relm<Win>,
|
||||
uwubuf1: Vec<u8>,
|
||||
uwubuf2: Vec<u8>,
|
||||
}
|
||||
|
||||
impl Model {
|
||||
pub fn prep_uwubufs(&mut self, len: usize) {
|
||||
if len > self.uwubuf1.len() {
|
||||
self.uwubuf1.resize(len, 0);
|
||||
}
|
||||
|
||||
if len > self.uwubuf2.len() {
|
||||
self.uwubuf2.resize(len, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Msg)]
|
||||
pub enum Msg {
|
||||
Quit,
|
||||
Edited,
|
||||
}
|
||||
|
||||
#[widget]
|
||||
impl Widget for Win {
|
||||
fn model(relm: &Relm<Self>, _: ()) -> Model {
|
||||
Model {
|
||||
relm: relm.clone(),
|
||||
uwubuf1: vec![],
|
||||
uwubuf2: vec![],
|
||||
}
|
||||
}
|
||||
|
||||
fn update(&mut self, event: Msg) {
|
||||
match event {
|
||||
Msg::Quit => gtk::main_quit(),
|
||||
Msg::Edited => {
|
||||
if let (Some(inbuf), Some(outbuf)) =
|
||||
(self.widgets.input.buffer(), self.widgets.output.buffer())
|
||||
{
|
||||
if let Some(text) = inbuf.text(&inbuf.start_iter(), &inbuf.end_iter(), true) {
|
||||
let len = uwuifier::round_up16(text.len()) * 16;
|
||||
self.model.prep_uwubufs(len);
|
||||
let uwu = uwuifier::uwuify_sse(
|
||||
text.as_bytes(),
|
||||
&mut self.model.uwubuf1[..len],
|
||||
&mut self.model.uwubuf2[..len],
|
||||
);
|
||||
|
||||
if let Ok(uwu) = std::str::from_utf8(uwu) {
|
||||
outbuf.set_text(uwu);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn init_view(&mut self) {
|
||||
if let Some(buf) = self.widgets.input.buffer() {
|
||||
connect!(buf, connect_changed(_), self.model.relm, Msg::Edited);
|
||||
}
|
||||
}
|
||||
|
||||
view! {
|
||||
gtk::Window {
|
||||
gtk::Box {
|
||||
orientation: Orientation::Horizontal,
|
||||
|
||||
gtk::Frame {
|
||||
label: Some("Input"),
|
||||
|
||||
gtk::ScrolledWindow {
|
||||
hexpand: true,
|
||||
vexpand: true,
|
||||
#[name = "input"]
|
||||
gtk::TextView {},
|
||||
},
|
||||
},
|
||||
|
||||
gtk::Frame {
|
||||
label: Some("Output"),
|
||||
|
||||
gtk::ScrolledWindow {
|
||||
hexpand: true,
|
||||
vexpand: true,
|
||||
#[name = "output"]
|
||||
gtk::TextView {
|
||||
editable: false,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
delete_event(_, _) => (Msg::Quit, Inhibit(false)),
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue