mirror of
https://github.com/ArthurSonzogni/FTXUI.git
synced 2025-06-29 11:51:12 +08:00
Rename Canvas::CellType::kText and simplify.
This commit is contained in:
parent
94b0e97900
commit
6e613520c6
@ -96,7 +96,8 @@ struct Canvas {
|
||||
void DrawText(int x, int y, const std::string& value, const Stylizer& style);
|
||||
|
||||
// Draw using directly pixels or images --------------------------------------
|
||||
// Pixel/image coordinates correspond 1:1
|
||||
// x is considered to be a multiple of 2.
|
||||
// y is considered to be a multiple of 4.
|
||||
void DrawPixel(int x, int y, const Pixel&);
|
||||
void DrawImage(int x, int y, const Image&);
|
||||
|
||||
@ -109,15 +110,18 @@ struct Canvas {
|
||||
bool IsIn(int x, int y) const {
|
||||
return x >= 0 && x < width_ && y >= 0 && y < height_;
|
||||
}
|
||||
|
||||
enum CellType {
|
||||
kBraille,
|
||||
kBlock,
|
||||
kText,
|
||||
kCell, // Units of size 2x4
|
||||
kBlock, // Units of size 2x2
|
||||
kBraille, // Units of size 1x1
|
||||
};
|
||||
|
||||
struct Cell {
|
||||
CellType type = kText;
|
||||
CellType type = kCell;
|
||||
Pixel content;
|
||||
};
|
||||
|
||||
struct XY {
|
||||
int x;
|
||||
int y;
|
||||
|
@ -810,7 +810,7 @@ void Canvas::DrawText(int x,
|
||||
continue;
|
||||
}
|
||||
Cell& cell = storage_[XY{x / 2, y / 4}];
|
||||
cell.type = CellType::kText;
|
||||
cell.type = CellType::kCell;
|
||||
cell.content.character = it;
|
||||
style(cell.content);
|
||||
x += 2;
|
||||
@ -821,11 +821,9 @@ void Canvas::DrawText(int x,
|
||||
/// @param x the x coordinate of the pixel.
|
||||
/// @param y the y coordinate of the pixel.
|
||||
/// @param p the pixel to draw.
|
||||
void Canvas::DrawPixel(int x,
|
||||
int y,
|
||||
const Pixel& p) {
|
||||
Cell& cell = storage_[XY{x, y}];
|
||||
cell.type = CellType::kText; // Epixu: should we add kCustom or something?
|
||||
void Canvas::DrawPixel(int x, int y, const Pixel& p) {
|
||||
Cell& cell = storage_[XY{x / 2, y / 4}];
|
||||
cell.type = CellType::kCell;
|
||||
cell.content = p;
|
||||
}
|
||||
|
||||
@ -835,33 +833,22 @@ void Canvas::DrawPixel(int x,
|
||||
/// @param x the x coordinate corresponding to the top-left corner of the image.
|
||||
/// @param y the y coordinate corresponding to the top-left corner of the image.
|
||||
/// @param image the image to draw.
|
||||
void Canvas::DrawImage(int x,
|
||||
int y,
|
||||
const Image& image) {
|
||||
Box crop = image.stencil;
|
||||
void Canvas::DrawImage(int x, int y, const Image& image) {
|
||||
x /= 2;
|
||||
y /= 4;
|
||||
const int dx_begin = std::max(0, -x);
|
||||
const int dy_begin = std::max(0, -y);
|
||||
const int dx_end = std::min(image.dimx(), width_ - x);
|
||||
const int dy_end = std::min(image.dimy(), height_ - y);
|
||||
|
||||
if (x < 0) {
|
||||
crop.x_min -= x;
|
||||
x = 0;
|
||||
}
|
||||
|
||||
if (y < 0) {
|
||||
crop.y_min -= y;
|
||||
y = 0;
|
||||
}
|
||||
|
||||
if (crop.IsEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
const auto xend = x + crop.x_max - crop.x_min;
|
||||
const auto yend = y + crop.y_max - crop.y_min;
|
||||
|
||||
for (int py = y; py < yend; ++py) {
|
||||
for (int px = x; px < xend; ++px) {
|
||||
Cell& cell = storage_[XY{px, py}];
|
||||
cell.type = CellType::kText; // Epixu: should we add kCustom or something?
|
||||
cell.content = image.PixelAt(crop.x_min + px - x, crop.y_min + py - y);
|
||||
for (int dy = dy_begin; dy < dy_end; ++dy) {
|
||||
for (int dx = dx_begin; dx < dx_end; ++dx) {
|
||||
Cell& cell = storage_[XY{
|
||||
x + dx,
|
||||
y + dy,
|
||||
}];
|
||||
cell.type = CellType::kCell;
|
||||
cell.content = image.PixelAt(dx, dy);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user