github.com/primecitizens/pcz/std@v0.2.1/plat/js/webext/wallpaper/bindings/ffi_bindings.ts (about) 1 import { importModule, Application, heap, Pointer } from "@ffi"; 2 3 importModule("plat/js/webext/wallpaper", (A: Application) => { 4 const WEBEXT = typeof globalThis.browser === "undefined" ? globalThis.chrome : globalThis.browser; 5 6 return { 7 "constof_WallpaperLayout": (ref: heap.Ref<string>): number => { 8 const idx = ["STRETCH", "CENTER", "CENTER_CROPPED"].indexOf(A.H.get(ref)); 9 return idx < 0 ? 0 : idx + 1; 10 }, 11 12 "store_SetWallpaperArgDetails": (ptr: Pointer, ref: heap.Ref<any>) => { 13 const x = A.H.get<any>(ref); 14 15 if (typeof x === "undefined") { 16 A.store.Bool(ptr + 21, false); 17 A.store.Ref(ptr + 0, undefined); 18 A.store.Ref(ptr + 4, undefined); 19 A.store.Enum(ptr + 8, -1); 20 A.store.Bool(ptr + 20, false); 21 A.store.Bool(ptr + 12, false); 22 A.store.Ref(ptr + 16, undefined); 23 } else { 24 A.store.Bool(ptr + 21, true); 25 A.store.Ref(ptr + 0, x["data"]); 26 A.store.Ref(ptr + 4, x["filename"]); 27 A.store.Enum(ptr + 8, ["STRETCH", "CENTER", "CENTER_CROPPED"].indexOf(x["layout"] as string)); 28 A.store.Bool(ptr + 20, "thumbnail" in x ? true : false); 29 A.store.Bool(ptr + 12, x["thumbnail"] ? true : false); 30 A.store.Ref(ptr + 16, x["url"]); 31 } 32 }, 33 "load_SetWallpaperArgDetails": (ptr: Pointer, create: heap.Ref<boolean>, ref: heap.Ref<any>): heap.Ref<any> => { 34 const x = create === A.H.TRUE ? {} : A.H.get<any>(ref); 35 36 x["data"] = A.load.Ref(ptr + 0, undefined); 37 x["filename"] = A.load.Ref(ptr + 4, undefined); 38 x["layout"] = A.load.Enum(ptr + 8, ["STRETCH", "CENTER", "CENTER_CROPPED"]); 39 if (A.load.Bool(ptr + 20)) { 40 x["thumbnail"] = A.load.Bool(ptr + 12); 41 } else { 42 delete x["thumbnail"]; 43 } 44 x["url"] = A.load.Ref(ptr + 16, undefined); 45 return create === A.H.TRUE ? A.H.push(x) : ref; 46 }, 47 "has_SetWallpaper": (): heap.Ref<boolean> => { 48 if (WEBEXT?.wallpaper && "setWallpaper" in WEBEXT?.wallpaper) { 49 return A.H.TRUE; 50 } 51 return A.H.FALSE; 52 }, 53 "func_SetWallpaper": (fn: Pointer): void => { 54 A.store.Ref(fn, WEBEXT.wallpaper.setWallpaper); 55 }, 56 "call_SetWallpaper": (retPtr: Pointer, details: Pointer): void => { 57 const details_ffi = {}; 58 59 details_ffi["data"] = A.load.Ref(details + 0, undefined); 60 details_ffi["filename"] = A.load.Ref(details + 4, undefined); 61 details_ffi["layout"] = A.load.Enum(details + 8, ["STRETCH", "CENTER", "CENTER_CROPPED"]); 62 if (A.load.Bool(details + 20)) { 63 details_ffi["thumbnail"] = A.load.Bool(details + 12); 64 } 65 details_ffi["url"] = A.load.Ref(details + 16, undefined); 66 67 const _ret = WEBEXT.wallpaper.setWallpaper(details_ffi); 68 A.store.Ref(retPtr, _ret); 69 }, 70 "try_SetWallpaper": (retPtr: Pointer, errPtr: Pointer, details: Pointer): heap.Ref<boolean> => { 71 try { 72 const details_ffi = {}; 73 74 details_ffi["data"] = A.load.Ref(details + 0, undefined); 75 details_ffi["filename"] = A.load.Ref(details + 4, undefined); 76 details_ffi["layout"] = A.load.Enum(details + 8, ["STRETCH", "CENTER", "CENTER_CROPPED"]); 77 if (A.load.Bool(details + 20)) { 78 details_ffi["thumbnail"] = A.load.Bool(details + 12); 79 } 80 details_ffi["url"] = A.load.Ref(details + 16, undefined); 81 82 const _ret = WEBEXT.wallpaper.setWallpaper(details_ffi); 83 A.store.Ref(retPtr, _ret); 84 return A.H.TRUE; 85 } catch (err: any) { 86 A.store.Ref(errPtr, err); 87 return A.H.FALSE; 88 } 89 }, 90 }; 91 });