mirror of
https://github.com/fastfetch-cli/fastfetch.git
synced 2026-09-12 10:22:12 +02:00
Image (Windows): support sixel protocol
This commit is contained in:
+16
-28
@@ -3,6 +3,7 @@
|
||||
#include "common/printing.h"
|
||||
#include "util/stringUtils.h"
|
||||
#include "util/base64.h"
|
||||
#include "detection/terminalsize/terminalsize.h"
|
||||
|
||||
#include <limits.h>
|
||||
#include <math.h>
|
||||
@@ -835,38 +836,25 @@ static bool printCached(FFLogoRequestData* requestData)
|
||||
|
||||
static bool getCharacterPixelDimensions(FFLogoRequestData* requestData)
|
||||
{
|
||||
#ifndef _WIN32
|
||||
|
||||
struct winsize winsize;
|
||||
|
||||
//Initialize every member to 0, because it isn't guaranteed that every terminal sets them all
|
||||
memset(&winsize, 0, sizeof(struct winsize));
|
||||
|
||||
ioctl(STDOUT_FILENO, TIOCGWINSZ, &winsize);
|
||||
|
||||
if(winsize.ws_row == 0 || winsize.ws_col == 0)
|
||||
ffGetTerminalResponse("\033[18t", "\033[8;%hu;%hut", &winsize.ws_row, &winsize.ws_col);
|
||||
|
||||
if(winsize.ws_row == 0 || winsize.ws_col == 0)
|
||||
return false;
|
||||
|
||||
if(winsize.ws_ypixel == 0 || winsize.ws_xpixel == 0)
|
||||
ffGetTerminalResponse("\033[14t", "\033[4;%hu;%hut", &winsize.ws_ypixel, &winsize.ws_xpixel);
|
||||
|
||||
requestData->characterPixelWidth = winsize.ws_xpixel / (double) winsize.ws_col;
|
||||
requestData->characterPixelHeight = winsize.ws_ypixel / (double) winsize.ws_row;
|
||||
|
||||
#else
|
||||
#ifdef _WIN32
|
||||
|
||||
CONSOLE_FONT_INFO cfi;
|
||||
if(GetCurrentConsoleFont(GetStdHandle(STD_OUTPUT_HANDLE), FALSE, &cfi) == FALSE) // Only works for ConHost
|
||||
return false;
|
||||
|
||||
requestData->characterPixelWidth = cfi.dwFontSize.X;
|
||||
requestData->characterPixelHeight = cfi.dwFontSize.Y;
|
||||
|
||||
if(GetCurrentConsoleFont(GetStdHandle(STD_OUTPUT_HANDLE), FALSE, &cfi)) // Only works for ConHost
|
||||
{
|
||||
requestData->characterPixelWidth = cfi.dwFontSize.X;
|
||||
requestData->characterPixelHeight = cfi.dwFontSize.Y;
|
||||
}
|
||||
if (requestData->characterPixelWidth > 1.0 && requestData->characterPixelHeight > 1.0)
|
||||
return true;
|
||||
#endif
|
||||
|
||||
FFTerminalSizeResult termSize = {};
|
||||
if (ffDetectTerminalSize(&termSize))
|
||||
{
|
||||
requestData->characterPixelWidth = termSize.width / (double) termSize.columns;
|
||||
requestData->characterPixelHeight = termSize.height / (double) termSize.rows;
|
||||
}
|
||||
|
||||
return requestData->characterPixelWidth > 1.0 && requestData->characterPixelHeight > 1.0;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user