完美一版
This commit is contained in:
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user