only-draw-visible-stuff #2
@@ -131,7 +131,7 @@ class BigText(QWidget):
|
|||||||
# noinspection PyArgumentList,PyTypeChecker
|
# noinspection PyArgumentList,PyTypeChecker
|
||||||
class InnerBigText(QWidget):
|
class InnerBigText(QWidget):
|
||||||
_byte_offset = 0
|
_byte_offset = 0
|
||||||
_left_offset = 0
|
_left_offset = 0 # number of characters the horizontal scrollbar was moved to the right
|
||||||
scroll_lines = 0
|
scroll_lines = 0
|
||||||
longest_line = 0
|
longest_line = 0
|
||||||
|
|
||||||
@@ -504,22 +504,25 @@ class InnerBigText(QWidget):
|
|||||||
y_line_offset = self.char_height
|
y_line_offset = self.char_height
|
||||||
for line in self.lines:
|
for line in self.lines:
|
||||||
text = line.line_prepared_for_display()
|
text = line.line_prepared_for_display()
|
||||||
painter.drawText(left_offset, y_line_offset, text)
|
leftmost_visible_char_index = line.column_to_char(self._left_offset)
|
||||||
|
rightmost_visible_char_index = line.column_to_char(self._left_offset + math.ceil(self.columns_shown()))
|
||||||
|
text = text[
|
||||||
|
leftmost_visible_char_index:rightmost_visible_char_index] # reduce string to the visible section before drawing
|
||||||
|
painter.drawText(0, y_line_offset, text)
|
||||||
|
# painter.drawText(left_offset, y_line_offset, text)
|
||||||
y_line_offset = y_line_offset + self.char_height
|
y_line_offset = y_line_offset + self.char_height
|
||||||
|
|
||||||
painter.end()
|
painter.end()
|
||||||
end_ns = time.process_time_ns()
|
end_ns = time.process_time_ns()
|
||||||
#print(f"paint took {(end_ns - start_ns) / 1000000.0}")
|
print(f"paint took {(end_ns - start_ns) / 1000000.0}")
|
||||||
|
|
||||||
def draw_highlights(self, highlights: [HighlightedRange], painter: QPainter, y_line_offset: int):
|
def draw_highlights(self, highlights: [HighlightedRange], painter: QPainter, y_line_offset: int):
|
||||||
|
|
||||||
for highlight in highlights:
|
for highlight in highlights:
|
||||||
if highlight.is_highlight_full_line():
|
if highlight.is_highlight_full_line():
|
||||||
left_offset = -1 * self._left_offset * self.char_width
|
|
||||||
y1 = y_line_offset - self.char_height + self.char_height / 7
|
y1 = y_line_offset - self.char_height + self.char_height / 7
|
||||||
height = self.char_height
|
height = self.char_height
|
||||||
full_width = Settings.max_line_length() * self.char_width
|
rect = QRect(0, round(y1), self.width(), round(height))
|
||||||
rect = QRect(round(left_offset), round(y1), round(full_width), round(height))
|
|
||||||
self.highlight_background(painter, rect, highlight.get_brush_full_line())
|
self.highlight_background(painter, rect, highlight.get_brush_full_line())
|
||||||
|
|
||||||
for highlight in highlights:
|
for highlight in highlights:
|
||||||
@@ -529,7 +532,13 @@ class InnerBigText(QWidget):
|
|||||||
y1 = y_line_offset - self.char_height + self.char_height / 7
|
y1 = y_line_offset - self.char_height + self.char_height / 7
|
||||||
height = self.char_height
|
height = self.char_height
|
||||||
|
|
||||||
rect = QRect(round(x1 - left_offset), round(y1), round(width), round(height))
|
left = round(x1 - left_offset)
|
||||||
|
if x1 + width < left_offset \
|
||||||
|
or x1 > left_offset + self.width():
|
||||||
|
# too far left or too far right
|
||||||
|
continue
|
||||||
|
|
||||||
|
rect = QRect(left, round(y1), round(width), round(height))
|
||||||
self.highlight_background(painter, rect, highlight.get_brush())
|
self.highlight_background(painter, rect, highlight.get_brush())
|
||||||
|
|
||||||
def highlight_background(self, painter: QPainter, rect: QRect, brush: QBrush):
|
def highlight_background(self, painter: QPainter, rect: QRect, brush: QBrush):
|
||||||
|
|||||||
@@ -35,6 +35,12 @@ class HighlightRegex(Highlight):
|
|||||||
|
|
||||||
def compute_highlight(self, line: Line) -> Optional[List[HighlightedRange]]:
|
def compute_highlight(self, line: Line) -> Optional[List[HighlightedRange]]:
|
||||||
result = []
|
result = []
|
||||||
|
|
||||||
|
if len(self.query) == 0:
|
||||||
|
# query is empty - this would result in many hits and is quite expensive
|
||||||
|
# This happens with the highlighter we use for the selected text and maybe for the current filter query.
|
||||||
|
return result
|
||||||
|
|
||||||
# print("execute regex: %s in %s" % (self.regex, line.line()))
|
# print("execute regex: %s in %s" % (self.regex, line.line()))
|
||||||
match_iter = re.finditer(self.regex, line.line())
|
match_iter = re.finditer(self.regex, line.line())
|
||||||
for match in match_iter:
|
for match in match_iter:
|
||||||
|
|||||||
@@ -101,8 +101,9 @@ class RangeSlider(QWidget):
|
|||||||
|
|
||||||
painter.setBrush(to_qcolor("dddddd"))
|
painter.setBrush(to_qcolor("dddddd"))
|
||||||
painter.setPen(to_qcolor("444444"))
|
painter.setPen(to_qcolor("444444"))
|
||||||
painter.setRenderHint(PySide6.QtGui.QPainter.RenderHint.Antialiasing, True)
|
painter.setRenderHint(PySide6.QtGui.QPainter.RenderHint.Antialiasing, False)
|
||||||
painter.drawLine(2, y_pixel, 18, y_pixel)
|
painter.drawLine(2, y_pixel, 18, y_pixel)
|
||||||
|
painter.setRenderHint(PySide6.QtGui.QPainter.RenderHint.Antialiasing, True)
|
||||||
painter.drawPolygon(
|
painter.drawPolygon(
|
||||||
(QPoint(10, y_pixel), QPoint(18, y_pixel + 12 * direction), QPoint(2, y_pixel + 12 * direction)))
|
(QPoint(10, y_pixel), QPoint(18, y_pixel + 12 * direction), QPoint(2, y_pixel + 12 * direction)))
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user