Skip to content

Commit

Permalink
Merge pull request #221 from kas-gui/work2
Browse files Browse the repository at this point in the history
Apply draw offset in vertex shaders; data-list reverse button, editbox scrolling
  • Loading branch information
dhardy authored Jul 26, 2021
2 parents 9ddf20f + 1b26852 commit ea13b0f
Show file tree
Hide file tree
Showing 29 changed files with 352 additions and 248 deletions.
66 changes: 30 additions & 36 deletions kas-theme/src/flat_theme.rs
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,6 @@ pub struct DrawHandle<'a, DS: DrawableShared> {
pub(crate) draw: Draw<'a, DS::Draw>,
pub(crate) window: &'a mut DimensionsWindow,
pub(crate) cols: &'a ColorsLinear,
pub(crate) offset: Offset,
}

impl<DS: DrawableShared> Theme<DS> for FlatTheme
Expand Down Expand Up @@ -155,7 +154,6 @@ where
draw: Draw::new(extend_lifetime_mut(draw.draw), draw.pass()),
window: extend_lifetime_mut(window),
cols: extend_lifetime(&self.cols),
offset: Offset::ZERO,
}
}
#[cfg(feature = "gat")]
Expand All @@ -170,7 +168,6 @@ where
draw,
window,
cols: &self.cols,
offset: Offset::ZERO,
}
}

Expand Down Expand Up @@ -235,7 +232,7 @@ where

/// Draw a handle (for slider, scrollbar)
fn draw_handle(&mut self, rect: Rect, state: InputState) {
let outer = Quad::from(rect + self.offset);
let outer = Quad::from(rect);
let thickness = outer.size().min_comp() / 2.0;
let inner = outer.shrink(thickness);
let col = self.cols.scrollbar_state(state);
Expand All @@ -259,27 +256,26 @@ where
}
}

fn draw_device<'b>(&'b mut self) -> (Offset, Draw<'b, dyn Drawable>, &mut dyn DrawSharedT) {
(self.offset, self.draw.upcast_base(), self.shared)
fn draw_device<'b>(&'b mut self) -> (Draw<'b, dyn Drawable>, &mut dyn DrawSharedT) {
(self.draw.upcast_base(), self.shared)
}

fn with_clip_region(
&mut self,
rect: Rect,
mut rect: Rect,
offset: Offset,
class: RegionClass,
f: &mut dyn FnMut(&mut dyn draw::DrawHandle),
) {
let inner_rect = rect + self.offset;
let outer_rect = match class {
RegionClass::ScrollRegion => inner_rect,
RegionClass::Overlay => inner_rect.expand(self.window.dims.frame),
};
let mut draw = self.draw.new_clip_region(outer_rect, class);
if class == RegionClass::Overlay {
rect = rect.expand(self.window.dims.frame);
}
let mut draw = self.draw.new_clip_region(rect, offset, class);

if class == RegionClass::Overlay {
let outer = Quad::from(outer_rect);
let inner = Quad::from(inner_rect);
let outer = draw.clip_rect();
let inner = Quad::from(outer.shrink(self.window.dims.frame));
let outer = Quad::from(outer);
draw.rounded_frame(outer, inner, BG_SHRINK_FACTOR, self.cols.frame);
let inner = outer.shrink(self.window.dims.frame as f32 * BG_SHRINK_FACTOR);
draw.rect(inner, self.cols.background);
Expand All @@ -290,48 +286,46 @@ where
draw,
window: self.window,
cols: self.cols,
offset: self.offset - offset,
};
f(&mut handle);
}

fn target_rect(&self) -> Rect {
// Translate to local coordinates
self.draw.clip_rect() - self.offset
self.draw.clip_rect()
}

fn outer_frame(&mut self, rect: Rect) {
let outer = Quad::from(rect + self.offset);
let outer = Quad::from(rect);
let inner = outer.shrink(self.window.dims.frame as f32);
self.draw
.rounded_frame(outer, inner, BG_SHRINK_FACTOR, self.cols.frame);
}

fn separator(&mut self, rect: Rect) {
let outer = Quad::from(rect + self.offset);
let outer = Quad::from(rect);
let inner = outer.shrink(outer.size().min_comp() / 2.0);
self.draw
.rounded_frame(outer, inner, BG_SHRINK_FACTOR, self.cols.frame);
}

fn nav_frame(&mut self, rect: Rect, state: InputState) {
if let Some(col) = self.cols.nav_region(state) {
let outer = Quad::from(rect + self.offset);
let outer = Quad::from(rect);
let inner = outer.shrink(self.window.dims.inner_margin as f32);
self.draw.rounded_frame(outer, inner, 0.0, col);
}
}

fn selection_box(&mut self, rect: Rect) {
let inner = Quad::from(rect + self.offset);
let inner = Quad::from(rect);
let outer = inner.grow(self.window.dims.inner_margin.into());
// TODO: this should use its own colour and a stippled pattern
let col = self.cols.text_sel_bg;
self.draw.frame(outer, inner, col);
}

fn text(&mut self, pos: Coord, text: &TextDisplay, class: TextClass) {
let pos = pos + self.offset;
let pos = pos;
let col = self.cols.text_class(class);
self.shared
.draw_text(self.draw.reborrow(), pos.into(), text, col);
Expand All @@ -340,15 +334,15 @@ where
fn text_effects(&mut self, pos: Coord, text: &dyn TextApi, class: TextClass) {
self.shared.draw_text_col_effects(
self.draw.reborrow(),
(pos + self.offset).into(),
(pos).into(),
text.display(),
self.cols.text_class(class),
text.effect_tokens(),
);
}

fn text_accel(&mut self, pos: Coord, text: &Text<AccelString>, state: bool, class: TextClass) {
let pos = Vec2::from(pos + self.offset);
let pos = Vec2::from(pos);
let col = self.cols.text_class(class);
if state {
let effects = text.text().effect_tokens();
Expand All @@ -372,7 +366,7 @@ where
range: Range<usize>,
class: TextClass,
) {
let pos = Vec2::from(pos + self.offset);
let pos = Vec2::from(pos);
let col = self.cols.text_class(class);

// Draw background:
Expand Down Expand Up @@ -406,7 +400,7 @@ where

fn edit_marker(&mut self, pos: Coord, text: &TextDisplay, class: TextClass, byte: usize) {
let width = self.window.dims.font_marker_width;
let pos = Vec2::from(pos + self.offset);
let pos = Vec2::from(pos);

let mut col = self.cols.text_class(class);
for cursor in text.text_glyph_pos(byte).rev() {
Expand Down Expand Up @@ -435,13 +429,13 @@ where

fn menu_entry(&mut self, rect: Rect, state: InputState) {
if let Some(col) = self.cols.menu_entry(state) {
let quad = Quad::from(rect + self.offset);
let quad = Quad::from(rect);
self.draw.rect(quad, col);
}
}

fn button(&mut self, rect: Rect, state: InputState) {
let outer = Quad::from(rect + self.offset);
let outer = Quad::from(rect);
let col = self.cols.button_state(state);

let inner = outer.shrink(self.window.dims.button_frame as f32);
Expand All @@ -456,14 +450,14 @@ where

fn edit_box(&mut self, rect: Rect, state: InputState) {
let bg_col = self.cols.bg_col(state);
self.draw_edit_box(rect + self.offset, bg_col, self.cols.nav_region(state));
self.draw_edit_box(rect, bg_col, self.cols.nav_region(state));
}

fn checkbox(&mut self, rect: Rect, checked: bool, state: InputState) {
let bg_col = self.cols.bg_col(state);
let nav_col = self.cols.nav_region(state).or(Some(bg_col));

let inner = self.draw_edit_box(rect + self.offset, bg_col, nav_col);
let inner = self.draw_edit_box(rect, bg_col, nav_col);

if let Some(col) = self.cols.check_mark_state(state, checked) {
let radius = inner.size().sum() * (1.0 / 16.0);
Expand All @@ -477,7 +471,7 @@ where
let bg_col = self.cols.bg_col(state);
let nav_col = self.cols.nav_region(state).or(Some(bg_col));

let inner = self.draw_edit_box(rect + self.offset, bg_col, nav_col);
let inner = self.draw_edit_box(rect, bg_col, nav_col);

if let Some(col) = self.cols.check_mark_state(state, checked) {
let inner = inner.shrink(self.window.dims.inner_margin as f32);
Expand All @@ -487,7 +481,7 @@ where

fn scrollbar(&mut self, rect: Rect, h_rect: Rect, _dir: Direction, state: InputState) {
// track
let outer = Quad::from(rect + self.offset);
let outer = Quad::from(rect);
let inner = outer.shrink(outer.size().min_comp() / 2.0);
let col = self.cols.frame;
self.draw.rounded_frame(outer, inner, 0.0, col);
Expand All @@ -498,7 +492,7 @@ where

fn slider(&mut self, rect: Rect, h_rect: Rect, dir: Direction, state: InputState) {
// track
let mut outer = Quad::from(rect + self.offset);
let mut outer = Quad::from(rect);
outer = match dir.is_horizontal() {
true => outer.shrink_vec(Vec2(0.0, outer.size().1 * (3.0 / 8.0))),
false => outer.shrink_vec(Vec2(outer.size().0 * (3.0 / 8.0), 0.0)),
Expand All @@ -512,7 +506,7 @@ where
}

fn progress_bar(&mut self, rect: Rect, dir: Direction, _: InputState, value: f32) {
let outer = Quad::from(rect + self.offset);
let outer = Quad::from(rect);
let mut inner = outer.shrink(self.window.dims.frame as f32);
let col = self.cols.frame;
self.draw.rounded_frame(outer, inner, BG_SHRINK_FACTOR, col);
Expand All @@ -527,7 +521,7 @@ where
}

fn image(&mut self, id: ImageId, rect: Rect) {
let rect = Quad::from(rect + self.offset);
let rect = Quad::from(rect);
self.shared.draw_image(self.draw.reborrow(), id, rect);
}
}
Loading

0 comments on commit ea13b0f

Please sign in to comment.