mirror of
https://github.com/fastfetch-cli/fastfetch.git
synced 2026-09-12 10:22:12 +02:00
Logo: support --logo-padding-top
This commit is contained in:
@@ -196,6 +196,7 @@ __fastfetch_completion()
|
||||
"--logo-padding"
|
||||
"--logo-padding-left"
|
||||
"--logo-padding-right"
|
||||
"--logo-padding-top"
|
||||
"--logo-color-1"
|
||||
"--logo-color-2"
|
||||
"--logo-color-3"
|
||||
|
||||
@@ -130,6 +130,7 @@ static void defaultConfig(FFinstance* instance)
|
||||
ffStrbufInit(&instance->config.logo.colors[i]);
|
||||
instance->config.logo.width = 0;
|
||||
instance->config.logo.height = 0; //preserve aspect ratio
|
||||
instance->config.logo.paddingTop = 0;
|
||||
instance->config.logo.paddingLeft = 0;
|
||||
instance->config.logo.paddingRight = 4;
|
||||
instance->config.logo.printRemaining = true;
|
||||
|
||||
@@ -130,6 +130,9 @@ void ffPrintColor(const FFstrbuf* colorValue)
|
||||
|
||||
void ffPrintCharTimes(char c, uint32_t times)
|
||||
{
|
||||
if(times == 0)
|
||||
return;
|
||||
|
||||
char str[32];
|
||||
memset(str, c, sizeof(str)); //2 instructions when compiling with AVX2 enabled
|
||||
for(uint32_t i = sizeof(str); i <= times; i += sizeof(str))
|
||||
|
||||
@@ -114,6 +114,12 @@
|
||||
# Default is 0.
|
||||
#--logo-padding-right 0
|
||||
|
||||
# Logo padding top option:
|
||||
# Adds a padding to the top side of the logo.
|
||||
# Must be a positive integer.
|
||||
# Default is 0.
|
||||
#--logo-padding-top 0
|
||||
|
||||
# Logo print remaining option:
|
||||
# Sets if the remaining logo should be printed, it is has more lines than modules to show.
|
||||
# Must be true or false.
|
||||
|
||||
@@ -31,6 +31,7 @@ Logo options:
|
||||
--logo-padding <padding>: Set the padding on the left and the right of the logo
|
||||
--logo-padding-left <padding>: Set the padding on the left of the logo
|
||||
--logo-padding-right <padding>: Set the padding on the right of the logo
|
||||
--logo-padding-top <padding>: Set the padding on the top of the logo
|
||||
--logo-print-remaining <?value>: Whether to print the remaining logo, if it has more lines than modules to display
|
||||
--file <file>: Short for --logo-type file --logo <file>
|
||||
--file-raw <file>: Short for --logo-type file-raw --logo <file>
|
||||
|
||||
@@ -939,6 +939,7 @@ static void parseOption(FFinstance* instance, FFdata* data, const char* key, con
|
||||
//this is usally wanted when using the none logo
|
||||
if(strcasecmp(value, "none") == 0)
|
||||
{
|
||||
instance->config.logo.paddingTop = 0;
|
||||
instance->config.logo.paddingRight = 0;
|
||||
instance->config.logo.paddingLeft = 0;
|
||||
}
|
||||
@@ -987,6 +988,8 @@ static void parseOption(FFinstance* instance, FFdata* data, const char* key, con
|
||||
instance->config.logo.paddingLeft = padding;
|
||||
instance->config.logo.paddingRight = padding;
|
||||
}
|
||||
else if(strcasecmp(subkey, "-padding-top") == 0)
|
||||
instance->config.logo.paddingTop = optionParseUInt32(key, value);
|
||||
else if(strcasecmp(subkey, "-padding-left") == 0)
|
||||
instance->config.logo.paddingLeft = optionParseUInt32(key, value);
|
||||
else if(strcasecmp(subkey, "-padding-right") == 0)
|
||||
|
||||
@@ -71,6 +71,7 @@ typedef struct FFconfig
|
||||
FFstrbuf colors[FASTFETCH_LOGO_MAX_COLORS];
|
||||
uint32_t width;
|
||||
uint32_t height;
|
||||
uint32_t paddingTop;
|
||||
uint32_t paddingLeft;
|
||||
uint32_t paddingRight;
|
||||
bool printRemaining;
|
||||
|
||||
+10
-6
@@ -44,16 +44,17 @@ static bool printImageIterm(FFinstance* instance)
|
||||
}
|
||||
|
||||
ffPrintCharTimes(' ', instance->config.logo.paddingLeft);
|
||||
ffPrintCharTimes('\n', instance->config.logo.paddingTop);
|
||||
FFstrbuf base64 = base64Encode(&buf);
|
||||
instance->state.logoWidth = instance->config.logo.width + instance->config.logo.paddingLeft + instance->config.logo.paddingRight;
|
||||
instance->state.logoHeight = instance->config.logo.paddingTop + instance->config.logo.height;
|
||||
printf("\033]1337;File=inline=1;width=%u;height=%u;preserveAspectRatio=%u:%s\a\033[9999999D\n\033[%uA",
|
||||
(unsigned) instance->config.logo.width,
|
||||
(unsigned) instance->config.logo.height,
|
||||
(unsigned) instance->config.logo.preserveAspectRadio,
|
||||
base64.chars,
|
||||
(unsigned) instance->config.logo.height
|
||||
(unsigned) instance->state.logoHeight
|
||||
);
|
||||
instance->state.logoWidth = instance->config.logo.width + instance->config.logo.paddingLeft + instance->config.logo.paddingRight;
|
||||
instance->state.logoHeight = instance->config.logo.height;
|
||||
|
||||
ffStrbufDestroy(&buf);
|
||||
ffStrbufDestroy(&base64);
|
||||
@@ -64,6 +65,7 @@ static bool printImageIterm(FFinstance* instance)
|
||||
static bool printImageKittyDirect(FFinstance* instance)
|
||||
{
|
||||
ffPrintCharTimes(' ', instance->config.logo.paddingLeft);
|
||||
ffPrintCharTimes('\n', instance->config.logo.paddingTop);
|
||||
FFstrbuf base64 = base64Encode(&instance->config.logo.source);
|
||||
printf("\033_Ga=T,f=100,t=f,c=%u,r=%u,C=1;%s\033\\\033[9999999D",
|
||||
(unsigned) instance->config.logo.width,
|
||||
@@ -72,7 +74,7 @@ static bool printImageKittyDirect(FFinstance* instance)
|
||||
);
|
||||
|
||||
instance->state.logoWidth = instance->config.logo.width + instance->config.logo.paddingLeft + instance->config.logo.paddingRight;
|
||||
instance->state.logoHeight = instance->config.logo.height;
|
||||
instance->state.logoHeight = instance->config.logo.paddingTop + instance->config.logo.height;
|
||||
|
||||
ffStrbufDestroy(&base64);
|
||||
|
||||
@@ -205,7 +207,7 @@ static void printImagePixels(FFinstance* instance, FFLogoRequestData* requestDat
|
||||
//Calculate character dimensions
|
||||
instance->state.logoWidth = requestData->logoCharacterWidth + instance->config.logo.paddingLeft + instance->config.logo.paddingRight;
|
||||
|
||||
instance->state.logoHeight = requestData->logoCharacterHeight;
|
||||
instance->state.logoHeight = requestData->logoCharacterHeight + instance->config.logo.paddingTop;
|
||||
if(requestData->type == FF_LOGO_TYPE_IMAGE_KITTY)
|
||||
instance->state.logoHeight -= 1;
|
||||
|
||||
@@ -219,6 +221,7 @@ static void printImagePixels(FFinstance* instance, FFLogoRequestData* requestDat
|
||||
writeCacheUint32(requestData, instance->state.logoHeight, FF_CACHE_FILE_HEIGHT);
|
||||
|
||||
//Write result to stdout
|
||||
ffPrintCharTimes('\n', instance->config.logo.paddingTop);
|
||||
ffPrintCharTimes(' ', instance->config.logo.paddingLeft);
|
||||
fflush(stdout);
|
||||
ffWriteFDBuffer(STDOUT_FILENO, result);
|
||||
@@ -600,6 +603,7 @@ static bool printCachedPixel(FFinstance* instance, FFLogoRequestData* requestDat
|
||||
if(fd == -1)
|
||||
return false;
|
||||
|
||||
ffPrintCharTimes('\n', instance->config.logo.paddingTop);
|
||||
ffPrintCharTimes(' ', instance->config.logo.paddingLeft);
|
||||
fflush(stdout);
|
||||
|
||||
@@ -611,7 +615,7 @@ static bool printCachedPixel(FFinstance* instance, FFLogoRequestData* requestDat
|
||||
close(fd);
|
||||
|
||||
instance->state.logoWidth = requestData->logoCharacterWidth + instance->config.logo.paddingLeft + instance->config.logo.paddingRight;
|
||||
instance->state.logoHeight = requestData->logoCharacterHeight;
|
||||
instance->state.logoHeight = requestData->logoCharacterHeight + instance->config.logo.paddingTop;
|
||||
|
||||
//Go to upper left corner
|
||||
fputs("\033[9999999D", stdout);
|
||||
|
||||
+6
-2
@@ -11,11 +11,12 @@
|
||||
static void ffLogoPrintCharsRaw(FFinstance* instance, const char* data, size_t length)
|
||||
{
|
||||
fputs(FASTFETCH_TEXT_MODIFIER_BOLT, stdout);
|
||||
ffPrintCharTimes('\n', instance->config.logo.paddingTop);
|
||||
ffPrintCharTimes(' ', instance->config.logo.paddingLeft);
|
||||
fwrite(data, length, 1, stdout);
|
||||
printf("\033[9999999D\n\033[%uA", instance->config.logo.height);
|
||||
instance->state.logoHeight = instance->config.logo.paddingTop + instance->config.logo.height;
|
||||
instance->state.logoWidth = instance->config.logo.paddingLeft + instance->config.logo.width + instance->config.logo.paddingRight;
|
||||
instance->state.logoHeight = instance->config.logo.height;
|
||||
printf("\033[9999999D\n\033[%uA", instance->state.logoHeight);
|
||||
}
|
||||
|
||||
void ffLogoPrintChars(FFinstance* instance, const char* data, bool doColorReplacement)
|
||||
@@ -23,8 +24,11 @@ void ffLogoPrintChars(FFinstance* instance, const char* data, bool doColorReplac
|
||||
uint32_t currentlineLength = 0;
|
||||
|
||||
fputs(FASTFETCH_TEXT_MODIFIER_BOLT, stdout);
|
||||
ffPrintCharTimes('\n', instance->config.logo.paddingTop);
|
||||
ffPrintCharTimes(' ', instance->config.logo.paddingLeft);
|
||||
|
||||
instance->state.logoHeight = instance->config.logo.paddingTop;
|
||||
|
||||
//Use logoColor[0] as the default color
|
||||
if(doColorReplacement)
|
||||
ffPrintColor(&instance->config.logo.colors[0]);
|
||||
|
||||
Reference in New Issue
Block a user