Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/app.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ use crate::{app::tile::ExtSender, clipboard::ClipBoardContentType};

pub mod apps;
pub mod menubar;
pub mod pages;
pub mod tile;

use iced::window::{self, Id, Settings};
Expand Down
5 changes: 3 additions & 2 deletions src/app/apps.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ use std::path::Path;
use iced::{
Alignment,
Length::Fill,
widget::{Button, Row, Text, container, image::Viewer},
widget::{Button, Row, Text, container, image::Viewer, text::Wrapping},
};

use crate::{
Expand Down Expand Up @@ -53,7 +53,7 @@ impl App {
/// A vec of all the emojis as App structs
pub fn emoji_apps() -> Vec<App> {
emojis::iter()
.filter(|x| x.unicode_version() < emojis::UnicodeVersion::new(13, 0))
.filter(|x| x.unicode_version() < emojis::UnicodeVersion::new(17, 13))
.map(|x| App {
icons: None,
name: x.to_string(),
Expand Down Expand Up @@ -154,6 +154,7 @@ impl App {
Text::new(self.name)
.font(theme.font())
.size(16)
.wrapping(Wrapping::WordOrGlyph)
.color(theme.text_color(1.0)),
)
.push(
Expand Down
5 changes: 5 additions & 0 deletions src/app/pages.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
pub mod clipboard;
pub mod common;
pub mod emoji;
pub mod prelude;
pub mod settings;
53 changes: 53 additions & 0 deletions src/app/pages/clipboard.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
use iced::widget::{
Scrollable,
scrollable::{Direction, Scrollbar},
};

use crate::{app::pages::prelude::*, clipboard::ClipBoardContentType};

pub fn clipboard_view(
clipboard_content: Vec<ClipBoardContentType>,
focussed_id: u32,
theme: Theme,
focus_id: u32,
) -> Element<'static, Message> {
let theme_clone = theme.clone();
let theme_clone_2 = theme.clone();
Row::from_vec(vec![
container(
Column::from_iter(
clipboard_content
.iter()
.enumerate()
.map(|(i, content)| content.to_app().render(theme.clone(), i as u32, focus_id)),
)
.width(WINDOW_WIDTH / 3.),
)
.height(7 * 55)
.style(move |_| result_row_container_style(&theme_clone_2, false))
.into(),
container(Scrollable::with_direction(
Text::new(
clipboard_content
.get(focussed_id as usize)
.map(|x| x.to_app().name_lc)
.unwrap_or("".to_string()),
)
.height(Length::Fill)
.width(Length::Fill)
.align_x(Alignment::Start)
.font(theme.font())
.size(16),
Direction::Both {
vertical: Scrollbar::new().scroller_width(0.).width(0.),
horizontal: Scrollbar::new().scroller_width(0.).width(0.),
},
))
.padding(10)
.style(move |_| result_row_container_style(&theme_clone, false))
.width((WINDOW_WIDTH / 3.) * 2.)
.height(7 * 55)
.into(),
])
.into()
}
1 change: 1 addition & 0 deletions src/app/pages/common.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@

86 changes: 86 additions & 0 deletions src/app/pages/emoji.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
use iced::{Border, Length::Fill, border::Radius, widget::tooltip};

use crate::{app::pages::prelude::*, clipboard::ClipBoardContentType, commands::Function};

pub fn emoji_page(
tile_theme: Theme,
emojis: Vec<App>,
focussed_id: u32,
) -> Element<'static, Message> {
let emoji_vec = emojis
.chunks(6)
.map(|x| x.to_vec())
.collect::<Vec<Vec<App>>>();

let mut column = Vec::new();

let mut id_num = 0;

for emoji_row in emoji_vec {
let mut emoji_row_element = Row::new().spacing(10);
for emoji in emoji_row {
let theme_clone = tile_theme.clone();
let element_column = Column::new().push(
Text::new(emoji.name.clone())
.font(tile_theme.font())
.size(30)
.width(Length::Fill)
.height(Fill)
.align_y(Alignment::Center)
.align_x(Alignment::Center),
);
let value = tile_theme.clone();
let value_two = tile_theme.clone();
emoji_row_element = emoji_row_element.push(tooltip(
container(
Button::new(element_column)
.width(70)
.height(70)
.on_press(Message::RunFunction(Function::CopyToClipboard(
ClipBoardContentType::Text(emoji.name),
)))
.style(move |_, _| emoji_button_style(&value)),
)
.width(70)
.height(70)
.id(format!("result-{}", id_num))
.style(move |_| emoji_button_container_style(&theme_clone, focussed_id == id_num)),
container(
Text::new(emoji.desc)
.font(tile_theme.font())
.size(20)
.color(tile_theme.text_color(0.7)),
)
.style(move |_| container::Style {
background: Some(Background::Color(value_two.bg_color())),
..Default::default()
}),
tooltip::Position::Top,
));

id_num += 1;
}

column.push(container(emoji_row_element).center_y(70).into());
}

let tile_theme_clone = tile_theme.clone();

container(Column::from_vec(column).spacing(10))
.padding(5)
.style(move |_| {
result_row_container_style(&tile_theme_clone, false)
.background({
let mut clr = tile_theme_clone.bg_color();
clr.a = 1.;
Background::Color(tint(clr, 0.02))
})
.border(Border {
color: tile_theme.bg_color(),
width: 1.,
radius: Radius::new(0),
})
})
.center_x(WINDOW_WIDTH)
.into()
}
10 changes: 10 additions & 0 deletions src/app/pages/prelude.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
pub use iced::{
Alignment, Background, Element, Length,
widget::{Button, Column, Row, Text, container},
};

pub use crate::{
app::{Message, WINDOW_WIDTH, apps::App},
config::Theme,
styles::{emoji_button_container_style, emoji_button_style, result_row_container_style, tint},
};
1 change: 1 addition & 0 deletions src/app/pages/settings.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@

6 changes: 6 additions & 0 deletions src/app/tile.rs
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,12 @@ impl Tile {
keyboard::Key::Named(Named::ArrowUp) => {
return Some(Message::ChangeFocus(ArrowKey::Up));
}
keyboard::Key::Named(Named::ArrowLeft) => {
return Some(Message::ChangeFocus(ArrowKey::Left));
}
keyboard::Key::Named(Named::ArrowRight) => {
return Some(Message::ChangeFocus(ArrowKey::Right));
}
keyboard::Key::Named(Named::ArrowDown) => {
return Some(Message::ChangeFocus(ArrowKey::Down));
}
Expand Down
34 changes: 22 additions & 12 deletions src/app/tile/elm.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ use rayon::{
slice::ParallelSliceMut,
};

use crate::app::pages::clipboard::clipboard_view;
use crate::app::pages::emoji::emoji_page;
use crate::app::tile::AppIndex;
use crate::styles::{contents_style, rustcast_text_input_style};
use crate::{
Expand Down Expand Up @@ -100,30 +102,38 @@ pub fn view(tile: &Tile, wid: window::Id) -> Element<'_, Message> {
let scrollbar_direction = if tile.config.theme.show_scroll_bar {
Direction::Vertical(
Scrollbar::new()
.width(2)
.scroller_width(2)
.width(10)
.scroller_width(10)
.anchor(Anchor::Start),
)
} else {
Direction::Vertical(Scrollbar::hidden())
};

let results = if tile.page == Page::ClipboardHistory {
Column::from_iter(
tile.clipboard_content
.iter()
.enumerate()
.map(|(i, content)| {
content
.to_app()
.render(tile.config.theme.clone(), i as u32, tile.focus_id)
}),
clipboard_view(
tile.clipboard_content.clone(),
tile.focus_id,
tile.config.theme.clone(),
tile.focus_id,
)
} else if tile.results.is_empty() {
space().into()
} else if tile.page == Page::EmojiSearch {
emoji_page(
tile.config.theme.clone(),
tile.emoji_apps
.search_prefix(&tile.query_lc)
.map(|x| x.to_owned())
.collect(),
tile.focus_id,
)
} else {
Column::from_iter(tile.results.iter().enumerate().map(|(i, app)| {
app.clone()
.render(tile.config.theme.clone(), i as u32, tile.focus_id)
}))
.into()
};

let scrollable = Scrollable::with_direction(results, scrollbar_direction).id("results");
Expand All @@ -139,7 +149,7 @@ pub fn view(tile: &Tile, wid: window::Id) -> Element<'_, Message> {
..Default::default()
});

container(contents.clip(true))
container(contents.clip(false))
.style(|_| contents_style(&tile.config.theme))
.into()
} else {
Expand Down
Loading