Irrlicht 3D Engine
IGUISkin.h
Go to the documentation of this file.
00001 // Copyright (C) 2002-2012 Nikolaus Gebhardt
00002 // This file is part of the "Irrlicht Engine".
00003 // For conditions of distribution and use, see copyright notice in irrlicht.h
00004 
00005 #ifndef __I_GUI_SKIN_H_INCLUDED__
00006 #define __I_GUI_SKIN_H_INCLUDED__
00007 
00008 #include "IAttributeExchangingObject.h"
00009 #include "EGUIAlignment.h"
00010 #include "SColor.h"
00011 #include "rect.h"
00012 
00013 namespace irr
00014 {
00015 namespace gui
00016 {
00017     class IGUIFont;
00018     class IGUISpriteBank;
00019     class IGUIElement;
00020 
00022 
00030     enum EGUI_SKIN_TYPE
00031     {
00033         EGST_WINDOWS_CLASSIC=0,
00034 
00036         EGST_WINDOWS_METALLIC,
00037 
00039         EGST_BURNING_SKIN,
00040 
00042         EGST_UNKNOWN,
00043 
00045         EGST_COUNT
00046     };
00047 
00049     const c8* const GUISkinTypeNames[EGST_COUNT+1] =
00050     {
00051         "windowsClassic",
00052         "windowsMetallic",
00053         "burning",
00054         "unknown",
00055         0,
00056     };
00057 
00058 
00060     enum EGUI_DEFAULT_COLOR
00061     {
00063         EGDC_3D_DARK_SHADOW = 0,
00065         EGDC_3D_SHADOW,
00067         EGDC_3D_FACE,
00069         EGDC_3D_HIGH_LIGHT,
00071         EGDC_3D_LIGHT,
00073         EGDC_ACTIVE_BORDER,
00075         EGDC_ACTIVE_CAPTION,
00077         EGDC_APP_WORKSPACE,
00079         EGDC_BUTTON_TEXT,
00081         EGDC_GRAY_TEXT,
00083         EGDC_HIGH_LIGHT,
00085         EGDC_HIGH_LIGHT_TEXT,
00087         EGDC_INACTIVE_BORDER,
00089         EGDC_INACTIVE_CAPTION,
00091         EGDC_TOOLTIP,
00093         EGDC_TOOLTIP_BACKGROUND,
00095         EGDC_SCROLLBAR,
00097         EGDC_WINDOW,
00099         EGDC_WINDOW_SYMBOL,
00101         EGDC_ICON,
00103         EGDC_ICON_HIGH_LIGHT,
00105         EGDC_GRAY_WINDOW_SYMBOL,
00107         EGDC_EDITABLE,
00109         EGDC_GRAY_EDITABLE,
00111         EGDC_FOCUSED_EDITABLE,
00112 
00115         EGDC_COUNT
00116     };
00117 
00119     const c8* const GUISkinColorNames[EGDC_COUNT+1] =
00120     {
00121         "3DDarkShadow",
00122         "3DShadow",
00123         "3DFace",
00124         "3DHighlight",
00125         "3DLight",
00126         "ActiveBorder",
00127         "ActiveCaption",
00128         "AppWorkspace",
00129         "ButtonText",
00130         "GrayText",
00131         "Highlight",
00132         "HighlightText",
00133         "InactiveBorder",
00134         "InactiveCaption",
00135         "ToolTip",
00136         "ToolTipBackground",
00137         "ScrollBar",
00138         "Window",
00139         "WindowSymbol",
00140         "Icon",
00141         "IconHighlight",
00142         "GrayWindowSymbol",
00143         "Editable",
00144         "GrayEditable",
00145         "FocusedEditable",
00146         0,
00147     };
00148 
00150     enum EGUI_DEFAULT_SIZE
00151     {
00153         EGDS_SCROLLBAR_SIZE = 0,
00155         EGDS_MENU_HEIGHT,
00157         EGDS_WINDOW_BUTTON_WIDTH,
00159         EGDS_CHECK_BOX_WIDTH,
00161         EGDS_MESSAGE_BOX_WIDTH,
00163         EGDS_MESSAGE_BOX_HEIGHT,
00165         EGDS_BUTTON_WIDTH,
00167         EGDS_BUTTON_HEIGHT,
00169         EGDS_TEXT_DISTANCE_X,
00171         EGDS_TEXT_DISTANCE_Y,
00173         EGDS_TITLEBARTEXT_DISTANCE_X,
00175         EGDS_TITLEBARTEXT_DISTANCE_Y,
00177         EGDS_MESSAGE_BOX_GAP_SPACE,
00179         EGDS_MESSAGE_BOX_MIN_TEXT_WIDTH,
00181         EGDS_MESSAGE_BOX_MAX_TEXT_WIDTH,
00183         EGDS_MESSAGE_BOX_MIN_TEXT_HEIGHT,
00185         EGDS_MESSAGE_BOX_MAX_TEXT_HEIGHT,
00187         EGDS_BUTTON_PRESSED_IMAGE_OFFSET_X,
00189         EGDS_BUTTON_PRESSED_IMAGE_OFFSET_Y,
00191         EGDS_BUTTON_PRESSED_TEXT_OFFSET_X,
00193         EGDS_BUTTON_PRESSED_TEXT_OFFSET_Y,
00194 
00197         EGDS_COUNT
00198     };
00199 
00200 
00202     const c8* const GUISkinSizeNames[EGDS_COUNT+1] =
00203     {
00204         "ScrollBarSize",
00205         "MenuHeight",
00206         "WindowButtonWidth",
00207         "CheckBoxWidth",
00208         "MessageBoxWidth",
00209         "MessageBoxHeight",
00210         "ButtonWidth",
00211         "ButtonHeight",
00212         "TextDistanceX",
00213         "TextDistanceY",
00214         "TitleBarTextX",
00215         "TitleBarTextY",
00216         "MessageBoxGapSpace",
00217         "MessageBoxMinTextWidth",
00218         "MessageBoxMaxTextWidth",
00219         "MessageBoxMinTextHeight",
00220         "MessageBoxMaxTextHeight",
00221         "ButtonPressedImageOffsetX",
00222         "ButtonPressedImageOffsetY",
00223         "ButtonPressedTextOffsetX",
00224         "ButtonPressedTextOffsetY",
00225         0
00226     };
00227 
00228 
00229     enum EGUI_DEFAULT_TEXT
00230     {
00232         EGDT_MSG_BOX_OK = 0,
00234         EGDT_MSG_BOX_CANCEL,
00236         EGDT_MSG_BOX_YES,
00238         EGDT_MSG_BOX_NO,
00240         EGDT_WINDOW_CLOSE,
00242         EGDT_WINDOW_MAXIMIZE,
00244         EGDT_WINDOW_MINIMIZE,
00246         EGDT_WINDOW_RESTORE,
00247 
00249         EGDT_COUNT
00250     };
00251 
00253     const c8* const GUISkinTextNames[EGDT_COUNT+1] =
00254     {
00255         "MessageBoxOkay",
00256         "MessageBoxCancel",
00257         "MessageBoxYes",
00258         "MessageBoxNo",
00259         "WindowButtonClose",
00260         "WindowButtonMaximize",
00261         "WindowButtonMinimize",
00262         "WindowButtonRestore",
00263         0
00264     };
00265 
00267     enum EGUI_DEFAULT_ICON
00268     {
00270         EGDI_WINDOW_MAXIMIZE = 0,
00272         EGDI_WINDOW_RESTORE,
00274         EGDI_WINDOW_CLOSE,
00276         EGDI_WINDOW_MINIMIZE,
00278         EGDI_WINDOW_RESIZE,
00280         EGDI_CURSOR_UP,
00282         EGDI_CURSOR_DOWN,
00284         EGDI_CURSOR_LEFT,
00286         EGDI_CURSOR_RIGHT,
00288         EGDI_MENU_MORE,
00290         EGDI_CHECK_BOX_CHECKED,
00292         EGDI_DROP_DOWN,
00294         EGDI_SMALL_CURSOR_UP,
00296         EGDI_SMALL_CURSOR_DOWN,
00298         EGDI_RADIO_BUTTON_CHECKED,
00300         EGDI_MORE_LEFT,
00302         EGDI_MORE_RIGHT,
00304         EGDI_MORE_UP,
00306         EGDI_MORE_DOWN,
00308         EGDI_EXPAND,
00309 
00311         EGDI_COLLAPSE,
00313         EGDI_FILE,
00315         EGDI_DIRECTORY,
00316 
00318         EGDI_COUNT
00319     };
00320 
00321     const c8* const GUISkinIconNames[EGDI_COUNT+1] =
00322     {
00323         "windowMaximize",
00324         "windowRestore",
00325         "windowClose",
00326         "windowMinimize",
00327         "windowResize",
00328         "cursorUp",
00329         "cursorDown",
00330         "cursorLeft",
00331         "cursorRight",
00332         "menuMore",
00333         "checkBoxChecked",
00334         "dropDown",
00335         "smallCursorUp",
00336         "smallCursorDown",
00337         "radioButtonChecked",
00338         "moreLeft",
00339         "moreRight",
00340         "moreUp",
00341         "moreDown",
00342         "expand",
00343         "collapse",
00344         "file",
00345         "directory",
00346         0
00347     };
00348 
00349     // Customizable fonts
00350     enum EGUI_DEFAULT_FONT
00351     {
00353         EGDF_DEFAULT=0,
00355         EGDF_BUTTON,
00357         EGDF_WINDOW,
00359         EGDF_MENU,
00361         EGDF_TOOLTIP,
00364         EGDF_COUNT
00365     };
00366 
00367     const c8* const GUISkinFontNames[EGDF_COUNT+1] =
00368     {
00369         "defaultFont",
00370         "buttonFont",
00371         "windowFont",
00372         "menuFont",
00373         "tooltipFont",
00374         0
00375     };
00376 
00378     class IGUISkin : public virtual io::IAttributeExchangingObject
00379     {
00380     public:
00381 
00383         virtual video::SColor getColor(EGUI_DEFAULT_COLOR color) const = 0;
00384 
00386         virtual void setColor(EGUI_DEFAULT_COLOR which, video::SColor newColor) = 0;
00387 
00389         virtual s32 getSize(EGUI_DEFAULT_SIZE size) const = 0;
00390 
00392 
00394         virtual const wchar_t* getDefaultText(EGUI_DEFAULT_TEXT text) const = 0;
00395 
00397 
00399         virtual void setDefaultText(EGUI_DEFAULT_TEXT which, const wchar_t* newText) = 0;
00400 
00402         virtual void setSize(EGUI_DEFAULT_SIZE which, s32 size) = 0;
00403 
00405         virtual IGUIFont* getFont(EGUI_DEFAULT_FONT which=EGDF_DEFAULT) const = 0;
00406 
00408         virtual void setFont(IGUIFont* font, EGUI_DEFAULT_FONT which=EGDF_DEFAULT) = 0;
00409 
00411         virtual IGUISpriteBank* getSpriteBank() const = 0;
00412 
00414         virtual void setSpriteBank(IGUISpriteBank* bank) = 0;
00415 
00417 
00418         virtual u32 getIcon(EGUI_DEFAULT_ICON icon) const = 0;
00419 
00421 
00425         virtual void setIcon(EGUI_DEFAULT_ICON icon, u32 index) = 0;
00426 
00428 
00436         virtual void draw3DButtonPaneStandard(IGUIElement* element,
00437             const core::rect<s32>& rect,
00438             const core::rect<s32>* clip=0) = 0;
00439 
00441 
00449         virtual void draw3DButtonPanePressed(IGUIElement* element,
00450             const core::rect<s32>& rect,
00451             const core::rect<s32>* clip=0) = 0;
00452 
00454 
00465         virtual void draw3DSunkenPane(IGUIElement* element,
00466             video::SColor bgcolor, bool flat, bool fillBackGround,
00467             const core::rect<s32>& rect,
00468             const core::rect<s32>* clip=0) = 0;
00469 
00471 
00484         virtual core::rect<s32> draw3DWindowBackground(IGUIElement* element,
00485             bool drawTitleBar, video::SColor titleBarColor,
00486             const core::rect<s32>& rect,
00487             const core::rect<s32>* clip=0,
00488             core::rect<s32>* checkClientArea=0) = 0;
00489 
00491 
00499         virtual void draw3DMenuPane(IGUIElement* element,
00500             const core::rect<s32>& rect,
00501             const core::rect<s32>* clip=0) = 0;
00502 
00504 
00510         virtual void draw3DToolBar(IGUIElement* element,
00511             const core::rect<s32>& rect,
00512             const core::rect<s32>* clip=0) = 0;
00513 
00515 
00523         virtual void draw3DTabButton(IGUIElement* element, bool active,
00524             const core::rect<s32>& rect, const core::rect<s32>* clip=0, gui::EGUI_ALIGNMENT alignment=EGUIA_UPPERLEFT) = 0;
00525 
00527 
00536         virtual void draw3DTabBody(IGUIElement* element, bool border, bool background,
00537             const core::rect<s32>& rect, const core::rect<s32>* clip=0, s32 tabHeight=-1, gui::EGUI_ALIGNMENT alignment=EGUIA_UPPERLEFT ) = 0;
00538 
00540 
00549         virtual void drawIcon(IGUIElement* element, EGUI_DEFAULT_ICON icon,
00550             const core::position2di position, u32 starttime=0, u32 currenttime=0,
00551             bool loop=false, const core::rect<s32>* clip=0) = 0;
00552 
00554 
00562         virtual void draw2DRectangle(IGUIElement* element, const video::SColor &color,
00563             const core::rect<s32>& pos, const core::rect<s32>* clip = 0) = 0;
00564 
00566         virtual EGUI_SKIN_TYPE getType() const { return EGST_UNKNOWN; }
00567     };
00568 
00569 
00570 } // end namespace gui
00571 } // end namespace irr
00572 
00573 #endif
00574