Browse Source

Add `Shape::hline` and `Shape::vline`

pull/1871/head
Emil Ernerfeldt 2 years ago
parent
commit
d659e5d24f
  1. 12
      egui/src/painter.rs
  2. 17
      epaint/src/shape.rs

12
egui/src/painter.rs

@ -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(

17
epaint/src/shape.rs

@ -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.

Loading…
Cancel
Save