From dc3e66cfdcbe6d46b74693891cada12075850984 Mon Sep 17 00:00:00 2001 From: Rokas Puzonas Date: Mon, 3 Feb 2025 00:45:38 +0200 Subject: [PATCH] fix graph minimap --- src/app.zig | 118 ++++++++++++++++++++++++++++++---------------------- 1 file changed, 69 insertions(+), 49 deletions(-) diff --git a/src/app.zig b/src/app.zig index 68f1929..a2014ef 100644 --- a/src/app.zig +++ b/src/app.zig @@ -240,7 +240,7 @@ pub fn tick(self: *App) !void { { const sample_count: f32 = @floatFromInt(channel.samples.owned.len); - const min_visible_samples = sample_count*0.02; + const min_visible_samples = 1; // sample_count*0.02; const minimap_box = self.ui.newBoxFromString("Minimap"); minimap_box.background = rl.Color.dark_purple; @@ -252,73 +252,93 @@ pub fn tick(self: *App) !void { const minimap_rect = minimap_box.computedRect(); + + const middle_box = self.ui.newBoxFromString("Middle knob"); { - const middle_box = self.ui.newBoxFromString("Middle knob"); middle_box.flags.insert(.clickable); middle_box.flags.insert(.draggable_x); - middle_box.background = rl.Color.ray_white; + middle_box.background = rl.Color.black.alpha(0.5); middle_box.size.y = UI.Size.pixels(32, 1); - - const signal = self.ui.signalFromBox(middle_box); - if (signal.dragged()) { - - var samples_moved = signal.drag.x / minimap_rect.width * sample_count; - - samples_moved = clamp(samples_moved, -channel.view_rect.from, sample_count - channel.view_rect.to); - - channel.view_rect.from += samples_moved; - channel.view_rect.to += samples_moved; - } - - middle_box.setFixedX(minimap_rect.width * channel.view_rect.from / sample_count + 4); - middle_box.setFixedWidth(minimap_rect.width * (channel.view_rect.to - channel.view_rect.from) / sample_count - 8); } + const left_knob_box = self.ui.newBoxFromString("Left knob"); { - const left_knob_box = self.ui.newBoxFromString("Left knob"); left_knob_box.flags.insert(.clickable); left_knob_box.flags.insert(.draggable_x); - left_knob_box.background = rl.Color.ray_white; + left_knob_box.background = rl.Color.black.alpha(0.5); left_knob_box.size.x = UI.Size.pixels(8, 1); left_knob_box.size.y = UI.Size.pixels(32, 1); - - const left_signal = self.ui.signalFromBox(left_knob_box); - if (left_signal.dragged()) { - channel.view_rect.from += remap( - f32, - 0, minimap_rect.width, - 0, sample_count, - left_signal.drag.x - ); - - channel.view_rect.from = clamp(channel.view_rect.from, 0, channel.view_rect.to-min_visible_samples); - } - - left_knob_box.setFixedX(minimap_rect.width * channel.view_rect.from / sample_count - left_knob_box.persistent.size.x/2); } + const right_knob_box = self.ui.newBoxFromString("Right knob"); { - const right_knob_box = self.ui.newBoxFromString("Right knobaaa"); right_knob_box.flags.insert(.clickable); right_knob_box.flags.insert(.draggable_x); - right_knob_box.background = rl.Color.ray_white; + right_knob_box.background = rl.Color.black.alpha(0.5); right_knob_box.size.x = UI.Size.pixels(8, 1); right_knob_box.size.y = UI.Size.pixels(32, 1); - - const right_signal = self.ui.signalFromBox(right_knob_box); - if (right_signal.dragged()) { - channel.view_rect.to += remap( - f32, - 0, minimap_rect.width, - 0, sample_count, - right_signal.drag.x - ); - - channel.view_rect.to = clamp(channel.view_rect.to, channel.view_rect.from+min_visible_samples, sample_count); - } - - right_knob_box.setFixedX(minimap_rect.width * channel.view_rect.to / sample_count - right_knob_box.persistent.size.x/2); } + + const left_knob_size = left_knob_box.persistent.size.x; + const right_knob_size = right_knob_box.persistent.size.x; + + const left_signal = self.ui.signalFromBox(left_knob_box); + if (left_signal.dragged()) { + channel.view_rect.from += remap( + f32, + 0, minimap_rect.width, + 0, sample_count, + left_signal.drag.x + ); + + channel.view_rect.from = clamp(channel.view_rect.from, 0, channel.view_rect.to-min_visible_samples); + } + + const right_signal = self.ui.signalFromBox(right_knob_box); + if (right_signal.dragged()) { + channel.view_rect.to += remap( + f32, + 0, minimap_rect.width, + 0, sample_count, + right_signal.drag.x + ); + + channel.view_rect.to = clamp(channel.view_rect.to, channel.view_rect.from+min_visible_samples, sample_count); + } + + const middle_signal = self.ui.signalFromBox(middle_box); + if (middle_signal.dragged()) { + var samples_moved = middle_signal.drag.x / minimap_rect.width * sample_count; + + samples_moved = clamp(samples_moved, -channel.view_rect.from, sample_count - channel.view_rect.to); + + channel.view_rect.from += samples_moved; + channel.view_rect.to += samples_moved; + } + + left_knob_box.setFixedX(remap(f32, + 0, sample_count, + 0, minimap_rect.width - left_knob_size - right_knob_size, + channel.view_rect.from + )); + + right_knob_box.setFixedX(remap(f32, + 0, sample_count, + left_knob_size, minimap_rect.width - right_knob_size, + channel.view_rect.to + )); + + middle_box.setFixedX(remap(f32, + 0, sample_count, + left_knob_size, minimap_rect.width - right_knob_size, + channel.view_rect.from + )); + middle_box.setFixedWidth(remap(f32, + 0, sample_count, + 0, minimap_rect.width - right_knob_size - left_knob_size, + channel.view_rect.to - channel.view_rect.from + )); + } } }