just let fast_qr handle the mode and version
This commit is contained in:
parent
ef468dcc6d
commit
3d8b8040ab
3 changed files with 2 additions and 53 deletions
|
@ -1,3 +1 @@
|
||||||
pub mod qr;
|
|
||||||
|
|
||||||
pub use qr::Mode;
|
|
||||||
|
|
15
src/main.rs
15
src/main.rs
|
@ -5,13 +5,12 @@ use eframe::egui;
|
||||||
use egui_extras::RetainedImage;
|
use egui_extras::RetainedImage;
|
||||||
use fast_qr::convert::image::ImageBuilder;
|
use fast_qr::convert::image::ImageBuilder;
|
||||||
|
|
||||||
use godiva::qr::*;
|
|
||||||
|
|
||||||
#[derive(Parser, Debug)]
|
#[derive(Parser, Debug)]
|
||||||
#[clap(author, version, trailing_var_arg = true)]
|
#[clap(author, version, trailing_var_arg = true)]
|
||||||
struct Cli {
|
struct Cli {
|
||||||
#[clap(long, short, help = "File to expose")]
|
#[clap(long, short, help = "File to expose")]
|
||||||
pub file: Option<OsString>,
|
pub file: Option<OsString>,
|
||||||
|
#[clap(help = "all remaining arguments treated as a string; ignored if `-f` is given")]
|
||||||
text: Vec<String>,
|
text: Vec<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -42,30 +41,20 @@ fn main() -> Result<(), eframe::Error> {
|
||||||
eframe::run_native(
|
eframe::run_native(
|
||||||
"Show an image with eframe/egui",
|
"Show an image with eframe/egui",
|
||||||
options,
|
options,
|
||||||
Box::new(|_cc| {
|
Box::new(|_cc| Box::new(Flasher { content })),
|
||||||
Box::new(Flasher {
|
|
||||||
content,
|
|
||||||
mode: Mode::Ascii,
|
|
||||||
})
|
|
||||||
}),
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
struct Flasher {
|
struct Flasher {
|
||||||
pub content: Vec<u8>,
|
pub content: Vec<u8>,
|
||||||
pub mode: Mode,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl eframe::App for Flasher {
|
impl eframe::App for Flasher {
|
||||||
fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) {
|
fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) {
|
||||||
egui::CentralPanel::default().show(ctx, |ui| {
|
egui::CentralPanel::default().show(ctx, |ui| {
|
||||||
let heading_text = String::from_utf8(self.content.clone()).unwrap();
|
let heading_text = String::from_utf8(self.content.clone()).unwrap();
|
||||||
let len = heading_text.len();
|
|
||||||
ui.heading(heading_text);
|
ui.heading(heading_text);
|
||||||
let size = get_size(len, self.mode);
|
|
||||||
let version = get_version(size, fast_qr::ECL::H);
|
|
||||||
let qr = fast_qr::QRBuilder::new(self.content.clone())
|
let qr = fast_qr::QRBuilder::new(self.content.clone())
|
||||||
.version(version)
|
|
||||||
.build()
|
.build()
|
||||||
.unwrap();
|
.unwrap();
|
||||||
let bytes = ImageBuilder::default()
|
let bytes = ImageBuilder::default()
|
||||||
|
|
38
src/qr.rs
38
src/qr.rs
|
@ -1,38 +0,0 @@
|
||||||
use fast_qr::ECL;
|
|
||||||
|
|
||||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
|
|
||||||
pub enum Mode {
|
|
||||||
Ascii,
|
|
||||||
Binary,
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn get_size(len: usize, mode: Mode) -> usize {
|
|
||||||
if mode == Mode::Ascii {
|
|
||||||
// alphanumeric mode is only 5.5 bits per character, so 5.5 / 8 = 0.6875
|
|
||||||
(len as f64 * 0.6875).ceil() as usize
|
|
||||||
} else {
|
|
||||||
len
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn get_version(size: usize, ecl: ECL) -> fast_qr::Version {
|
|
||||||
use fast_qr::Version::*;
|
|
||||||
let ecl = match ecl {
|
|
||||||
ECL::L => 0.7,
|
|
||||||
ECL::M => 0.15,
|
|
||||||
ECL::Q => 0.25,
|
|
||||||
ECL::H => 0.30,
|
|
||||||
};
|
|
||||||
|
|
||||||
let size = (size as f64 / ecl) as usize;
|
|
||||||
|
|
||||||
match size {
|
|
||||||
0..=7 => V01,
|
|
||||||
8..=14 => V02,
|
|
||||||
15..=24 => V03,
|
|
||||||
25..=78 => V04,
|
|
||||||
|
|
||||||
//
|
|
||||||
_ => V40,
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in a new issue