mirror of
https://github.com/fastfetch-cli/fastfetch.git
synced 2026-09-13 10:52:08 +02:00
Font: don't use singleton
This commit is contained in:
@@ -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";
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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(>k4);
|
||||
|
||||
generateString(result);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -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";
|
||||
}
|
||||
|
||||
@@ -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
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user