Add support for asymmetrical padding

This commit is contained in:
Ben LeFevre 2020-11-23 17:19:21 +00:00 committed by Héctor Ramón
parent a9eb591628
commit fe0a27c56d
27 changed files with 339 additions and 195 deletions

View file

@ -16,9 +16,10 @@
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
use crate::{
layout::{Limits, Node},
Align, Element, Point, Size,
Align, Element, Padding, Point, Size,
};
/// The main axis of a flex layout.
@ -62,7 +63,7 @@ pub fn resolve<Message, Renderer>(
axis: Axis,
renderer: &Renderer,
limits: &Limits,
padding: f32,
padding: Padding,
spacing: f32,
align_items: Align,
items: &[Element<'_, Message, Renderer>],
@ -141,14 +142,15 @@ where
}
}
let mut main = padding;
let pad = axis.pack(padding.left as f32, padding.top as f32);
let mut main = pad.0;
for (i, node) in nodes.iter_mut().enumerate() {
if i > 0 {
main += spacing;
}
let (x, y) = axis.pack(main, padding);
let (x, y) = axis.pack(main, pad.1);
node.move_to(Point::new(x, y));
@ -166,7 +168,7 @@ where
main += axis.main(size);
}
let (width, height) = axis.pack(main - padding, cross);
let (width, height) = axis.pack(main - pad.0, cross);
let size = limits.resolve(Size::new(width, height));
Node::with_children(size.pad(padding), nodes)

View file

@ -1,4 +1,4 @@
use crate::{Length, Size};
use crate::{Length, Padding, Size};
/// A set of size constraints for layouting.
#[derive(Debug, Clone, Copy)]
@ -117,8 +117,11 @@ impl Limits {
}
/// Shrinks the current [`Limits`] to account for the given padding.
pub fn pad(&self, padding: f32) -> Limits {
self.shrink(Size::new(padding * 2.0, padding * 2.0))
pub fn pad(&self, padding: Padding) -> Limits {
self.shrink(Size::new(
(padding.left + padding.right) as f32,
(padding.top + padding.bottom) as f32,
))
}
/// Shrinks the current [`Limits`] by the given [`Size`].