-
sam edelsten authored0ab6361e
lib.rs 51.46 KiB
#![allow(clippy::type_complexity)]
use std::{collections::VecDeque, path::PathBuf, time::Duration};
#[path = "utils.rs"]
pub mod utils;
pub use utils::*;
use bevy::{
asset::HandleId,
input::mouse::{MouseScrollUnit, MouseWheel},
prelude::*,
render::{render_resource::Extent3d, texture::DEFAULT_IMAGE_HANDLE},
ui::FocusPolicy,
window::{PrimaryWindow, WindowScaleFactorChanged},
};
use cosmic_text::{
Action, Attrs, AttrsList, AttrsOwned, Buffer, BufferLine, Cursor, Edit, Editor, FontSystem,
Metrics, Shaping, SwashCache,
};
use image::{imageops::FilterType, GenericImageView};
#[derive(Clone)]
pub enum CosmicText {
OneStyle(String),
MultiStyle(Vec<Vec<(String, AttrsOwned)>>),
}
/// Enum representing the position of the cosmic text.
#[derive(Clone, Component, Default)]
pub enum CosmicTextPosition {
#[default]
Center,
TopLeft,
}
// TODO docs
#[derive(Clone, Component)]
pub struct CosmicMetrics {
pub font_size: f32,
pub line_height: f32,
pub scale_factor: f32,
}
impl Default for CosmicMetrics {
fn default() -> Self {
Self {
font_size: 12.,
line_height: 12.,
scale_factor: 1.,
}
}
}
#[derive(Resource)]
pub struct CosmicFontSystem(pub FontSystem);
#[derive(Component)]
pub struct ReadOnly; // tag component
#[derive(Component)]
pub struct CosmicEditor(pub Editor);
impl Default for CosmicEditor {
fn default() -> Self {
Self(Editor::new(Buffer::new_empty(Metrics::new(12., 14.))))
}
}
impl CosmicEditor {
pub fn set_text(