[font] Make display an auto-load, not a dependency (#7366)

Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com>
This commit is contained in:
Clyde Stubbs 2024-09-02 06:45:40 +10:00 committed by GitHub
parent ca2f25e73b
commit 61223a3cc9
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 55 additions and 31 deletions

View file

@ -1,15 +1,15 @@
from esphome import automation, core
from esphome.automation import maybe_simple_id
import esphome.codegen as cg import esphome.codegen as cg
import esphome.config_validation as cv import esphome.config_validation as cv
from esphome import core, automation
from esphome.automation import maybe_simple_id
from esphome.const import ( from esphome.const import (
CONF_AUTO_CLEAR_ENABLED, CONF_AUTO_CLEAR_ENABLED,
CONF_FROM,
CONF_ID, CONF_ID,
CONF_LAMBDA, CONF_LAMBDA,
CONF_PAGES,
CONF_PAGE_ID, CONF_PAGE_ID,
CONF_PAGES,
CONF_ROTATION, CONF_ROTATION,
CONF_FROM,
CONF_TO, CONF_TO,
CONF_TRIGGER_ID, CONF_TRIGGER_ID,
) )
@ -195,3 +195,4 @@ async def display_is_displaying_page_to_code(config, condition_id, template_arg,
@coroutine_with_priority(100.0) @coroutine_with_priority(100.0)
async def to_code(config): async def to_code(config):
cg.add_global(display_ns.using) cg.add_global(display_ns.using)
cg.add_define("USE_DISPLAY")

View file

@ -1,43 +1,35 @@
import functools
import hashlib import hashlib
import logging import logging
import functools
from pathlib import Path
import os import os
from pathlib import Path
import re import re
from packaging import version from packaging import version
import requests import requests
from esphome import core from esphome import core, external_files
from esphome import external_files
import esphome.config_validation as cv
import esphome.codegen as cg import esphome.codegen as cg
from esphome.helpers import ( import esphome.config_validation as cv
copy_file_if_changed,
cpp_string_escape,
)
from esphome.const import ( from esphome.const import (
CONF_FAMILY, CONF_FAMILY,
CONF_FILE, CONF_FILE,
CONF_GLYPHS, CONF_GLYPHS,
CONF_ID, CONF_ID,
CONF_PATH,
CONF_RAW_DATA_ID, CONF_RAW_DATA_ID,
CONF_TYPE,
CONF_REFRESH, CONF_REFRESH,
CONF_SIZE, CONF_SIZE,
CONF_PATH, CONF_TYPE,
CONF_WEIGHT,
CONF_URL, CONF_URL,
CONF_WEIGHT,
) )
from esphome.core import ( from esphome.core import CORE, HexInt
CORE, from esphome.helpers import copy_file_if_changed, cpp_string_escape
HexInt,
)
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
DOMAIN = "font" DOMAIN = "font"
DEPENDENCIES = ["display"]
MULTI_CONF = True MULTI_CONF = True
CODEOWNERS = ["@esphome/core", "@clydebarrow"] CODEOWNERS = ["@esphome/core", "@clydebarrow"]
@ -400,10 +392,7 @@ class EFont:
def convert_bitmap_to_pillow_font(filepath): def convert_bitmap_to_pillow_font(filepath):
from PIL import ( from PIL import BdfFontFile, PcfFontFile
PcfFontFile,
BdfFontFile,
)
local_bitmap_font_file = external_files.compute_local_file_dir( local_bitmap_font_file = external_files.compute_local_file_dir(
DOMAIN, DOMAIN,

View file

@ -1,9 +1,8 @@
#include "font.h" #include "font.h"
#include "esphome/core/color.h"
#include "esphome/core/hal.h" #include "esphome/core/hal.h"
#include "esphome/core/log.h" #include "esphome/core/log.h"
#include "esphome/core/color.h"
#include "esphome/components/display/display_buffer.h"
namespace esphome { namespace esphome {
namespace font { namespace font {
@ -68,6 +67,7 @@ int Font::match_next_glyph(const uint8_t *str, int *match_length) {
return -1; return -1;
return lo; return lo;
} }
#ifdef USE_DISPLAY
void Font::measure(const char *str, int *width, int *x_offset, int *baseline, int *height) { void Font::measure(const char *str, int *width, int *x_offset, int *baseline, int *height) {
*baseline = this->baseline_; *baseline = this->baseline_;
*height = this->height_; *height = this->height_;
@ -164,6 +164,7 @@ void Font::print(int x_start, int y_start, display::Display *display, Color colo
i += match_length; i += match_length;
} }
} }
#endif
} // namespace font } // namespace font
} // namespace esphome } // namespace esphome

View file

@ -1,8 +1,11 @@
#pragma once #pragma once
#include "esphome/core/datatypes.h"
#include "esphome/core/color.h" #include "esphome/core/color.h"
#include "esphome/components/display/display_buffer.h" #include "esphome/core/datatypes.h"
#include "esphome/core/defines.h"
#ifdef USE_DISPLAY
#include "esphome/components/display/display.h"
#endif
namespace esphome { namespace esphome {
namespace font { namespace font {
@ -38,7 +41,11 @@ class Glyph {
const GlyphData *glyph_data_; const GlyphData *glyph_data_;
}; };
class Font : public display::BaseFont { class Font
#ifdef USE_DISPLAY
: public display::BaseFont
#endif
{
public: public:
/** Construct the font with the given glyphs. /** Construct the font with the given glyphs.
* *
@ -50,9 +57,11 @@ class Font : public display::BaseFont {
int match_next_glyph(const uint8_t *str, int *match_length); int match_next_glyph(const uint8_t *str, int *match_length);
#ifdef USE_DISPLAY
void print(int x_start, int y_start, display::Display *display, Color color, const char *text, void print(int x_start, int y_start, display::Display *display, Color color, const char *text,
Color background) override; Color background) override;
void measure(const char *str, int *width, int *x_offset, int *baseline, int *height) override; void measure(const char *str, int *width, int *x_offset, int *baseline, int *height) override;
#endif
inline int get_baseline() { return this->baseline_; } inline int get_baseline() { return this->baseline_; }
inline int get_height() { return this->height_; } inline int get_height() { return this->height_; }
inline int get_bpp() { return this->bpp_; } inline int get_bpp() { return this->bpp_; }

View file

@ -28,6 +28,7 @@
#define USE_DATETIME_DATETIME #define USE_DATETIME_DATETIME
#define USE_DATETIME_TIME #define USE_DATETIME_TIME
#define USE_DEEP_SLEEP #define USE_DEEP_SLEEP
#define USE_DISPLAY
#define USE_EVENT #define USE_EVENT
#define USE_FAN #define USE_FAN
#define USE_GRAPH #define USE_GRAPH

View file

@ -0,0 +1,23 @@
font:
- file: "gfonts://Roboto"
id: roboto
size: 20
glyphs: "0123456789."
extras:
- file: "gfonts://Roboto"
glyphs: ["\u00C4", "\u00C5", "\U000000C7"]
- file: "gfonts://Roboto"
id: roboto_web
size: 20
- file: "https://github.com/IdreesInc/Monocraft/releases/download/v3.0/Monocraft.ttf"
id: monocraft
size: 20
- file:
type: web
url: "https://github.com/IdreesInc/Monocraft/releases/download/v3.0/Monocraft.ttf"
id: monocraft2
size: 24
- file: $component_dir/Monocraft.ttf
id: monocraft3
size: 28