File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -55,7 +55,7 @@ use emath::Float as _;
5555use axis:: AxisWidget ;
5656use items:: { horizontal_line, rulers_color, vertical_line} ;
5757use legend:: LegendWidget ;
58-
58+ use egui :: pos2 ;
5959type LabelFormatterFn < ' a > = dyn Fn ( & str , & PlotPoint ) -> String + ' a ;
6060pub type LabelFormatter < ' a > = Option < Box < LabelFormatterFn < ' a > > > ;
6161
@@ -1454,6 +1454,18 @@ impl<'a> Plot<'a> {
14541454
14551455 let ( plot_cursors, mut hovered_plot_item) = prepared. ui ( ui, & response) ;
14561456
1457+ if let Some ( gaps) = mem. transform . segment_x_gap_screen_ranges ( ) {
1458+ let frame = mem. transform . frame ( ) ;
1459+ let gap_color = ui. visuals ( ) . extreme_bg_color ;
1460+ for ( left, right) in gaps {
1461+ let gap_rect =
1462+ Rect :: from_min_max ( pos2 ( left, frame. top ( ) ) , pos2 ( right, frame. bottom ( ) ) ) ;
1463+ ui. painter ( )
1464+ . with_clip_rect ( * frame)
1465+ . add ( egui:: Shape :: rect_filled ( gap_rect, 0.0 , gap_color) ) ;
1466+ }
1467+ }
1468+
14571469 // Click/Context menu -> events
14581470 if response. clicked ( ) {
14591471 events. push ( PlotEvent :: Activate {
Original file line number Diff line number Diff line change @@ -660,7 +660,7 @@ impl PlotTransform {
660660 let total_len: f64 = bx
661661 . segments
662662 . iter ( )
663- . map ( |seg| seg. len ( ) . max ( f64:: EPSILON ) ) // avoid 0
663+ . map ( |seg| seg. len ( ) . max ( f64:: EPSILON ) )
664664 . sum ( ) ;
665665
666666 let total_gap_px: f32 = if n >= 2 {
@@ -681,6 +681,26 @@ impl PlotTransform {
681681 self . segment_x_offset = 0.0 ;
682682 }
683683 }
684+ pub fn segment_x_gap_screen_ranges ( & self ) -> Option < Vec < ( f32 , f32 ) > > {
685+ let bx = self . segment_xaxis ( ) ?;
686+ let mut out = Vec :: new ( ) ;
687+
688+ let mut cursor_px = self . frame . left ( ) + self . segment_x_offset ;
689+
690+ for ( i, seg) in bx. segments . iter ( ) . enumerate ( ) {
691+ let seg_px = ( seg. len ( ) as f32 ) * self . pixels_per_x ;
692+ cursor_px += seg_px;
693+
694+ if i + 1 < bx. segments . len ( ) {
695+ let gap_left = cursor_px;
696+ let gap_right = cursor_px + bx. gap_px ;
697+ out. push ( ( gap_left, gap_right) ) ;
698+ cursor_px += bx. gap_px ;
699+ }
700+ }
701+
702+ Some ( out)
703+ }
684704
685705 #[ inline]
686706 pub fn segment_x_offset ( & self ) -> f32 {
You can’t perform that action at this time.
0 commit comments