Files
Renderive/YSGraphic_Core/base/Plot.h
T
2026-07-23 15:15:26 +08:00

76 lines
2.6 KiB
C++

#pragma once
#include <cstdint>
#include <QTime>
#include "../RenderAble.h"
namespace YSG {
void LIB_DECL startRenderScheduler();
class RenderScheduler;
struct PlotPrivate;
class PerformanceShower;
class LIB_DECL Plot : public QWidget {
Q_OBJECT
public:
bool usePerformanceShower();
void set_usePerformanceShower(bool use);
virtual void init() {
initLayer();
}
void render();
QColor backgroundColor();
bool mFirstResize = true, mFirstPrepareData = true;
void setBackgroundColor(const QColor& color) const;
Plot_Buffer_Acquire_Mode paintBufferAcquireMode() const;
void setPaintBufferAcquireMode(Plot_Buffer_Acquire_Mode mode);
Plot_Buffer_Acquire_Mode renderAbleBufferAcquireMode() const;
void setRenderAbleBufferAcquireMode(Plot_Buffer_Acquire_Mode mode);
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);
void markIndependentRenderDirty(RenderAble* able);
void submitIndependentRender(RenderAble* able);
void renderIndependentColor(RenderAble* able, PixelBufferSlot* pixel, QSize size, std::uint64_t version);
void finishIndependentRender(RenderAble* able);
friend class RenderScheduler;
friend struct RenderAble;
};
}