74 lines
2.2 KiB
C++
74 lines
2.2 KiB
C++
#pragma once
|
|
#include <cstdint>
|
|
#include <QTime>
|
|
#include "../RenderAble.h"
|
|
namespace YSG {
|
|
void LIB_DECL startRenderScheduler();
|
|
class RenderScheduler;
|
|
struct PlotPrivate;
|
|
class PerformanceShower;
|
|
enum class Plot_Buffer_Acquire_Mode : std::uint8_t {
|
|
Try,
|
|
Wait
|
|
};
|
|
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);
|
|
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 RenderScheduler;
|
|
friend struct RenderAble;
|
|
};
|
|
|
|
|
|
|
|
}
|