about summary refs log tree commit diff stats
path: root/src/wrapped/wrappedlibxft.c
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-09-20 12:51:59 +0200
committerptitSeb <sebastien.chev@gmail.com>2024-09-20 12:51:59 +0200
commit88629f7aa697f23f868bc9a9e17a6420d23e8fa3 (patch)
tree10cbd5a6d96b8d45bc966d0371b55bd109e300d1 /src/wrapped/wrappedlibxft.c
parentfb11af5859c4ec9699e2290cf2f4ca692eef8242 (diff)
downloadbox64-88629f7aa697f23f868bc9a9e17a6420d23e8fa3.tar.gz
box64-88629f7aa697f23f868bc9a9e17a6420d23e8fa3.zip
[WRAPPER] Reworked libXft with new wrapperhelper (should help #1841)
Diffstat (limited to 'src/wrapped/wrappedlibxft.c')
-rw-r--r--src/wrapped/wrappedlibxft.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/wrapped/wrappedlibxft.c b/src/wrapped/wrappedlibxft.c
index 633e4066..be339e18 100644
--- a/src/wrapped/wrappedlibxft.c
+++ b/src/wrapped/wrappedlibxft.c
@@ -6,10 +6,17 @@
 
 #include "wrappedlibs.h"
 
+#include "debug.h"
 #include "wrapper.h"
 #include "bridge.h"
 #include "librarian/library_private.h"
 #include "x64emu.h"
+#include "emu/x64emu_private.h"
+#include "callback.h"
+#include "librarian.h"
+#include "box64context.h"
+#include "emu/x64emu_private.h"
+#include "myalign.h"
 
 #ifdef ANDROID
     const char* libxftName = "libXft.so";
@@ -19,10 +26,41 @@
 
 #define LIBNAME libxft
 
+typedef void(*vFp_t)(void*);
+typedef void*(*pFpp_t)(void*, void*);
+typedef void*(*pFpipp_t)(void*, int, void*, void*);
+
+#define ADDED_FUNCTIONS()                   \
+    GO(XftFontMatch, pFpipp_t)              \
+    GO(XftFontOpenPattern, pFpp_t)          \
+    GO(FcPatternDestroy, vFp_t)
+
+#include "generated/wrappedlibxfttypes.h"
+
+#include "wrappercallback.h"
+
+void* my_FcPatternBuild(x64emu_t* emu, void* pattern, uint64_t* b); // from fontconfig
+EXPORT void* my_XftFontOpen(x64emu_t* emu, void* dpy, int screen, uintptr_t* b)
+{
+    int result;
+    void* pat = my_FcPatternBuild(emu, NULL, b);
+    void* match = my->XftFontMatch(dpy, screen, pat, &result);
+    my->FcPatternDestroy(pat);
+    if(!match)
+        return NULL;
+    void* ret = my->XftFontOpenPattern(dpy, match);
+    if(!ret)
+        my->FcPatternDestroy(match);
+    return ret;
+}
+
+
 #ifdef ANDROID
 #define NEEDED_LIBS "libX11.so", "libfontconfig.so", "libXrender.so", "libfreetype.so"
 #else
 #define NEEDED_LIBS "libX11.so.6", "libfontconfig.so.1", "libXrender.so.1", "libfreetype.so.6"
 #endif
 
+
+
 #include "wrappedlib_init.h"