|
1 | 1 | use data::config::buffer::nickname::ShownStatus; |
2 | 2 | use data::isupport::{CaseMap, PrefixMap}; |
3 | 3 | use data::server::Server; |
4 | | -use data::target::{self}; |
5 | 4 | use data::user::ChannelUsers; |
6 | | -use data::{Config, User, message}; |
| 5 | +use data::{Config, User, message, target}; |
7 | 6 | use iced::Color; |
8 | 7 | use iced::advanced::text; |
9 | 8 | use iced::widget::{column, container, row}; |
@@ -245,54 +244,79 @@ impl<'a> ChannelQueryLayout<'a> { |
245 | 244 | max_nick_width: Option<f32>, |
246 | 245 | server: Option<&'a message::source::Server>, |
247 | 246 | ) -> (Element<'a, Message>, Element<'a, Message>) { |
| 247 | + let formatter = *self; |
| 248 | + |
| 249 | + let dimmed = formatter.config.buffer.server_messages.dimmed(server); |
| 250 | + |
248 | 251 | let message_style = move |message_theme: &Theme| { |
249 | | - theme::selectable_text::server(message_theme, server) |
| 252 | + let mut style = |
| 253 | + theme::selectable_text::server(message_theme, server); |
| 254 | + |
| 255 | + if let Some(dimmed) = dimmed { |
| 256 | + style.color = style.color.map(|color| { |
| 257 | + dimmed.transform_color( |
| 258 | + color, |
| 259 | + formatter.theme.styles().buffer.background, |
| 260 | + ) |
| 261 | + }); |
| 262 | + } |
| 263 | + |
| 264 | + style |
250 | 265 | }; |
251 | 266 | let message_font_style = move |message_theme: &Theme| { |
252 | 267 | theme::font_style::server(message_theme, server) |
253 | 268 | }; |
| 269 | + |
254 | 270 | let marker = message_marker( |
255 | 271 | max_nick_width, |
256 | 272 | self.theme, |
257 | 273 | message_style, |
258 | 274 | message_font_style, |
259 | 275 | ); |
260 | 276 |
|
261 | | - let fm = *self; |
262 | 277 | let message_content = message_content::with_context( |
263 | 278 | &message.content, |
264 | | - fm.chantypes, |
265 | | - fm.casemapping, |
| 279 | + formatter.chantypes, |
| 280 | + formatter.casemapping, |
266 | 281 | self.theme, |
267 | 282 | Message::Link, |
268 | 283 | message_style, |
269 | 284 | message_font_style, |
270 | | - Option::<fn(Color) -> Color>::None, |
| 285 | + Some(|color: Color| -> Color { |
| 286 | + if let Some(dimmed) = dimmed { |
| 287 | + dimmed.transform_color( |
| 288 | + color, |
| 289 | + formatter.theme.styles().buffer.background, |
| 290 | + ) |
| 291 | + } else { |
| 292 | + color |
| 293 | + } |
| 294 | + }), |
271 | 295 | move |link| match link { |
272 | 296 | message::Link::User(_) => context_menu::Entry::user_list( |
273 | | - fm.target.is_channel(), |
274 | | - fm.target.our_user(), |
| 297 | + formatter.target.is_channel(), |
| 298 | + formatter.target.our_user(), |
275 | 299 | ), |
276 | 300 | message::Link::Url(_) => context_menu::Entry::url_list(), |
277 | 301 | _ => vec![], |
278 | 302 | }, |
279 | 303 | move |link, entry, length| { |
280 | 304 | let user = link.user(); |
281 | 305 | let current_user = user.and_then(|u| { |
282 | | - fm.target.users().and_then(|users| users.resolve(u)) |
| 306 | + formatter.target.users().and_then(|users| users.resolve(u)) |
283 | 307 | }); |
284 | 308 |
|
285 | 309 | entry |
286 | 310 | .view( |
287 | | - fm.server, |
288 | | - fm.prefix, |
289 | | - fm.target.channel(), |
| 311 | + formatter.server, |
| 312 | + formatter.prefix, |
| 313 | + formatter.target.channel(), |
290 | 314 | user, |
291 | 315 | current_user, |
292 | 316 | link.url(), |
293 | 317 | length, |
294 | | - fm.config, |
295 | | - fm.theme, |
| 318 | + formatter.config, |
| 319 | + formatter.theme, |
296 | 320 | ) |
297 | 321 | .map(Message::ContextMenu) |
298 | 322 | }, |
|
0 commit comments