mirror of
https://github.com/fastfetch-cli/fastfetch.git
synced 2026-11-04 20:24:19 +01:00
Faster fallback in sixel code
This commit is contained in:
@@ -18,12 +18,12 @@ static bool logoWriteIM6(void* image, const void* imageInfo, void* exceptionInfo
|
||||
return ffWriteImage(imageInfo, image) == MagickTrue;
|
||||
}
|
||||
|
||||
bool ffLogoPrintSixelIM6(FFinstance* instance)
|
||||
FFLogoSixelResult ffLogoPrintSixelIM6(FFinstance* instance)
|
||||
{
|
||||
FF_LIBRARY_LOAD(imageMagick, instance->config.libImageMagick, false, "libMagickCore-6.Q16HDRI.so", 8, "libMagickCore-6.Q16.so", 8)
|
||||
FF_LIBRARY_LOAD(imageMagick, instance->config.libImageMagick, FF_LOGO_SIXEL_RESULT_INIT_ERROR, "libMagickCore-6.Q16HDRI.so", 8, "libMagickCore-6.Q16.so", 8)
|
||||
|
||||
FF_LIBRARY_LOAD_SYMBOL_ADRESS(imageMagick, ffResizeImage, ResizeImage, false);
|
||||
FF_LIBRARY_LOAD_SYMBOL_ADRESS(imageMagick, ffWriteImage, WriteImage, false);
|
||||
FF_LIBRARY_LOAD_SYMBOL_ADRESS(imageMagick, ffResizeImage, ResizeImage, FF_LOGO_SIXEL_RESULT_INIT_ERROR);
|
||||
FF_LIBRARY_LOAD_SYMBOL_ADRESS(imageMagick, ffWriteImage, WriteImage, FF_LOGO_SIXEL_RESULT_INIT_ERROR);
|
||||
|
||||
return ffLogoPrintSixelImpl(instance, imageMagick, logoResizeIM6, logoWriteIM6);
|
||||
}
|
||||
|
||||
@@ -17,12 +17,12 @@ static bool logoWriteIM7(void* image, const void* imageInfo, void* exceptionInfo
|
||||
return ffWriteImage(imageInfo, image, exceptionInfo) == MagickTrue;
|
||||
}
|
||||
|
||||
bool ffLogoPrintSixelIM7(FFinstance* instance)
|
||||
FFLogoSixelResult ffLogoPrintSixelIM7(FFinstance* instance)
|
||||
{
|
||||
FF_LIBRARY_LOAD(imageMagick, instance->config.libImageMagick, false, "libMagickCore-7.Q16HDRI.so", 11, "libMagickCore-7.Q16.so", 11)
|
||||
FF_LIBRARY_LOAD(imageMagick, instance->config.libImageMagick, FF_LOGO_SIXEL_RESULT_INIT_ERROR, "libMagickCore-7.Q16HDRI.so", 11, "libMagickCore-7.Q16.so", 11)
|
||||
|
||||
FF_LIBRARY_LOAD_SYMBOL_ADRESS(imageMagick, ffResizeImage, ResizeImage, false);
|
||||
FF_LIBRARY_LOAD_SYMBOL_ADRESS(imageMagick, ffWriteImage, WriteImage, false);
|
||||
FF_LIBRARY_LOAD_SYMBOL_ADRESS(imageMagick, ffResizeImage, ResizeImage, FF_LOGO_SIXEL_RESULT_INIT_ERROR);
|
||||
FF_LIBRARY_LOAD_SYMBOL_ADRESS(imageMagick, ffWriteImage, WriteImage, FF_LOGO_SIXEL_RESULT_INIT_ERROR);
|
||||
|
||||
return ffLogoPrintSixelImpl(instance, imageMagick, logoResizeIM7, logoWriteIM7);
|
||||
}
|
||||
|
||||
+29
-27
@@ -9,25 +9,25 @@
|
||||
#include <magick/MagickCore.h>
|
||||
#endif
|
||||
|
||||
bool ffLogoPrintSixelImpl(FFinstance* instance, void* imageMagick, FFLogoIMResizeFunc resizeFunc, FFLogoIMWriteFunc writeFunc)
|
||||
FFLogoSixelResult ffLogoPrintSixelImpl(FFinstance* instance, void* imageMagick, FFLogoIMResizeFunc resizeFunc, FFLogoIMWriteFunc writeFunc)
|
||||
{
|
||||
struct winsize winsize;
|
||||
if(ioctl(STDOUT_FILENO, TIOCGWINSZ, &winsize) != 0)
|
||||
return false;
|
||||
return FF_LOGO_SIXEL_RESULT_RUN_ERROR;
|
||||
|
||||
FF_LIBRARY_LOAD_SYMBOL(imageMagick, AcquireExceptionInfo, false)
|
||||
FF_LIBRARY_LOAD_SYMBOL(imageMagick, DestroyExceptionInfo, false)
|
||||
FF_LIBRARY_LOAD_SYMBOL(imageMagick, AcquireImageInfo, false)
|
||||
FF_LIBRARY_LOAD_SYMBOL(imageMagick, DestroyImageInfo, false)
|
||||
FF_LIBRARY_LOAD_SYMBOL(imageMagick, CopyMagickString, false)
|
||||
FF_LIBRARY_LOAD_SYMBOL(imageMagick, ReadImage, false)
|
||||
FF_LIBRARY_LOAD_SYMBOL(imageMagick, DestroyImage, false)
|
||||
FF_LIBRARY_LOAD_SYMBOL(imageMagick, AcquireExceptionInfo, FF_LOGO_SIXEL_RESULT_INIT_ERROR)
|
||||
FF_LIBRARY_LOAD_SYMBOL(imageMagick, DestroyExceptionInfo, FF_LOGO_SIXEL_RESULT_INIT_ERROR)
|
||||
FF_LIBRARY_LOAD_SYMBOL(imageMagick, AcquireImageInfo, FF_LOGO_SIXEL_RESULT_INIT_ERROR)
|
||||
FF_LIBRARY_LOAD_SYMBOL(imageMagick, DestroyImageInfo, FF_LOGO_SIXEL_RESULT_INIT_ERROR)
|
||||
FF_LIBRARY_LOAD_SYMBOL(imageMagick, CopyMagickString, FF_LOGO_SIXEL_RESULT_INIT_ERROR)
|
||||
FF_LIBRARY_LOAD_SYMBOL(imageMagick, ReadImage, FF_LOGO_SIXEL_RESULT_INIT_ERROR)
|
||||
FF_LIBRARY_LOAD_SYMBOL(imageMagick, DestroyImage, FF_LOGO_SIXEL_RESULT_INIT_ERROR)
|
||||
|
||||
ExceptionInfo* exceptionInfo = ffAcquireExceptionInfo();
|
||||
if(exceptionInfo == NULL)
|
||||
{
|
||||
dlclose(imageMagick);
|
||||
return false;
|
||||
return FF_LOGO_SIXEL_RESULT_RUN_ERROR;
|
||||
}
|
||||
|
||||
ImageInfo* imageInfoIn = ffAcquireImageInfo();
|
||||
@@ -35,7 +35,7 @@ bool ffLogoPrintSixelImpl(FFinstance* instance, void* imageMagick, FFLogoIMResiz
|
||||
{
|
||||
ffDestroyExceptionInfo(exceptionInfo);
|
||||
dlclose(imageMagick);
|
||||
return false;
|
||||
return FF_LOGO_SIXEL_RESULT_RUN_ERROR;
|
||||
}
|
||||
|
||||
//+1, because we need to copy the null byte too
|
||||
@@ -47,7 +47,7 @@ bool ffLogoPrintSixelImpl(FFinstance* instance, void* imageMagick, FFLogoIMResiz
|
||||
{
|
||||
ffDestroyExceptionInfo(exceptionInfo);
|
||||
dlclose(imageMagick);
|
||||
return false;
|
||||
return FF_LOGO_SIXEL_RESULT_RUN_ERROR;
|
||||
}
|
||||
|
||||
double characterPixelWidth = winsize.ws_xpixel / (double) winsize.ws_col;
|
||||
@@ -62,7 +62,7 @@ bool ffLogoPrintSixelImpl(FFinstance* instance, void* imageMagick, FFLogoIMResiz
|
||||
ffDestroyImage(originalImage);
|
||||
ffDestroyExceptionInfo(exceptionInfo);
|
||||
dlclose(imageMagick);
|
||||
return false;
|
||||
return FF_LOGO_SIXEL_RESULT_RUN_ERROR;
|
||||
}
|
||||
|
||||
Image* resizedImage = (Image*) resizeFunc(originalImage, (size_t) imagePixelWidth, (size_t) imagePixelHeight, exceptionInfo);
|
||||
@@ -71,7 +71,7 @@ bool ffLogoPrintSixelImpl(FFinstance* instance, void* imageMagick, FFLogoIMResiz
|
||||
{
|
||||
ffDestroyExceptionInfo(exceptionInfo);
|
||||
dlclose(imageMagick);
|
||||
return false;
|
||||
return FF_LOGO_SIXEL_RESULT_RUN_ERROR;
|
||||
}
|
||||
|
||||
ImageInfo* imageInfoOut = ffAcquireImageInfo();
|
||||
@@ -80,7 +80,7 @@ bool ffLogoPrintSixelImpl(FFinstance* instance, void* imageMagick, FFLogoIMResiz
|
||||
ffDestroyImage(resizedImage);
|
||||
ffDestroyExceptionInfo(exceptionInfo);
|
||||
dlclose(imageMagick);
|
||||
return false;
|
||||
return FF_LOGO_SIXEL_RESULT_RUN_ERROR;
|
||||
}
|
||||
|
||||
ffPrintCharTimes(' ', instance->config.logoPaddingLeft);
|
||||
@@ -96,7 +96,7 @@ bool ffLogoPrintSixelImpl(FFinstance* instance, void* imageMagick, FFLogoIMResiz
|
||||
dlclose(imageMagick);
|
||||
|
||||
if(writeResult == MagickFalse)
|
||||
return false;
|
||||
return FF_LOGO_SIXEL_RESULT_RUN_ERROR;
|
||||
|
||||
instance->state.logoHeight = (uint32_t) (imagePixelHeight / characterPixelHeight);
|
||||
instance->state.logoWidth = instance->config.logoWidth + instance->config.logoPaddingLeft + instance->config.logoPaddingRight;
|
||||
@@ -104,25 +104,27 @@ bool ffLogoPrintSixelImpl(FFinstance* instance, void* imageMagick, FFLogoIMResiz
|
||||
fputs("\033[9999999D", stdout);
|
||||
printf("\033[%uA", instance->state.logoHeight);
|
||||
|
||||
return true;
|
||||
return FF_LOGO_SIXEL_RESULT_SUCCESS;
|
||||
}
|
||||
#endif
|
||||
|
||||
bool ffLogoPrintSixelIfExists(FFinstance* instance)
|
||||
{
|
||||
#ifdef FF_HAVE_IMAGEMAGICK7
|
||||
if(ffLogoPrintSixelIM7(instance))
|
||||
return true;
|
||||
#endif
|
||||
|
||||
#ifdef FF_HAVE_IMAGEMAGICK6
|
||||
if(ffLogoPrintSixelIM6(instance))
|
||||
return true;
|
||||
#endif
|
||||
|
||||
#if !defined(FF_HAVE_IMAGEMAGICK7) && !defined(FF_HAVE_IMAGEMAGICK6)
|
||||
FF_UNUSED(instance);
|
||||
#endif
|
||||
|
||||
#ifdef FF_HAVE_IMAGEMAGICK7
|
||||
FFLogoSixelResult result = ffLogoPrintSixelIM7(instance);
|
||||
if(result == FF_LOGO_SIXEL_RESULT_SUCCESS)
|
||||
return true;
|
||||
else if(result == FF_LOGO_SIXEL_RESULT_RUN_ERROR)
|
||||
return false;
|
||||
#endif
|
||||
|
||||
#ifdef FF_HAVE_IMAGEMAGICK6
|
||||
return ffLogoPrintSixelIM6(instance) == FF_LOGO_SIXEL_RESULT_SUCCESS
|
||||
#endif
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
+18
-10
@@ -5,15 +5,6 @@
|
||||
|
||||
#include "fastfetch.h"
|
||||
|
||||
#ifdef FF_HAVE_IMAGEMAGICK7
|
||||
bool ffLogoPrintSixelIM7(FFinstance* instance);
|
||||
#endif
|
||||
|
||||
#ifdef FF_HAVE_IMAGEMAGICK6
|
||||
#include <math.h>
|
||||
bool ffLogoPrintSixelIM6(FFinstance* instance);
|
||||
#endif
|
||||
|
||||
#if defined(FF_HAVE_IMAGEMAGICK7) || defined(FF_HAVE_IMAGEMAGICK6)
|
||||
|
||||
#include <sys/ioctl.h>
|
||||
@@ -22,11 +13,28 @@ bool ffLogoPrintSixelIM6(FFinstance* instance);
|
||||
#define MAGICKCORE_HDRI_ENABLE 1
|
||||
#define MAGICKCORE_QUANTUM_DEPTH 16
|
||||
|
||||
typedef enum FFLogoSixelResult
|
||||
{
|
||||
FF_LOGO_SIXEL_RESULT_SUCCESS, //Logo printed
|
||||
FF_LOGO_SIXEL_RESULT_INIT_ERROR, //Failed to load library, try again with next IM version
|
||||
FF_LOGO_SIXEL_RESULT_RUN_ERROR //Failed to load / convert image, cancle whole sixel code
|
||||
} FFLogoSixelResult;
|
||||
|
||||
typedef void*(*FFLogoIMResizeFunc)(const void* image, size_t width, size_t height, void* exceptionInfo);
|
||||
typedef bool(*FFLogoIMWriteFunc)(void* image, const void* imageInfo, void* exceptionInfo);
|
||||
|
||||
bool ffLogoPrintSixelImpl(FFinstance* instance, void* library, FFLogoIMResizeFunc resizeFunc, FFLogoIMWriteFunc writeFunc);
|
||||
FFLogoSixelResult ffLogoPrintSixelImpl(FFinstance* instance, void* library, FFLogoIMResizeFunc resizeFunc, FFLogoIMWriteFunc writeFunc);
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef FF_HAVE_IMAGEMAGICK7
|
||||
FFLogoSixelResult ffLogoPrintSixelIM7(FFinstance* instance);
|
||||
#endif
|
||||
|
||||
#ifdef FF_HAVE_IMAGEMAGICK6
|
||||
#include <math.h>
|
||||
FFLogoSixelResult ffLogoPrintSixelIM6(FFinstance* instance);
|
||||
#endif
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user