Example #1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="Surface"/> class with the specified handler.
        /// </summary>
        /// <param name="events">The specified event handler.</param>
        /// <param name="scrollable">Whether this surface is scrollable or not.</param>
        /// <param name="width">The width of the scrollable surface.</param>
        /// <param name="height">The height of the scrollable surface.</param>
        public Surface(ISurfaceHandler events, bool scrollable = false, int width = -1, int height = -1)
        {
            SurfaceHandler surfaceEvents = new SurfaceHandler
            {
                Draw = (IntPtr surfaceHandler, IntPtr surface, ref Libui.uiAreaDrawParams args) =>
                {
                    Surface       realSurface = Surfaces[surface];
                    DrawEventArgs a           = new DrawEventArgs(new Context(args.Context), new RectangleD(args.ClipX, args.ClipY, args.ClipWidth, args.ClipHeight), new SizeD(args.AreaWidth, args.AreaHeight));
                    events.Draw(realSurface, ref a);
                },
                MouseEvent = (IntPtr surfaceHandler, IntPtr surface, ref Libui.uiAreaMouseEvent args) =>
                {
                    Surface        realSurface = Surfaces[surface];
                    MouseEventArgs a           = new MouseEventArgs(new PointD(args.X, args.Y), new SizeD(args.AreaWidth, args.AreaHeight), args.Up, args.Down, args.Count, args.Modifiers, args.Held1To64);
                    events.MouseEvent(realSurface, ref a);
                },
                MouseCrossed = (IntPtr surfaceHandler, IntPtr surface, bool left) =>
                {
                    Surface realSurface     = Surfaces[surface];
                    MouseCrossedEventArgs a = new MouseCrossedEventArgs(left);
                    events.MouseCrossed(realSurface, a);
                },
                DragBroken = (IntPtr surfaceHandler, IntPtr surface) =>
                {
                    Surface realSurface = Surfaces[surface];
                    events.DragBroken(realSurface);
                },
                KeyEvent = (IntPtr surfaceHandler, IntPtr surface, ref Libui.uiAreaKeyEvent args) =>
                {
                    Surface      realSurface = Surfaces[surface];
                    KeyEventArgs a           = new KeyEventArgs(args.Key, args.ExtKey, args.Modifier, args.Modifiers, args.Up);
                    return(events.KeyEvent(realSurface, ref a));
                }
            };

            EventHandler = new Libui.uiAreaHandler
            {
                DragBroken   = Marshal.GetFunctionPointerForDelegate(surfaceEvents.DragBroken),
                Draw         = Marshal.GetFunctionPointerForDelegate(surfaceEvents.Draw),
                KeyEvent     = Marshal.GetFunctionPointerForDelegate(surfaceEvents.KeyEvent),
                MouseCrossed = Marshal.GetFunctionPointerForDelegate(surfaceEvents.MouseCrossed),
                MouseEvent   = Marshal.GetFunctionPointerForDelegate(surfaceEvents.MouseEvent)
            };

            IsScrollable = scrollable;
            if (scrollable)
            {
                Handle = Libui.uiNewScrollingArea(EventHandler, width, height);
            }
            else
            {
                Handle = Libui.uiNewArea(EventHandler);
            }
            Surfaces[Handle] = this;
        }
Example #2
0
        protected SurfaceBase(ISurfaceHandler events)
        {
            SurfaceHandler surfaceEvents = new SurfaceHandler
            {
                Draw = (IntPtr surfaceHandler, IntPtr surface, ref LibuiLibrary.uiAreaDrawParams args) =>
                {
                    SafeControlHandle surfaceHandle = new SafeControlHandle(surface);
                    SurfaceBase       realSurface   = Surfaces[surfaceHandle];
                    DrawEventArgs     a             = args.ToDrawEventArgs();
                    events.Draw(realSurface, ref a);
                },
                MouseEvent = (IntPtr surfaceHandler, IntPtr surface, ref LibuiLibrary.uiAreaMouseEvent args) =>
                {
                    SafeControlHandle surfaceHandle = new SafeControlHandle(surface);
                    SurfaceBase       realSurface   = Surfaces[surfaceHandle];
                    MouseEventArgs    a             = args.ToMouseEventArgs();
                    events.MouseEvent(realSurface, ref a);
                },
                MouseCrossed = (surfaceHandler, surface, left) =>
                {
                    SafeControlHandle     surfaceHandle = new SafeControlHandle(surface);
                    SurfaceBase           realSurface   = Surfaces[surfaceHandle];
                    MouseCrossedEventArgs a             = new MouseCrossedEventArgs(left);
                    events.MouseCrossed(realSurface, a);
                },
                DragBroken = (surfaceHandler, surface) =>
                {
                    SafeControlHandle surfaceHandle = new SafeControlHandle(surface);
                    SurfaceBase       realSurface   = Surfaces[surfaceHandle];
                    events.DragBroken(realSurface);
                },
                KeyEvent = (IntPtr surfaceHandler, IntPtr surface, ref LibuiLibrary.uiAreaKeyEvent args) =>
                {
                    SafeControlHandle surfaceHandle = new SafeControlHandle(surface);
                    SurfaceBase       realSurface   = Surfaces[surfaceHandle];
                    KeyEventArgs      a             = args.ToKeyEventArgs();
                    return(events.KeyEvent(realSurface, ref a));
                }
            };

            EventHandler = new LibuiLibrary.uiAreaHandler
            {
                DragBroken   = Marshal.GetFunctionPointerForDelegate(surfaceEvents.DragBroken),
                Draw         = Marshal.GetFunctionPointerForDelegate(surfaceEvents.Draw),
                KeyEvent     = Marshal.GetFunctionPointerForDelegate(surfaceEvents.KeyEvent),
                MouseCrossed = Marshal.GetFunctionPointerForDelegate(surfaceEvents.MouseCrossed),
                MouseEvent   = Marshal.GetFunctionPointerForDelegate(surfaceEvents.MouseEvent)
            };
        }