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