Пример #1
0
        internal static void SetDataObjectImpl(object data, bool copy)
        {
            var converter = new XplatUI.ObjectToClipboard(ConvertToClipboardData);

            var clipboard_handle = XplatUI.ClipboardOpen(false);

            XplatUI.ClipboardStore(clipboard_handle, null, 0, null, copy);              // Empty clipboard

            if (data is IDataObject idata)
            {
                XplatUI.ClipboardStore(clipboard_handle, idata, DataFormats.GetFormat(IDataObjectFormat).Id, converter, copy);
            }
            else if (data is string text)
            {
                var tdata = new DataObject(DataFormats.UnicodeText, text);
                XplatUI.ClipboardStore(clipboard_handle, tdata, DataFormats.GetFormat(IDataObjectFormat).Id, converter, copy);
            }
            else
            {
                var format = DataFormats.Format.Find(data.GetType().FullName);
                var id     = (format != null) && (format.Name != DataFormats.StringFormat) ? format.Id : -1;
                XplatUI.ClipboardStore(clipboard_handle, data, id, converter, copy);
            }

            XplatUI.ClipboardClose(clipboard_handle);
        }
Пример #2
0
        // Assumes we are locked on the lock_object when it is called
        private static void Init()
        {
            if (initialized)
            {
                return;
            }
            IntPtr cliphandle = XplatUI.ClipboardOpen(false);

            new Format(Text, XplatUI.ClipboardGetID(cliphandle, Text));
            new Format(Bitmap, XplatUI.ClipboardGetID(cliphandle, Bitmap));
            new Format(MetafilePict, XplatUI.ClipboardGetID(cliphandle, MetafilePict));
            new Format(SymbolicLink, XplatUI.ClipboardGetID(cliphandle, SymbolicLink));
            new Format(Dif, XplatUI.ClipboardGetID(cliphandle, Dif));
            new Format(Tiff, XplatUI.ClipboardGetID(cliphandle, Tiff));
            new Format(OemText, XplatUI.ClipboardGetID(cliphandle, OemText));
            new Format(Dib, XplatUI.ClipboardGetID(cliphandle, Dib));
            new Format(Palette, XplatUI.ClipboardGetID(cliphandle, Palette));
            new Format(PenData, XplatUI.ClipboardGetID(cliphandle, PenData));
            new Format(Riff, XplatUI.ClipboardGetID(cliphandle, Riff));
            new Format(WaveAudio, XplatUI.ClipboardGetID(cliphandle, WaveAudio));
            new Format(UnicodeText, XplatUI.ClipboardGetID(cliphandle, UnicodeText));
            new Format(EnhancedMetafile, XplatUI.ClipboardGetID(cliphandle, EnhancedMetafile));
            new Format(FileDrop, XplatUI.ClipboardGetID(cliphandle, FileDrop));
            new Format(Locale, XplatUI.ClipboardGetID(cliphandle, Locale));
            new Format(CommaSeparatedValue, XplatUI.ClipboardGetID(cliphandle, CommaSeparatedValue));
            new Format(Html, XplatUI.ClipboardGetID(cliphandle, Html));
            new Format(Rtf, XplatUI.ClipboardGetID(cliphandle, Rtf));
            new Format(Serializable, XplatUI.ClipboardGetID(cliphandle, Serializable));
            new Format(StringFormat, XplatUI.ClipboardGetID(cliphandle, StringFormat));

            XplatUI.ClipboardClose(cliphandle);

            initialized = true;
        }
Пример #3
0
        internal static void SetDataObjectImpl(object data, bool copy)
        {
            IntPtr clipboard_handle;

            XplatUI.ObjectToClipboard converter;
            int native_format;

            DataFormats.Format item_format;

            converter = new XplatUI.ObjectToClipboard(ConvertToClipboardData);

            clipboard_handle = XplatUI.ClipboardOpen(false);
            XplatUI.ClipboardStore(clipboard_handle, null, 0, null);    // Empty clipboard

            native_format = -1;

            if (data is IDataObject)
            {
                string[] formats;

                IDataObject data_object = data as IDataObject;
                formats = data_object.GetFormats();
                for (int i = 0; i < formats.Length; i++)
                {
                    item_format = DataFormats.GetFormat(formats[i]);
                    if ((item_format != null) && (item_format.Name != DataFormats.StringFormat))
                    {
                        native_format = item_format.Id;
                    }

                    object obj = data_object.GetData(formats [i]);

                    // this is used only by custom formats
                    if (IsDataSerializable(obj))
                    {
                        item_format.is_serializable = true;
                    }

                    XplatUI.ClipboardStore(clipboard_handle, obj, native_format, converter);
                }
            }
            else
            {
                item_format = DataFormats.Format.Find(data.GetType().FullName);
                if ((item_format != null) && (item_format.Name != DataFormats.StringFormat))
                {
                    native_format = item_format.Id;
                }

                XplatUI.ClipboardStore(clipboard_handle, data, native_format, converter);
            }
            XplatUI.ClipboardClose(clipboard_handle);
        }
Пример #4
0
            internal static Format Add(string name)
            {
                Format f;

                f = Find(name);
                if (f == null)
                {
                    IntPtr cliphandle;

                    cliphandle = XplatUI.ClipboardOpen(false);
                    f          = new Format(name, XplatUI.ClipboardGetID(cliphandle, name));
                    XplatUI.ClipboardClose(cliphandle);
                }
                return(f);
            }
Пример #5
0
        internal static IDataObject GetDataObject(bool primary_selection)
        {
            DataObject clipboard;
            IntPtr     clipboard_handle;

            int[] native_formats;
            DataFormats.Format item_format;
            object             managed_clipboard_item;

            XplatUI.ClipboardToObject converter;

            converter = new XplatUI.ClipboardToObject(ConvertFromClipboardData);

            clipboard_handle = XplatUI.ClipboardOpen(primary_selection);
            native_formats   = XplatUI.ClipboardAvailableFormats(clipboard_handle);
            if (native_formats == null)
            {
                return(null);   // Clipboard empty
            }

            // Build the IDataObject
            clipboard = new DataObject();
            for (int i = 0; i < native_formats.Length; i++)
            {
                // We might get a format we don't understand or know
                item_format = DataFormats.GetFormat(native_formats[i]);

                if (item_format != null)
                {
                    managed_clipboard_item = XplatUI.ClipboardRetrieve(clipboard_handle, native_formats[i], converter);

                    if (managed_clipboard_item != null)
                    {
                        clipboard.SetData(item_format.Name, managed_clipboard_item);
                        // We don't handle 'bitmap' since it involves handles, so we'll equate it to dib
                        if (item_format.Name == DataFormats.Dib)
                        {
                            clipboard.SetData(DataFormats.Bitmap, managed_clipboard_item);
                        }
                    }
                }
            }

            XplatUI.ClipboardClose(clipboard_handle);

            return(clipboard);
        }
Пример #6
0
        internal static IDataObject GetDataObject(bool primary_selection)
        {
            IDataObject data = null;

            var clipboard_handle = XplatUI.ClipboardOpen(primary_selection);

            var formats = XplatUI.ClipboardAvailableFormats(clipboard_handle);

            if (formats != null)
            {
                var format    = DataFormats.GetFormat(IDataObjectFormat).Id;
                var converter = new XplatUI.ClipboardToObject(ConvertFromClipboardData);
                if (XplatUI.ClipboardRetrieve(clipboard_handle, format, converter) is IDataObject idata)
                {
                    data = idata;
                }
            }

            XplatUI.ClipboardClose(clipboard_handle);

            return(data ?? new DataObject());
        }