Mouse interaction tweaks
- adjust zoom focal to be min of the view-right coord or the right-most point on the flow graphic in view and drop all the legacy l1-in-view focal point cruft. - flip to not auto-scaling overlays by default. - change the `._set_yrange()` margin to `0.09`. - drop `use_vr: bool` usage.epoch_index_backup
							parent
							
								
									c47fa14d8c
								
							
						
					
					
						commit
						bc271c4ebc
					
				| 
						 | 
					@ -35,7 +35,7 @@ import trio
 | 
				
			||||||
from ..log import get_logger
 | 
					from ..log import get_logger
 | 
				
			||||||
from .._profile import Profiler
 | 
					from .._profile import Profiler
 | 
				
			||||||
from .._profile import pg_profile_enabled, ms_slower_then
 | 
					from .._profile import pg_profile_enabled, ms_slower_then
 | 
				
			||||||
from ._style import _min_points_to_show
 | 
					# from ._style import _min_points_to_show
 | 
				
			||||||
from ._editors import SelectRect
 | 
					from ._editors import SelectRect
 | 
				
			||||||
from . import _event
 | 
					from . import _event
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -494,13 +494,12 @@ class ChartView(ViewBox):
 | 
				
			||||||
        # don't zoom more then the min points setting
 | 
					        # don't zoom more then the min points setting
 | 
				
			||||||
        viz = chart.get_viz(chart.name)
 | 
					        viz = chart.get_viz(chart.name)
 | 
				
			||||||
        vl, lbar, rbar, vr = viz.bars_range()
 | 
					        vl, lbar, rbar, vr = viz.bars_range()
 | 
				
			||||||
        rl = vr - vl
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # TODO: max/min zoom limits incorporating time step size.
 | 
					        # TODO: max/min zoom limits incorporating time step size.
 | 
				
			||||||
 | 
					        # rl = vr - vl
 | 
				
			||||||
        # if ev.delta() > 0 and rl <= _min_points_to_show:
 | 
					        # if ev.delta() > 0 and rl <= _min_points_to_show:
 | 
				
			||||||
        #     log.warning("Max zoom bruh...")
 | 
					        #     log.warning("Max zoom bruh...")
 | 
				
			||||||
        #     return
 | 
					        #     return
 | 
				
			||||||
 | 
					 | 
				
			||||||
        # if (
 | 
					        # if (
 | 
				
			||||||
        #     ev.delta() < 0
 | 
					        #     ev.delta() < 0
 | 
				
			||||||
        #     and rl >= len(chart._vizs[chart.name].shm.array) + 666
 | 
					        #     and rl >= len(chart._vizs[chart.name].shm.array) + 666
 | 
				
			||||||
| 
						 | 
					@ -536,48 +535,17 @@ class ChartView(ViewBox):
 | 
				
			||||||
            self.scaleBy(s, center)
 | 
					            self.scaleBy(s, center)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        else:
 | 
					        else:
 | 
				
			||||||
 | 
					 | 
				
			||||||
            # center = pg.Point(
 | 
					 | 
				
			||||||
            #     fn.invertQTransform(self.childGroup.transform()).map(ev.pos())
 | 
					 | 
				
			||||||
            # )
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            # XXX: scroll "around" the right most element in the view
 | 
					 | 
				
			||||||
            # which stays "pinned" in place.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            # furthest_right_coord = self.boundingRect().topRight()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            # yaxis = pg.Point(
 | 
					 | 
				
			||||||
            #     fn.invertQTransform(
 | 
					 | 
				
			||||||
            #         self.childGroup.transform()
 | 
					 | 
				
			||||||
            #     ).map(furthest_right_coord)
 | 
					 | 
				
			||||||
            # )
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            # This seems like the most "intuitive option, a hybrid of
 | 
					 | 
				
			||||||
            # tws and tv styles
 | 
					 | 
				
			||||||
            # last_bar = pg.Point(int(rbar)) + 1
 | 
					 | 
				
			||||||
            ryaxis = chart.getAxis('right')
 | 
					 | 
				
			||||||
            r_axis_x = ryaxis.pos().x()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            end_of_l1 = pg.Point(
 | 
					 | 
				
			||||||
                round(
 | 
					 | 
				
			||||||
                    chart.cv.mapToView(
 | 
					 | 
				
			||||||
                        pg.Point(r_axis_x - chart._max_l1_line_len)
 | 
					 | 
				
			||||||
                    ).x()
 | 
					 | 
				
			||||||
                )
 | 
					 | 
				
			||||||
            ).x()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            # self.state['viewRange'][0][1] = end_of_l1
 | 
					 | 
				
			||||||
            # focal = pg.Point((last_bar.x() + end_of_l1)/2)
 | 
					 | 
				
			||||||
            # focal = pg.Point(last_bar.x() + end_of_l1)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            # use right-most point of current curve graphic
 | 
					            # use right-most point of current curve graphic
 | 
				
			||||||
            xl = viz.graphics.x_last()
 | 
					            xl = viz.graphics.x_last()
 | 
				
			||||||
            focal = min(
 | 
					            focal = min(
 | 
				
			||||||
                xl,
 | 
					                xl,
 | 
				
			||||||
                end_of_l1,
 | 
					                vr,
 | 
				
			||||||
            )
 | 
					            )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            self._resetTarget()
 | 
					            self._resetTarget()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            # NOTE: scroll "around" the right most datum-element in view
 | 
				
			||||||
 | 
					            # gives the feeling of staying "pinned" in place.
 | 
				
			||||||
            self.scaleBy(s, focal)
 | 
					            self.scaleBy(s, focal)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            # XXX: the order of the next 2 lines i'm pretty sure
 | 
					            # XXX: the order of the next 2 lines i'm pretty sure
 | 
				
			||||||
| 
						 | 
					@ -674,9 +642,6 @@ class ChartView(ViewBox):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            # PANNING MODE
 | 
					            # PANNING MODE
 | 
				
			||||||
            else:
 | 
					            else:
 | 
				
			||||||
                # XXX: WHY
 | 
					 | 
				
			||||||
                ev.accept()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                try:
 | 
					                try:
 | 
				
			||||||
                    self.start_ic()
 | 
					                    self.start_ic()
 | 
				
			||||||
                except RuntimeError:
 | 
					                except RuntimeError:
 | 
				
			||||||
| 
						 | 
					@ -708,6 +673,9 @@ class ChartView(ViewBox):
 | 
				
			||||||
                    # self._ic = None
 | 
					                    # self._ic = None
 | 
				
			||||||
                    # self.chart.resume_all_feeds()
 | 
					                    # self.chart.resume_all_feeds()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                # XXX: WHY
 | 
				
			||||||
 | 
					                ev.accept()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # WEIRD "RIGHT-CLICK CENTER ZOOM" MODE
 | 
					        # WEIRD "RIGHT-CLICK CENTER ZOOM" MODE
 | 
				
			||||||
        elif button & QtCore.Qt.RightButton:
 | 
					        elif button & QtCore.Qt.RightButton:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -753,7 +721,11 @@ class ChartView(ViewBox):
 | 
				
			||||||
        *,
 | 
					        *,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        yrange: Optional[tuple[float, float]] = None,
 | 
					        yrange: Optional[tuple[float, float]] = None,
 | 
				
			||||||
        range_margin: float = 0.06,
 | 
					
 | 
				
			||||||
 | 
					        # NOTE: this value pairs (more or less) with L1 label text
 | 
				
			||||||
 | 
					        # height offset from from the bid/ask lines.
 | 
				
			||||||
 | 
					        range_margin: float = 0.09,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        bars_range: Optional[tuple[int, int, int, int]] = None,
 | 
					        bars_range: Optional[tuple[int, int, int, int]] = None,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # flag to prevent triggering sibling charts from the same linked
 | 
					        # flag to prevent triggering sibling charts from the same linked
 | 
				
			||||||
| 
						 | 
					@ -910,7 +882,7 @@ class ChartView(ViewBox):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def maybe_downsample_graphics(
 | 
					    def maybe_downsample_graphics(
 | 
				
			||||||
        self,
 | 
					        self,
 | 
				
			||||||
        autoscale_overlays: bool = True,
 | 
					        autoscale_overlays: bool = False,
 | 
				
			||||||
    ):
 | 
					    ):
 | 
				
			||||||
        profiler = Profiler(
 | 
					        profiler = Profiler(
 | 
				
			||||||
            msg=f'ChartView.maybe_downsample_graphics() for {self.name}',
 | 
					            msg=f'ChartView.maybe_downsample_graphics() for {self.name}',
 | 
				
			||||||
| 
						 | 
					@ -946,10 +918,7 @@ class ChartView(ViewBox):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                # pass in no array which will read and render from the last
 | 
					                # pass in no array which will read and render from the last
 | 
				
			||||||
                # passed array (normally provided by the display loop.)
 | 
					                # passed array (normally provided by the display loop.)
 | 
				
			||||||
                chart.update_graphics_from_flow(
 | 
					                chart.update_graphics_from_flow(name)
 | 
				
			||||||
                    name,
 | 
					 | 
				
			||||||
                    use_vr=True,
 | 
					 | 
				
			||||||
                )
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
                # for each overlay on this chart auto-scale the
 | 
					                # for each overlay on this chart auto-scale the
 | 
				
			||||||
                # y-range to max-min values.
 | 
					                # y-range to max-min values.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue