Modules/Sketch3D/public/Sketch3DWidget.hpp
2024-03-18 09:55:38 +03:00

55 lines
No EOL
1.3 KiB
C++

#pragma once
#include "Sketch3D.hpp"
#include "Widgets.hpp"
namespace tp {
template <typename Events, typename Canvas>
class Sketch3DWidget : public Widget<Events, Canvas> {
public:
Sketch3DWidget(Canvas& canvas, Vec2F renderResolution) :
mRenderer(renderResolution) {
mImage = canvas.createImageFromTextId(mRenderer.getBuff()->texId(), mRenderer.getBuff()->getSize());
mCanvas = &canvas;
}
~Sketch3DWidget() {
mCanvas->deleteImageHandle(mImage);
}
void proc(const Events& events, const RectF& areaParent, const RectF& area) override {
this->mArea = area;
this->mVisible = area.isOverlap(areaParent);
if (!this->mVisible) return;
if (!this->mArea.isInside(events.getPos())) {
return;
}
halnf pressure = 0.f;
auto crs = (events.getPos() - this->mArea.pos);
crs.x /= this->mArea.z;
crs.y /= this->mArea.w;
crs = (crs - 0.5) * 2;
mProject.sample(pressure, this->mArea.w / this->mArea.z, crs);
// mProject.setBackGroundColor();
}
void draw(Canvas& canvas) override {
if (!this->mVisible) return;
mRenderer.renderToTexture(&mProject, this->mArea.size);
canvas.drawImage(this->mArea, &mImage, 0, 1, 12);
}
private:
Project mProject;
Renderer mRenderer;
Canvas::ImageHandle mImage;
Canvas* mCanvas = nullptr;
};
}