#ifndef _XPUIGraphics_h_ #define _XPUIGraphics_h_ /* * Copyright 2005-2022 Laminar Research, Sandy Barbour and Ben Supnik All * rights reserved. See license.txt for usage. X-Plane SDK Version: 4.0.0 * */ /*************************************************************************** * XPUIGraphics ***************************************************************************/ #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 make * 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