218 строки
6.8 KiB
C#
Executable File
218 строки
6.8 KiB
C#
Executable File
//
|
|
// IWidgetBackend.cs
|
|
//
|
|
// Author:
|
|
// Lluis Sanchez <lluis@xamarin.com>
|
|
//
|
|
// Copyright (c) 2011 Xamarin Inc
|
|
//
|
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
// of this software and associated documentation files (the "Software"), to deal
|
|
// in the Software without restriction, including without limitation the rights
|
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
// copies of the Software, and to permit persons to whom the Software is
|
|
// furnished to do so, subject to the following conditions:
|
|
//
|
|
// The above copyright notice and this permission notice shall be included in
|
|
// all copies or substantial portions of the Software.
|
|
//
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
// THE SOFTWARE.
|
|
|
|
using System;
|
|
using Xwt.Drawing;
|
|
|
|
namespace Xwt.Backends
|
|
{
|
|
public interface IWidgetBackend: IBackend
|
|
{
|
|
void Initialize (IWidgetEventSink eventSink);
|
|
void Dispose ();
|
|
|
|
bool Visible { get; set; }
|
|
bool Sensitive { get; set; }
|
|
bool CanGetFocus { get; set; }
|
|
bool HasFocus { get; }
|
|
Size Size { get; }
|
|
Point ConvertToScreenCoordinates (Point widgetCoordinates);
|
|
|
|
/// <summary>
|
|
/// Sets the minimum size of the widget
|
|
/// </summary>
|
|
/// <param name='width'>
|
|
/// Minimum width. If the value is -1, it means no minimum width.
|
|
/// </param>
|
|
/// <param name='height'>
|
|
/// Minimum height. If the value is -1, it means no minimum height.
|
|
/// </param>
|
|
void SetMinSize (double width, double height);
|
|
void SetNaturalSize (double width, double height);
|
|
|
|
void SetFocus ();
|
|
|
|
void UpdateLayout ();
|
|
WidgetSize GetPreferredWidth ();
|
|
WidgetSize GetPreferredHeightForWidth (double width);
|
|
WidgetSize GetPreferredHeight ();
|
|
WidgetSize GetPreferredWidthForHeight (double height);
|
|
|
|
object NativeWidget { get; }
|
|
|
|
/// <summary>
|
|
/// Starts a drag operation originated in this widget
|
|
/// </summary>
|
|
/// <param name='data'>
|
|
/// Drag operation arguments
|
|
/// </param>
|
|
void DragStart (DragStartData data);
|
|
|
|
/// <summary>
|
|
/// Sets up a widget so that XWT will start a drag operation when the user clicks and drags on the widget.
|
|
/// </summary>
|
|
/// <param name='types'>
|
|
/// Types of data that can be dragged from this widget
|
|
/// </param>
|
|
/// <param name='dragAction'>
|
|
/// Bitmask of possible actions for a drag from this widget
|
|
/// </param>
|
|
/// <remarks>
|
|
/// When a drag operation is started, the backend should fire the OnDragStarted event
|
|
/// </remarks>
|
|
void SetDragSource (TransferDataType[] types, DragDropAction dragAction);
|
|
|
|
/// <summary>
|
|
/// Sets a widget as a potential drop destination
|
|
/// </summary>
|
|
/// <param name='types'>
|
|
/// Types.
|
|
/// </param>
|
|
/// <param name='dragAction'>
|
|
/// Drag action.
|
|
/// </param>
|
|
void SetDragTarget (TransferDataType[] types, DragDropAction dragAction);
|
|
|
|
object Font { get; set; }
|
|
Color BackgroundColor { get; set; }
|
|
string TooltipText { get; set; }
|
|
|
|
/// <summary>
|
|
/// Sets the cursor shape to be used when the mouse is over the widget
|
|
/// </summary>
|
|
/// <param name='cursorType'>
|
|
/// The cursor type.
|
|
/// </param>
|
|
void SetCursor (CursorType cursorType);
|
|
}
|
|
|
|
public interface IWidgetEventSink
|
|
{
|
|
// Events
|
|
void OnDragOverCheck (DragOverCheckEventArgs args);
|
|
void OnDragOver (DragOverEventArgs args);
|
|
void OnDragDropCheck (DragCheckEventArgs args);
|
|
void OnDragDrop (DragEventArgs args);
|
|
void OnDragLeave (EventArgs args);
|
|
|
|
void OnDragFinished (DragFinishedEventArgs args);
|
|
|
|
DragStartData OnDragStarted ();
|
|
void OnKeyPressed (KeyEventArgs args);
|
|
void OnKeyReleased (KeyEventArgs args);
|
|
void OnGotFocus ();
|
|
void OnLostFocus ();
|
|
void OnMouseEntered ();
|
|
void OnMouseExited ();
|
|
void OnButtonPressed (ButtonEventArgs args);
|
|
void OnButtonReleased (ButtonEventArgs args);
|
|
void OnMouseMoved (MouseMovedEventArgs args);
|
|
void OnBoundsChanged ();
|
|
|
|
// Events
|
|
WidgetSize OnGetPreferredWidth ();
|
|
WidgetSize OnGetPreferredHeight ();
|
|
WidgetSize OnGetPreferredHeightForWidth (double width);
|
|
WidgetSize OnGetPreferredWidthForHeight (double height);
|
|
|
|
/// <summary>
|
|
/// Notifies the frontend that the preferred size of this widget has changed
|
|
/// </summary>
|
|
/// <remarks>
|
|
/// This method must be called when the widget changes its preferred size.
|
|
/// This method doesn't need to be called if the resize is the result of changing
|
|
/// a widget property. For example, it is not necessary to call it when the text
|
|
/// of a label is changed (the fronted will automatically rise this event when
|
|
/// the property changes). However, it has to be called when the the shape of the
|
|
/// widget changes on its own, for example if the size of a button changes as
|
|
/// a result of clicking on it.
|
|
/// </remarks>
|
|
void OnPreferredSizeChanged ();
|
|
SizeRequestMode GetSizeRequestMode ();
|
|
|
|
bool SupportsCustomScrolling ();
|
|
void SetScrollAdjustments (IScrollAdjustmentBackend horizontal, IScrollAdjustmentBackend vertical);
|
|
|
|
/// <summary>
|
|
/// Gets the default natural size of the widget
|
|
/// </summary>
|
|
/// <returns>
|
|
/// The default natural size.
|
|
/// </returns>
|
|
/// <remarks>
|
|
/// This method should only be used if there isn't a platform-specific natural
|
|
/// size for the widget. There may be widgets for which XWT can't provide
|
|
/// a default natural width or height, in which case it return 0.
|
|
/// </remarks>
|
|
Size GetDefaultNaturalSize ();
|
|
}
|
|
|
|
[Flags]
|
|
public enum WidgetEvent
|
|
{
|
|
DragOverCheck = 1,
|
|
DragOver = 1 << 1,
|
|
DragDropCheck = 1 << 2,
|
|
DragDrop = 1 << 3,
|
|
DragLeave = 1 << 4,
|
|
KeyPressed = 1 << 5,
|
|
KeyReleased = 1 << 6,
|
|
PreferredWidthCheck = 1 << 7,
|
|
PreferredHeightCheck = 1 << 8,
|
|
PreferredWidthForHeightCheck = 1 << 9,
|
|
PreferredHeightForWidthCheck = 1 << 10,
|
|
GotFocus = 1 << 11,
|
|
LostFocus = 1 << 12,
|
|
MouseEntered = 1 << 13,
|
|
MouseExited = 1 << 14,
|
|
ButtonPressed = 1 << 15,
|
|
ButtonReleased = 1 << 16,
|
|
MouseMoved = 1 << 17,
|
|
DragStarted = 1 << 18,
|
|
BoundsChanged = 1 << 19
|
|
}
|
|
|
|
public class DragStartData
|
|
{
|
|
|
|
public TransferDataSource Data { get; private set; }
|
|
public DragDropAction DragAction { get; private set; }
|
|
public object ImageBackend { get; private set; }
|
|
public double HotX { get; private set; }
|
|
public double HotY { get; private set; }
|
|
|
|
internal DragStartData (TransferDataSource data, DragDropAction action, object imageBackend, double hotX, double hotY)
|
|
{
|
|
Data = data;
|
|
DragAction = action;
|
|
ImageBackend = imageBackend;
|
|
HotX = hotX;
|
|
HotY = hotY;
|
|
}
|
|
}
|
|
}
|
|
|