#ifndef _XPUIGraphics_h_ #define _XPUIGraphics_h_ /* * Copyright 2005-2012 Sandy Barbour and Ben Supnik * * All rights reserved. See license.txt for usage. * * X-Plane SDK Version: 2.1.1 * */ /* * * */ #include "XPWidgetDefs.h" #ifdef __cplusplus extern "C" { #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. * */ enum { /* 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 }; typedef int 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. * */ WIDGET_API void XPDrawWindow( int inX1, int inY1, int inX2, int inY2, XPWindowStyle inStyle); /* * 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. * */ WIDGET_API void XPGetWindowDefaultDimensions( XPWindowStyle inStyle, int * outWidth, /* Can be NULL */ int * outHeight); /* Can be NULL */ /* * 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 * */ enum { /* 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 }; typedef int 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. * */ WIDGET_API void XPDrawElement( int inX1, int inY1, int inX2, int inY2, XPElementStyle inStyle, int inLit); /* * 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. * */ WIDGET_API void XPGetElementDefaultDimensions( XPElementStyle inStyle, int * outWidth, /* Can be NULL */ int * outHeight, /* Can be NULL */ int * outCanBeLit); /* Can be NULL */ /* * 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. * */ enum { /* 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 }; typedef int 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. * */ WIDGET_API void XPDrawTrack( int inX1, int inY1, int inX2, int inY2, int inMin, int inMax, int inValue, XPTrackStyle inTrackStyle, int inLit); /* * 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. * */ WIDGET_API void XPGetTrackDefaultDimensions( XPTrackStyle inStyle, int * outWidth, int * outCanBeLit); /* * 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. * */ WIDGET_API void XPGetTrackMetrics( int inX1, int inY1, int inX2, int inY2, int inMin, int inMax, int inValue, XPTrackStyle inTrackStyle, int * outIsVertical, int * outDownBtnSize, int * outDownPageSize, int * outThumbSize, int * outUpPageSize, int * outUpBtnSize); #ifdef __cplusplus } #endif #endif