use super::Widget;
use crate::event::EventMgr;
use crate::geom::{Offset, Size};
use crate::TkAction;
pub trait Scrollable: Widget {
fn scroll_axes(&self, size: Size) -> (bool, bool);
fn max_scroll_offset(&self) -> Offset;
fn scroll_offset(&self) -> Offset;
fn set_scroll_offset(&mut self, mgr: &mut EventMgr, offset: Offset) -> Offset;
}
#[kas_macros::impl_default(ScrollBarMode::Auto)]
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
pub enum ScrollBarMode {
Fixed,
Auto,
Invisible,
}
pub trait HasScrollBars {
fn get_mode(&self) -> ScrollBarMode;
fn set_mode(&mut self, mode: ScrollBarMode) -> TkAction;
fn get_visible_bars(&self) -> (bool, bool);
fn set_visible_bars(&mut self, bars: (bool, bool)) -> TkAction;
#[inline]
fn with_auto_bars(mut self) -> Self
where
Self: Sized,
{
let _ = self.set_mode(ScrollBarMode::Auto);
self
}
#[inline]
fn with_fixed_bars(mut self, horiz: bool, vert: bool) -> Self
where
Self: Sized,
{
let _ = self.set_mode(ScrollBarMode::Fixed);
let _ = self.set_visible_bars((horiz, vert));
self
}
#[inline]
fn with_invisible_bars(mut self, horiz: bool, vert: bool) -> Self
where
Self: Sized,
{
let _ = self.set_mode(ScrollBarMode::Invisible);
let _ = self.set_visible_bars((horiz, vert));
self
}
}