Files
Renderive/YSGraphic_Core/base/Plot.h
T
2026-07-23 12:27:06 +08:00

68 lines
2.0 KiB
C++

#pragma once
#include <QTime>
#include "../RenderAble.h"
namespace YSG {
void LIB_DECL startAllRenderThread();
class TimerThread;
struct PlotPrivate;
class PerformanceShower;
class LIB_DECL Plot : public QWidget {
Q_OBJECT
public:
bool usePerformanceShower();
void set_usePerformanceShower(bool use);
void bindRenderThread(const QString& threadName);
virtual void init() {
initLayer();
}
void render();
QColor backgroundColor();
bool mFirstResize = true, mFirstPrepareData = true;
void setBackgroundColor(const QColor& color) const;
void markRenderStateDirty();
void requestRender();
struct Layer {
QString mLayerName;
QVector<RenderAble*> mRenderAbles;
};
QString mObjectName;
QList<Layer*> mLayerList;
QString mDefaultLayerName;
virtual void initLayer() {
auto addLayer = [this](QString&& name) {
auto layer = new Layer;
layer->mLayerName = name;
mLayerList.append(layer);
mLayerMap[name] = layer;
};
addLayer("background");
addLayer("plottable");
addLayer("axis");
addLayer("legend");
mDefaultLayerName = "plottable";
}
bool isRendering();
void startRender(int refreshTimesPreSecond);
void startRender() const;
void pauseRender() const;
Plot();
~Plot() override;
PlotPrivate *d{};
private:
QHash<QString, Layer*> mLayerMap;
bool event(QEvent* event) final;
void paintEvent(QPaintEvent* event) final;
void scheduleRenderTimer();
void submitRender();
void finishRender();
void requestUpdate(const QRegion& region);
void renderColor(RenderAble::ColorBuffer* color, QSize size, QColor background, std::uint64_t version);
friend class TimerThread;
friend struct RenderAble;
};
}