diff --git a/uppsrc/CtrlCore/GtkUtil.cpp b/uppsrc/CtrlCore/GtkUtil.cpp index 415a6c422..d1b157093 100644 --- a/uppsrc/CtrlCore/GtkUtil.cpp +++ b/uppsrc/CtrlCore/GtkUtil.cpp @@ -48,6 +48,7 @@ String ImageClipFromPixbufUnref(GdkPixbuf *pixbuf) l += stride; } img = m; + img = Premultiply(img); } g_object_unref(pixbuf); } diff --git a/uppsrc/CtrlCore/X11ImgClip.cpp b/uppsrc/CtrlCore/X11ImgClip.cpp index f36a0ca66..a2bce1601 100644 --- a/uppsrc/CtrlCore/X11ImgClip.cpp +++ b/uppsrc/CtrlCore/X11ImgClip.cpp @@ -45,6 +45,12 @@ static String sBmp(const Value& data) return BMPEncoder().SaveString(img); } +static String sPng(const Value& data) +{ + Image img = data; + return BMPEncoder().SaveString(img); +} + static String sImg(const Value& data) { Image img = data; @@ -57,6 +63,8 @@ String GetImageClip(const Image& img, const String& fmt) return Null; if(fmt == "image/bmp") return BMPEncoder().SaveString(img); + if(fmt == "image/png") + return PNGEncoder().SaveString(img); if(fmt == ClipFmt()) return StoreAsString(const_cast(img)); return Null; @@ -67,12 +75,14 @@ void AppendClipboardImage(const Image& img) if(img.IsEmpty()) return; AppendClipboard(ClipFmt(), img, sImg); AppendClipboard("image/bmp", img, sBmp); + AppendClipboard("image/png", img, sPng); } void Append(VectorMap& data, const Image& img) { data.Add(ClipFmt(), ClipData(img, sImg)); data.Add("image/bmp", ClipData(img, sBmp)); + data.Add("image/png", ClipData(img, sPng)); } }