diff --git a/src/windy/platforms/emscripten/platform.nim b/src/windy/platforms/emscripten/platform.nim index 1b8450ba..2871f164 100644 --- a/src/windy/platforms/emscripten/platform.nim +++ b/src/windy/platforms/emscripten/platform.nim @@ -473,6 +473,14 @@ proc getClipboardString*(): string = "getClipboardString is not supported on emscripten" ) +proc getClipboardContentKinds*(): set[ClipboardContentKind] = + ## Image clipboard is not implemented on Emscripten yet. + discard + +proc getClipboardImage*(): Image = + ## Image clipboard is not implemented on Emscripten yet. + nil + proc closeIme*(window: Window) = if window.state.imeCompositionString.len > 0: window.state.imeCompositionString = "" diff --git a/src/windy/platforms/linux/x11.nim b/src/windy/platforms/linux/x11.nim index 4eb43ee3..5f84b366 100644 --- a/src/windy/platforms/linux/x11.nim +++ b/src/windy/platforms/linux/x11.nim @@ -1293,6 +1293,14 @@ proc setClipboardString*(s: string) = clipboardContent = s display.XSetSelectionOwner(xaClipboard, clipboardWindow) +proc getClipboardContentKinds*(): set[ClipboardContentKind] = + ## Image clipboard is not implemented on X11 yet. + discard + +proc getClipboardImage*(): Image = + ## Image clipboard is not implemented on X11 yet. + nil + proc pollEvents*() = for window in windows: if window.onFrame != nil: diff --git a/src/windy/platforms/macos/macdefs.nim b/src/windy/platforms/macos/macdefs.nim index 5908045c..094f7d78 100644 --- a/src/windy/platforms/macos/macdefs.nim +++ b/src/windy/platforms/macos/macdefs.nim @@ -141,6 +141,7 @@ var NSApp* {.importc.}: NSApplication NSPasteboardTypeString* {.importc.}: NSPasteboardType NSPasteboardTypeTIFF* {.importc.}: NSPasteboardType + NSPasteboardTypePNG* {.importc.}: NSPasteboardType NSFilenamesPboardType* {.importc.}: NSPasteboardType NSDefaultRunLoopMode* {.importc.}: NSRunLoopMode diff --git a/src/windy/platforms/macos/platform.nim b/src/windy/platforms/macos/platform.nim index 77fc6a5c..8741e70a 100644 --- a/src/windy/platforms/macos/platform.nim +++ b/src/windy/platforms/macos/platform.nim @@ -1305,10 +1305,12 @@ proc getClipboardContentKinds*(): set[ClipboardContentKind] = if types.containsObject(NSPasteboardTypeString.ID): result.incl TextContent - if types.containsObject(NSPasteboardTypeTIFF.ID): + if types.containsObject(NSPasteboardTypePNG.ID) or + types.containsObject(NSPasteboardTypeTIFF.ID): result.incl ImageContent proc getClipboardImage*(): Image = + ## Reads a PNG or TIFF image from the system pasteboard. init() autoreleasepool: let @@ -1318,6 +1320,14 @@ proc getClipboardImage*(): Image = if types.int == 0: return + if types.containsObject(NSPasteboardTypePNG.ID): + let data = pboard.dataForType(NSPasteboardTypePNG) + if data.int != 0: + try: + return decodePng(data.bytes, data.length.int).convertToImage() + except: + discard + if not types.containsObject(NSPasteboardTypeTIFF.ID): return