Initial Version
This commit is contained in:
380
xpcPlugin/SDK/Delphi/Widgets/XPUIGraphics.pas
Executable file
380
xpcPlugin/SDK/Delphi/Widgets/XPUIGraphics.pas
Executable file
@@ -0,0 +1,380 @@
|
||||
{
|
||||
Copyright 2005-2012 Sandy Barbour and Ben Supnik
|
||||
|
||||
All rights reserved. See license.txt for usage.
|
||||
|
||||
X-Plane SDK Version: 2.1.1
|
||||
}
|
||||
|
||||
UNIT XPUIGraphics;
|
||||
INTERFACE
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
USES XPWidgetDefs;
|
||||
{$A4}
|
||||
{$IFDEF MSWINDOWS}
|
||||
{$DEFINE DELPHI}
|
||||
{$ENDIF}
|
||||
{___________________________________________________________________________
|
||||
* UI GRAPHICS
|
||||
___________________________________________________________________________}
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
{
|
||||
XPWindowStyle
|
||||
|
||||
There are a few built-in window styles in X-Plane that you can use.
|
||||
|
||||
Note that X-Plane 6 does not offer real shadow-compositing; you must make
|
||||
sure to put a window on top of another window of the right style to the
|
||||
shadows work, etc. This applies to elements with insets and shadows. The
|
||||
rules are:
|
||||
|
||||
Sub windows must go on top of main windows, and screens and list views on
|
||||
top of subwindows. Only help and main windows can be over the main screen.
|
||||
|
||||
|
||||
With X-Plane 7 any window or element may be placed over any other element.
|
||||
|
||||
Some windows are scaled by stretching, some by repeating. The drawing
|
||||
routines know which scaling method to use. The list view cannot be
|
||||
rescaled in x-plane 6 because it has both a repeating pattern and a
|
||||
gradient in one element. All other elements can be rescaled.
|
||||
}
|
||||
TYPE
|
||||
XPWindowStyle = (
|
||||
{ An LCD screen that shows help. }
|
||||
xpWindow_Help = 0
|
||||
|
||||
{ A dialog box window. }
|
||||
,xpWindow_MainWindow = 1
|
||||
|
||||
{ A panel or frame within a dialog box window. }
|
||||
,xpWindow_SubWindow = 2
|
||||
|
||||
{ An LCD screen within a panel to hold text displays. }
|
||||
,xpWindow_Screen = 4
|
||||
|
||||
{ A list view within a panel for scrolling file names, etc. }
|
||||
,xpWindow_ListView = 5
|
||||
|
||||
);
|
||||
PXPWindowStyle = ^XPWindowStyle;
|
||||
|
||||
{
|
||||
XPDrawWindow
|
||||
|
||||
This routine draws a window of the given dimensions at the given offset on
|
||||
the virtual screen in a given style. The window is automatically scaled as
|
||||
appropriate using a bitmap scaling technique (scaling or repeating) as
|
||||
appropriate to the style.
|
||||
}
|
||||
PROCEDURE XPDrawWindow(
|
||||
inX1 : integer;
|
||||
inY1 : integer;
|
||||
inX2 : integer;
|
||||
inY2 : integer;
|
||||
inStyle : XPWindowStyle);
|
||||
{$IFDEF DELPHI}
|
||||
cdecl; external 'XPWIDGETS.DLL';
|
||||
{$ELSE}
|
||||
cdecl; external '';
|
||||
{$ENDIF}
|
||||
|
||||
{
|
||||
XPGetWindowDefaultDimensions
|
||||
|
||||
This routine returns the default dimensions for a window. Output is either
|
||||
a minimum or fixed value depending on whether the window is scalable.
|
||||
}
|
||||
PROCEDURE XPGetWindowDefaultDimensions(
|
||||
inStyle : XPWindowStyle;
|
||||
outWidth : Pinteger; { Can be nil }
|
||||
outHeight : Pinteger); { Can be nil }
|
||||
{$IFDEF DELPHI}
|
||||
cdecl; external 'XPWIDGETS.DLL';
|
||||
{$ELSE}
|
||||
cdecl; external '';
|
||||
{$ENDIF}
|
||||
|
||||
{
|
||||
XPElementStyle
|
||||
|
||||
Elements are individually drawable UI things like push buttons, etc. The
|
||||
style defines what kind of element you are drawing. Elements can be
|
||||
stretched in one or two dimensions (depending on the element). Some
|
||||
elements can be lit.
|
||||
|
||||
In x-plane 6 some elements must be drawn over metal. Some are scalable and
|
||||
some are not. Any element can be drawn anywhere in x-plane 7.
|
||||
|
||||
Scalable Axis Required Background
|
||||
}
|
||||
TYPE
|
||||
XPElementStyle = (
|
||||
{ x metal }
|
||||
xpElement_TextField = 6
|
||||
|
||||
{ none metal }
|
||||
,xpElement_CheckBox = 9
|
||||
|
||||
{ none metal }
|
||||
,xpElement_CheckBoxLit = 10
|
||||
|
||||
{ none window header }
|
||||
,xpElement_WindowCloseBox = 14
|
||||
|
||||
{ none window header }
|
||||
,xpElement_WindowCloseBoxPressed = 15
|
||||
|
||||
{ x metal }
|
||||
,xpElement_PushButton = 16
|
||||
|
||||
{ x metal }
|
||||
,xpElement_PushButtonLit = 17
|
||||
|
||||
{ none any }
|
||||
,xpElement_OilPlatform = 24
|
||||
|
||||
{ none any }
|
||||
,xpElement_OilPlatformSmall = 25
|
||||
|
||||
{ none any }
|
||||
,xpElement_Ship = 26
|
||||
|
||||
{ none any }
|
||||
,xpElement_ILSGlideScope = 27
|
||||
|
||||
{ none any }
|
||||
,xpElement_MarkerLeft = 28
|
||||
|
||||
{ none any }
|
||||
,xpElement_Airport = 29
|
||||
|
||||
{ none any }
|
||||
,xpElement_Waypoint = 30
|
||||
|
||||
{ none any }
|
||||
,xpElement_NDB = 31
|
||||
|
||||
{ none any }
|
||||
,xpElement_VOR = 32
|
||||
|
||||
{ none any }
|
||||
,xpElement_RadioTower = 33
|
||||
|
||||
{ none any }
|
||||
,xpElement_AircraftCarrier = 34
|
||||
|
||||
{ none any }
|
||||
,xpElement_Fire = 35
|
||||
|
||||
{ none any }
|
||||
,xpElement_MarkerRight = 36
|
||||
|
||||
{ none any }
|
||||
,xpElement_CustomObject = 37
|
||||
|
||||
{ none any }
|
||||
,xpElement_CoolingTower = 38
|
||||
|
||||
{ none any }
|
||||
,xpElement_SmokeStack = 39
|
||||
|
||||
{ none any }
|
||||
,xpElement_Building = 40
|
||||
|
||||
{ none any }
|
||||
,xpElement_PowerLine = 41
|
||||
|
||||
{ none metal }
|
||||
,xpElement_CopyButtons = 45
|
||||
|
||||
{ none metal }
|
||||
,xpElement_CopyButtonsWithEditingGrid = 46
|
||||
|
||||
{ x, y metal }
|
||||
,xpElement_EditingGrid = 47
|
||||
|
||||
{ THIS CAN PROBABLY BE REMOVED }
|
||||
,xpElement_ScrollBar = 48
|
||||
|
||||
{ none any }
|
||||
,xpElement_VORWithCompassRose = 49
|
||||
|
||||
{ none metal }
|
||||
,xpElement_Zoomer = 51
|
||||
|
||||
{ x, y metal }
|
||||
,xpElement_TextFieldMiddle = 52
|
||||
|
||||
{ none metal }
|
||||
,xpElement_LittleDownArrow = 53
|
||||
|
||||
{ none metal }
|
||||
,xpElement_LittleUpArrow = 54
|
||||
|
||||
{ none metal }
|
||||
,xpElement_WindowDragBar = 61
|
||||
|
||||
{ none metal }
|
||||
,xpElement_WindowDragBarSmooth = 62
|
||||
|
||||
);
|
||||
PXPElementStyle = ^XPElementStyle;
|
||||
|
||||
{
|
||||
XPDrawElement
|
||||
|
||||
XPDrawElement draws a given element at an offset on the virtual screen in
|
||||
set dimensions. EVEN if the element is not scalable, it will be scaled if
|
||||
the width and height do not match the preferred dimensions; it'll just look
|
||||
ugly. Pass inLit to see the lit version of the element; if the element
|
||||
cannot be lit this is ignored.
|
||||
}
|
||||
PROCEDURE XPDrawElement(
|
||||
inX1 : integer;
|
||||
inY1 : integer;
|
||||
inX2 : integer;
|
||||
inY2 : integer;
|
||||
inStyle : XPElementStyle;
|
||||
inLit : integer);
|
||||
{$IFDEF DELPHI}
|
||||
cdecl; external 'XPWIDGETS.DLL';
|
||||
{$ELSE}
|
||||
cdecl; external '';
|
||||
{$ENDIF}
|
||||
|
||||
{
|
||||
XPGetElementDefaultDimensions
|
||||
|
||||
This routine returns the recommended or minimum dimensions of a given UI
|
||||
element. outCanBeLit tells whether the element has both a lit and unlit
|
||||
state. Pass NULL to not receive any of these parameters.
|
||||
}
|
||||
PROCEDURE XPGetElementDefaultDimensions(
|
||||
inStyle : XPElementStyle;
|
||||
outWidth : Pinteger; { Can be nil }
|
||||
outHeight : Pinteger; { Can be nil }
|
||||
outCanBeLit : Pinteger); { Can be nil }
|
||||
{$IFDEF DELPHI}
|
||||
cdecl; external 'XPWIDGETS.DLL';
|
||||
{$ELSE}
|
||||
cdecl; external '';
|
||||
{$ENDIF}
|
||||
|
||||
{
|
||||
XPTrackStyle
|
||||
|
||||
A track is a UI element that displays a value vertically or horizontally.
|
||||
X-Plane has three kinds of tracks: scroll bars, sliders, and progress bars.
|
||||
Tracks can be displayed either horizontally or vertically; tracks will
|
||||
choose their own layout based on the larger dimension of their dimensions
|
||||
(e.g. they know if they are tall or wide). Sliders may be lit or unlit
|
||||
(showing the user manipulating them).
|
||||
|
||||
ScrollBar - this is a standard scroll bar with arrows and a thumb to drag.
|
||||
Slider - this is a simple track with a ball in the middle that can be
|
||||
slid. Progress - this is a progress indicator showing how a long task is
|
||||
going.
|
||||
}
|
||||
TYPE
|
||||
XPTrackStyle = (
|
||||
{ not over metal can be lit can be rotated }
|
||||
xpTrack_ScrollBar = 0
|
||||
|
||||
{ over metal can be lit can be rotated }
|
||||
,xpTrack_Slider = 1
|
||||
|
||||
{ over metal cannot be lit cannot be rotated }
|
||||
,xpTrack_Progress = 2
|
||||
|
||||
);
|
||||
PXPTrackStyle = ^XPTrackStyle;
|
||||
|
||||
{
|
||||
XPDrawTrack
|
||||
|
||||
This routine draws a track. You pass in the track dimensions and size; the
|
||||
track picks the optimal orientation for these dimensions. Pass in the
|
||||
track's minimum current and maximum values; the indicator will be
|
||||
positioned appropriately. You can also specify whether the track is lit or
|
||||
not.
|
||||
}
|
||||
PROCEDURE XPDrawTrack(
|
||||
inX1 : integer;
|
||||
inY1 : integer;
|
||||
inX2 : integer;
|
||||
inY2 : integer;
|
||||
inMin : integer;
|
||||
inMax : integer;
|
||||
inValue : integer;
|
||||
inTrackStyle : XPTrackStyle;
|
||||
inLit : integer);
|
||||
{$IFDEF DELPHI}
|
||||
cdecl; external 'XPWIDGETS.DLL';
|
||||
{$ELSE}
|
||||
cdecl; external '';
|
||||
{$ENDIF}
|
||||
|
||||
{
|
||||
XPGetTrackDefaultDimensions
|
||||
|
||||
This routine returns a track's default smaller dimension; all tracks are
|
||||
scalable in the larger dimension. It also returns whether a track can be
|
||||
lit.
|
||||
}
|
||||
PROCEDURE XPGetTrackDefaultDimensions(
|
||||
inStyle : XPTrackStyle;
|
||||
outWidth : Pinteger;
|
||||
outCanBeLit : Pinteger);
|
||||
{$IFDEF DELPHI}
|
||||
cdecl; external 'XPWIDGETS.DLL';
|
||||
{$ELSE}
|
||||
cdecl; external '';
|
||||
{$ENDIF}
|
||||
|
||||
{
|
||||
XPGetTrackMetrics
|
||||
|
||||
This routine returns the metrics of a track. If you want to write UI code
|
||||
to manipulate a track, this routine helps you know where the mouse
|
||||
locations are. For most other elements, the rectangle the element is drawn
|
||||
in is enough information. However, the scrollbar drawing routine does some
|
||||
automatic placement; this routine lets you know where things ended up. You
|
||||
pass almost everything you would pass to the draw routine. You get out the
|
||||
orientation, and other useful stuff.
|
||||
|
||||
Besides orientation, you get five dimensions for the five parts of a
|
||||
scrollbar, which are the down button, down area (area before the thumb),
|
||||
the thumb, and the up area and button. For horizontal scrollers, the left
|
||||
button decreases; for vertical scrollers, the top button decreases.
|
||||
}
|
||||
PROCEDURE XPGetTrackMetrics(
|
||||
inX1 : integer;
|
||||
inY1 : integer;
|
||||
inX2 : integer;
|
||||
inY2 : integer;
|
||||
inMin : integer;
|
||||
inMax : integer;
|
||||
inValue : integer;
|
||||
inTrackStyle : XPTrackStyle;
|
||||
outIsVertical : Pinteger;
|
||||
outDownBtnSize : Pinteger;
|
||||
outDownPageSize : Pinteger;
|
||||
outThumbSize : Pinteger;
|
||||
outUpPageSize : Pinteger;
|
||||
outUpBtnSize : Pinteger);
|
||||
{$IFDEF DELPHI}
|
||||
cdecl; external 'XPWIDGETS.DLL';
|
||||
{$ELSE}
|
||||
cdecl; external '';
|
||||
{$ENDIF}
|
||||
|
||||
IMPLEMENTATION
|
||||
END.
|
||||
Reference in New Issue
Block a user