public WindowBaseImpl(GtkWindow gtkWidget)
 {
     GtkWidget = gtkWidget;
     Disposables.Add(gtkWidget);
     _framebuffer = new FramebufferManager(this);
     _imContext   = Native.GtkImMulticontextNew();
     Disposables.Add(_imContext);
     Native.GtkWidgetSetEvents(gtkWidget, 0xFFFFFE);
     Disposables.Add(Signal.Connect <Native.D.signal_commit>(_imContext, "commit", OnCommit));
     Connect <Native.D.signal_widget_draw>("draw", OnDraw);
     Connect <Native.D.signal_generic>("realize", OnRealized);
     ConnectEvent("configure-event", OnConfigured);
     ConnectEvent("button-press-event", OnButton);
     ConnectEvent("button-release-event", OnButton);
     ConnectEvent("motion-notify-event", OnMotion);
     ConnectEvent("scroll-event", OnScroll);
     ConnectEvent("window-state-event", OnStateChanged);
     ConnectEvent("key-press-event", OnKeyEvent);
     ConnectEvent("key-release-event", OnKeyEvent);
     ConnectEvent("leave-notify-event", OnLeaveNotifyEvent);
     Connect <Native.D.signal_generic>("destroy", OnDestroy);
     Native.GtkWidgetRealize(gtkWidget);
     _lastSize = ClientSize;
     GlibTimeout.Add(0, 16, () =>
     {
         Invalidate(default(Rect));
         return(true);
     });
     if (Gtk3Platform.UseDeferredRendering)
     {
         Native.GtkWidgetSetDoubleBuffered(gtkWidget, false);
         _gcHandle = GCHandle.Alloc(this);
         Native.GtkWidgetAddTickCallback(GtkWidget, PinnedStaticCallback, GCHandle.ToIntPtr(_gcHandle), IntPtr.Zero);
     }
 }
Exemple #2
0
        public async Task <string> ShowFolderDialogAsync(OpenFolderDialog dialog, GtkWindow parent,
                                                         Action <GtkFileChooser> modify = null)
        {
            var res = await ShowDialog(dialog.Title, parent,
                                       GtkFileChooserAction.SelectFolder, false, dialog.InitialDirectory, modify);

            return(res?.FirstOrDefault());
        }
Exemple #3
0
 public Task <string[]> ShowFileDialogAsync(FileDialog dialog, GtkWindow parent,
                                            Action <GtkFileChooser> modify = null)
 {
     return(ShowDialog(dialog.Title, parent,
                       dialog is OpenFileDialog ? GtkFileChooserAction.Open : GtkFileChooserAction.Save,
                       (dialog as OpenFileDialog)?.AllowMultiple ?? false,
                       Path.Combine(string.IsNullOrEmpty(dialog.InitialDirectory) ? "" : dialog.InitialDirectory,
                                    string.IsNullOrEmpty(dialog.InitialFileName) ? "" : dialog.InitialFileName), modify));
 }
Exemple #4
0
        public WindowBaseImpl(GtkWindow gtkWidget)
        {
            GtkWidget    = gtkWidget;
            _framebuffer = new FramebufferManager(this);
            _imContext   = Native.GtkImMulticontextNew();
            Disposables.Add(_imContext);
            Native.GtkWidgetSetEvents(gtkWidget, 0xFFFFFE);
            Disposables.Add(Signal.Connect <Native.D.signal_commit>(_imContext, "commit", OnCommit));

            Disposables.Add(EventManager.ConnectEvents(this));

            Native.GtkWidgetRealize(gtkWidget);
            GdkWindowHandle = this.Handle.Handle;
            _lastSize       = ClientSize;
        }
Exemple #5
0
        public WindowBaseImpl(GtkWindow gtkWidget)
        {
            GtkWidget = gtkWidget;

            var glf = AvaloniaLocator.Current.GetService <IWindowingPlatformGlFeature>() as EglGlPlatformFeature;

            if (glf != null)
            {
                _egl = new EglGlPlatformSurface((EglDisplay)glf.Display, glf.DeferredContext, this);
            }
            else
            {
                _framebuffer = new FramebufferManager(this);
            }

            _imContext = Native.GtkImMulticontextNew();
            Disposables.Add(_imContext);
            Native.GtkWidgetSetEvents(gtkWidget, 0xFFFFFE);
            Disposables.Add(Signal.Connect <Native.D.signal_commit>(_imContext, "commit", OnCommit));
            Connect <Native.D.signal_widget_draw>("draw", OnDraw);
            Connect <Native.D.signal_generic>("realize", OnRealized);
            ConnectEvent("configure-event", OnConfigured);
            ConnectEvent("button-press-event", OnButton);
            ConnectEvent("button-release-event", OnButton);
            ConnectEvent("motion-notify-event", OnMotion);
            ConnectEvent("scroll-event", OnScroll);
            ConnectEvent("window-state-event", OnStateChanged);
            ConnectEvent("key-press-event", OnKeyEvent);
            ConnectEvent("key-release-event", OnKeyEvent);
            ConnectEvent("leave-notify-event", OnLeaveNotifyEvent);
            ConnectEvent("delete-event", OnClosingEvent);
            Connect <Native.D.signal_generic>("destroy", OnDestroy);
            Native.GtkWidgetRealize(gtkWidget);
            GdkWindowHandle = this.Handle.Handle;
            _lastSize       = ClientSize;

            if (_egl != null)
            {
                Native.GtkWidgetSetDoubleBuffered(gtkWidget, false);
            }
            else if (Gtk3Platform.UseDeferredRendering)
            {
                Native.GtkWidgetSetDoubleBuffered(gtkWidget, false);
                _gcHandle     = GCHandle.Alloc(this);
                _tickCallback = Native.GtkWidgetAddTickCallback(GtkWidget, PinnedStaticCallback,
                                                                GCHandle.ToIntPtr(_gcHandle), IntPtr.Zero);
            }
        }
Exemple #6
0
 public TopLevelImpl(GtkWindow gtkWidget)
 {
     GtkWidget = gtkWidget;
     Disposables.Add(gtkWidget);
     _framebuffer = new FramebufferManager(this);
     _imContext   = Native.GtkImMulticontextNew();
     Disposables.Add(_imContext);
     Native.GtkWidgetSetEvents(gtkWidget, 0xFFFFFE);
     Disposables.Add(Signal.Connect <Native.D.signal_commit>(_imContext, "commit", OnCommit));
     Connect <Native.D.signal_widget_draw>("draw", OnDraw);
     Connect <Native.D.signal_generic>("realize", OnRealized);
     ConnectEvent("configure-event", OnConfigured);
     ConnectEvent("button-press-event", OnButton);
     ConnectEvent("button-release-event", OnButton);
     ConnectEvent("motion-notify-event", OnMotion);
     ConnectEvent("scroll-event", OnScroll);
     ConnectEvent("window-state-event", OnStateChanged);
     ConnectEvent("key-press-event", OnKeyEvent);
     ConnectEvent("key-release-event", OnKeyEvent);
     Connect <Native.D.signal_generic>("destroy", OnDestroy);
     Native.GtkWidgetRealize(gtkWidget);
     _lastSize = ClientSize;
 }
Exemple #7
0
        public unsafe static Task <string[]> ShowDialog(string title, GtkWindow parent, GtkFileChooserAction action,
                                                        bool multiselect, string initialFileName, Action <GtkFileChooser> modify)
        {
            GtkFileChooser dlg;

            parent = parent ?? GtkWindow.Null;
            using (var name = new Utf8Buffer(title))
                dlg = Native.GtkFileChooserDialogNew(name, parent, action, IntPtr.Zero);
            modify?.Invoke(dlg);
            if (multiselect)
            {
                Native.GtkFileChooserSetSelectMultiple(dlg, true);
            }

            Native.GtkWindowSetModal(dlg, true);
            var tcs = new TaskCompletionSource <string[]>();
            List <IDisposable> disposables = null;
            Action             dispose     = () =>
            {
                // ReSharper disable once PossibleNullReferenceException
                foreach (var d in disposables)
                {
                    d.Dispose();
                }
                disposables.Clear();
            };

            disposables = new List <IDisposable>
            {
                Signal.Connect <Native.D.signal_generic>(dlg, "close", delegate
                {
                    tcs.TrySetResult(null);
                    dispose();
                    return(false);
                }),
                Signal.Connect <Native.D.signal_dialog_response>(dlg, "response", (_, resp, __) =>
                {
                    string[] result = null;
                    if (resp == GtkResponseType.Accept)
                    {
                        var rlst = new List <string>();
                        var gs   = Native.GtkFileChooserGetFilenames(dlg);
                        var cgs  = gs;
                        while (cgs != null)
                        {
                            if (cgs->Data != IntPtr.Zero)
                            {
                                rlst.Add(Utf8Buffer.StringFromPtr(cgs->Data));
                            }
                            cgs = cgs->Next;
                        }

                        Native.GSlistFree(gs);
                        result = rlst.ToArray();
                    }

                    Native.GtkWidgetHide(dlg);
                    dispose();
                    tcs.TrySetResult(result);
                    return(false);
                }),
                dlg
            };
            using (var open = new Utf8Buffer("Open"))
                Native.GtkDialogAddButton(dlg, open, GtkResponseType.Accept);
            using (var open = new Utf8Buffer("Cancel"))
                Native.GtkDialogAddButton(dlg, open, GtkResponseType.Cancel);
            if (initialFileName != null)
            {
                using (var fn = new Utf8Buffer(initialFileName))
                    Native.GtkFileChooserSetFilename(dlg, fn);
            }
            Native.GtkWindowPresent(dlg);
            return(tcs.Task);
        }
Exemple #8
0
 public void SetModal(bool isModal)
 {
     GtkWindow.gtk_window_set_modal(Handle, isModal);
 }
Exemple #9
0
 public void SetDefaultSize(int width, int height)
 {
     GtkWindow.gtk_window_set_default_size(_instance, 200, 200);
 }
Exemple #10
0
 /// <summary>
 /// Creates a new Window, which is a toplevel window that can contain other widgets.
 /// Nearly always, the type of the window should be WindowType.TopLevel. If you’re
 /// implementing something like a popup menu from scratch (which is a bad idea, just use
 /// GtkMenu), you might use WindowType.Popup. WindowType.Popup is not for dialogs, though in
 /// some other toolkits dialogs are called “popups”. In GTK+, WindowType.Popup means a
 /// pop-up menu or pop-up tooltip. On X11, popup windows are not controlled by the window
 /// manager.
 /// If you simply want an undecorated window (no window borders), use
 /// Window.SetDecorated(), don’t use WindowType.Popup.
 /// All top-level windows created by new Window(WindowType type) are stored in an
 /// internal top-level window list. This list can be obtained from Window.ListToplevels().
 /// Due to Gtk+ keeping a reference to the window internally, Window() does not return a
 /// reference to the caller.
 /// To delete a Window, call Widget.Destroy().
 /// </summary>
 /// <param name="type">The type of window to create.</param>
 public Window(WindowType type)
 {
     _instance = GtkWindow.gtk_window_new(type);
 }