Add curve px width getter

`ChartPlotWidget.curve_width_pxs()` now can be used to get the total
horizontal (x) pixels on screen that are occupied by the current curve
graphics for a given chart. This will be used for downsampling large
data sets to the pixel domain using M4.
m4_corrections
Tyler Goodlet 2022-03-16 07:28:03 -04:00
parent d86320848f
commit acba4e8f02
1 changed files with 19 additions and 5 deletions

View File

@ -1,5 +1,5 @@
# piker: trading gear for hackers # piker: trading gear for hackers
# Copyright (C) Tyler Goodlet (in stewardship for piker0) # Copyright (C) Tyler Goodlet (in stewardship for pikers)
# This program is free software: you can redistribute it and/or modify # This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by # it under the terms of the GNU Affero General Public License as published by
@ -22,7 +22,11 @@ from __future__ import annotations
from typing import Optional, TYPE_CHECKING from typing import Optional, TYPE_CHECKING
from PyQt5 import QtCore, QtWidgets from PyQt5 import QtCore, QtWidgets
from PyQt5.QtCore import Qt from PyQt5.QtCore import (
Qt,
QLineF,
QPointF,
)
from PyQt5.QtWidgets import ( from PyQt5.QtWidgets import (
QFrame, QFrame,
QWidget, QWidget,
@ -824,14 +828,24 @@ class ChartPlotWidget(pg.PlotWidget):
return int(vr.left()), int(vr.right()) return int(vr.left()), int(vr.right())
def bars_range(self) -> tuple[int, int, int, int]: def bars_range(self) -> tuple[int, int, int, int]:
"""Return a range tuple for the bars present in view. '''
""" Return a range tuple for the bars present in view.
'''
l, r = self.view_range() l, r = self.view_range()
array = self._arrays[self.name] array = self._arrays[self.name]
lbar = max(l, array[0]['index']) lbar = max(l, array[0]['index'])
rbar = min(r, array[-1]['index']) rbar = min(r, array[-1]['index'])
return l, lbar, rbar, r return l, lbar, rbar, r
def curve_width_pxs(
self,
) -> float:
_, lbar, rbar, _ = self.bars_range()
return self.view.mapViewToDevice(
QLineF(lbar, 0, rbar, 0)
).length()
def default_view( def default_view(
self, self,
index: int = -1, index: int = -1,
@ -864,7 +878,7 @@ class ChartPlotWidget(pg.PlotWidget):
self.view.maybe_downsample_graphics() self.view.maybe_downsample_graphics()
try: try:
self.linked.graphics_cycle() self.linked.graphics_cycle()
except: except IndexError:
pass pass
def increment_view( def increment_view(