1 #include "CtrlCore.h"
2
3 #ifdef GUI_X11
4
5 #include <plugin/bmp/bmp.h>
6
7 namespace Upp {
8
ClipFmtsImage()9 const char *ClipFmtsImage()
10 {
11 static const char *q;
12 ONCELOCK {
13 static String s(ClipFmt<Image>() + ";image/png");
14 q = s;
15 }
16 return q;
17 }
18
AcceptImage(PasteClip & clip)19 bool AcceptImage(PasteClip& clip)
20 {
21 return clip.Accept(ClipFmt<Image>()) || clip.Accept("image/png");
22 }
23
GetImage(PasteClip & clip)24 Image GetImage(PasteClip& clip)
25 {
26 Image m;
27 if(Accept<Image>(clip)) {
28 LoadFromString(m, ~clip);
29 if(!m.IsEmpty())
30 return m;
31 }
32 if(clip.Accept("image/png"))
33 return StreamRaster::LoadStringAny(~clip);
34 return Null;
35 }
36
ReadClipboardImage()37 Image ReadClipboardImage()
38 {
39 return GetImage(Ctrl::Clipboard());
40 }
41
sBmp(const Value & data)42 static String sBmp(const Value& data)
43 {
44 Image img = data;
45 return BMPEncoder().SaveString(img);
46 }
47
sImg(const Value & data)48 static String sImg(const Value& data)
49 {
50 Image img = data;
51 return StoreAsString(const_cast<Image&>(img));
52 }
53
GetImageClip(const Image & img,const String & fmt)54 String GetImageClip(const Image& img, const String& fmt)
55 {
56 if(img.IsEmpty())
57 return Null;
58 if(fmt == "image/bmp")
59 return BMPEncoder().SaveString(img);
60 if(fmt == ClipFmt<Image>())
61 return StoreAsString(const_cast<Image&>(img));
62 return Null;
63 }
64
AppendClipboardImage(const Image & img)65 void AppendClipboardImage(const Image& img)
66 {
67 if(img.IsEmpty()) return;
68 AppendClipboard(ClipFmt<Image>(), img, sImg);
69 AppendClipboard("image/bmp", img, sBmp);
70 }
71
Append(VectorMap<String,ClipData> & data,const Image & img)72 void Append(VectorMap<String, ClipData>& data, const Image& img)
73 {
74 data.Add(ClipFmt<Image>(), ClipData(img, sImg));
75 data.Add("image/bmp", ClipData(img, sBmp));
76 }
77
78 }
79
80 #endif
81