Add Shape::hline and Shape::vline

This commit is contained in:
Emil Ernerfeldt 2022-07-30 15:34:24 +02:00
parent c62f3409bd
commit d659e5d24f
2 changed files with 20 additions and 9 deletions

View file

@ -2,7 +2,7 @@ use std::ops::RangeInclusive;
use std::sync::Arc;
use crate::{
emath::{pos2, Align2, Pos2, Rect, Vec2},
emath::{Align2, Pos2, Rect, Vec2},
layers::{LayerId, PaintList, ShapeIdx},
Color32, Context, FontId,
};
@ -257,18 +257,12 @@ impl Painter {
/// Paints a horizontal line.
pub fn hline(&self, x: RangeInclusive<f32>, y: f32, stroke: impl Into<Stroke>) {
self.add(Shape::LineSegment {
points: [pos2(*x.start(), y), pos2(*x.end(), y)],
stroke: stroke.into(),
});
self.add(Shape::hline(x, y, stroke));
}
/// Paints a vertical line.
pub fn vline(&self, x: f32, y: RangeInclusive<f32>, stroke: impl Into<Stroke>) {
self.add(Shape::LineSegment {
points: [pos2(x, *y.start()), pos2(x, *y.end())],
stroke: stroke.into(),
});
self.add(Shape::vline(x, y, stroke));
}
pub fn circle(

View file

@ -1,5 +1,6 @@
//! The different shapes that can be painted.
use std::ops::RangeInclusive;
use std::{any::Any, sync::Arc};
use crate::{
@ -72,6 +73,22 @@ impl Shape {
}
}
/// A horizontal line.
pub fn hline(x: RangeInclusive<f32>, y: f32, stroke: impl Into<Stroke>) -> Self {
Shape::LineSegment {
points: [pos2(*x.start(), y), pos2(*x.end(), y)],
stroke: stroke.into(),
}
}
/// A vertical line.
pub fn vline(x: f32, y: RangeInclusive<f32>, stroke: impl Into<Stroke>) -> Self {
Shape::LineSegment {
points: [pos2(x, *y.start()), pos2(x, *y.end())],
stroke: stroke.into(),
}
}
/// A line through many points.
///
/// Use [`Self::line_segment`] instead if your line only connects two points.