Skip to content
Snippets Groups Projects
Commit 8406ddf0 authored by Finn Bear's avatar Finn Bear
Browse files

WIP.

parent 69c27141
No related branches found
No related tags found
No related merge requests found
......@@ -18,6 +18,18 @@ version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a13739d7177fbd22bb0ed28badfff9f372f8bef46c863db4e1c6248f6b223b6e"
[[package]]
name = "adler"
version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
[[package]]
name = "adler32"
version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234"
[[package]]
name = "ahash"
version = "0.4.7"
......@@ -294,6 +306,12 @@ dependencies = [
"objc",
]
[[package]]
name = "color_quant"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b"
[[package]]
name = "combine"
version = "4.6.4"
......@@ -409,6 +427,15 @@ dependencies = [
"objc",
]
[[package]]
name = "crc32fast"
version = "1.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
dependencies = [
"cfg-if 1.0.0",
]
[[package]]
name = "cty"
version = "0.2.2"
......@@ -473,6 +500,15 @@ version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7046468a81e6a002061c01e6a7c83139daf91b11c30e66795b13217c2d885c8b"
[[package]]
name = "deflate"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c86f7e25f518f4b81808a2cf1c50996a61f5c2eb394b2393bd87f2a4780a432f"
dependencies = [
"adler32",
]
[[package]]
name = "derivative"
version = "2.2.0"
......@@ -781,6 +817,8 @@ name = "generative_art_cartoon"
version = "0.1.0"
dependencies = [
"eframe",
"image",
"rand",
]
[[package]]
......@@ -921,6 +959,21 @@ dependencies = [
"unicode-normalization",
]
[[package]]
name = "image"
version = "0.24.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "28edd9d7bc256be2502e325ac0628bde30b7001b9b52e0abe31a1a9dc2701212"
dependencies = [
"bytemuck",
"byteorder",
"color_quant",
"num-iter",
"num-rational",
"num-traits",
"png",
]
[[package]]
name = "instant"
version = "0.1.12"
......@@ -1060,6 +1113,15 @@ version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
[[package]]
name = "miniz_oxide"
version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d2b29bd4bc3f33391105ebee3589c19197c4271e3e5a9ec9bfe8127eeff8f082"
dependencies = [
"adler",
]
[[package]]
name = "mio"
version = "0.8.2"
......@@ -1224,6 +1286,47 @@ dependencies = [
"winapi",
]
[[package]]
name = "num-integer"
version = "0.1.44"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db"
dependencies = [
"autocfg",
"num-traits",
]
[[package]]
name = "num-iter"
version = "0.1.42"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b2021c8337a54d21aca0d59a92577a029af9431cb59b909b03252b9c164fad59"
dependencies = [
"autocfg",
"num-integer",
"num-traits",
]
[[package]]
name = "num-rational"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d41702bd167c2df5520b384281bc111a4b5efcf7fbc4c9c222c815b07e0a6a6a"
dependencies = [
"autocfg",
"num-integer",
"num-traits",
]
[[package]]
name = "num-traits"
version = "0.2.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290"
dependencies = [
"autocfg",
]
[[package]]
name = "num_enum"
version = "0.5.7"
......@@ -1373,6 +1476,18 @@ version = "0.3.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae"
[[package]]
name = "png"
version = "0.17.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dc38c0ad57efb786dd57b9864e5b18bae478c00c824dc55a38bbc9da95dde3ba"
dependencies = [
"bitflags",
"crc32fast",
"deflate",
"miniz_oxide",
]
[[package]]
name = "polling"
version = "2.2.0"
......
......@@ -4,4 +4,6 @@ version = "0.1.0"
edition = "2021"
[dependencies]
eframe = "0.17"
\ No newline at end of file
eframe = "0.17"
image = {version = "0.24", default-features = false, features=["png"]}
rand = {version = "0.8"}
\ No newline at end of file
#[macro_export]
macro_rules! img {
($name: literal) => {{
crate::image::load_image_from_memory(include_bytes!(concat!(
env!("CARGO_MANIFEST_DIR"),
"/src/image/",
$name
)))
.expect($name)
}};
}
#[macro_export]
macro_rules! ctx_img {
($ctx: expr, $name: literal) => {{
$ctx.load_texture($name, img!($name))
}};
}
pub fn load_image_from_memory(
image_data: &[u8],
) -> Result<eframe::egui::ColorImage, image::ImageError> {
let image = image::load_from_memory(image_data)?;
let size = [image.width() as _, image.height() as _];
let image_buffer = image.to_rgba8();
let pixels = image_buffer.as_flat_samples();
Ok(eframe::egui::ColorImage::from_rgba_unmultiplied(
size,
pixels.as_slice(),
))
}
src/image/atom0.png

123 KiB

src/image/atom1.png

170 KiB

src/image/atom2.png

174 KiB

src/image/raymarching0.png

13.1 KiB

src/image/raymarching1.png

985 KiB

pub mod image;
pub mod slide;
use crate::slide::title::Title;
use crate::slide::Slide;
use eframe::egui::style::Widgets;
use eframe::egui::{
Align, Direction, FontFamily, Layout, Pos2, Rect, Style, TextStyle, Vec2, Visuals,
};
use eframe::epi::{Frame, Storage};
use eframe::{egui, epi};
use eframe::egui::{Align, Direction, Layout};
use std::collections::VecDeque;
fn main() {
let app = Cartoon::default();
let size = egui::Vec2::new(1280f32, 720f32);
let native_options = eframe::NativeOptions{
let native_options = eframe::NativeOptions {
always_on_top: false,
maximized: false,
decorated: true,
......@@ -24,12 +34,14 @@ fn main() {
}
pub struct Cartoon {
slides: VecDeque<Box<dyn Slide>>,
}
impl Default for Cartoon {
fn default() -> Self {
Self {}
Self {
slides: vec![Box::new(Title::default()) as Box<dyn Slide>].into(),
}
}
}
......@@ -38,6 +50,21 @@ impl epi::App for Cartoon {
"Generative Art Cartoon"
}
fn setup(&mut self, ctx: &egui::Context, _frame: &Frame, _storage: Option<&dyn Storage>) {
let mut style = Style::default();
style.animation_time = 0.5;
style.visuals = Visuals::light();
{
let header_style = style.text_styles.get_mut(&TextStyle::Heading).unwrap();
header_style.size = 48.0;
}
{
let body_style = style.text_styles.get_mut(&TextStyle::Body).unwrap();
body_style.size = 30.0;
}
ctx.set_style(style);
}
/// Put your widgets into a `SidePanel`, `TopPanel`, `CentralPanel`, `Window` or `Area`.
fn update(&mut self, ctx: &egui::Context, frame: &epi::Frame) {
// For inspiration and more examples, go to https://emilk.github.io/egui
......@@ -54,13 +81,6 @@ impl epi::App for Cartoon {
});
*/
egui::CentralPanel::default().show(ctx, |ui| {
ui.centered_and_justified(|ui| {
egui::CentralPanel::default().show_inside(ui, |ui| {
ui.heading("Generative Art");
ui.label("By TODO aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
});
});
});
self.slides[0].update(ctx, frame);
}
}
\ No newline at end of file
}
use eframe::{egui, epi};
pub mod title;
pub trait Slide {
fn update(&mut self, ctx: &egui::Context, frame: &epi::Frame);
}
use crate::egui::{Align2, Context};
use crate::epi::Frame;
use crate::{ctx_img, img, Slide};
use eframe::egui;
use eframe::egui::{Align, Layout, ScrollArea, Vec2, Window};
use rand::Rng;
#[derive(Default)]
pub struct Title {
examples: Vec<egui::TextureHandle>,
}
impl Slide for Title {
fn update(&mut self, ctx: &Context, _frame: &Frame) {
if self.examples.is_empty() {
self.examples = vec![
ctx_img!(ctx, "raymarching0.png"),
ctx_img!(ctx, "raymarching1.png"),
ctx_img!(ctx, "atom0.png"),
ctx_img!(ctx, "atom1.png"),
ctx_img!(ctx, "atom2.png"),
];
}
egui::CentralPanel::default().show(ctx, |ui| {
for example in &self.examples {
Window::new(example.name())
.title_bar(false)
.resizable(false)
.show(ctx, |ui| {
ui.image(example, Vec2::splat(128.0));
});
}
Window::new("title")
.title_bar(false)
.resizable(false)
.anchor(Align2::CENTER_CENTER, Vec2::ZERO)
.show(ctx, |ui| {
ui.vertical_centered(|ui| {
ui.heading("Generative Art");
ui.label("By: TODO");
});
});
});
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment