Bottom,
Center,
}
+ public enum MouseCursor
+ {
+ Arrow,
+ IBeam,
+ Crosshair,
+ Hand,
+ HResize,
+ VResize
+ }
}
public override void onMouseEnter (object sender, MouseMoveEventArgs e)
{
base.onMouseEnter (sender, e);
- //if (Selectable)
- //IFace.MouseCursor = MouseCursors.Text;
+ if (Selectable)
+ IFace.MouseCursor = MouseCursor.IBeam;
}
public override void onMouseLeave (object sender, MouseMoveEventArgs e)
{
base.onMouseLeave (sender, e);
- //IFace.MouseCursor = MouseCursors.Default;
+ IFace.MouseCursor = MouseCursor.Arrow;
}
protected override void onFocused (object sender, EventArgs e)
{
public override void onMouseEnter (object sender, MouseMoveEventArgs e)
{
base.onMouseEnter (sender, e);
- //if ((Parent as GenericStack).Orientation == Orientation.Horizontal)
- // IFace.MouseCursor = MouseCursors.H;
- //else
- //IFace.MouseCursor = MouseCursors.V;
+ if ((Parent as GenericStack).Orientation == Orientation.Horizontal)
+ IFace.MouseCursor = MouseCursor.HResize;
+ else
+ IFace.MouseCursor = MouseCursor.VResize;
}
public override void onMouseLeave (object sender, MouseMoveEventArgs e)
{
base.onMouseLeave (sender, e);
+ IFace.MouseCursor = MouseCursor.Arrow;
}
public override void onMouseDown (object sender, MouseButtonEventArgs e)
{
if (!hoverBorder) {
currentDirection = Direction.None;
- //IFace.MouseCursor = MouseCursors.Default;
+ IFace.MouseCursor = MouseCursor.Arrow;
return;
}
else
currentDirection = Direction.None;
- //if (currentDirection != lastDir) {
- // switch (currentDirection) {
- // case Direction.None:
- // otkgw.MouseCursor = MouseCursors.Default;
- // break;
- // case Direction.N:
- // otkgw.MouseCursor = MouseCursors.V;
- // break;
- // case Direction.S:
- // otkgw.MouseCursor = MouseCursors.V;
- // break;
- // case Direction.E:
- // otkgw.MouseCursor = MouseCursors.H;
- // break;
- // case Direction.W:
- // otkgw.MouseCursor = MouseCursors.H;
- // break;
- // case Direction.NW:
- // otkgw.MouseCursor = MouseCursors.NW;
- // break;
- // case Direction.NE:
- // otkgw.MouseCursor = MouseCursors.NE;
- // break;
- // case Direction.SW:
- // otkgw.MouseCursor = MouseCursors.SW;
- // break;
- // case Direction.SE:
- // otkgw.MouseCursor = MouseCursors.SE;
- // break;
- // }
- //}
+ if (currentDirection != lastDir) {
+ switch (currentDirection) {
+ case Direction.None:
+ otkgw.MouseCursor = MouseCursor.Arrow;
+ break;
+ case Direction.N:
+ otkgw.MouseCursor = MouseCursor.VResize;
+ break;
+ case Direction.S:
+ otkgw.MouseCursor = MouseCursor.VResize;
+ break;
+ case Direction.E:
+ otkgw.MouseCursor = MouseCursor.HResize;
+ break;
+ case Direction.W:
+ otkgw.MouseCursor = MouseCursor.HResize;
+ break;
+ /*case Direction.NW:
+ otkgw.MouseCursor = MouseCursor.NW;
+ break;
+ case Direction.NE:
+ otkgw.MouseCursor = MouseCursor.NE;
+ break;
+ case Direction.SW:
+ otkgw.MouseCursor = MouseCursor.SW;
+ break;
+ case Direction.SE:
+ otkgw.MouseCursor = MouseCursor.SE;
+ break;*/
+ }
+ }
}
}
public override void onMouseDown (object sender, MouseButtonEventArgs e)
}
#region Mouse and Keyboard Handling
-
+ /// <summary>
+ /// Connect to this event to receive mouse cursor change request from crom.
+ /// </summary>
+ public event EventHandler<MouseCursorChangedEventArgs> MouseCursorChanged;
public MouseState Mouse;
+
Stopwatch lastMouseDown = new Stopwatch (), mouseRepeatTimer = new Stopwatch ();
int mouseRepeatCount;
MouseButtonEventArgs lastMouseDownEvent;
+ MouseCursor cursor = MouseCursor.Arrow;
- //public MouseCursors MouseCursor {
- // set {
- // //backend.SetCursor (value);
- // }
- //}
+ public MouseCursor MouseCursor {
+ set {
+ if (value == cursor)
+ return;
+ cursor = value;
+ MouseCursorChanged.Raise (this, new MouseCursorChangedEventArgs (cursor));
+ }
+ }
/// <summary>Processes mouse move events from the root container, this function
/// should be called by the host on mouse move event to forward events to crow interfaces</summary>
/// <returns>true if mouse is in the interface</returns>
namespace Crow
{
- //public class MouseCursorChangedEventArgs : EventArgs
- //{
- // public XCursor NewCursor;
- // public MouseCursorChangedEventArgs (XCursor newCursor) : base()
- // {
- // NewCursor = newCursor;
- // }
- //}
+ public class MouseCursorChangedEventArgs : EventArgs
+ {
+ public MouseCursor NewCursor;
+ public MouseCursorChangedEventArgs (MouseCursor newCursor) : base()
+ {
+ NewCursor = newCursor;
+ }
+ }
}
using System.IO;
using Crow;
+using Glfw;
namespace HelloWorld
{
class Program : CrowVkWin
{
static void Main (string[] args) {
+ //CVKL.Instance.VALIDATION = true;
+ //CVKL.Instance.DEBUG_UTILS = true;
+ CVKL.SwapChain.IMAGES_USAGE = VK.VkImageUsageFlags.ColorAttachment | VK.VkImageUsageFlags.TransferDst;
+ //CVKL.Instance.RENDER_DOC_CAPTURE = true;
using (Program vke = new Program ()) {
vke.Run ();
}
hideError ();
}
+ protected override void onKeyDown (Glfw.Key key, int scanCode, Modifier modifiers)
+ {
+ base.onKeyDown (key, scanCode, modifiers);
+ }
+
void Dv_SelectedItemChanged (object sender, SelectionChangeEventArgs e)
{
FileSystemInfo fi = e.NewValue as FileSystemInfo;
if (fi is DirectoryInfo)
return;
hideError ();
- lock (crow.UpdateMutex) {
- try {
- Widget g = crow.Load (fi.FullName);
- crowContainer.SetChild (g);
- g.DataSource = this;
- } catch (Crow.IML.InstantiatorException ex) {
- showError (ex);
- }
- }
string source = "";
using (Stream s = new FileStream (fi.FullName, FileMode.Open)) {
}
}
NotifyValueChanged ("source", source);
+
+ lock (crow.UpdateMutex) {
+ try {
+ Widget g = crow.CreateInstance (fi.FullName);
+ crowContainer.SetChild (g);
+ g.DataSource = this;
+ } catch (Crow.IML.InstantiatorException ex) {
+ showError (ex);
+ }
+ }
}
+
void showError (Crow.IML.InstantiatorException ex)
{
NotifyValueChanged ("ErrorMessage", ex.Path + ": " + ex.InnerException.Message);
protected CrowVkWin() : base()
{
+
Thread crowThread = new Thread(crow_thread_func);
crowThread.IsBackground = true;
crowThread.Start();
vkvg.SampleCount.Sample_8, presentQueue.index);
crow = new Crow.Interface (vkvgDev, 800, 600);
+ crow.MouseCursorChanged +=Crow_MouseCursorChanged;;
isRunning = true;
while (isRunning) {
crow = null;
}
+ void Crow_MouseCursorChanged (object sender, MouseCursorChangedEventArgs e)
+ {
+ switch (e.NewCursor) {
+ case MouseCursor.Arrow:
+ SetCursor (Glfw.CursorShape.Arrow);
+ break;
+ case MouseCursor.IBeam:
+ SetCursor (Glfw.CursorShape.IBeam);
+ break;
+ case MouseCursor.Crosshair:
+ SetCursor (Glfw.CursorShape.Crosshair);
+ break;
+ case MouseCursor.Hand:
+ SetCursor (Glfw.CursorShape.Hand);
+ break;
+ case MouseCursor.HResize:
+ SetCursor (Glfw.CursorShape.HResize);
+ break;
+ case MouseCursor.VResize:
+ SetCursor (Glfw.CursorShape.VResize);
+ break;
+ default:
+ SetCursor (Glfw.CursorShape.Crosshair);
+ break;
+ }
+ }
+
void initUISurface () {
lock (crow.UpdateMutex) {
uiImage?.Dispose ();
VkImageLayout.Undefined, VkImageLayout.TransferDstOptimal,
VkPipelineStageFlags.BottomOfPipe, VkPipelineStageFlags.Transfer);
uiImage.SetLayout (cmd, VkImageAspectFlags.Color,
- VkImageLayout.ColorAttachmentOptimal, VkImageLayout.TransferSrcOptimal,
- VkPipelineStageFlags.ColorAttachmentOutput, VkPipelineStageFlags.Transfer);
+ VkImageLayout.Undefined, VkImageLayout.TransferSrcOptimal,
+ VkPipelineStageFlags.Transfer, VkPipelineStageFlags.Transfer);
VkImageSubresourceLayers imgSubResLayer = new VkImageSubresourceLayers {
aspectMask = VkImageAspectFlags.Color,
}
#region Mouse and keyboard
- //protected override void onScroll (double xOffset, double yOffset)
- //{
- // if (KeyModifiers.HasFlag (Glfw.Modifier.Shift))
- // crow.ProcessMouseWheelChanged ((float)xOffset);
- // else
- // crow.ProcessMouseWheelChanged ((float)yOffset);
- //}
+ protected override void onScroll (double xOffset, double yOffset)
+ {
+ if (KeyModifiers.HasFlag (Glfw.Modifier.Shift))
+ crow.ProcessMouseWheelChanged ((float)xOffset);
+ else
+ crow.ProcessMouseWheelChanged ((float)yOffset);
+ }
protected override void onMouseMove (double xPos, double yPos)
{
if (crow.ProcessMouseMove ((int)xPos, (int)yPos))
if (crow.ProcessKeyUp ((Crow.Key)key))
return;
}
- //protected override void onChar (Glfw.CodePoint cp)
- //{
- // if (crow.ProcessKeyPress (cp.ToChar ()))
- // return;
- //}
+ protected override void onChar (Glfw.CodePoint cp)
+ {
+ if (crow.ProcessKeyPress (cp.ToChar ()))
+ return;
+ }
#endregion
#region dispose