ESPHome 2026.6.0-dev
Loading...
Searching...
No Matches
sdl_esphome.h
Go to the documentation of this file.
1#pragma once
2
3#ifdef USE_HOST
5#include "esphome/core/log.h"
8#define SDL_MAIN_HANDLED
9#include "SDL.h"
10#include <map>
11
12namespace esphome::sdl {
13
14constexpr static const char *const TAG = "sdl";
15
16class Sdl : public display::Display {
17 public:
19 void update() override;
20 void loop() override;
21 void setup() override;
22 void draw_pixels_at(int x_start, int y_start, int w, int h, const uint8_t *ptr, display::ColorOrder order,
23 display::ColorBitness bitness, bool big_endian, int x_offset, int y_offset, int x_pad) override;
24 void draw_pixel_at(int x, int y, Color color) override;
25 void process_key(uint32_t keycode, bool down);
26 void set_dimensions(uint16_t width, uint16_t height) {
27 this->width_ = width;
28 this->height_ = height;
29 }
30 void set_window_options(uint32_t window_options) { this->window_options_ = window_options; }
31 void set_position(int32_t pos_x, int32_t pos_y) {
32 this->pos_x_ = pos_x;
33 this->pos_y_ = pos_y;
34 }
35 int get_width() override;
36 int get_height() override;
37 float get_setup_priority() const override { return setup_priority::HARDWARE; }
38 void dump_config() override { LOG_DISPLAY("", "SDL", this); }
39 template<typename F> void add_key_listener(int32_t keycode, F &&callback) {
40 if (!this->key_callbacks_.count(keycode)) {
42 }
43 this->key_callbacks_[keycode].add(std::forward<F>(callback));
44 }
45
46 int mouse_x{};
47 int mouse_y{};
48 bool mouse_down{};
49
50 protected:
51 int get_width_internal() override { return this->width_; }
52 int get_height_internal() override { return this->height_; }
53 void redraw_(SDL_Rect &rect);
54 int width_{};
55 int height_{};
57 int32_t pos_x_{SDL_WINDOWPOS_UNDEFINED};
58 int32_t pos_y_{SDL_WINDOWPOS_UNDEFINED};
59 SDL_Renderer *renderer_{};
60 SDL_Window *window_{};
61 SDL_Texture *texture_{};
62 uint16_t x_low_{0};
63 uint16_t y_low_{0};
64 uint16_t x_high_{0};
65 uint16_t y_high_{0};
66 std::map<int32_t, CallbackManager<void(bool)>> key_callbacks_{};
67};
68} // namespace esphome::sdl
69
70#endif
uint8_t h
Definition bl0906.h:2
uint32_t window_options_
Definition sdl_esphome.h:56
void setup() override
void set_window_options(uint32_t window_options)
Definition sdl_esphome.h:30
int get_width() override
int get_height() override
SDL_Renderer * renderer_
Definition sdl_esphome.h:59
void add_key_listener(int32_t keycode, F &&callback)
Definition sdl_esphome.h:39
void draw_pixels_at(int x_start, int y_start, int w, int h, const uint8_t *ptr, display::ColorOrder order, display::ColorBitness bitness, bool big_endian, int x_offset, int y_offset, int x_pad) override
int get_height_internal() override
Definition sdl_esphome.h:52
void process_key(uint32_t keycode, bool down)
SDL_Texture * texture_
Definition sdl_esphome.h:61
void set_dimensions(uint16_t width, uint16_t height)
Definition sdl_esphome.h:26
void set_position(int32_t pos_x, int32_t pos_y)
Definition sdl_esphome.h:31
void redraw_(SDL_Rect &rect)
void loop() override
void dump_config() override
Definition sdl_esphome.h:38
void draw_pixel_at(int x, int y, Color color) override
int get_width_internal() override
Definition sdl_esphome.h:51
void update() override
float get_setup_priority() const override
Definition sdl_esphome.h:37
display::DisplayType get_display_type() override
Definition sdl_esphome.h:18
SDL_Window * window_
Definition sdl_esphome.h:60
std::map< int32_t, CallbackManager< void(bool)> > key_callbacks_
Definition sdl_esphome.h:66
constexpr float HARDWARE
For components that deal with hardware and are very important like GPIO switch.
Definition component.h:41
static void uint32_t
uint16_t x
Definition tt21100.cpp:5
uint16_t y
Definition tt21100.cpp:6