Let gr_init proceed even if we failed to load a font file
Some users of minui don't need to draw texts; and we should let them
still be able to use the library without providing a font file. Also add
check for null pointers in gr_measure() and gr_font_size().
Bug: 80535212
Test: boot into recovery without a font file, and the buttons still work
Change-Id: I848e4410f2ce09ea0ab433573e6827b7e9b2c575
diff --git a/minui/graphics.cpp b/minui/graphics.cpp
index 202ce71..3b38601 100644
--- a/minui/graphics.cpp
+++ b/minui/graphics.cpp
@@ -51,12 +51,21 @@
}
int gr_measure(const GRFont* font, const char* s) {
+ if (font == nullptr) {
+ return -1;
+ }
+
return font->char_width * strlen(s);
}
-void gr_font_size(const GRFont* font, int* x, int* y) {
+int gr_font_size(const GRFont* font, int* x, int* y) {
+ if (font == nullptr) {
+ return -1;
+ }
+
*x = font->char_width;
*y = font->char_height;
+ return 0;
}
// Blends gr_current onto pix value, assumes alpha as most significant byte.
@@ -319,8 +328,8 @@
int gr_init() {
int ret = gr_init_font("font", &gr_font);
if (ret != 0) {
- printf("Failed to init font: %d\n", ret);
- return -1;
+ printf("Failed to init font: %d, continuing graphic backend initialization without font file\n",
+ ret);
}
auto backend = std::unique_ptr<MinuiBackend>{ std::make_unique<MinuiBackendAdf>() };
diff --git a/minui/include/minui/minui.h b/minui/include/minui/minui.h
index f9da199..e96b7ae 100644
--- a/minui/include/minui/minui.h
+++ b/minui/include/minui/minui.h
@@ -66,8 +66,10 @@
const GRFont* gr_sys_font();
int gr_init_font(const char* name, GRFont** dest);
void gr_text(const GRFont* font, int x, int y, const char* s, bool bold);
+// Return -1 if font is nullptr.
int gr_measure(const GRFont* font, const char* s);
-void gr_font_size(const GRFont* font, int* x, int* y);
+// Return -1 if font is nullptr.
+int gr_font_size(const GRFont* font, int* x, int* y);
void gr_blit(GRSurface* source, int sx, int sy, int w, int h, int dx, int dy);
unsigned int gr_get_width(GRSurface* surface);