Drop legacy "historical" QPicture cruft
							parent
							
								
									ff103070ea
								
							
						
					
					
						commit
						47856666b5
					
				| 
						 | 
				
			
			@ -17,7 +17,7 @@
 | 
			
		|||
"""
 | 
			
		||||
Chart graphics for displaying a slew of different data types.
 | 
			
		||||
"""
 | 
			
		||||
 | 
			
		||||
import inspect
 | 
			
		||||
from typing import List, Optional, Tuple
 | 
			
		||||
 | 
			
		||||
import numpy as np
 | 
			
		||||
| 
						 | 
				
			
			@ -104,7 +104,7 @@ class LineDot(pg.CurvePoint):
 | 
			
		|||
        # first = x[0]
 | 
			
		||||
        # i = index - first
 | 
			
		||||
        i = index - x[0]
 | 
			
		||||
        if i > 0:
 | 
			
		||||
        if i > 0 and i < len(y):
 | 
			
		||||
            newPos = (index, y[i])
 | 
			
		||||
            QtGui.QGraphicsItem.setPos(self, *newPos)
 | 
			
		||||
            return True
 | 
			
		||||
| 
						 | 
				
			
			@ -123,9 +123,8 @@ _corner_margins = {
 | 
			
		|||
    ('top', 'left'): (-4, -5),
 | 
			
		||||
    ('top', 'right'): (4, -5),
 | 
			
		||||
 | 
			
		||||
    # TODO: pretty sure y here needs to be 2x font height
 | 
			
		||||
    ('bottom', 'left'): (-4, 14), 
 | 
			
		||||
    ('bottom', 'right'): (4, 14),
 | 
			
		||||
    ('bottom', 'left'): (-4, lambda font_size: font_size * 2),
 | 
			
		||||
    ('bottom', 'right'): (4, lambda font_size: font_size * 2),
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -142,7 +141,10 @@ class ContentsLabel(pg.LabelItem):
 | 
			
		|||
        font_size: Optional[int] = None,
 | 
			
		||||
    ) -> None:
 | 
			
		||||
        font_size = font_size or _font.font.pixelSize()
 | 
			
		||||
        super().__init__(justify=justify_text, size=f'{str(font_size)}px')
 | 
			
		||||
        super().__init__(
 | 
			
		||||
            justify=justify_text,
 | 
			
		||||
            size=f'{str(font_size)}px'
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        # anchor to viewbox
 | 
			
		||||
        self.setParentItem(chart._vb)
 | 
			
		||||
| 
						 | 
				
			
			@ -153,6 +155,10 @@ class ContentsLabel(pg.LabelItem):
 | 
			
		|||
        index = (_corner_anchors[h], _corner_anchors[v])
 | 
			
		||||
        margins = _corner_margins[(v, h)]
 | 
			
		||||
 | 
			
		||||
        ydim = margins[1]
 | 
			
		||||
        if inspect.isfunction(margins[1]):
 | 
			
		||||
            margins = margins[0], ydim(font_size)
 | 
			
		||||
 | 
			
		||||
        self.anchor(itemPos=index, parentPos=index, offset=margins)
 | 
			
		||||
 | 
			
		||||
    def update_from_ohlc(
 | 
			
		||||
| 
						 | 
				
			
			@ -514,7 +520,6 @@ class BarItems(pg.GraphicsObject):
 | 
			
		|||
        super().__init__()
 | 
			
		||||
 | 
			
		||||
        self.last_bar = QtGui.QPicture()
 | 
			
		||||
        # self.history = QtGui.QPicture()
 | 
			
		||||
 | 
			
		||||
        self.path = QtGui.QPainterPath()
 | 
			
		||||
        # self._h_path = QtGui.QGraphicsPathItem(self.path)
 | 
			
		||||
| 
						 | 
				
			
			@ -594,18 +599,6 @@ class BarItems(pg.GraphicsObject):
 | 
			
		|||
        p.end()
 | 
			
		||||
 | 
			
		||||
    # @timeit
 | 
			
		||||
    # def draw_history(self) -> None:
 | 
			
		||||
    #     # TODO: avoid having to use a ```QPicture` to calc the
 | 
			
		||||
    #     # ``.boundingRect()``, use ``QGraphicsPathItem`` instead?
 | 
			
		||||
    #     # https://doc.qt.io/qt-5/qgraphicspathitem.html
 | 
			
		||||
    #     # self._h_path.setPath(self.path)
 | 
			
		||||
 | 
			
		||||
    #     p = QtGui.QPainter(self.history)
 | 
			
		||||
    #     p.setPen(self.bars_pen)
 | 
			
		||||
    #     p.drawPath(self.path)
 | 
			
		||||
    #     p.end()
 | 
			
		||||
 | 
			
		||||
    @timeit
 | 
			
		||||
    def update_from_array(
 | 
			
		||||
        self,
 | 
			
		||||
        array: np.ndarray,
 | 
			
		||||
| 
						 | 
				
			
			@ -636,26 +629,19 @@ class BarItems(pg.GraphicsObject):
 | 
			
		|||
        # only drawing as many bars as exactly specified.
 | 
			
		||||
 | 
			
		||||
        if prepend_length:
 | 
			
		||||
            # breakpoint()
 | 
			
		||||
 | 
			
		||||
            # new history was added and we need to render a new path
 | 
			
		||||
            new_bars = array[:prepend_length]
 | 
			
		||||
            prepend_path = gen_qpath(new_bars, 0, self.w)
 | 
			
		||||
 | 
			
		||||
            # XXX: SOMETHING IS FISHY HERE what with the old_path
 | 
			
		||||
            # XXX: SOMETHING IS MAYBE FISHY HERE what with the old_path
 | 
			
		||||
            # y value not matching the first value from
 | 
			
		||||
            # array[prepend_length + 1] ???
 | 
			
		||||
 | 
			
		||||
            # update path
 | 
			
		||||
            old_path = self.path
 | 
			
		||||
            self.path = prepend_path
 | 
			
		||||
            # self.path.moveTo(float(index - self.w), float(new_bars[0]['open']))
 | 
			
		||||
            # self.path.moveTo(
 | 
			
		||||
            #     float(istart - self.w),
 | 
			
		||||
            #     # float(array[prepend_length + 1]['open'])
 | 
			
		||||
            #     float(array[prepend_length]['open'])
 | 
			
		||||
            # )
 | 
			
		||||
            self.path.addPath(old_path)
 | 
			
		||||
            # self.draw_history()
 | 
			
		||||
 | 
			
		||||
        if append_length:
 | 
			
		||||
            # generate new lines objects for updatable "current bar"
 | 
			
		||||
| 
						 | 
				
			
			@ -672,45 +658,8 @@ class BarItems(pg.GraphicsObject):
 | 
			
		|||
            self.path.moveTo(float(istop - self.w), float(new_bars[0]['open']))
 | 
			
		||||
            self.path.addPath(append_path)
 | 
			
		||||
 | 
			
		||||
            # self.draw_history()
 | 
			
		||||
 | 
			
		||||
        self._xrange = first_index, last_index
 | 
			
		||||
 | 
			
		||||
        # if extra > 0:
 | 
			
		||||
        #     index = array['index']
 | 
			
		||||
        #     first, last = index[0], indext[-1]
 | 
			
		||||
 | 
			
		||||
        #     # if first < self.start_index:
 | 
			
		||||
        #     #     length = self.start_index - first
 | 
			
		||||
        #     #     prepend_path = gen_qpath(array[:sef:
 | 
			
		||||
 | 
			
		||||
        #     # generate new lines objects for updatable "current bar"
 | 
			
		||||
        #     self._last_bar_lines = lines_from_ohlc(array[-1], self.w)
 | 
			
		||||
        #     self.draw_last_bar()
 | 
			
		||||
 | 
			
		||||
        #     # generate new graphics to match provided array
 | 
			
		||||
        #     # path appending logic:
 | 
			
		||||
        #     # we need to get the previous "current bar(s)" for the time step
 | 
			
		||||
        #     # and convert it to a sub-path to append to the historical set
 | 
			
		||||
        #     new_history_istart = length - 2
 | 
			
		||||
 | 
			
		||||
        #     to_history = array[new_history_istart:new_history_istart + extra]
 | 
			
		||||
 | 
			
		||||
        #     new_history_qpath = gen_qpath(to_history, 0, self.w)
 | 
			
		||||
 | 
			
		||||
        #     # move to position of placement for the next bar in history
 | 
			
		||||
        #     # and append new sub-path
 | 
			
		||||
        #     new_bars = array[index:index + extra]
 | 
			
		||||
 | 
			
		||||
        #     # x, y coordinates for start of next open/left arm
 | 
			
		||||
        #     self.path.moveTo(float(index - self.w), float(new_bars[0]['open']))
 | 
			
		||||
 | 
			
		||||
        #     self.path.addPath(new_history_qpath)
 | 
			
		||||
 | 
			
		||||
        #     self.start_index += extra
 | 
			
		||||
 | 
			
		||||
        # self.draw_history()
 | 
			
		||||
 | 
			
		||||
        if just_history:
 | 
			
		||||
            self.update()
 | 
			
		||||
            return
 | 
			
		||||
| 
						 | 
				
			
			@ -751,7 +700,7 @@ class BarItems(pg.GraphicsObject):
 | 
			
		|||
        self.draw_last_bar()
 | 
			
		||||
        self.update()
 | 
			
		||||
 | 
			
		||||
    @timeit
 | 
			
		||||
    # @timeit
 | 
			
		||||
    def paint(self, p, opt, widget):
 | 
			
		||||
 | 
			
		||||
        # profiler = pg.debug.Profiler(disabled=False, delayed=False)
 | 
			
		||||
| 
						 | 
				
			
			@ -767,13 +716,8 @@ class BarItems(pg.GraphicsObject):
 | 
			
		|||
        # as is necesarry for what's in "view". Not sure if this will
 | 
			
		||||
        # lead to any perf gains other then when zoomed in to less bars
 | 
			
		||||
        # in view.
 | 
			
		||||
        # p.drawPicture(0, 0, self.history)
 | 
			
		||||
        p.drawPicture(0, 0, self.last_bar)
 | 
			
		||||
 | 
			
		||||
        p.setPen(self.bars_pen)
 | 
			
		||||
 | 
			
		||||
        # TODO: does it matter which we use?
 | 
			
		||||
        # p.drawPath(self._h_path.path())
 | 
			
		||||
        p.drawPath(self.path)
 | 
			
		||||
 | 
			
		||||
    # @timeit
 | 
			
		||||
| 
						 | 
				
			
			@ -794,7 +738,6 @@ class BarItems(pg.GraphicsObject):
 | 
			
		|||
        # compute aggregate bounding rectangle
 | 
			
		||||
        lb = self.last_bar.boundingRect()
 | 
			
		||||
        hb = self.path.boundingRect()
 | 
			
		||||
        # hb = self._h_path.boundingRect()
 | 
			
		||||
 | 
			
		||||
        return QtCore.QRectF(
 | 
			
		||||
            # top left
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue