完美一版

This commit is contained in:
2026-08-02 00:26:59 +08:00
parent 8b63f1f564
commit dacc62b9e6
+51 -31
View File
@@ -2,6 +2,7 @@
#include <QDebug>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <algorithm>
#include <vector>
#include "../component/FrequentShower.h"
#include "../component/ProgressBar.h"
@@ -39,6 +40,37 @@ static void apply_radio_performance_overlay(renderive::Latency_Eager_Plot* plot)
return;
renderive::set_performance_shower_enabled(*plot->core(), enabled);
}
struct Radio_Plot_Layout {
int left_axis_width{};
int bottom_axis_height{};
int content_x{};
int content_y{};
int content_width{};
int content_height{};
};
static Radio_Plot_Layout radio_plot_layout(int width, int height) {
Radio_Plot_Layout layout;
layout.left_axis_width = std::min(58, std::max(0, width - 1));
layout.bottom_axis_height = std::min(30, std::max(0, height - 1));
layout.content_x = layout.left_axis_width;
layout.content_y = 0;
layout.content_width = std::max(1, width - layout.left_axis_width);
layout.content_height = std::max(1, height - layout.bottom_axis_height);
return layout;
}
static void apply_radio_plot_layout(renderive::Abs_Axis* x_axis, renderive::Abs_Axis* y_axis, int width, int height) {
const Radio_Plot_Layout layout = radio_plot_layout(width, height);
if (x_axis) {
x_axis->set_x(layout.content_x);
x_axis->set_y(layout.content_y + layout.content_height);
x_axis->set_pixel_size(static_cast<std::size_t>(layout.content_width));
}
if (y_axis) {
y_axis->set_x(layout.content_x);
y_axis->set_y(layout.content_y);
y_axis->set_pixel_size(static_cast<std::size_t>(layout.content_height));
}
}
QWidget* Radio_Widget::create_spectrogram_power_plot() {
class Spectrum_Plot : public renderive::Latency_Eager_Plot {
public:
@@ -61,10 +93,12 @@ QWidget* Radio_Widget::create_spectrogram_power_plot() {
auto overlay = create_renderable_node(get_root_renderable(), "Overlay_Renderable");
x_axis = renderive::Frequency_Axis::Builder(axis_cache, renderive::Orientation::Horizontal)
.set_coord_range(frequent_range)
.set_tick_length(-10)
.set_tick_length(10)
.build();
y_axis = renderive::Axis::Builder(axis_cache, renderive::Orientation::Vertical)
.set_coord_range({max, 0})
.set_tick_length(-10)
.set_sub_tick_length(-5)
.set_unit_text("功率")
.build();
sp = renderive::Spectrum::Builder(data, x_axis, y_axis)
@@ -75,12 +109,7 @@ QWidget* Radio_Widget::create_spectrogram_power_plot() {
}
protected:
void resizeEvent(QResizeEvent* event) override {
x_axis->set_x(0);
x_axis->set_y(height() - 1);
x_axis->set_pixel_size(width());
y_axis->set_x(0);
y_axis->set_y(0);
y_axis->set_pixel_size(height());
apply_radio_plot_layout(x_axis.get(), y_axis.get(), width(), height());
}
void contextMenuEvent(QContextMenuEvent* event) override {
if (!menu) {
@@ -129,11 +158,13 @@ QWidget* Radio_Widget::create_water_fall_plot() {
stream_cache->set_cache_mode(renderive::Renderable_Cache_Mode::Local_Pixel);
frequency_axis_cache->set_cache_mode(renderive::Renderable_Cache_Mode::Local_Pixel);
x_axis = renderive::Frequency_Axis::Builder(frequency_axis_cache, renderive::Orientation::Horizontal)
.set_tick_length(-10)
.set_sub_tick_length(-5)
.set_tick_length(10)
.set_sub_tick_length(5)
.set_coord_range(frequent_range)
.build();
y_axis = renderive::Time_Axis::Builder(time_axis, renderive::Orientation::Vertical)
.set_tick_length(-10)
.set_sub_tick_length(-5)
.set_time_point_size(100)
.build();
wf = renderive::Waterfall::Builder(data, x_axis, y_axis)
@@ -145,12 +176,7 @@ QWidget* Radio_Widget::create_water_fall_plot() {
}
protected:
void resizeEvent(QResizeEvent* event) override {
x_axis->set_x(0);
x_axis->set_y(height());
x_axis->set_pixel_size(width());
y_axis->set_x(0);
y_axis->set_y(0);
y_axis->set_pixel_size(height());
apply_radio_plot_layout(x_axis.get(), y_axis.get(), width(), height());
}
void contextMenuEvent(QContextMenuEvent* event) override {
if (!menu) {
@@ -190,11 +216,13 @@ QWidget* Radio_Widget::create_audio_spectrogram_plot() {
power_axis_cache->set_cache_mode(renderive::Renderable_Cache_Mode::Local_Pixel);
x_axis = renderive::Frequency_Axis::Builder(frequency_axis_cache, renderive::Orientation::Horizontal)
.set_coord_range({-12000, 12000})
.set_tick_length(-10)
.set_sub_tick_length(-5)
.set_tick_length(10)
.set_sub_tick_length(5)
.build();
y_axis = renderive::Axis::Builder(power_axis_cache, renderive::Orientation::Vertical)
.set_coord_range({12000, -12000})
.set_tick_length(-10)
.set_sub_tick_length(-5)
.set_unit_text("功率").build();
sp = renderive::Spectrum::Builder(data, x_axis, y_axis)
.set_frequency_range({-12000, 12000})
@@ -204,12 +232,7 @@ QWidget* Radio_Widget::create_audio_spectrogram_plot() {
}
protected:
void resizeEvent(QResizeEvent* event) override {
x_axis->set_x(0);
x_axis->set_y(height() - 1);
x_axis->set_pixel_size(width());
y_axis->set_x(0);
y_axis->set_y(0);
y_axis->set_pixel_size(height());
apply_radio_plot_layout(x_axis.get(), y_axis.get(), width(), height());
}
void contextMenuEvent(QContextMenuEvent* event) override {
if (!menu) {
@@ -249,11 +272,13 @@ QWidget* Radio_Widget::create_time_power_plot() {
stream_cache->set_cache_mode(renderive::Renderable_Cache_Mode::Local_Pixel);
power_axis_cache->set_cache_mode(renderive::Renderable_Cache_Mode::Local_Pixel);
x_axis = renderive::Time_Axis::Builder(time_axis, renderive::Orientation::Horizontal)
.set_tick_length(-10)
.set_sub_tick_length(-5)
.set_tick_length(10)
.set_sub_tick_length(5)
.build();
y_axis = renderive::Axis::Builder(power_axis_cache, renderive::Orientation::Vertical)
.set_coord_range({12000, -12000})
.set_tick_length(-10)
.set_sub_tick_length(-5)
.build();
audio = renderive::Audio_Frequency::Builder(data, x_axis, y_axis)
.build();
@@ -261,12 +286,7 @@ QWidget* Radio_Widget::create_time_power_plot() {
}
protected:
void resizeEvent(QResizeEvent* event) override {
x_axis->set_x(0);
x_axis->set_y(height() - 1);
x_axis->set_pixel_size(width());
y_axis->set_x(0);
y_axis->set_y(0);
y_axis->set_pixel_size(height());
apply_radio_plot_layout(x_axis.get(), y_axis.get(), width(), height());
x_axis->set_time_point_size(x_axis->get_pixel_point_size());
}
void contextMenuEvent(QContextMenuEvent* event) override {