From 34a3cc7afad7ad5af85b5a984b57888815d82615 Mon Sep 17 00:00:00 2001 From: Nikita Zlobin Date: Sat, 2 Sep 2017 02:58:17 +0500 Subject: [PATCH] Fixed box height calculation Bottom space includes port spacing too. Final bottom space is biggest of port spacing, rounding, 2. Honor header shift due to line weight. Compacted spacingT collect code. --- src/patchcanvas.py | 69 +++++++++++++++------------------------------- 1 file changed, 22 insertions(+), 47 deletions(-) diff --git a/src/patchcanvas.py b/src/patchcanvas.py index 9488454..36b0625 100644 --- a/src/patchcanvas.py +++ b/src/patchcanvas.py @@ -2222,15 +2222,13 @@ class CanvasBox(QGraphicsItem): self.prepareGeometryChange() max_in_width = max_out_width = 0 - max_in_height = max_out_height = canvas.theme.box_header_height + canvas.theme.box_header_spacing + canvas.theme.box_rounding - port_spacing = canvas.theme.port_height + canvas.theme.port_spacing - - have_audio_jack_in = have_midi_jack_in = have_midi_a2j_in = have_midi_alsa_in = False - have_audio_jack_out = have_midi_jack_out = have_midi_a2j_out = have_midi_alsa_out = False + max_in_height = max_out_height = 0 + port_spacing = canvas.theme.port_height + canvas.theme.port_spacing + line_diff = canvas.theme.box_pen.widthF() # reset box size self.p_width = 50 - self.p_height = canvas.theme.box_header_height + canvas.theme.box_header_spacing + 1 + self.p_height = canvas.theme.box_header_height + line_diff # Check Text Name size app_name_size = QFontMetrics(self.m_font_name).width(self.m_group_name) + 30 @@ -2244,6 +2242,8 @@ class CanvasBox(QGraphicsItem): port_list.append(port) # Get Max Box Width/Height + port_in_types = [PORT_TYPE_AUDIO_JACK, PORT_TYPE_MIDI_JACK, PORT_TYPE_MIDI_A2J, PORT_TYPE_MIDI_ALSA] + port_out_types = [PORT_TYPE_AUDIO_JACK, PORT_TYPE_MIDI_JACK, PORT_TYPE_MIDI_A2J, PORT_TYPE_MIDI_ALSA] for port in port_list: if port.port_mode == PORT_MODE_INPUT: max_in_height += port_spacing @@ -2252,18 +2252,9 @@ class CanvasBox(QGraphicsItem): if size > max_in_width: max_in_width = size - if port.port_type == PORT_TYPE_AUDIO_JACK and not have_audio_jack_in: - have_audio_jack_in = True - max_in_height += canvas.theme.port_spacingT - elif port.port_type == PORT_TYPE_MIDI_JACK and not have_midi_jack_in: - have_midi_jack_in = True - max_in_height += canvas.theme.port_spacingT - elif port.port_type == PORT_TYPE_MIDI_A2J and not have_midi_a2j_in: - have_midi_a2j_in = True - max_in_height += canvas.theme.port_spacingT - elif port.port_type == PORT_TYPE_MIDI_ALSA and not have_midi_alsa_in: - have_midi_alsa_in = True + if port.port_type in port_in_types: max_in_height += canvas.theme.port_spacingT + port_in_types.remove(port.port_type) elif port.port_mode == PORT_MODE_OUTPUT: max_out_height += port_spacing @@ -2272,43 +2263,27 @@ class CanvasBox(QGraphicsItem): if size > max_out_width: max_out_width = size - if port.port_type == PORT_TYPE_AUDIO_JACK and not have_audio_jack_out: - have_audio_jack_out = True - max_out_height += canvas.theme.port_spacingT - elif port.port_type == PORT_TYPE_MIDI_JACK and not have_midi_jack_out: - have_midi_jack_out = True - max_out_height += canvas.theme.port_spacingT - elif port.port_type == PORT_TYPE_MIDI_A2J and not have_midi_a2j_out: - have_midi_a2j_out = True - max_out_height += canvas.theme.port_spacingT - elif port.port_type == PORT_TYPE_MIDI_ALSA and not have_midi_alsa_out: - have_midi_alsa_out = True + if port.port_type in port_out_types: max_out_height += canvas.theme.port_spacingT + port_out_types.remove(port.port_type) + + self.p_height += max_in_height if (max_in_height > self.p_height) else max_out_height - if (canvas.theme.port_spacingT == 0 and canvas.theme.box_rounding == 0): - max_in_height += 2 - max_out_height += 2 + if len(port_list) > 0: + # Correct bottom space + bottom_space = canvas.theme.port_spacingT + canvas.theme.port_spacing + self.p_height -= canvas.theme.port_spacingT + canvas.theme.port_spacing + if bottom_space < canvas.theme.box_rounding: + bottom_space = canvas.theme.box_rounding + if bottom_space < 2: + bottom_space = 2 + self.p_height += canvas.theme.box_header_spacing + bottom_space final_width = 30 + max_in_width + max_out_width if final_width > self.p_width: self.p_width = final_width - if max_in_height > self.p_height: - self.p_height = max_in_height - - if max_out_height > self.p_height: - self.p_height = max_out_height - - # Remove bottom space - self.p_height -= canvas.theme.port_spacingT - - if canvas.theme.box_header_spacing > 0: - if len(port_list) == 0: - self.p_height -= canvas.theme.box_header_spacing - else: - self.p_height -= canvas.theme.box_header_spacing/2 - - last_in_pos = last_out_pos = canvas.theme.box_header_height + canvas.theme.box_header_spacing + last_in_pos = last_out_pos = canvas.theme.box_header_height + canvas.theme.box_header_spacing + line_diff last_in_type = last_out_type = PORT_TYPE_NULL # Re-position ports, AUDIO_JACK