def on_paint(self, _): if self._value_range is None: return # shared function with the export method self._tick_list, self._vtp_ratio = calculate_ticks( self._value_range, self.ClientSize, self._orientation, self._tick_spacing) csize = self.ClientSize # Set Font font = wx.SystemSettings.GetFont(wx.SYS_DEFAULT_GUI_FONT) ctx = wx.lib.wxcairo.ContextFromDC(wx.PaintDC(self)) ctx.select_font_face(font.GetFaceName(), cairo.FONT_SLANT_NORMAL, cairo.FONT_WEIGHT_NORMAL) ctx.set_font_size(font.GetPointSize()) ctx.set_source_rgb(*self.tick_colour) ctx.set_line_width(2) ctx.set_line_join(cairo.LINE_JOIN_MITER) max_width = 0 prev_lpos = 0 if self._orientation == wx.HORIZONTAL else csize.y for i, (pos, val) in enumerate(self._tick_list): label = units.readable_str(val, self.unit, 3) _, _, lbl_width, lbl_height, _, _ = ctx.text_extents(label) if self._orientation == wx.HORIZONTAL: lpos = pos - (lbl_width // 2) lpos = max(min(lpos, csize.x - lbl_width - 2), 2) # print (i, prev_right, lpos) if prev_lpos < lpos: ctx.move_to(lpos, lbl_height + 8) ctx.show_text(label) ctx.move_to(pos, 5) ctx.line_to(pos, 0) prev_lpos = lpos + lbl_width else: max_width = max(max_width, lbl_width) lpos = pos + (lbl_height // 2) lpos = max(min(lpos, csize.y), 2) if prev_lpos >= lpos + 20 or i == 0: ctx.move_to(csize.x - lbl_width - 9, lpos) ctx.show_text(label) ctx.move_to(csize.x - 5, pos) ctx.line_to(csize.x, pos) prev_lpos = lpos + lbl_height ctx.stroke() if self._orientation == wx.VERTICAL and max_width != self._max_tick_width: self._max_tick_width = max_width self.SetMinSize((self._max_tick_width + 14, -1)) self.Parent.GetSizer().Layout()
def on_paint(self, _): if self._value_range is None: return # shared function with the export method self._tick_list, self._vtp_ratio = calculate_ticks(self._value_range, self.ClientSize, self._orientation, self._tick_spacing) csize = self.ClientSize # Set Font font = wx.SystemSettings.GetFont(wx.SYS_DEFAULT_GUI_FONT) ctx = wx.lib.wxcairo.ContextFromDC(wx.PaintDC(self)) ctx.select_font_face(font.GetFaceName(), cairo.FONT_SLANT_NORMAL, cairo.FONT_WEIGHT_NORMAL) ctx.set_font_size(font.GetPointSize()) ctx.set_source_rgb(*self.tick_colour) ctx.set_line_width(2) ctx.set_line_join(cairo.LINE_JOIN_MITER) max_width = 0 prev_lpos = 0 if self._orientation == wx.HORIZONTAL else csize.y for i, (pos, val) in enumerate(self._tick_list): label = units.readable_str(val, self.unit, 3) _, _, lbl_width, lbl_height, _, _ = ctx.text_extents(label) if self._orientation == wx.HORIZONTAL: lpos = pos - (lbl_width // 2) lpos = max(min(lpos, csize.x - lbl_width - 2), 2) # print (i, prev_right, lpos) if prev_lpos < lpos: ctx.move_to(lpos, lbl_height + 8) ctx.show_text(label) ctx.move_to(pos, 5) ctx.line_to(pos, 0) prev_lpos = lpos + lbl_width else: max_width = max(max_width, lbl_width) lpos = pos + (lbl_height // 2) lpos = max(min(lpos, csize.y), 2) if prev_lpos >= lpos + 20 or i == 0: ctx.move_to(csize.x - lbl_width - 9, lpos) ctx.show_text(label) ctx.move_to(csize.x - 5, pos) ctx.line_to(csize.x, pos) prev_lpos = lpos + lbl_height ctx.stroke() if self._orientation == wx.VERTICAL and max_width != self._max_tick_width: self._max_tick_width = max_width self.SetMinSize((self._max_tick_width + 14, -1)) self.Parent.GetSizer().Layout()
def on_paint(self, _): if self._value_range is None: return # shared function with the export method self._tick_list, self._vtp_ratio = calculate_ticks(self._value_range, self.ClientSize, self._orientation, self._tick_spacing) csize = self.ClientSize if self.lock_va is not None and self.lock_va.value == False: if self._orientation == wx.HORIZONTAL: csize.x -= 24 # If min and max are very close, we need more significant numbers to # ensure the values displayed are different (ex 17999 -> 18003) rng = self._value_range if rng[0] == rng[1]: sig = None else: ratio_rng = max(abs(v) for v in rng) / (max(rng) - min(rng)) sig = max(3, 1 + math.ceil(math.log10(ratio_rng * len(self._tick_list)))) # Set Font font = wx.SystemSettings.GetFont(wx.SYS_DEFAULT_GUI_FONT) ctx = wx.lib.wxcairo.ContextFromDC(wx.PaintDC(self)) ctx.select_font_face(font.GetFaceName(), cairo.FONT_SLANT_NORMAL, cairo.FONT_WEIGHT_NORMAL) ctx.set_font_size(font.GetPointSize()) ctx.set_source_rgb(*self.tick_colour) ctx.set_line_width(2) ctx.set_line_join(cairo.LINE_JOIN_MITER) max_width = 0 prev_lpos = 0 if self._orientation == wx.HORIZONTAL else csize.y for i, (pos, val) in enumerate(self._tick_list): label = units.readable_str(val, self.unit, sig) if i == 0 and self._lo_ellipsis: label = u"…" + label if i == len(self._tick_list) - 1 and self._hi_ellipsis: label = label + u"…" _, _, lbl_width, lbl_height, _, _ = ctx.text_extents(label) if self._orientation == wx.HORIZONTAL: lpos = pos - (lbl_width // 2) lpos = max(min(lpos, csize.x - lbl_width - 2), 2) # print (i, prev_right, lpos) if prev_lpos < lpos: ctx.move_to(lpos, lbl_height + 8) ctx.show_text(label) ctx.move_to(pos, 5) ctx.line_to(pos, 0) prev_lpos = lpos + lbl_width else: max_width = max(max_width, lbl_width) lpos = pos + (lbl_height // 2) lpos = max(min(lpos, csize.y), 2) if prev_lpos >= lpos + 20 or i == 0: ctx.move_to(csize.x - lbl_width - 9, lpos) ctx.show_text(label) ctx.move_to(csize.x - 5, pos) ctx.line_to(csize.x, pos) prev_lpos = lpos + lbl_height ctx.stroke() if self._orientation == wx.VERTICAL and max_width != self._max_tick_width: self._max_tick_width = max_width self.SetMinSize((self._max_tick_width + 14, -1)) self.Parent.GetSizer().Layout()