Implement split stereo bar colors

pull/491/head
nyanpasu64 2024-09-14 01:45:46 -07:00
rodzic cecd875278
commit 4509e9b69d
4 zmienionych plików z 41 dodań i 13 usunięć

Wyświetl plik

@ -1,5 +1,9 @@
## 0.11.0 (unreleased)
### Features
- Implement split stereo bar colors (#491)
### Major Changes
- Encode audio using libopus instead of aac (#487)

Wyświetl plik

@ -239,6 +239,9 @@ class MainWindow(qw.QMainWindow, Ui_MainWindow):
map_gui(self, self.model)
self.model.update_widget["render_stereo"].append(self.on_render_stereo_changed)
self.model.update_widget["render__global_stereo_bars"].append(
self.on_stereo_bars_changed
)
# Bind config to UI.
if isinstance(cfg_or_path, Config):
@ -287,6 +290,11 @@ class MainWindow(qw.QMainWindow, Ui_MainWindow):
self.model.cfg.render_stereo is Flatten.Stereo
)
def on_stereo_bars_changed(self):
bars = self.model.cfg.render.global_stereo_bars
self.render__stereo_bar_right_color.setVisible(bars)
self.render__stereo_bar_right_colorL.setVisible(bars)
# Closing active document
def _cancel_render_if_active(self, title: str) -> bool:

Wyświetl plik

@ -290,6 +290,11 @@ class MainWindow(QWidget):
):
self.render__global_stereo_bars.setText(tr("Stereo Bars"))
with add_row(
s, tr("Right Color"), OptionalColorWidget
) as self.render__stereo_bar_right_color:
pass
with add_row(
s,
tr("Grid Opacity"),

Wyświetl plik

@ -149,7 +149,9 @@ class Font(DumpableAttrs, always_dump="*"):
class RendererConfig(
DumpableAttrs, always_dump="*", exclude="viewport_width viewport_height"
DumpableAttrs,
always_dump="*",
exclude="stereo_bar_right_color viewport_width viewport_height",
):
width: int
height: int
@ -188,6 +190,7 @@ class RendererConfig(
global_stereo_bars: bool = False
stereo_bar_color: str = "#88ffff"
stereo_bar_right_color: Optional[str] = None
# Label settings
label_font: Font = attr.ib(factory=Font)
@ -516,18 +519,19 @@ def px_from_points(pt: Point) -> Pixel:
@attr.dataclass(cmp=False)
class StereoBar:
rect: Rectangle
left: Rectangle
right: Rectangle
x_center: float
x_range: float
def set_range(self, left: float, right: float):
left = -left
"""{left, right} are ≥ 0."""
x = self.x_center + left * self.x_range
width = (right - left) * self.x_range
self.left.set_x(self.x_center - left * self.x_range)
self.left.set_width(left * self.x_range)
self.rect.set_x(x)
self.rect.set_width(width)
# self.right.x should always be self.x_center.
self.right.set_width(right * self.x_range)
class AbstractMatplotlibRenderer(_RendererBase, ABC):
@ -859,15 +863,22 @@ class AbstractMatplotlibRenderer(_RendererBase, ABC):
y_bottom = ax.get_ylim()[0]
h = abs(y_bottom) / 16
stereo_rect = Rectangle((x_center, y_bottom - h), 0, 2 * h)
stereo_rect.set_color(cfg.stereo_bar_color)
stereo_rect.set_linewidth(0)
ax.add_patch(stereo_rect)
stereo_bar = StereoBar(stereo_rect, x_center, x_range)
def create_rect(color):
rect = Rectangle((x_center, y_bottom - h), 0, 2 * h)
rect.set_color(color)
rect.set_linewidth(0)
ax.add_patch(rect)
self._artists.append(rect)
return rect
left = create_rect(cfg.stereo_bar_color)
right = create_rect(cfg.stereo_bar_right_color or cfg.stereo_bar_color)
stereo_bar = StereoBar(left, right, x_center, x_range)
wave_to_stereo_bar.append(stereo_bar)
self._artists.append(stereo_rect)
else:
wave_to_stereo_bar.append(None)