ImagePulseTint -> PulseAlpha
make it more generic to pulse alpha values, not necessarily image tints Signed-off-by: kernelkind <kernelkind@gmail.com>
This commit is contained in:
@@ -137,33 +137,24 @@ impl AnimationHelper {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct ImagePulseTint<'a> {
|
pub struct PulseAlpha<'a> {
|
||||||
ctx: &'a egui::Context,
|
ctx: &'a egui::Context,
|
||||||
id: egui::Id,
|
id: egui::Id,
|
||||||
image: egui::Image<'a>,
|
|
||||||
color_unmultiplied: &'a [u8; 3],
|
|
||||||
alpha_min: u8,
|
alpha_min: u8,
|
||||||
alpha_max: u8,
|
alpha_max: u8,
|
||||||
animation_speed: f32,
|
animation_speed: f32,
|
||||||
|
start_max_alpha: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> ImagePulseTint<'a> {
|
impl<'a> PulseAlpha<'a> {
|
||||||
pub fn new(
|
pub fn new(ctx: &'a egui::Context, id: egui::Id, alpha_min: u8, alpha_max: u8) -> Self {
|
||||||
ctx: &'a egui::Context,
|
|
||||||
id: egui::Id,
|
|
||||||
image: egui::Image<'a>,
|
|
||||||
color_unmultiplied: &'a [u8; 3],
|
|
||||||
alpha_min: u8,
|
|
||||||
alpha_max: u8,
|
|
||||||
) -> Self {
|
|
||||||
Self {
|
Self {
|
||||||
ctx,
|
ctx,
|
||||||
id,
|
id,
|
||||||
image,
|
|
||||||
color_unmultiplied,
|
|
||||||
alpha_min,
|
alpha_min,
|
||||||
alpha_max,
|
alpha_max,
|
||||||
animation_speed: ANIM_SPEED,
|
animation_speed: ANIM_SPEED,
|
||||||
|
start_max_alpha: false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -172,12 +163,19 @@ impl<'a> ImagePulseTint<'a> {
|
|||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn animate(self) -> egui::Image<'a> {
|
pub fn start_max_alpha(mut self) -> Self {
|
||||||
|
self.start_max_alpha = true;
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
|
// returns the current alpha value for the frame
|
||||||
|
pub fn animate(self) -> u8 {
|
||||||
let pulse_direction = if let Some(pulse_dir) = self.ctx.data(|d| d.get_temp(self.id)) {
|
let pulse_direction = if let Some(pulse_dir) = self.ctx.data(|d| d.get_temp(self.id)) {
|
||||||
pulse_dir
|
pulse_dir
|
||||||
} else {
|
} else {
|
||||||
self.ctx.data_mut(|d| d.insert_temp(self.id, false));
|
self.ctx
|
||||||
false
|
.data_mut(|d| d.insert_temp(self.id, self.start_max_alpha));
|
||||||
|
self.start_max_alpha
|
||||||
};
|
};
|
||||||
|
|
||||||
let alpha_min_f32 = self.alpha_min as f32;
|
let alpha_min_f32 = self.alpha_min as f32;
|
||||||
@@ -196,14 +194,6 @@ impl<'a> ImagePulseTint<'a> {
|
|||||||
.data_mut(|d| d.insert_temp(self.id, !pulse_direction));
|
.data_mut(|d| d.insert_temp(self.id, !pulse_direction));
|
||||||
}
|
}
|
||||||
|
|
||||||
let alpha =
|
(cur_val + alpha_min_f32).clamp(self.alpha_min as f32, self.alpha_max as f32) as u8
|
||||||
(cur_val + alpha_min_f32).clamp(self.alpha_min as f32, self.alpha_max as f32) as u8;
|
|
||||||
|
|
||||||
self.image.tint(egui::Color32::from_rgba_unmultiplied(
|
|
||||||
self.color_unmultiplied[0],
|
|
||||||
self.color_unmultiplied[1],
|
|
||||||
self.color_unmultiplied[2],
|
|
||||||
alpha,
|
|
||||||
))
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ pub mod profile;
|
|||||||
mod username;
|
mod username;
|
||||||
pub mod widgets;
|
pub mod widgets;
|
||||||
|
|
||||||
pub use anim::{AnimationHelper, ImagePulseTint};
|
pub use anim::{AnimationHelper, PulseAlpha};
|
||||||
pub use mention::Mention;
|
pub use mention::Mention;
|
||||||
pub use note::{NoteContents, NoteOptions, NoteView};
|
pub use note::{NoteContents, NoteOptions, NoteView};
|
||||||
pub use profile::{ProfilePic, ProfilePreview};
|
pub use profile::{ProfilePic, ProfilePreview};
|
||||||
|
|||||||
@@ -5,8 +5,8 @@ pub mod reply_description;
|
|||||||
|
|
||||||
use crate::jobs::JobsCache;
|
use crate::jobs::JobsCache;
|
||||||
use crate::{
|
use crate::{
|
||||||
profile::name::one_line_display_name_widget, widgets::x_button, ImagePulseTint, ProfilePic,
|
profile::name::one_line_display_name_widget, widgets::x_button, ProfilePic, ProfilePreview,
|
||||||
ProfilePreview, Username,
|
PulseAlpha, Username,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub use contents::{render_note_contents, render_note_preview, NoteContents};
|
pub use contents::{render_note_contents, render_note_preview, NoteContents};
|
||||||
@@ -807,9 +807,12 @@ fn zap_button(state: AnyZapState, noteid: &[u8; 32]) -> impl egui::Widget + use<
|
|||||||
}
|
}
|
||||||
AnyZapState::Pending => {
|
AnyZapState::Pending => {
|
||||||
let alpha_min = if ui.visuals().dark_mode { 50 } else { 180 };
|
let alpha_min = if ui.visuals().dark_mode { 50 } else { 180 };
|
||||||
img = ImagePulseTint::new(&ctx, id, img, &[0xFF, 0xB7, 0x57], alpha_min, 255)
|
let cur_alpha = PulseAlpha::new(&ctx, id, alpha_min, 255)
|
||||||
.with_speed(0.35)
|
.with_speed(0.35)
|
||||||
.animate();
|
.animate();
|
||||||
|
|
||||||
|
let cur_color = egui::Color32::from_rgba_unmultiplied(0xFF, 0xB7, 0x57, cur_alpha);
|
||||||
|
img = img.tint(cur_color);
|
||||||
}
|
}
|
||||||
AnyZapState::LocalOnly => {
|
AnyZapState::LocalOnly => {
|
||||||
img = img.tint(egui::Color32::from_rgb(0xFF, 0xB7, 0x57));
|
img = img.tint(egui::Color32::from_rgb(0xFF, 0xB7, 0x57));
|
||||||
|
|||||||
Reference in New Issue
Block a user