From dacc62b9e60dde0f2faf6c85dead270416eff305 Mon Sep 17 00:00:00 2001 From: wyc <1104749580@qq.com> Date: Sun, 2 Aug 2026 00:26:59 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E7=BE=8E=E4=B8=80=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- module/radio/BackEnd/RadioWidget.cpp | 82 +++++++++++++++++----------- 1 file changed, 51 insertions(+), 31 deletions(-) diff --git a/module/radio/BackEnd/RadioWidget.cpp b/module/radio/BackEnd/RadioWidget.cpp index 23a7a32..5ed0d4a 100644 --- a/module/radio/BackEnd/RadioWidget.cpp +++ b/module/radio/BackEnd/RadioWidget.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #include #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(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(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 {