#include "CtrlCore.h" #ifdef GUI_X11 #include namespace Upp { const char *ClipFmtsImage() { static const char *q; ONCELOCK { static String s(ClipFmt() + ";image/png"); q = s; } return q; } bool AcceptImage(PasteClip& clip) { return clip.Accept(ClipFmt()) || clip.Accept("image/png"); } Image GetImage(PasteClip& clip) { Image m; if(Accept(clip)) { LoadFromString(m, ~clip); if(!m.IsEmpty()) return m; } if(clip.Accept("image/png")) return StreamRaster::LoadStringAny(~clip); return Null; } Image ReadClipboardImage() { return GetImage(Ctrl::Clipboard()); } static String sBmp(const Value& data) { Image img = data; return BMPEncoder().SaveString(img); } static String sImg(const Value& data) { Image img = data; return StoreAsString(const_cast(img)); } String GetImageClip(const Image& img, const String& fmt) { if(img.IsEmpty()) return Null; if(fmt == "image/bmp") return BMPEncoder().SaveString(img); if(fmt == ClipFmt()) return StoreAsString(const_cast(img)); return Null; } void AppendClipboardImage(const Image& img) { if(img.IsEmpty()) return; AppendClipboard(ClipFmt(), img, sImg); AppendClipboard("image/bmp", img, sBmp); } void Append(VectorMap& data, const Image& img) { data.Add(ClipFmt(), ClipData(img, sImg)); data.Add("image/bmp", ClipData(img, sBmp)); } } #endif