Browse Source

Merge branch 'master' into UseDynamicResource

pull/1168/head
Steven Kirk 9 years ago
committed by GitHub
parent
commit
c68712e570
  1. 2
      src/Gtk/Avalonia.Gtk3/FramebufferManager.cs
  2. 4
      src/Gtk/Avalonia.Gtk3/ImageSurfaceFramebuffer.cs
  3. 26
      src/Gtk/Avalonia.Gtk3/Interop/Native.cs
  4. 3
      src/Gtk/Avalonia.Gtk3/WindowBaseImpl.cs
  5. 9
      src/Gtk/Avalonia.Gtk3/WindowImpl.cs

2
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);
}
}
}

4
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);

26
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;

3
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)
{

9
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);
}
}
}

Loading…
Cancel
Save