策略抽离

This commit is contained in:
2026-08-02 16:02:15 +08:00
parent dda25f9038
commit ffaca5b05f
55 changed files with 1431 additions and 886 deletions
+17 -14
View File
@@ -1,4 +1,6 @@
#include "Performance_Overlay_p.h"
#include "../architecture/Plot_Render_Context.h"
#include "../plot/Plot_Core_Access.h"
#include <cstdlib>
#include <filesystem>
#include <iomanip>
@@ -257,7 +259,7 @@ Performance_Overlay_Private* Performance_Overlay::d() {
return private_data.get();
}
static std::shared_ptr<Performance_Overlay> attach_performance_overlay_impl(Plot_Core& plot, const Performance_Overlay_Options* options) {
auto ctx = plot.render_context();
auto ctx = Plot_Core_Context_Access::render_context(plot);
if (!ctx)
return {};
auto shower = performance_overlay_owner(ctx);
@@ -280,10 +282,10 @@ std::shared_ptr<Performance_Overlay> attach_performance_overlay(Plot_Core& plot,
return attach_performance_overlay_impl(plot, &options);
}
std::shared_ptr<Performance_Overlay> performance_overlay(Plot_Core& plot) {
return performance_overlay_owner(plot.render_context());
return performance_overlay_owner(Plot_Core_Context_Access::render_context(plot));
}
void detach_performance_overlay(Plot_Core& plot) {
auto ctx = plot.render_context();
auto ctx = Plot_Core_Context_Access::render_context(plot);
if (!ctx)
return;
auto shower = performance_overlay_owner(ctx);
@@ -292,12 +294,12 @@ void detach_performance_overlay(Plot_Core& plot) {
shower->set_enabled(false);
}
bool performance_overlay_enabled(const Plot_Core& plot) {
auto shower = performance_overlay_owner(plot.render_context());
auto shower = performance_overlay_owner(Plot_Core_Context_Access::render_context(plot));
return shower && shower->enabled();
}
void set_performance_overlay_enabled(Plot_Core& plot, bool enabled) {
if (!enabled) {
auto shower = performance_overlay_owner(plot.render_context());
auto shower = performance_overlay_owner(Plot_Core_Context_Access::render_context(plot));
if (shower)
shower->set_enabled(false);
return;
@@ -305,17 +307,18 @@ void set_performance_overlay_enabled(Plot_Core& plot, bool enabled) {
auto shower = attach_performance_overlay(plot);
if (shower) {
shower->set_enabled(true);
shower->set_viewport(plot.viewport_size(), plot.render_context() ? plot.render_context()->viewport_version.load(std::memory_order_acquire) : 0);
auto ctx = Plot_Core_Context_Access::render_context(plot);
shower->set_viewport(plot.viewport_size(), ctx ? ctx->viewport_version.load(std::memory_order_acquire) : 0);
}
}
std::shared_ptr<const Performance_Display_Snapshot> performance_overlay_snapshot(const Plot_Core& plot) {
auto shower = performance_overlay_owner(plot.render_context());
auto shower = performance_overlay_owner(Plot_Core_Context_Access::render_context(plot));
if (!shower || !shower->enabled())
return {};
return shower->display_snapshot();
}
void set_performance_overlay_update_callback(Plot_Core& plot, std::function<void()> callback) {
auto ctx = plot.render_context();
auto ctx = Plot_Core_Context_Access::render_context(plot);
if (!ctx)
return;
{
@@ -327,26 +330,26 @@ void set_performance_overlay_update_callback(Plot_Core& plot, std::function<void
shower->set_update_callback(performance_update_callback(ctx));
}
void notify_performance_overlay_viewport_changed(Plot_Core& plot) {
auto shower = performance_overlay_owner(plot.render_context());
auto shower = performance_overlay_owner(Plot_Core_Context_Access::render_context(plot));
if (!shower || !shower->enabled())
return;
auto ctx = plot.render_context();
auto ctx = Plot_Core_Context_Access::render_context(plot);
shower->set_viewport(plot.viewport_size(), ctx ? ctx->viewport_version.load(std::memory_order_acquire) : 0);
}
bool performance_overlay_handle_wheel(Plot_Core& plot, PointF position, double angle_delta_y, double pixel_delta_y) {
auto shower = performance_overlay_owner(plot.render_context());
auto shower = performance_overlay_owner(Plot_Core_Context_Access::render_context(plot));
return shower && shower->enabled() && shower->handle_wheel(position, angle_delta_y, pixel_delta_y);
}
bool performance_overlay_handle_pointer_press(Plot_Core& plot, PointF position) {
auto shower = performance_overlay_owner(plot.render_context());
auto shower = performance_overlay_owner(Plot_Core_Context_Access::render_context(plot));
return shower && shower->enabled() && shower->handle_pointer_press(position);
}
bool performance_overlay_handle_pointer_move(Plot_Core& plot, PointF position) {
auto shower = performance_overlay_owner(plot.render_context());
auto shower = performance_overlay_owner(Plot_Core_Context_Access::render_context(plot));
return shower && shower->enabled() && shower->handle_pointer_move(position);
}
bool performance_overlay_handle_pointer_release(Plot_Core& plot, PointF position) {
auto shower = performance_overlay_owner(plot.render_context());
auto shower = performance_overlay_owner(Plot_Core_Context_Access::render_context(plot));
return shower && shower->enabled() && shower->handle_pointer_release(position);
}
void Performance_Overlay::set_enabled(bool enabled) {