Pseudo pseudorandom color picker
This commit is contained in:
parent
8df3893baa
commit
218ee49a8b
7 changed files with 75 additions and 15 deletions
10
src/lib.rs
10
src/lib.rs
|
@ -1,5 +1,5 @@
|
|||
use config::Config;
|
||||
use std::path::PathBuf;
|
||||
use std::{hash::{DefaultHasher, Hash, Hasher}, path::PathBuf};
|
||||
|
||||
pub mod config;
|
||||
pub mod log;
|
||||
|
@ -13,3 +13,11 @@ pub fn load_config() -> Config {
|
|||
}
|
||||
Config::new(PathBuf::from("./config.toml"))
|
||||
}
|
||||
|
||||
/// Get random-like color id in range 0..16 by computing string hash
|
||||
pub fn color_id_from_name(name: String) -> i32 {
|
||||
let mut s = DefaultHasher::new();
|
||||
name.hash(&mut s);
|
||||
let hash = s.finish();
|
||||
(hash.count_ones() / 4) as i32
|
||||
}
|
||||
|
|
17
src/main.rs
17
src/main.rs
|
@ -3,7 +3,7 @@
|
|||
|
||||
use std::{error::Error, rc::Rc, sync::{Arc, Mutex}};
|
||||
|
||||
use aliveline::{config::Config, load_config, log::{Event, Log}};
|
||||
use aliveline::{color_id_from_name, config::Config, load_config, log::{Event, Log}};
|
||||
use chrono::{Datelike, Timelike};
|
||||
use slint::{Model, ModelRc, SharedString, ToSharedString, VecModel, Weak};
|
||||
use toml::value::{Date as TomlDate, Time};
|
||||
|
@ -22,7 +22,8 @@ impl From<Event> for TimelineEvent {
|
|||
start,
|
||||
duration: end - start,
|
||||
label: event.name.to_shared_string(),
|
||||
finished: event.finished
|
||||
finished: event.finished,
|
||||
color_id: color_id_from_name(event.name)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -143,8 +144,9 @@ fn main() -> Result<(), Box<dyn Error>> {
|
|||
let event = TimelineEvent {
|
||||
duration: 0,
|
||||
finished: false,
|
||||
label: event_name,
|
||||
start: offset
|
||||
label: event_name.clone(),
|
||||
start: offset,
|
||||
color_id: color_id_from_name(event_name.to_string())
|
||||
};
|
||||
|
||||
{
|
||||
|
@ -177,8 +179,9 @@ fn main() -> Result<(), Box<dyn Error>> {
|
|||
let new_event = TimelineEvent {
|
||||
duration: offset - event.start,
|
||||
finished: true,
|
||||
label: event.label,
|
||||
start: event.start
|
||||
label: event.label.clone(),
|
||||
start: event.start,
|
||||
color_id: color_id_from_name(event.label.to_string())
|
||||
};
|
||||
|
||||
{
|
||||
|
@ -215,7 +218,7 @@ fn main() -> Result<(), Box<dyn Error>> {
|
|||
let maybe_unfinished_event = log_guard.events.iter().find(|event| !event.finished);
|
||||
match maybe_unfinished_event {
|
||||
Some(unfinished_event) => Some(Event::new(unfinished_event.name.clone(), 0, 0, false)),
|
||||
None => None
|
||||
_ => None
|
||||
}
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue