Browse Source

Merge remote-tracking branch 'nc4rrillo/windowing-prototype' into windowing-prototype

repro-window-close
Dan Walmsley 8 years ago
parent
commit
718bf5b3d9
  1. 1
      src/Avalonia.Gpu/IGpuContext.cs
  2. 8
      src/Avalonia.Windowing/Bindings/GlWindow.cs
  3. 18
      src/Avalonia.Windowing/PopupImpl.cs
  4. 27
      src/Avalonia.Windowing/WIndowingPlatform.cs
  5. 4
      src/Avalonia.Windowing/WindowImpl.cs
  6. 8
      src/Skia/Avalonia.Skia/GlRenderTarget.cs

1
src/Avalonia.Gpu/IGpuContext.cs

@ -7,5 +7,6 @@ namespace Avalonia.Gpu
void Present();
IntPtr GetProcAddress(string symbol);
(double, double) GetFramebufferSize();
void ResizeContext(double width, double height);
}
}

8
src/Avalonia.Windowing/Bindings/GlWindow.cs

@ -40,6 +40,9 @@ namespace Avalonia.Windowing.Bindings
[DllImport("winit_wrapper")]
private static extern IntPtr winit_gl_window_get_id(IntPtr handle);
[DllImport("winit_wrapper")]
private static extern void winit_gl_window_resize_context(IntPtr handle, double width, double height);
private IntPtr _handle;
public IntPtr Id => winit_gl_window_get_id(_handle);
public GlWindowWrapper(EventsLoop eventsLoop)
@ -92,5 +95,10 @@ namespace Avalonia.Windowing.Bindings
{
winit_gl_window_show(_handle);
}
public void ResizeContext(double width, double height)
{
winit_gl_window_resize_context(_handle, width, height);
}
}
}

18
src/Avalonia.Windowing/PopupImpl.cs

@ -0,0 +1,18 @@
using System;
using System.Collections.Generic;
using Avalonia.Controls;
using Avalonia.Input;
using Avalonia.Input.Raw;
using Avalonia.Platform;
using Avalonia.Rendering;
using Avalonia.Windowing.Bindings;
namespace Avalonia.Windowing
{
public class PopupImpl : WindowImpl, IPopupImpl
{
public PopupImpl(IWindowWrapper wrapper) : base(wrapper)
{
}
}
}

27
src/Avalonia.Windowing/WIndowingPlatform.cs

@ -10,14 +10,10 @@ using Avalonia.Windowing.Bindings;
namespace Avalonia.Windowing
{
// Exposing C# Enums to Rust will again prove to be a massive PITA.
public enum WinitEventType
{
MouseMove
}
public struct MouseMoveData
public class PlatformSettings : IPlatformSettings
{
public Size DoubleClickSize => new Size(4, 4);
public TimeSpan DoubleClickTime => TimeSpan.FromMilliseconds(200);
}
public class DummyPlatformHandle : IPlatformHandle
@ -40,7 +36,7 @@ namespace Avalonia.Windowing
{
internal static WindowingPlatform Instance { get; private set; }
private readonly EventsLoop _eventsLoop;
private readonly Dictionary<IntPtr, Window> _windows;
private readonly Dictionary<IntPtr, WindowImpl> _windows;
public WindowingPlatform()
{
@ -48,7 +44,7 @@ namespace Avalonia.Windowing
_eventsLoop.MouseEvent += _eventsLoop_MouseEvent;
_eventsLoop.Awakened += _eventsLoop_Awakened;
_eventsLoop.Resized += _eventsLoop_Resized;
_windows = new Dictionary<IntPtr, Window>();
_windows = new Dictionary<IntPtr, WindowImpl>();
}
void _eventsLoop_Resized(IntPtr windowId, ResizeEvent resizeEvent)
@ -71,8 +67,9 @@ namespace Avalonia.Windowing
private void _eventsLoop_Awakened()
{
Signaled?.Invoke(DispatcherPriority.Normal);
// Dispatcher.UIThread.RunJobs();
Signaled?.Invoke(DispatcherPriority.Input);
Signaled?.Invoke(DispatcherPriority.Layout);
Signaled?.Invoke(DispatcherPriority.Render);
}
@ -103,13 +100,17 @@ namespace Avalonia.Windowing
public IPopupImpl CreatePopup()
{
throw new NotImplementedException();
var windowWrapper = new GlWindowWrapper(_eventsLoop);
var window = new PopupImpl(windowWrapper);
_windows.Add(windowWrapper.Id, window);
return window;
}
public IWindowImpl CreateWindow()
{
var windowWrapper = new GlWindowWrapper(_eventsLoop);
var window = new Window(windowWrapper);
var window = new WindowImpl(windowWrapper);
_windows.Add(windowWrapper.Id, window);
return window;

4
src/Avalonia.Windowing/WindowImpl.cs

@ -10,12 +10,12 @@ using Avalonia.Windowing.Bindings;
namespace Avalonia.Windowing
{
public class Window : IWindowImpl
public class WindowImpl : IWindowImpl
{
IWindowWrapper _windowWrapper;
private LogicalPosition _lastPosition;
public Window(IWindowWrapper wrapper)
public WindowImpl(IWindowWrapper wrapper)
{
_windowWrapper = wrapper;
}

8
src/Skia/Avalonia.Skia/GlRenderTarget.cs

@ -34,26 +34,25 @@ namespace Avalonia.Skia
if (_surface == null || (_desc.Width != (int)width * 2 || _desc.Height != (int)height * 2))
{
_context.ResizeContext(width, height);
_desc = new GRBackendRenderTargetDesc
{
Height = (int)height * 2,
Width = (int)width * 2,
SampleCount = 1,
StencilBits = 8,
Config = GRPixelConfig.Bgra8888,
Config = GRPixelConfig.Rgba8888,
Origin = GRSurfaceOrigin.BottomLeft,
RenderTargetHandle = IntPtr.Zero
};
_surface?.Dispose();
_surface = SKSurface.Create(_grContext, _desc);
_canvas?.Dispose();
_canvas = _surface.Canvas;
}
_canvas.Clear(SKColors.Orange);
_canvas.RestoreToCount(-1);
_canvas.ResetMatrix();
var createInfo = new DrawingContextImpl.CreateInfo
{
@ -65,6 +64,7 @@ namespace Avalonia.Skia
return new DrawingContextImpl(createInfo, Disposable.Create(() =>
{
_canvas.Flush();
_grContext.Flush();
_context.Present(); // Swap Buffers
}));

Loading…
Cancel
Save