diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2024-12-13 11:16:37 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2024-12-13 11:16:37 +0100 |
| commit | fa76ce1f057f46a6133dfab67b78cdf16fd1f7f0 (patch) | |
| tree | e8ff26b7f48a32fd06e57e17c53d8440484351de /src | |
| parent | 59bb9c2083a3c9781bf0e0446f7de67951f0aff8 (diff) | |
| download | box64-fa76ce1f057f46a6133dfab67b78cdf16fd1f7f0.tar.gz box64-fa76ce1f057f46a6133dfab67b78cdf16fd1f7f0.zip | |
[BOX32][WRAPPER] Added 3 more 32bits wrapped function to libcairo
Diffstat (limited to 'src')
| -rw-r--r-- | src/libtools/my_x11_conv.c | 45 | ||||
| -rw-r--r-- | src/libtools/my_x11_conv.h | 1 | ||||
| -rw-r--r-- | src/wrapped32/generated/functions_list.txt | 5 | ||||
| -rw-r--r-- | src/wrapped32/generated/wrappedcairotypes32.h | 6 | ||||
| -rw-r--r-- | src/wrapped32/generated/wrapper32.c | 2 | ||||
| -rw-r--r-- | src/wrapped32/generated/wrapper32.h | 1 | ||||
| -rw-r--r-- | src/wrapped32/wrappedcairo.c | 17 | ||||
| -rw-r--r-- | src/wrapped32/wrappedcairo_private.h | 8 |
8 files changed, 80 insertions, 5 deletions
diff --git a/src/libtools/my_x11_conv.c b/src/libtools/my_x11_conv.c index eb143e94..c9efd6e3 100644 --- a/src/libtools/my_x11_conv.c +++ b/src/libtools/my_x11_conv.c @@ -72,6 +72,31 @@ void convert_Screen_to_32(void* d, void* s) dst->save_unders = src->save_unders; dst->root_input_mask = to_long(src->root_input_mask); } +void convert_Screen_to_64(void* d, void* s) +{ + my_Screen_t* dst = d; + my_Screen_32_t* src = s; + dst->root_input_mask = from_long(src->root_input_mask); + dst->save_unders = src->save_unders; + dst->backing_store = src->backing_store; + dst->min_maps = src->min_maps; + dst->max_maps = src->max_maps; + dst->black_pixel = from_ulong(src->black_pixel); + dst->white_pixel = from_ulong(src->white_pixel); + dst->cmap = from_ulong(src->cmap); + dst->default_gc = from_ptrv(src->default_gc); + dst->root_visual = from_ptrv(src->root_visual); + dst->root_depth = src->root_depth; + dst->depths = from_ptrv(src->depths); + dst->ndepths = src->ndepths; + dst->mheight = src->mheight; + dst->mwidth = src->mwidth; + dst->height = src->height; + dst->width = src->width; + dst->root = from_ulong(src->root); + dst->display = getDisplay(from_ptrv(src->display)); + dst->ext_data = from_ptrv(src->ext_data); +} void internal_convert_Visual_to_32(void* d, void* s) { @@ -137,6 +162,17 @@ my_Visual_t* getVisual64(int N, my_Visual_32_t* a) return ret->_64; } +void* get_display_screen(int idx, void* a) +{ + my_XDisplay_t* dpy = my32_Displays_64[idx]; + my_XDisplay_32_t* dpy32 = &my32_Displays_32[idx]; + my_Screen_32_t* screens32 = from_ptrv(dpy32->screens); + for(int i=0; i<dpy->nscreens; ++i) + if(&screens32[i] == a) + return &dpy->screens[i]; + return a; +} + void* convert_Visual_to_32(void* dpy, void* a) { if(!dpy) return a; @@ -156,6 +192,15 @@ void* convert_Visual_to_64(void* dpy, void* a) return a; } +void* getScreen64(void* dpy, void* a) +{ + if(!dpy) return a; + for(int i=0; i<N_DISPLAY; ++i) + if(((&my32_Displays_32[i])==dpy) || (my32_Displays_64[i]==dpy)) { + return get_display_screen(i, a); + } + return a; +} void* my_dlopen(x64emu_t* emu, void *filename, int flag); void* addDisplay(void* d) diff --git a/src/libtools/my_x11_conv.h b/src/libtools/my_x11_conv.h index 709f7cfe..01b37d5d 100644 --- a/src/libtools/my_x11_conv.h +++ b/src/libtools/my_x11_conv.h @@ -24,6 +24,7 @@ void delDisplay(void* d); void refreshDisplay(void* dpy); void convert_Screen_to_32(void* d, void* s); +void* getScreen64(void* dpy, void* a); void* convert_Visual_to_32(void* dpy, void* a); void* convert_Visual_to_64(void* dpy, void* a); diff --git a/src/wrapped32/generated/functions_list.txt b/src/wrapped32/generated/functions_list.txt index 4865a6b3..d1996f7b 100644 --- a/src/wrapped32/generated/functions_list.txt +++ b/src/wrapped32/generated/functions_list.txt @@ -1378,6 +1378,7 @@ #() pFEpiiuu -> pFEpiiuu #() pEEpLLiN -> pEEpLLiN #() pEEppLLp -> pEEppLLp +#() pFEXLpii -> pFEXLpii #() pFEXpppp -> pFEXpppp #() pFWCiWCi -> pFWCiWCi #() pFdddddd -> pFdddddd @@ -1701,10 +1702,14 @@ wrappedcairo: - cairo_ft_scaled_font_lock_face - cairo_xcb_device_get_connection - uFpppp: + - cairo_pattern_set_user_data - cairo_set_user_data - cairo_surface_set_user_data - pFppdd: - cairo_pdf_surface_create_for_stream +- pFXLpii: + - cairo_xlib_surface_create + - cairo_xlib_surface_create_for_bitmap wrappedcrashhandler: wrappedexpat: - vFpp: diff --git a/src/wrapped32/generated/wrappedcairotypes32.h b/src/wrapped32/generated/wrappedcairotypes32.h index 3a2f9d9b..47999c16 100644 --- a/src/wrapped32/generated/wrappedcairotypes32.h +++ b/src/wrapped32/generated/wrappedcairotypes32.h @@ -14,12 +14,16 @@ typedef void* (*pFp_t)(void*); typedef uint32_t (*uFpppp_t)(void*, void*, void*, void*); typedef void* (*pFppdd_t)(void*, void*, double, double); +typedef void* (*pFXLpii_t)(void*, uintptr_t, void*, int32_t, int32_t); #define SUPER() ADDED_FUNCTIONS() \ GO(cairo_ft_scaled_font_lock_face, pFp_t) \ GO(cairo_xcb_device_get_connection, pFp_t) \ + GO(cairo_pattern_set_user_data, uFpppp_t) \ GO(cairo_set_user_data, uFpppp_t) \ GO(cairo_surface_set_user_data, uFpppp_t) \ - GO(cairo_pdf_surface_create_for_stream, pFppdd_t) + GO(cairo_pdf_surface_create_for_stream, pFppdd_t) \ + GO(cairo_xlib_surface_create, pFXLpii_t) \ + GO(cairo_xlib_surface_create_for_bitmap, pFXLpii_t) #endif // __wrappedcairoTYPES32_H_ diff --git a/src/wrapped32/generated/wrapper32.c b/src/wrapped32/generated/wrapper32.c index a0722de4..4c353ff4 100644 --- a/src/wrapped32/generated/wrapper32.c +++ b/src/wrapped32/generated/wrapper32.c @@ -1469,6 +1469,7 @@ typedef intptr_t (*lEipLipp_t)(int32_t, void*, uintptr_t, int32_t, void*, void*) typedef void* (*pFEpiiuu_t)(x64emu_t*, void*, int32_t, int32_t, uint32_t, uint32_t); typedef void* (*pEEpLLiN_t)(x64emu_t*, void*, uintptr_t, uintptr_t, int32_t, ...); typedef void* (*pEEppLLp_t)(x64emu_t*, void*, void*, uintptr_t, uintptr_t, void*); +typedef void* (*pFEXLpii_t)(x64emu_t*, void*, uintptr_t, void*, int32_t, int32_t); typedef void* (*pFEXpppp_t)(x64emu_t*, void*, void*, void*, void*, void*); typedef void* (*pFWCiWCi_t)(uint16_t, uint8_t, int32_t, uint16_t, uint8_t, int32_t); typedef void* (*pFdddddd_t)(double, double, double, double, double, double); @@ -3173,6 +3174,7 @@ void lEipLipp_32(x64emu_t *emu, uintptr_t fcn) { lEipLipp_t fn = (lEipLipp_t)fcn void pFEpiiuu_32(x64emu_t *emu, uintptr_t fcn) { pFEpiiuu_t fn = (pFEpiiuu_t)fcn; R_EAX = to_ptrv(fn(emu, from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20))); } void pEEpLLiN_32(x64emu_t *emu, uintptr_t fcn) { pEEpLLiN_t fn = (pEEpLLiN_t)fcn; errno = emu->libc_err; R_EAX = to_ptrv(fn(emu, from_ptriv(R_ESP + 4), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ptri(int32_t, R_ESP + 16), from_ptriv(R_ESP + 20))); emu->libc_err = errno; } void pEEppLLp_32(x64emu_t *emu, uintptr_t fcn) { pEEppLLp_t fn = (pEEppLLp_t)fcn; errno = emu->libc_err; R_EAX = to_ptrv(fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ulong(from_ptri(ulong_t, R_ESP + 16)), from_ptriv(R_ESP + 20))); emu->libc_err = errno; } +void pFEXLpii_32(x64emu_t *emu, uintptr_t fcn) { pFEXLpii_t fn = (pFEXLpii_t)fcn; R_EAX = to_ptrv(fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20))); } void pFEXpppp_32(x64emu_t *emu, uintptr_t fcn) { pFEXpppp_t fn = (pFEXpppp_t)fcn; R_EAX = to_ptrv(fn(emu, getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20))); } void pFWCiWCi_32(x64emu_t *emu, uintptr_t fcn) { pFWCiWCi_t fn = (pFWCiWCi_t)fcn; R_EAX = to_ptrv(fn(from_ptri(uint16_t, R_ESP + 4), from_ptri(uint8_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(uint16_t, R_ESP + 16), from_ptri(uint8_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24))); } void pFdddddd_32(x64emu_t *emu, uintptr_t fcn) { pFdddddd_t fn = (pFdddddd_t)fcn; R_EAX = to_ptrv(fn(from_ptri(double, R_ESP + 4), from_ptri(double, R_ESP + 12), from_ptri(double, R_ESP + 20), from_ptri(double, R_ESP + 28), from_ptri(double, R_ESP + 36), from_ptri(double, R_ESP + 44))); } diff --git a/src/wrapped32/generated/wrapper32.h b/src/wrapped32/generated/wrapper32.h index 6d60b9a3..e39652ab 100644 --- a/src/wrapped32/generated/wrapper32.h +++ b/src/wrapped32/generated/wrapper32.h @@ -1419,6 +1419,7 @@ void lEipLipp_32(x64emu_t *emu, uintptr_t fnc); void pFEpiiuu_32(x64emu_t *emu, uintptr_t fnc); void pEEpLLiN_32(x64emu_t *emu, uintptr_t fnc); void pEEppLLp_32(x64emu_t *emu, uintptr_t fnc); +void pFEXLpii_32(x64emu_t *emu, uintptr_t fnc); void pFEXpppp_32(x64emu_t *emu, uintptr_t fnc); void pFWCiWCi_32(x64emu_t *emu, uintptr_t fnc); void pFdddddd_32(x64emu_t *emu, uintptr_t fnc); diff --git a/src/wrapped32/wrappedcairo.c b/src/wrapped32/wrappedcairo.c index da155f07..65bab438 100644 --- a/src/wrapped32/wrappedcairo.c +++ b/src/wrapped32/wrappedcairo.c @@ -18,6 +18,7 @@ #include "emu/x64emu_private.h" #include "myalign32.h" #include "converter32.h" +#include "libtools/my_x11_conv.h" static const char* cairoName = "libcairo.so.2"; #define LIBNAME cairo @@ -117,4 +118,20 @@ EXPORT void* my32_cairo_pdf_surface_create_for_stream(x64emu_t* emu, void* f, vo return my->cairo_pdf_surface_create_for_stream(find_cairo_write_func_Fct(f), closure, width, height); } +EXPORT uint32_t my32_cairo_pattern_set_user_data(x64emu_t* emu, void* pat, void* key, void* data, void* d) +{ + return my->cairo_pattern_set_user_data(pat, key, data, find_destroy_Fct(d)); +} + +EXPORT void* my32_cairo_xlib_surface_create(x64emu_t* emu, void* dpy, XID d, void* vis, int w, int h) +{ + return my->cairo_xlib_surface_create(dpy, d, convert_Visual_to_64(dpy, vis), w, h); +} + +EXPORT void* my32_cairo_xlib_surface_create_for_bitmap(x64emu_t* emu, void* dpy, XID d, void* screen, int w, int h) +{ + + return my->cairo_xlib_surface_create_for_bitmap(dpy, d, getScreen64(dpy, screen), w, h); +} + #include "wrappedlib_init32.h" \ No newline at end of file diff --git a/src/wrapped32/wrappedcairo_private.h b/src/wrapped32/wrappedcairo_private.h index 1e2dfdc7..6dd05e85 100644 --- a/src/wrapped32/wrappedcairo_private.h +++ b/src/wrapped32/wrappedcairo_private.h @@ -171,7 +171,7 @@ GO(cairo_pattern_reference, pFp) GO(cairo_pattern_set_extend, vFpu) GO(cairo_pattern_set_filter, vFpu) GO(cairo_pattern_set_matrix, vFpp) -//GOM(cairo_pattern_set_user_data, uFEpppp) +GOM(cairo_pattern_set_user_data, uFEpppp) GO(cairo_pattern_status, uFp) //GO(cairo_pdf_get_versions, vFpp) GO(cairo_pdf_surface_create, pFpdd) @@ -380,8 +380,8 @@ GOM(cairo_xcb_device_get_connection, pFEp) //GO(cairo_xlib_device_debug_cap_xrender_version, vFpii) //GO(cairo_xlib_device_debug_get_precision, iFp) //GO(cairo_xlib_device_debug_set_precision, vFpi) -//GO(cairo_xlib_surface_create, pFpppii) -//GO(cairo_xlib_surface_create_for_bitmap, pFpLpii) +GOM(cairo_xlib_surface_create, pFEXLpii) +GOM(cairo_xlib_surface_create_for_bitmap, pFEXLpii) //GO(cairo_xlib_surface_create_with_xrender_format, pFpLppii) //GO(cairo_xlib_surface_get_depth, //GO(cairo_xlib_surface_get_display, pFp) @@ -392,7 +392,7 @@ GOM(cairo_xcb_device_get_connection, pFEp) //GO(cairo_xlib_surface_get_width, //GO(cairo_xlib_surface_get_xrender_format, pFp) //GO(cairo_xlib_surface_set_drawable, vFpLii) -//GO(cairo_xlib_surface_set_size, vFpii) +GO(cairo_xlib_surface_set_size, vFpii) //GO(cairo_xml_create, //GO(cairo_xml_create_for_stream, //GO(cairo_xml_for_recording_surface, |