20260326
This commit is contained in:
72
esphome/components/display/display_buffer.cpp
Normal file
72
esphome/components/display/display_buffer.cpp
Normal file
@@ -0,0 +1,72 @@
|
||||
#include "display_buffer.h"
|
||||
|
||||
#include <utility>
|
||||
|
||||
#include "esphome/core/application.h"
|
||||
#include "esphome/core/log.h"
|
||||
|
||||
namespace esphome {
|
||||
namespace display {
|
||||
|
||||
static const char *const TAG = "display";
|
||||
|
||||
void DisplayBuffer::init_internal_(uint32_t buffer_length) {
|
||||
RAMAllocator<uint8_t> allocator;
|
||||
this->buffer_ = allocator.allocate(buffer_length);
|
||||
if (this->buffer_ == nullptr) {
|
||||
ESP_LOGE(TAG, "Could not allocate buffer for display!");
|
||||
return;
|
||||
}
|
||||
this->clear();
|
||||
}
|
||||
|
||||
int DisplayBuffer::get_width() {
|
||||
switch (this->rotation_) {
|
||||
case DISPLAY_ROTATION_90_DEGREES:
|
||||
case DISPLAY_ROTATION_270_DEGREES:
|
||||
return this->get_height_internal();
|
||||
case DISPLAY_ROTATION_0_DEGREES:
|
||||
case DISPLAY_ROTATION_180_DEGREES:
|
||||
default:
|
||||
return this->get_width_internal();
|
||||
}
|
||||
}
|
||||
|
||||
int DisplayBuffer::get_height() {
|
||||
switch (this->rotation_) {
|
||||
case DISPLAY_ROTATION_0_DEGREES:
|
||||
case DISPLAY_ROTATION_180_DEGREES:
|
||||
return this->get_height_internal();
|
||||
case DISPLAY_ROTATION_90_DEGREES:
|
||||
case DISPLAY_ROTATION_270_DEGREES:
|
||||
default:
|
||||
return this->get_width_internal();
|
||||
}
|
||||
}
|
||||
|
||||
void HOT DisplayBuffer::draw_pixel_at(int x, int y, Color color) {
|
||||
if (!this->get_clipping().inside(x, y))
|
||||
return; // NOLINT
|
||||
|
||||
switch (this->rotation_) {
|
||||
case DISPLAY_ROTATION_0_DEGREES:
|
||||
break;
|
||||
case DISPLAY_ROTATION_90_DEGREES:
|
||||
std::swap(x, y);
|
||||
x = this->get_width_internal() - x - 1;
|
||||
break;
|
||||
case DISPLAY_ROTATION_180_DEGREES:
|
||||
x = this->get_width_internal() - x - 1;
|
||||
y = this->get_height_internal() - y - 1;
|
||||
break;
|
||||
case DISPLAY_ROTATION_270_DEGREES:
|
||||
std::swap(x, y);
|
||||
y = this->get_height_internal() - y - 1;
|
||||
break;
|
||||
}
|
||||
this->draw_absolute_pixel_internal(x, y, color);
|
||||
App.feed_wdt();
|
||||
}
|
||||
|
||||
} // namespace display
|
||||
} // namespace esphome
|
||||
Reference in New Issue
Block a user