This repository has been archived on 2025-03-20. You can view files and clone it, but cannot push or open issues or pull requests.
The-Powder-Toy/src/gui/game/DecorationTool.cpp
Tamás Bálint Misius 2960e0f58f
Fix some deprecation warnings
Namely:

 - [[deprecated("Use operator+(Vec2)")]]
 - [[deprecated("Use operator-(Vec2)")]]
 - [[deprecated("Use video")]]
 - [[deprecated("Use persistentVideo")]]
 - [[deprecated("Use wrapVideo")]]
2023-04-29 14:44:27 +02:00

65 lines
2.4 KiB
C++

#include "DecorationTool.h"
#include "graphics/Renderer.h"
#include "simulation/SimulationData.h"
#include "simulation/Simulation.h"
std::unique_ptr<VideoBuffer> DecorationTool::GetIcon(int ToolID, Vec2<int> size)
{
auto texture = std::make_unique<VideoBuffer>(size);
if (ToolID == DECO_SMUDGE)
for (auto pos : size.OriginRect())
texture->DrawPixel(pos, RGB<uint8_t>(0, 0xFF - 5 * pos.X, 5 * pos.X));
else if (ToolID == DECO_DRAW || ToolID == DECO_CLEAR)
texture->BlendFilledRect(size.OriginRect(), Colour);
else
texture->DrawFilledRect(size.OriginRect(), 0x323232_rgb);
if (ToolID == DECO_CLEAR)
{
auto reverse = RGB<uint8_t>(Colour.Red + 127, Colour.Green + 127, Colour.Blue + 127).WithAlpha(0xFF);
texture->BlendChar(size / 2 - Vec2(4, 2), 0xE06C, reverse);
}
else
{
auto colour = Colour.NoAlpha().WithAlpha(0xFF);
if (ToolID == DECO_ADD)
texture->AddChar(Vec2(11, 4), '+', colour);
else if (ToolID == DECO_SUBTRACT)
texture->AddChar(Vec2(11, 4), '-', colour);
else if (ToolID == DECO_MULTIPLY)
texture->AddChar(Vec2(11, 3), 'x', colour);
else if (ToolID == DECO_DIVIDE)
texture->AddChar(Vec2(11, 4), '/', colour);
}
return texture;
}
void DecorationTool::Draw(Simulation * sim, Brush const &brush, ui::Point position)
{
sim->ApplyDecorationPoint(position.X, position.Y, Colour.Red, Colour.Green, Colour.Blue, Colour.Alpha, ToolID, brush);
}
void DecorationTool::DrawLine(Simulation * sim, Brush const &brush, ui::Point position1, ui::Point position2, bool dragging)
{
sim->ApplyDecorationLine(position1.X, position1.Y, position2.X, position2.Y, Colour.Red, Colour.Green, Colour.Blue, Colour.Alpha, ToolID, brush);
}
void DecorationTool::DrawRect(Simulation * sim, Brush const &brush, ui::Point position1, ui::Point position2)
{
sim->ApplyDecorationBox(position1.X, position1.Y, position2.X, position2.Y, Colour.Red, Colour.Green, Colour.Blue, Colour.Alpha, ToolID);
}
void DecorationTool::DrawFill(Simulation * sim, Brush const &brush, ui::Point position)
{
auto loc = RGB<uint8_t>::Unpack(ren.GetPixel(position));
if (ToolID == DECO_CLEAR)
// TODO: this is actually const-correct
sim->ApplyDecorationFill(const_cast<Renderer *>(&ren), position.X, position.Y, 0, 0, 0, 0, loc.Red, loc.Green, loc.Blue);
else
sim->ApplyDecorationFill(const_cast<Renderer *>(&ren), position.X, position.Y, Colour.Red, Colour.Green, Colour.Blue, Colour.Alpha, loc.Red, loc.Green, loc.Blue);
}