Skip to content

Commit

Permalink
Image (Windows): support sixel protocol
Browse files Browse the repository at this point in the history
  • Loading branch information
CarterLi committed Sep 3, 2024
1 parent d79bf0a commit aec27c3
Showing 1 changed file with 16 additions and 28 deletions.
44 changes: 16 additions & 28 deletions src/logo/image/image.c
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand Down Expand Up @@ -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;
}

Expand Down

0 comments on commit aec27c3

Please sign in to comment.