浏览代码

Merge branch 'master' into UseDynamicResource

Steven Kirk 8 年之前
父节点
当前提交
c68712e570

+ 1 - 1
src/Gtk/Avalonia.Gtk3/FramebufferManager.cs

@@ -27,7 +27,7 @@ namespace Avalonia.Gtk3
             var s = _window.ClientSize;
             var width = (int) s.Width;
             var height = (int) s.Height;
-            return new ImageSurfaceFramebuffer(_window, width, height);
+            return new ImageSurfaceFramebuffer(_window, width, height, _window.LastKnownScaleFactor);
         }
     }
 }

+ 2 - 2
src/Gtk/Avalonia.Gtk3/ImageSurfaceFramebuffer.cs

@@ -19,11 +19,11 @@ namespace Avalonia.Gtk3
         private CairoSurface _surface;
         private int _factor;
         private object _lock = new object();
-        public ImageSurfaceFramebuffer(WindowBaseImpl impl, int width, int height)
+        public ImageSurfaceFramebuffer(WindowBaseImpl impl, int width, int height, int factor)
         {
             _impl = impl;
             _widget = impl.GtkWidget;
-            _factor = (int)(Native.GtkWidgetGetScaleFactor?.Invoke(_widget) ?? 1u);
+            _factor = factor;
             width *= _factor;
             height *= _factor;
             _surface = Native.CairoImageSurfaceCreate(1, width, height);

+ 13 - 13
src/Gtk/Avalonia.Gtk3/Interop/Native.cs

@@ -178,7 +178,7 @@ namespace Avalonia.Gtk3.Interop
 
             [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Cairo)]
             public delegate void cairo_surface_destroy(IntPtr surface);
-
+            
             [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Cairo)]
             public delegate void cairo_set_source_surface(IntPtr cr, CairoSurface surface, double x, double y);
             
@@ -236,17 +236,17 @@ namespace Avalonia.Gtk3.Interop
             [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gdk)]
             public delegate GdkWindowState gdk_window_get_state(IntPtr window);
 
-            [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gdk)]
-            public delegate void gdk_window_iconify(IntPtr window);
+            [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gtk)]
+            public delegate void gtk_window_iconify(GtkWindow window);
 
-            [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gdk)]
-            public delegate void gdk_window_deiconify(IntPtr window);
+            [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gtk)]
+            public delegate void gtk_window_deiconify(GtkWindow window);
 
-            [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gdk)]
-            public delegate void gdk_window_maximize(IntPtr window);
+            [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gtk)]
+            public delegate void gtk_window_maximize(GtkWindow window);
 
-            [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gdk)]
-            public delegate void gdk_window_unmaximize(IntPtr window);
+            [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gtk)]
+            public delegate void gtk_window_unmaximize(GtkWindow window);
 
             [UnmanagedFunctionPointer(CallingConvention.Cdecl), GtkImport(GtkDll.Gdk)]
             public delegate void gtk_window_set_geometry_hints(GtkWindow window, IntPtr geometry_widget, ref GdkGeometry geometry, GdkWindowHints geom_mask);
@@ -437,10 +437,10 @@ namespace Avalonia.Gtk3.Interop
         public static D.gdk_window_get_origin GdkWindowGetOrigin;
         public static D.gdk_window_get_pointer GdkWindowGetPointer;
         public static D.gdk_window_get_state GdkWindowGetState;
-        public static D.gdk_window_iconify GdkWindowIconify;
-        public static D.gdk_window_deiconify GdkWindowDeiconify;
-        public static D.gdk_window_maximize GdkWindowMaximize;
-        public static D.gdk_window_unmaximize GdkWindowUnmaximize;
+        public static D.gtk_window_iconify GtkWindowIconify;
+        public static D.gtk_window_deiconify GtkWindowDeiconify;
+        public static D.gtk_window_maximize GtkWindowMaximize;
+        public static D.gtk_window_unmaximize GtkWindowUnmaximize;
         public static D.gdk_window_begin_move_drag GdkWindowBeginMoveDrag;
         public static D.gdk_window_begin_resize_drag GdkWindowBeginResizeDrag;
         public static D.gdk_event_request_motions GdkEventRequestMotions;

+ 2 - 1
src/Gtk/Avalonia.Gtk3/WindowBaseImpl.cs

@@ -306,7 +306,7 @@ namespace Avalonia.Gtk3
 
         public IMouseDevice MouseDevice => Gtk3Platform.Mouse;
 
-        public double Scaling => (double) 1 / (Native.GtkWidgetGetScaleFactor?.Invoke(GtkWidget) ?? 1);
+        public double Scaling => LastKnownScaleFactor = (int) (Native.GtkWidgetGetScaleFactor?.Invoke(GtkWidget) ?? 1);
 
         public IPlatformHandle Handle => this;
 
@@ -387,6 +387,7 @@ namespace Avalonia.Gtk3
 
 
         public Size ClientSize { get; private set; }
+        public int LastKnownScaleFactor { get; private set; }
 
         public void Resize(Size value)
         {

+ 4 - 5
src/Gtk/Avalonia.Gtk3/WindowImpl.cs

@@ -32,15 +32,14 @@ namespace Avalonia.Gtk3
             }
             set
             {
-                var w = Native.GtkWidgetGetWindow(GtkWidget);
                 if (value == WindowState.Minimized)
-                    Native.GdkWindowIconify(w);
+                    Native.GtkWindowIconify(GtkWidget);
                 else if (value == WindowState.Maximized)
-                    Native.GdkWindowMaximize(w);
+                    Native.GtkWindowMaximize(GtkWidget);
                 else
                 {
-                    Native.GdkWindowUnmaximize(w);
-                    Native.GdkWindowDeiconify(w);
+                    Native.GtkWindowUnmaximize(GtkWidget);
+                    Native.GtkWindowDeiconify(GtkWidget);
                 }
             }
         }