mirror of
https://github.com/esphome/esphome.git
synced 2024-11-21 22:48:10 +01:00
[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:
parent
ca2f25e73b
commit
61223a3cc9
6 changed files with 55 additions and 31 deletions
|
@ -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")
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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_; }
|
||||||
|
|
|
@ -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
|
||||||
|
|
23
tests/components/font/test.host.yaml
Normal file
23
tests/components/font/test.host.yaml
Normal 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
|
||||||
|
|
Loading…
Reference in a new issue