mirror of
https://github.com/FliegendeWurst/cursive.git
synced 2024-11-09 10:50:40 +00:00
Fix important_area for ShadowView and PaddedView
This commit is contained in:
parent
72ded36093
commit
7d833d5386
@ -1,5 +1,13 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## (Next version) cursive-core=0.1.1
|
||||||
|
|
||||||
|
### Bugfixes
|
||||||
|
|
||||||
|
- More hygienic `wrap_impl!` macro using fully-qualified paths.
|
||||||
|
- Fixed `LinearLayout` giving children incorrect sizes.
|
||||||
|
- More accurate "important area" for `ShadowView` and `PaddedView`.
|
||||||
|
|
||||||
## 0.15.0
|
## 0.15.0
|
||||||
|
|
||||||
### Breaking changes
|
### Breaking changes
|
||||||
|
@ -754,6 +754,8 @@ impl View for Dialog {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn important_area(&self, _: Vec2) -> Rect {
|
fn important_area(&self, _: Vec2) -> Rect {
|
||||||
|
// Only the content is important.
|
||||||
|
// TODO: if a button is focused, return the button position instead.
|
||||||
self.content.important_area(self.content.size)
|
self.content.important_area(self.content.size)
|
||||||
+ self.borders.top_left()
|
+ self.borders.top_left()
|
||||||
+ self.padding.top_left()
|
+ self.padding.top_left()
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
use crate::event::{Event, EventResult};
|
use crate::event::{Event, EventResult};
|
||||||
|
use crate::rect::Rect;
|
||||||
use crate::view::{Margins, View, ViewWrapper};
|
use crate::view::{Margins, View, ViewWrapper};
|
||||||
use crate::Printer;
|
use crate::Printer;
|
||||||
use crate::Vec2;
|
use crate::Vec2;
|
||||||
@ -43,7 +44,7 @@ impl<V: View> PaddedView<V> {
|
|||||||
|
|
||||||
/// Sets the margins for this view.
|
/// Sets the margins for this view.
|
||||||
pub fn set_margins(&mut self, margins: Margins) {
|
pub fn set_margins(&mut self, margins: Margins) {
|
||||||
// TODO: invalidate?
|
// TODO: invalidate? wrap_needs_relayout?
|
||||||
self.margins = margins;
|
self.margins = margins;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -74,4 +75,9 @@ impl<V: View> ViewWrapper for PaddedView<V> {
|
|||||||
let printer = &printer.offset(top_left).shrinked(bot_right);
|
let printer = &printer.offset(top_left).shrinked(bot_right);
|
||||||
self.view.draw(printer);
|
self.view.draw(printer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn wrap_important_area(&self, view_size: Vec2) -> Rect {
|
||||||
|
let inner_size = view_size.saturating_sub(self.margins.combined());
|
||||||
|
self.view.important_area(inner_size) + self.margins.top_left()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
use crate::event::{Event, EventResult};
|
use crate::event::{Event, EventResult};
|
||||||
|
use crate::rect::Rect;
|
||||||
use crate::theme::ColorStyle;
|
use crate::theme::ColorStyle;
|
||||||
use crate::view::{View, ViewWrapper};
|
use crate::view::{View, ViewWrapper};
|
||||||
use crate::Printer;
|
use crate::Printer;
|
||||||
@ -11,7 +12,7 @@ pub struct ShadowView<T: View> {
|
|||||||
view: T,
|
view: T,
|
||||||
top_padding: bool,
|
top_padding: bool,
|
||||||
left_padding: bool,
|
left_padding: bool,
|
||||||
// TODO: invalidate if we change the padding?
|
// TODO: invalidate if we change the padding? wrap_needs_relayout?
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T: View> ShadowView<T> {
|
impl<T: View> ShadowView<T> {
|
||||||
@ -24,7 +25,9 @@ impl<T: View> ShadowView<T> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Return the total padding for this view (include both sides)
|
||||||
fn padding(&self) -> Vec2 {
|
fn padding(&self) -> Vec2 {
|
||||||
|
// We always need (1, 1) for the shadow.
|
||||||
self.top_left_padding() + (1, 1)
|
self.top_left_padding() + (1, 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -100,4 +103,10 @@ impl<T: View> ViewWrapper for ShadowView<T> {
|
|||||||
let printer = printer.shrinked((1, 1));
|
let printer = printer.shrinked((1, 1));
|
||||||
self.view.draw(&printer);
|
self.view.draw(&printer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn wrap_important_area(&self, view_size: Vec2) -> Rect {
|
||||||
|
self.view
|
||||||
|
.important_area(view_size.saturating_sub(self.padding()))
|
||||||
|
+ self.top_left_padding()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user