diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/emu/x64printer.c | 2 | ||||
| -rw-r--r-- | src/wrapped/generated/functions_list.txt | 5 | ||||
| -rw-r--r-- | src/wrapped/generated/wrappedcairotypes.h | 4 | ||||
| -rw-r--r-- | src/wrapped/generated/wrapper.c | 2 | ||||
| -rw-r--r-- | src/wrapped/generated/wrapper.h | 1 | ||||
| -rw-r--r-- | src/wrapped/wrappedcairo.c | 34 | ||||
| -rw-r--r-- | src/wrapped/wrappedcairo_private.h | 4 |
7 files changed, 50 insertions, 2 deletions
diff --git a/src/emu/x64printer.c b/src/emu/x64printer.c index 09f2f31f..eff11ad4 100644 --- a/src/emu/x64printer.c +++ b/src/emu/x64printer.c @@ -3523,6 +3523,8 @@ void x64Print(x64emu_t* emu, char* buff, size_t buffsz, const char* func, int ti snprintf(buff, buffsz, "%04d|%p: Calling %s(%" PRIp ", %" PRIp ", %" PRIi32 ", %" PRIi32 ")", tid, *(void**)(R_RSP), func, (void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX); } else if (w == pFEppip) { snprintf(buff, buffsz, "%04d|%p: Calling %s(%" PRIp ", %" PRIp ", %" PRIi32 ", %" PRIp ")", tid, *(void**)(R_RSP), func, (void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX); + } else if (w == pFEppdd) { + snprintf(buff, buffsz, "%04d|%p: Calling %s(%" PRIp ", %" PRIp ", %" PRIf ", %" PRIf ")", tid, *(void**)(R_RSP), func, (void*)R_RDI, (void*)R_RSI, emu->xmm[0].d[0], emu->xmm[1].d[0]); } else if (w == pFEppLp) { snprintf(buff, buffsz, "%04d|%p: Calling %s(%" PRIp ", %" PRIp ", %" PRIu64 ", %" PRIp ")", tid, *(void**)(R_RSP), func, (void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX); } else if (w == pFEpppi) { diff --git a/src/wrapped/generated/functions_list.txt b/src/wrapped/generated/functions_list.txt index 508a6944..e5eb8496 100644 --- a/src/wrapped/generated/functions_list.txt +++ b/src/wrapped/generated/functions_list.txt @@ -1947,6 +1947,7 @@ #() pFEpLpp #() pFEppii #() pFEppip +#() pFEppdd #() pFEppLp #() pFEpppi #() pFEpppu @@ -3541,9 +3542,13 @@ wrappedbz2: wrappedcairo: - pFp: - cairo_xcb_device_get_connection +- uFppp: + - cairo_surface_write_to_png_stream - iFpppp: - cairo_set_user_data - cairo_surface_set_user_data +- pFppdd: + - cairo_pdf_surface_create_for_stream - iFpppLpp: - cairo_surface_set_mime_data wrappedcairogobject: diff --git a/src/wrapped/generated/wrappedcairotypes.h b/src/wrapped/generated/wrappedcairotypes.h index 867960bc..11151dee 100644 --- a/src/wrapped/generated/wrappedcairotypes.h +++ b/src/wrapped/generated/wrappedcairotypes.h @@ -12,13 +12,17 @@ #endif typedef void* (*pFp_t)(void*); +typedef uint32_t (*uFppp_t)(void*, void*, void*); typedef int32_t (*iFpppp_t)(void*, void*, void*, void*); +typedef void* (*pFppdd_t)(void*, void*, double, double); typedef int32_t (*iFpppLpp_t)(void*, void*, void*, uintptr_t, void*, void*); #define SUPER() ADDED_FUNCTIONS() \ GO(cairo_xcb_device_get_connection, pFp_t) \ + GO(cairo_surface_write_to_png_stream, uFppp_t) \ GO(cairo_set_user_data, iFpppp_t) \ GO(cairo_surface_set_user_data, iFpppp_t) \ + GO(cairo_pdf_surface_create_for_stream, pFppdd_t) \ GO(cairo_surface_set_mime_data, iFpppLpp_t) #endif // __wrappedcairoTYPES_H_ diff --git a/src/wrapped/generated/wrapper.c b/src/wrapped/generated/wrapper.c index 520cf020..72731388 100644 --- a/src/wrapped/generated/wrapper.c +++ b/src/wrapped/generated/wrapper.c @@ -1975,6 +1975,7 @@ typedef void* (*pFEpUpp_t)(x64emu_t*, void*, uint64_t, void*, void*); typedef void* (*pFEpLpp_t)(x64emu_t*, void*, uintptr_t, void*, void*); typedef void* (*pFEppii_t)(x64emu_t*, void*, void*, int32_t, int32_t); typedef void* (*pFEppip_t)(x64emu_t*, void*, void*, int32_t, void*); +typedef void* (*pFEppdd_t)(x64emu_t*, void*, void*, double, double); typedef void* (*pFEppLp_t)(x64emu_t*, void*, void*, uintptr_t, void*); typedef void* (*pFEpppi_t)(x64emu_t*, void*, void*, void*, int32_t); typedef void* (*pFEpppu_t)(x64emu_t*, void*, void*, void*, uint32_t); @@ -5512,6 +5513,7 @@ void pFEpUpp(x64emu_t *emu, uintptr_t fcn) { pFEpUpp_t fn = (pFEpUpp_t)fcn; R_RA void pFEpLpp(x64emu_t *emu, uintptr_t fcn) { pFEpLpp_t fn = (pFEpLpp_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } void pFEppii(x64emu_t *emu, uintptr_t fcn) { pFEppii_t fn = (pFEppii_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX); } void pFEppip(x64emu_t *emu, uintptr_t fcn) { pFEppip_t fn = (pFEppip_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX); } +void pFEppdd(x64emu_t *emu, uintptr_t fcn) { pFEppdd_t fn = (pFEppdd_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (void*)R_RSI, emu->xmm[0].d[0], emu->xmm[1].d[0]); } void pFEppLp(x64emu_t *emu, uintptr_t fcn) { pFEppLp_t fn = (pFEppLp_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX); } void pFEpppi(x64emu_t *emu, uintptr_t fcn) { pFEpppi_t fn = (pFEpppi_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX); } void pFEpppu(x64emu_t *emu, uintptr_t fcn) { pFEpppu_t fn = (pFEpppu_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint32_t)R_RCX); } diff --git a/src/wrapped/generated/wrapper.h b/src/wrapped/generated/wrapper.h index f1591123..aa147cfb 100644 --- a/src/wrapped/generated/wrapper.h +++ b/src/wrapped/generated/wrapper.h @@ -1984,6 +1984,7 @@ void pFEpUpp(x64emu_t *emu, uintptr_t fnc); void pFEpLpp(x64emu_t *emu, uintptr_t fnc); void pFEppii(x64emu_t *emu, uintptr_t fnc); void pFEppip(x64emu_t *emu, uintptr_t fnc); +void pFEppdd(x64emu_t *emu, uintptr_t fnc); void pFEppLp(x64emu_t *emu, uintptr_t fnc); void pFEpppi(x64emu_t *emu, uintptr_t fnc); void pFEpppu(x64emu_t *emu, uintptr_t fnc); diff --git a/src/wrapped/wrappedcairo.c b/src/wrapped/wrappedcairo.c index e1a15b49..13c6ddec 100644 --- a/src/wrapped/wrappedcairo.c +++ b/src/wrapped/wrappedcairo.c @@ -64,6 +64,30 @@ static void* reverse_destroy_Fct(void* fct) #undef GO return (void*)AddBridge(my_lib->w.bridge, pFpii, fct, 0, NULL); } +// cairo_write ... +#define GO(A) \ +static uintptr_t my_cairo_write_fct_##A = 0; \ +static uint32_t my_cairo_write_##A(void* a, void* b, uint32_t c) \ +{ \ + return (uint32_t)RunFunctionFmt(my_cairo_write_fct_##A, "ppu", a, b, c); \ +} +SUPER() +#undef GO +static void* find_cairo_write_Fct(void* fct) +{ + if(!fct) return fct; + if(GetNativeFnc((uintptr_t)fct)) return GetNativeFnc((uintptr_t)fct); + #define GO(A) if(my_cairo_write_fct_##A == (uintptr_t)fct) return my_cairo_write_##A; + SUPER() + #undef GO + #define GO(A) if(my_cairo_write_fct_##A == 0) {my_cairo_write_fct_##A = (uintptr_t)fct; return my_cairo_write_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for cairo cairo_write callback\n"); + return NULL; +} + +#undef SUPER EXPORT void* my_cairo_xcb_device_get_connection(x64emu_t* emu, void* a) { @@ -85,4 +109,14 @@ EXPORT int my_cairo_surface_set_mime_data(x64emu_t* emu, void* surf, void* mime_ return my->cairo_surface_set_mime_data(surf, mime_type, data, len, find_destroy_Fct(destroy), closure); } +EXPORT void* my_cairo_pdf_surface_create_for_stream(x64emu_t* emu, void* f, void* c, double w, double h) +{ + return my->cairo_pdf_surface_create_for_stream(find_cairo_write_Fct(f), c, w, h); +} + +EXPORT uint32_t my_cairo_surface_write_to_png_stream(x64emu_t* emu, void* surf, void* f, void* c) +{ + return my->cairo_surface_write_to_png_stream(surf, find_cairo_write_Fct(f), c); +} + #include "wrappedlib_init.h" \ No newline at end of file diff --git a/src/wrapped/wrappedcairo_private.h b/src/wrapped/wrappedcairo_private.h index 15cb0a10..99121561 100644 --- a/src/wrapped/wrappedcairo_private.h +++ b/src/wrapped/wrappedcairo_private.h @@ -175,7 +175,7 @@ GO(cairo_pattern_set_matrix, vFpp) GO(cairo_pattern_status, uFp) GO(cairo_pdf_get_versions, vFpp) GO(cairo_pdf_surface_create, pFpdd) -//GO(cairo_pdf_surface_create_for_stream, +GOM(cairo_pdf_surface_create_for_stream, pFEppdd) GO(cairo_pdf_surface_restrict_to_version, vFpu) GO(cairo_pdf_surface_set_size, vFpdd) GO(cairo_pdf_version_to_string, pFu) @@ -338,7 +338,7 @@ GO(cairo_surface_status, uFp) GO(cairo_surface_supports_mime_type, iFpp) GO(cairo_surface_unmap_image, vFpp) GO(cairo_surface_write_to_png, uFpp) -//GO(cairo_surface_write_to_png_stream, +GOM(cairo_surface_write_to_png_stream, uFEppp) GO(cairo_svg_get_versions, vFpp) GO(cairo_svg_surface_create, pFpdd) //GO(cairo_svg_surface_create_for_stream, |