IrrlichtEngine
IGUISkin.h
Go to the documentation of this file.
00001 // Copyright (C) 2002-2011 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,
00186 
00189                 EGDS_COUNT
00190         };
00191 
00192 
00194         const c8* const GUISkinSizeNames[EGDS_COUNT+1] =
00195         {
00196                 "ScrollBarSize",
00197                 "MenuHeight",
00198                 "WindowButtonWidth",
00199                 "CheckBoxWidth",
00200                 "MessageBoxWidth",
00201                 "MessageBoxHeight",
00202                 "ButtonWidth",
00203                 "ButtonHeight",
00204                 "TextDistanceX",
00205                 "TextDistanceY",
00206                 "TitleBarTextX",
00207                 "TitleBarTextY",
00208                 "MessageBoxGapSpace",
00209                 "MessageBoxMinTextWidth",
00210                 "MessageBoxMaxTextWidth",
00211                 "MessageBoxMinTextHeight",
00212                 "MessageBoxMaxTextHeight",
00213                 0
00214         };
00215 
00216 
00217         enum EGUI_DEFAULT_TEXT
00218         {
00220                 EGDT_MSG_BOX_OK = 0,
00222                 EGDT_MSG_BOX_CANCEL,
00224                 EGDT_MSG_BOX_YES,
00226                 EGDT_MSG_BOX_NO,
00228                 EGDT_WINDOW_CLOSE,
00230                 EGDT_WINDOW_MAXIMIZE,
00232                 EGDT_WINDOW_MINIMIZE,
00234                 EGDT_WINDOW_RESTORE,
00235 
00237                 EGDT_COUNT
00238         };
00239 
00241         const c8* const GUISkinTextNames[EGDT_COUNT+1] =
00242         {
00243                 "MessageBoxOkay",
00244                 "MessageBoxCancel",
00245                 "MessageBoxYes",
00246                 "MessageBoxNo",
00247                 "WindowButtonClose",
00248                 "WindowButtonMaximize",
00249                 "WindowButtonMinimize",
00250                 "WindowButtonRestore",
00251                 0
00252         };
00253 
00255         enum EGUI_DEFAULT_ICON
00256         {
00258                 EGDI_WINDOW_MAXIMIZE = 0,
00260                 EGDI_WINDOW_RESTORE,
00262                 EGDI_WINDOW_CLOSE,
00264                 EGDI_WINDOW_MINIMIZE,
00266                 EGDI_WINDOW_RESIZE,
00268                 EGDI_CURSOR_UP,
00270                 EGDI_CURSOR_DOWN,
00272                 EGDI_CURSOR_LEFT,
00274                 EGDI_CURSOR_RIGHT,
00276                 EGDI_MENU_MORE,
00278                 EGDI_CHECK_BOX_CHECKED,
00280                 EGDI_DROP_DOWN,
00282                 EGDI_SMALL_CURSOR_UP,
00284                 EGDI_SMALL_CURSOR_DOWN,
00286                 EGDI_RADIO_BUTTON_CHECKED,
00288                 EGDI_MORE_LEFT,
00290                 EGDI_MORE_RIGHT,
00292                 EGDI_MORE_UP,
00294                 EGDI_MORE_DOWN,
00296                 EGDI_EXPAND,
00297 
00299                 EGDI_COLLAPSE,
00301                 EGDI_FILE,
00303                 EGDI_DIRECTORY,
00304 
00306                 EGDI_COUNT
00307         };
00308 
00309         const c8* const GUISkinIconNames[EGDI_COUNT+1] =
00310         {
00311                 "windowMaximize",
00312                 "windowRestore",
00313                 "windowClose",
00314                 "windowMinimize",
00315                 "windowResize",
00316                 "cursorUp",
00317                 "cursorDown",
00318                 "cursorLeft",
00319                 "cursorRight",
00320                 "menuMore",
00321                 "checkBoxChecked",
00322                 "dropDown",
00323                 "smallCursorUp",
00324                 "smallCursorDown",
00325                 "radioButtonChecked",
00326                 "moreLeft",
00327                 "moreRight",
00328                 "moreUp",
00329                 "moreDown",
00330                 "expand",
00331                 "collapse",
00332                 "file",
00333                 "directory",
00334                 0
00335         };
00336 
00337         // Customizable fonts
00338         enum EGUI_DEFAULT_FONT
00339         {
00341                 EGDF_DEFAULT=0,
00343                 EGDF_BUTTON,
00345                 EGDF_WINDOW,
00347                 EGDF_MENU,
00349                 EGDF_TOOLTIP,
00352                 EGDF_COUNT
00353         };
00354 
00355         const c8* const GUISkinFontNames[EGDF_COUNT+1] =
00356         {
00357                 "defaultFont",
00358                 "buttonFont",
00359                 "windowFont",
00360                 "menuFont",
00361                 "tooltipFont",
00362                 0
00363         };
00364 
00366         class IGUISkin : public virtual io::IAttributeExchangingObject
00367         {
00368         public:
00369 
00371                 virtual video::SColor getColor(EGUI_DEFAULT_COLOR color) const = 0;
00372 
00374                 virtual void setColor(EGUI_DEFAULT_COLOR which, video::SColor newColor) = 0;
00375 
00377                 virtual s32 getSize(EGUI_DEFAULT_SIZE size) const = 0;
00378 
00380 
00382                 virtual const wchar_t* getDefaultText(EGUI_DEFAULT_TEXT text) const = 0;
00383 
00385 
00387                 virtual void setDefaultText(EGUI_DEFAULT_TEXT which, const wchar_t* newText) = 0;
00388 
00390                 virtual void setSize(EGUI_DEFAULT_SIZE which, s32 size) = 0;
00391 
00393                 virtual IGUIFont* getFont(EGUI_DEFAULT_FONT which=EGDF_DEFAULT) const = 0;
00394 
00396                 virtual void setFont(IGUIFont* font, EGUI_DEFAULT_FONT which=EGDF_DEFAULT) = 0;
00397 
00399                 virtual IGUISpriteBank* getSpriteBank() const = 0;
00400 
00402                 virtual void setSpriteBank(IGUISpriteBank* bank) = 0;
00403 
00405 
00406                 virtual u32 getIcon(EGUI_DEFAULT_ICON icon) const = 0;
00407 
00409 
00413                 virtual void setIcon(EGUI_DEFAULT_ICON icon, u32 index) = 0;
00414 
00416 
00424                 virtual void draw3DButtonPaneStandard(IGUIElement* element,
00425                         const core::rect<s32>& rect,
00426                         const core::rect<s32>* clip=0) = 0;
00427 
00429 
00437                 virtual void draw3DButtonPanePressed(IGUIElement* element,
00438                         const core::rect<s32>& rect,
00439                         const core::rect<s32>* clip=0) = 0;
00440 
00442 
00453                 virtual void draw3DSunkenPane(IGUIElement* element,
00454                         video::SColor bgcolor, bool flat, bool fillBackGround,
00455                         const core::rect<s32>& rect,
00456                         const core::rect<s32>* clip=0) = 0;
00457 
00459 
00472                 virtual core::rect<s32> draw3DWindowBackground(IGUIElement* element,
00473                         bool drawTitleBar, video::SColor titleBarColor,
00474                         const core::rect<s32>& rect,
00475                         const core::rect<s32>* clip=0,
00476                         core::rect<s32>* checkClientArea=0) = 0;
00477 
00479 
00487                 virtual void draw3DMenuPane(IGUIElement* element,
00488                         const core::rect<s32>& rect,
00489                         const core::rect<s32>* clip=0) = 0;
00490 
00492 
00498                 virtual void draw3DToolBar(IGUIElement* element,
00499                         const core::rect<s32>& rect,
00500                         const core::rect<s32>* clip=0) = 0;
00501 
00503 
00511                 virtual void draw3DTabButton(IGUIElement* element, bool active,
00512                         const core::rect<s32>& rect, const core::rect<s32>* clip=0, gui::EGUI_ALIGNMENT alignment=EGUIA_UPPERLEFT) = 0;
00513 
00515 
00524                 virtual void draw3DTabBody(IGUIElement* element, bool border, bool background,
00525                         const core::rect<s32>& rect, const core::rect<s32>* clip=0, s32 tabHeight=-1, gui::EGUI_ALIGNMENT alignment=EGUIA_UPPERLEFT ) = 0;
00526 
00528 
00537                 virtual void drawIcon(IGUIElement* element, EGUI_DEFAULT_ICON icon,
00538                         const core::position2di position, u32 starttime=0, u32 currenttime=0,
00539                         bool loop=false, const core::rect<s32>* clip=0) = 0;
00540 
00542 
00550                 virtual void draw2DRectangle(IGUIElement* element, const video::SColor &color,
00551                         const core::rect<s32>& pos, const core::rect<s32>* clip = 0) = 0;
00552 
00554                 virtual EGUI_SKIN_TYPE getType() const { return EGST_UNKNOWN; }
00555         };
00556 
00557 
00558 } // end namespace gui
00559 } // end namespace irr
00560 
00561 #endif
00562