mirror of
https://github.com/mikedilger/gossip.git
synced 2024-09-29 16:31:18 +00:00
Add smooth scrolling to all the vertical scroll areas
This commit is contained in:
parent
9defdc4795
commit
2711959e9b
@ -119,7 +119,10 @@ fn render_a_feed(
|
||||
) {
|
||||
ScrollArea::vertical()
|
||||
.id_source(scroll_area_id)
|
||||
.override_scroll_delta(Vec2 { x: 0.0, y: app.current_scroll_offset })
|
||||
.override_scroll_delta(Vec2 {
|
||||
x: 0.0,
|
||||
y: app.current_scroll_offset,
|
||||
})
|
||||
.show(ui, |ui| {
|
||||
let bgcolor = if ctx.style().visuals.dark_mode {
|
||||
Color32::BLACK
|
||||
|
@ -4,7 +4,7 @@ use crate::globals::GLOBALS;
|
||||
use crate::tags::{keys_from_text, textarea_highlighter};
|
||||
use crate::ui::{GossipUi, Page};
|
||||
use eframe::egui;
|
||||
use egui::{Align, Color32, Context, Layout, RichText, ScrollArea, TextEdit, Ui};
|
||||
use egui::{Align, Color32, Context, Layout, RichText, ScrollArea, TextEdit, Ui, Vec2};
|
||||
use nostr_types::Tag;
|
||||
|
||||
pub(super) fn posting_area(
|
||||
@ -45,20 +45,26 @@ pub(super) fn posting_area(
|
||||
fn real_posting_area(app: &mut GossipUi, ctx: &Context, frame: &mut eframe::Frame, ui: &mut Ui) {
|
||||
// Maybe render post we are replying to
|
||||
if let Some(id) = app.replying_to {
|
||||
ScrollArea::vertical().max_height(200.0).show(ui, |ui| {
|
||||
super::render_post_actual(
|
||||
app,
|
||||
ctx,
|
||||
frame,
|
||||
ui,
|
||||
FeedPostParams {
|
||||
id,
|
||||
indent: 0,
|
||||
as_reply_to: true,
|
||||
threaded: false,
|
||||
},
|
||||
);
|
||||
});
|
||||
ScrollArea::vertical()
|
||||
.max_height(200.0)
|
||||
.override_scroll_delta(Vec2 {
|
||||
x: 0.0,
|
||||
y: app.current_scroll_offset,
|
||||
})
|
||||
.show(ui, |ui| {
|
||||
super::render_post_actual(
|
||||
app,
|
||||
ctx,
|
||||
frame,
|
||||
ui,
|
||||
FeedPostParams {
|
||||
id,
|
||||
indent: 0,
|
||||
as_reply_to: true,
|
||||
threaded: false,
|
||||
},
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
// Text area
|
||||
|
@ -1,7 +1,7 @@
|
||||
use super::{GossipUi, Page};
|
||||
use crate::feed::FeedKind;
|
||||
use eframe::egui;
|
||||
use egui::{Context, ScrollArea, SelectableLabel, Ui};
|
||||
use egui::{Context, ScrollArea, SelectableLabel, Ui, Vec2};
|
||||
|
||||
mod about;
|
||||
mod stats;
|
||||
@ -41,7 +41,9 @@ pub(super) fn update(app: &mut GossipUi, ctx: &Context, _frame: &mut eframe::Fra
|
||||
ui.add_space(12.0);
|
||||
ui.separator();
|
||||
|
||||
ScrollArea::vertical().show(ui, |ui| {
|
||||
ScrollArea::vertical()
|
||||
.override_scroll_delta(Vec2 { x: 0.0, y: app.current_scroll_offset })
|
||||
.show(ui, |ui| {
|
||||
|
||||
ui.add_space(10.0);
|
||||
|
||||
|
@ -379,8 +379,7 @@ impl eframe::App for GossipUi {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if requested_scroll < 0.0 {
|
||||
} else if requested_scroll < 0.0 {
|
||||
for pos in 0..9 {
|
||||
if requested_scroll < -SCROLL_PER_FRAME {
|
||||
let x = (requested_scroll + SCROLL_PER_FRAME).max(-SCROLL_PER_FRAME);
|
||||
|
@ -98,40 +98,48 @@ pub(super) fn update(app: &mut GossipUi, ctx: &Context, _frame: &mut eframe::Fra
|
||||
ui.heading(format!("People Followed ({})", people.len()));
|
||||
ui.add_space(18.0);
|
||||
|
||||
ScrollArea::vertical().show(ui, |ui| {
|
||||
for person in people.iter() {
|
||||
if person.followed != 1 {
|
||||
continue;
|
||||
}
|
||||
ScrollArea::vertical()
|
||||
.override_scroll_delta(Vec2 {
|
||||
x: 0.0,
|
||||
y: app.current_scroll_offset,
|
||||
})
|
||||
.show(ui, |ui| {
|
||||
for person in people.iter() {
|
||||
if person.followed != 1 {
|
||||
continue;
|
||||
}
|
||||
|
||||
ui.horizontal(|ui| {
|
||||
// Avatar first
|
||||
let avatar = if let Some(avatar) = app.try_get_avatar(ctx, &person.pubkey) {
|
||||
avatar
|
||||
} else {
|
||||
app.placeholder_avatar.clone()
|
||||
};
|
||||
let size = AVATAR_SIZE_F32
|
||||
* GLOBALS.pixels_per_point_times_100.load(Ordering::Relaxed) as f32
|
||||
/ 100.0;
|
||||
if ui
|
||||
.add(Image::new(&avatar, Vec2 { x: size, y: size }).sense(Sense::click()))
|
||||
.clicked()
|
||||
{
|
||||
app.set_page(Page::Person(person.pubkey.clone()));
|
||||
};
|
||||
ui.horizontal(|ui| {
|
||||
// Avatar first
|
||||
let avatar = if let Some(avatar) = app.try_get_avatar(ctx, &person.pubkey) {
|
||||
avatar
|
||||
} else {
|
||||
app.placeholder_avatar.clone()
|
||||
};
|
||||
let size = AVATAR_SIZE_F32
|
||||
* GLOBALS.pixels_per_point_times_100.load(Ordering::Relaxed) as f32
|
||||
/ 100.0;
|
||||
if ui
|
||||
.add(
|
||||
Image::new(&avatar, Vec2 { x: size, y: size })
|
||||
.sense(Sense::click()),
|
||||
)
|
||||
.clicked()
|
||||
{
|
||||
app.set_page(Page::Person(person.pubkey.clone()));
|
||||
};
|
||||
|
||||
ui.vertical(|ui| {
|
||||
ui.label(RichText::new(GossipUi::pubkey_short(&person.pubkey)).weak());
|
||||
GossipUi::render_person_name_line(app, ui, person);
|
||||
ui.vertical(|ui| {
|
||||
ui.label(RichText::new(GossipUi::pubkey_short(&person.pubkey)).weak());
|
||||
GossipUi::render_person_name_line(app, ui, person);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
ui.add_space(4.0);
|
||||
ui.add_space(4.0);
|
||||
|
||||
ui.separator();
|
||||
}
|
||||
});
|
||||
ui.separator();
|
||||
}
|
||||
});
|
||||
} else if app.page == Page::PeopleFollow {
|
||||
follow::update(app, ctx, _frame, ui);
|
||||
} else if app.page == Page::PeopleMuted {
|
||||
|
@ -19,42 +19,47 @@ pub(super) fn update(app: &mut GossipUi, ctx: &Context, _frame: &mut eframe::Fra
|
||||
ui.heading(format!("People who are Muted ({})", people.len()));
|
||||
ui.add_space(10.0);
|
||||
|
||||
ScrollArea::vertical().show(ui, |ui| {
|
||||
for person in people.iter() {
|
||||
if person.muted != 1 {
|
||||
continue;
|
||||
}
|
||||
ScrollArea::vertical()
|
||||
.override_scroll_delta(Vec2 {
|
||||
x: 0.0,
|
||||
y: app.current_scroll_offset,
|
||||
})
|
||||
.show(ui, |ui| {
|
||||
for person in people.iter() {
|
||||
if person.muted != 1 {
|
||||
continue;
|
||||
}
|
||||
|
||||
ui.horizontal(|ui| {
|
||||
// Avatar first
|
||||
let avatar = if let Some(avatar) = app.try_get_avatar(ctx, &person.pubkey) {
|
||||
avatar
|
||||
} else {
|
||||
app.placeholder_avatar.clone()
|
||||
};
|
||||
let size = AVATAR_SIZE_F32
|
||||
* GLOBALS.pixels_per_point_times_100.load(Ordering::Relaxed) as f32
|
||||
/ 100.0;
|
||||
if ui
|
||||
.add(Image::new(&avatar, Vec2 { x: size, y: size }).sense(Sense::click()))
|
||||
.clicked()
|
||||
{
|
||||
app.set_page(Page::Person(person.pubkey.clone()));
|
||||
};
|
||||
ui.horizontal(|ui| {
|
||||
// Avatar first
|
||||
let avatar = if let Some(avatar) = app.try_get_avatar(ctx, &person.pubkey) {
|
||||
avatar
|
||||
} else {
|
||||
app.placeholder_avatar.clone()
|
||||
};
|
||||
let size = AVATAR_SIZE_F32
|
||||
* GLOBALS.pixels_per_point_times_100.load(Ordering::Relaxed) as f32
|
||||
/ 100.0;
|
||||
if ui
|
||||
.add(Image::new(&avatar, Vec2 { x: size, y: size }).sense(Sense::click()))
|
||||
.clicked()
|
||||
{
|
||||
app.set_page(Page::Person(person.pubkey.clone()));
|
||||
};
|
||||
|
||||
ui.vertical(|ui| {
|
||||
ui.label(RichText::new(GossipUi::pubkey_short(&person.pubkey)).weak());
|
||||
GossipUi::render_person_name_line(app, ui, person);
|
||||
ui.vertical(|ui| {
|
||||
ui.label(RichText::new(GossipUi::pubkey_short(&person.pubkey)).weak());
|
||||
GossipUi::render_person_name_line(app, ui, person);
|
||||
|
||||
if ui.button("UNMUTE").clicked() {
|
||||
GLOBALS.people.mute(&person.pubkey, false);
|
||||
}
|
||||
if ui.button("UNMUTE").clicked() {
|
||||
GLOBALS.people.mute(&person.pubkey, false);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
ui.add_space(4.0);
|
||||
ui.add_space(4.0);
|
||||
|
||||
ui.separator();
|
||||
}
|
||||
});
|
||||
ui.separator();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@ -26,6 +26,10 @@ pub(super) fn update(app: &mut GossipUi, ctx: &Context, _frame: &mut eframe::Fra
|
||||
|
||||
ScrollArea::vertical()
|
||||
.id_source("person page")
|
||||
.override_scroll_delta(Vec2 {
|
||||
x: 0.0,
|
||||
y: app.current_scroll_offset,
|
||||
})
|
||||
.max_width(f32::INFINITY)
|
||||
.auto_shrink([false, false])
|
||||
.show(ui, |ui| {
|
||||
|
@ -2,7 +2,7 @@ use super::{GossipUi, Page};
|
||||
use crate::comms::ToOverlordMessage;
|
||||
use crate::globals::GLOBALS;
|
||||
use eframe::egui;
|
||||
use egui::{Context, ScrollArea, SelectableLabel, Ui};
|
||||
use egui::{Context, ScrollArea, SelectableLabel, Ui, Vec2};
|
||||
use egui_extras::{Column, TableBuilder};
|
||||
use nostr_types::RelayUrl;
|
||||
|
||||
@ -45,6 +45,10 @@ pub(super) fn update(app: &mut GossipUi, ctx: &Context, frame: &mut eframe::Fram
|
||||
|
||||
ScrollArea::vertical()
|
||||
.id_source("relay_coverage")
|
||||
.override_scroll_delta(Vec2 {
|
||||
x: 0.0,
|
||||
y: app.current_scroll_offset,
|
||||
})
|
||||
.show(ui, |ui| {
|
||||
ui.push_id("general_feed_relays", |ui| {
|
||||
TableBuilder::new(ui)
|
||||
|
@ -3,7 +3,7 @@ use crate::comms::ToOverlordMessage;
|
||||
use crate::GLOBALS;
|
||||
use eframe::egui;
|
||||
use egui::widgets::{Button, Slider};
|
||||
use egui::{Align, Context, Layout, ScrollArea, Ui};
|
||||
use egui::{Align, Context, Layout, ScrollArea, Ui, Vec2};
|
||||
|
||||
pub(super) fn update(app: &mut GossipUi, ctx: &Context, _frame: &mut eframe::Frame, ui: &mut Ui) {
|
||||
ui.heading("Settings");
|
||||
@ -23,7 +23,11 @@ pub(super) fn update(app: &mut GossipUi, ctx: &Context, _frame: &mut eframe::Fra
|
||||
ui.add_space(10.0);
|
||||
ui.separator();
|
||||
|
||||
ScrollArea::vertical().show(ui, |ui| {
|
||||
ScrollArea::vertical()
|
||||
.id_source("settings")
|
||||
.override_scroll_delta(Vec2 { x: 0.0, y: app.current_scroll_offset })
|
||||
.show(ui, |ui| {
|
||||
|
||||
ui.add_space(12.0);
|
||||
|
||||
ui.heading("How Many Relays to Query");
|
||||
|
@ -4,7 +4,7 @@ use crate::globals::{Globals, GLOBALS};
|
||||
use crate::ui::widgets::CopyButton;
|
||||
use eframe::egui;
|
||||
use egui::style::Margin;
|
||||
use egui::{Color32, Context, Frame, ScrollArea, SelectableLabel, Stroke, TextEdit, Ui};
|
||||
use egui::{Color32, Context, Frame, ScrollArea, SelectableLabel, Stroke, TextEdit, Ui, Vec2};
|
||||
use nostr_types::{KeySecurity, PublicKeyHex};
|
||||
use zeroize::Zeroize;
|
||||
|
||||
@ -42,6 +42,10 @@ pub(super) fn update(app: &mut GossipUi, ctx: &Context, _frame: &mut eframe::Fra
|
||||
|
||||
ScrollArea::vertical()
|
||||
.id_source("your_keys")
|
||||
.override_scroll_delta(Vec2 {
|
||||
x: 0.0,
|
||||
y: app.current_scroll_offset,
|
||||
})
|
||||
.show(ui, |ui| {
|
||||
if GLOBALS.signer.is_ready() {
|
||||
ui.heading("Ready to sign events");
|
||||
|
Loading…
Reference in New Issue
Block a user