00001
00002
00003
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
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 }
00571 }
00572
00573 #endif
00574