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