Font: don't use singleton

This commit is contained in:
李通洲
2023-06-12 22:36:43 +08:00
committed by 李通洲
parent d5a3802492
commit 3bf83e45ed
7 changed files with 47 additions and 53 deletions
+6 -20
View File
@@ -1,33 +1,19 @@
#include "font.h"
#include "detection/internal.h"
void ffDetectFontImpl(const FFinstance* instance, FFFontResult* font);
const char* ffDetectFontImpl(const FFinstance* instance, FFFontResult* font);
static void detectFont(const FFinstance* instance, FFFontResult* font)
const char* ffDetectFont(const FFinstance* instance, FFFontResult* font)
{
ffStrbufInit(&font->error);
const char* error = ffDetectFontImpl(instance, font);
for(uint32_t i = 0; i < FF_DETECT_FONT_NUM_FONTS; ++i)
ffStrbufInit(&font->fonts[i]);
ffStrbufInit(&font->display);
ffDetectFontImpl(instance, font);
if(font->error.length > 0)
return;
if(error) return error;
for(uint32_t i = 0; i < FF_DETECT_FONT_NUM_FONTS; ++i)
{
if(font->fonts[i].length > 0)
return;
return NULL;
}
ffStrbufAppendS(&font->error, "No fonts found");
}
const FFFontResult* ffDetectFont(const FFinstance* instance)
{
FF_DETECTION_INTERNAL_GUARD(FFFontResult,
detectFont(instance, &result);
);
return "No fonts found";
}
+1 -3
View File
@@ -9,8 +9,6 @@
typedef struct FFFontResult
{
FFstrbuf error;
/**
* Linux / BSD: QT, GTK2, GTK3, GTK4
* MacOS: System, User, System Mono, User Mono
@@ -21,6 +19,6 @@ typedef struct FFFontResult
FFstrbuf display;
} FFFontResult;
const FFFontResult* ffDetectFont(const FFinstance* instance);
const char* ffDetectFont(const FFinstance* instance, FFFontResult* font);
#endif
+3 -2
View File
@@ -21,12 +21,13 @@ static void generateString(FFFontResult* font)
}
}
void ffDetectFontImpl(const FFinstance* instance, FFFontResult* result)
const char* ffDetectFontImpl(FF_MAYBE_UNUSED const FFinstance* instance, FFFontResult* result)
{
FF_UNUSED(instance);
ffStrbufAppendS(&result->fonts[0], [NSFont systemFontOfSize:12].familyName.UTF8String);
ffStrbufAppendS(&result->fonts[1], [NSFont userFontOfSize:12].familyName.UTF8String);
ffStrbufAppendS(&result->fonts[2], [NSFont monospacedSystemFontOfSize:12 weight:400].familyName.UTF8String);
ffStrbufAppendS(&result->fonts[3], [NSFont userFixedPitchFontOfSize:12].familyName.UTF8String);
generateString(result);
return NULL;
}
+4 -5
View File
@@ -24,15 +24,12 @@ static void generateString(FFFontResult* font)
ffParseGTK(&font->display, &font->fonts[1], &font->fonts[2], &font->fonts[3]);
}
void ffDetectFontImpl(const FFinstance* instance, FFFontResult* result)
const char* ffDetectFontImpl(const FFinstance* instance, FFFontResult* result)
{
const FFDisplayServerResult* wmde = ffConnectDisplayServer(instance);
if(ffStrbufIgnCaseCompS(&wmde->wmProtocolName, FF_WM_PROTOCOL_TTY) == 0)
{
ffStrbufAppendS(&result->error, "Font isn't supported in TTY");
return;
}
return "Font isn't supported in TTY";
FFfont qt;
ffFontInitQt(&qt, ffDetectQt(instance)->font.chars);
@@ -55,4 +52,6 @@ void ffDetectFontImpl(const FFinstance* instance, FFFontResult* result)
ffFontDestroy(&gtk4);
generateString(result);
return NULL;
}
+3 -3
View File
@@ -1,8 +1,8 @@
#include "fastfetch.h"
#include "font.h"
void ffDetectFontImpl(const FFinstance* instance, FFFontResult* result)
const char* ffDetectFontImpl(const FFinstance* instance, FFFontResult* result)
{
FF_UNUSED(instance);
ffStrbufAppendS(&result->error, "Not supported on this platform");
FF_UNUSED(instance, result);
return "Not supported on this platform";
}
+4 -4
View File
@@ -23,13 +23,11 @@ static void generateString(FFFontResult* font)
ffStrbufAppendC(&font->display, ']');
}
void ffDetectFontImpl(const FFinstance* instance, FFFontResult* result)
const char* ffDetectFontImpl(FF_MAYBE_UNUSED const FFinstance* instance, FFFontResult* result)
{
FF_UNUSED(instance);
NONCLIENTMETRICSW info = { .cbSize = sizeof(info) };
if(!SystemParametersInfoW(SPI_GETNONCLIENTMETRICS, sizeof(info), &info, 0))
ffStrbufAppendS(&result->error, "SystemParametersInfoW(SPI_GETNONCLIENTMETRICS) failed");
return "SystemParametersInfoW(SPI_GETNONCLIENTMETRICS) failed";
LOGFONTW* fonts[4] = { &info.lfCaptionFont, &info.lfMenuFont, &info.lfMessageFont, &info.lfStatusFont };
@@ -41,4 +39,6 @@ void ffDetectFontImpl(const FFinstance* instance, FFFontResult* result)
}
generateString(result);
return NULL;
}
+26 -16
View File
@@ -7,29 +7,39 @@
void ffPrintFont(FFinstance* instance, FFFontOptions* options)
{
const FFFontResult* font = ffDetectFont(instance);
FFFontResult font;
for(uint32_t i = 0; i < FF_DETECT_FONT_NUM_FONTS; ++i)
ffStrbufInit(&font.fonts[i]);
ffStrbufInit(&font.display);
if(font->error.length > 0)
{
ffPrintError(instance, FF_FONT_MODULE_NAME, 0, &options->moduleArgs, "%s", font->error.chars);
return;
}
const char* error = ffDetectFont(instance, &font);
if(options->moduleArgs.outputFormat.length == 0)
if(error)
{
ffPrintLogoAndKey(instance, FF_FONT_MODULE_NAME, 0, &options->moduleArgs.key);
ffStrbufPutTo(&font->display, stdout);
ffPrintError(instance, FF_FONT_MODULE_NAME, 0, &options->moduleArgs, "%s", error);
}
else
{
ffPrintFormat(instance, FF_FONT_MODULE_NAME, 0, &options->moduleArgs, FF_FONT_NUM_FORMAT_ARGS, (FFformatarg[]) {
{FF_FORMAT_ARG_TYPE_STRBUF, &font->fonts[0]},
{FF_FORMAT_ARG_TYPE_STRBUF, &font->fonts[1]},
{FF_FORMAT_ARG_TYPE_STRBUF, &font->fonts[2]},
{FF_FORMAT_ARG_TYPE_STRBUF, &font->fonts[3]},
{FF_FORMAT_ARG_TYPE_STRBUF, &font->display},
});
if(options->moduleArgs.outputFormat.length == 0)
{
ffPrintLogoAndKey(instance, FF_FONT_MODULE_NAME, 0, &options->moduleArgs.key);
ffStrbufPutTo(&font.display, stdout);
}
else
{
ffPrintFormat(instance, FF_FONT_MODULE_NAME, 0, &options->moduleArgs, FF_FONT_NUM_FORMAT_ARGS, (FFformatarg[]) {
{FF_FORMAT_ARG_TYPE_STRBUF, &font.fonts[0]},
{FF_FORMAT_ARG_TYPE_STRBUF, &font.fonts[1]},
{FF_FORMAT_ARG_TYPE_STRBUF, &font.fonts[2]},
{FF_FORMAT_ARG_TYPE_STRBUF, &font.fonts[3]},
{FF_FORMAT_ARG_TYPE_STRBUF, &font.display},
});
}
}
ffStrbufDestroy(&font.display);
for (uint32_t i = 0; i < FF_DETECT_FONT_NUM_FONTS; ++i)
ffStrbufDestroy(&font.fonts[i]);
}
void ffInitFontOptions(FFFontOptions* options)