mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-04 16:26:53 +00:00
Moved definition of ThemeClassic and ThemeModern to their own files.
svn-id: r25432
This commit is contained in:
parent
2232047695
commit
956affd3d2
@ -19,7 +19,7 @@
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#include "gui/theme.h"
|
||||
#include "gui/ThemeClassic.h"
|
||||
#include "gui/eval.h"
|
||||
|
||||
namespace GUI {
|
||||
|
124
gui/ThemeClassic.h
Normal file
124
gui/ThemeClassic.h
Normal file
@ -0,0 +1,124 @@
|
||||
/* ScummVM - Scumm Interpreter
|
||||
* Copyright (C) 2006 The ScummVM project
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* $URL$
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#ifndef GUI_THEMECLASSIC_H
|
||||
#define GUI_THEMECLASSIC_H
|
||||
|
||||
#include "gui/theme.h"
|
||||
|
||||
namespace GUI {
|
||||
|
||||
// enable this to disable transparency support for the classic theme
|
||||
//#define CT_NO_TRANSPARENCY
|
||||
|
||||
class ThemeClassic : public Theme {
|
||||
public:
|
||||
ThemeClassic(OSystem *system, const Common::String &config = "classic", const Common::ConfigFile *cfg = 0);
|
||||
virtual ~ThemeClassic();
|
||||
|
||||
bool init();
|
||||
void deinit();
|
||||
|
||||
void refresh();
|
||||
|
||||
void enable();
|
||||
void disable();
|
||||
|
||||
void openDialog(bool topDialog);
|
||||
void closeDialog();
|
||||
|
||||
void clearAll();
|
||||
void drawAll();
|
||||
|
||||
void resetDrawArea();
|
||||
|
||||
const Graphics::Font *getFont(FontStyle font) const { return _font; }
|
||||
int getFontHeight(FontStyle font = kFontStyleBold) const { if (_initOk) return _font->getFontHeight(); return 0; }
|
||||
int getStringWidth(const Common::String &str, FontStyle font) const { if (_initOk) return _font->getStringWidth(str); return 0; }
|
||||
int getCharWidth(byte c, FontStyle font) const { if (_initOk) return _font->getCharWidth(c); return 0; }
|
||||
|
||||
void drawDialogBackground(const Common::Rect &r, uint16 hints, State state);
|
||||
void drawText(const Common::Rect &r, const Common::String &str, State state, TextAlign align, bool inverted, int deltax, bool useEllipsis, FontStyle font);
|
||||
void drawChar(const Common::Rect &r, byte ch, const Graphics::Font *font, State state);
|
||||
|
||||
void drawWidgetBackground(const Common::Rect &r, uint16 hints, WidgetBackground background, State state);
|
||||
void drawButton(const Common::Rect &r, const Common::String &str, State state, uint16 hints);
|
||||
void drawSurface(const Common::Rect &r, const Graphics::Surface &surface, State state, int alpha, bool themeTrans);
|
||||
void drawSlider(const Common::Rect &r, int width, State state);
|
||||
void drawCheckbox(const Common::Rect &r, const Common::String &str, bool checked, State state);
|
||||
void drawTab(const Common::Rect &r, int tabHeight, int tabWidth, const Common::Array<Common::String> &tabs, int active, uint16 hints, int titleVPad, State state);
|
||||
void drawScrollbar(const Common::Rect &r, int sliderY, int sliderHeight, ScrollbarState, State state);
|
||||
void drawPopUpWidget(const Common::Rect &r, const Common::String &sel, int deltax, State state, TextAlign align);
|
||||
void drawCaret(const Common::Rect &r, bool erase, State state);
|
||||
void drawLineSeparator(const Common::Rect &r, State state);
|
||||
void restoreBackground(Common::Rect r, bool special = false);
|
||||
bool addDirtyRect(Common::Rect r, bool save = false, bool special = false);
|
||||
|
||||
int getTabSpacing() const;
|
||||
int getTabPadding() const;
|
||||
|
||||
private:
|
||||
void box(int x, int y, int width, int height, OverlayColor colorA, OverlayColor colorB, bool skipLastRow = false);
|
||||
void box(int x, int y, int width, int height);
|
||||
|
||||
OverlayColor getColor(State state);
|
||||
|
||||
OSystem *_system;
|
||||
Graphics::Surface _screen;
|
||||
|
||||
#ifndef CT_NO_TRANSPARENCY
|
||||
struct DialogState {
|
||||
Graphics::Surface screen;
|
||||
} *_dialog;
|
||||
|
||||
void blendScreenToDialog();
|
||||
#endif
|
||||
bool _enableBlending;
|
||||
|
||||
bool _forceRedraw;
|
||||
bool _initOk;
|
||||
bool _enabled;
|
||||
|
||||
Common::String _fontName;
|
||||
const Graphics::Font *_font;
|
||||
OverlayColor _color, _shadowcolor;
|
||||
OverlayColor _bgcolor;
|
||||
OverlayColor _textcolor;
|
||||
OverlayColor _textcolorhi;
|
||||
|
||||
enum {
|
||||
kColor = 0,
|
||||
kShadowColor = 1,
|
||||
kBGColor = 2,
|
||||
kTextColor = 3,
|
||||
kTextColorHi = 4,
|
||||
kMaxColors = 5
|
||||
};
|
||||
uint8 _colors[kMaxColors][3];
|
||||
|
||||
void setupConfig();
|
||||
bool loadConfig();
|
||||
};
|
||||
|
||||
} // end of namespace GUI
|
||||
|
||||
#endif
|
||||
|
@ -21,7 +21,7 @@
|
||||
|
||||
#ifndef DISABLE_FANCY_THEMES
|
||||
|
||||
#include "gui/theme.h"
|
||||
#include "gui/ThemeModern.h"
|
||||
#include "gui/eval.h"
|
||||
|
||||
#include "graphics/imageman.h"
|
||||
|
337
gui/ThemeModern.h
Normal file
337
gui/ThemeModern.h
Normal file
@ -0,0 +1,337 @@
|
||||
/* ScummVM - Scumm Interpreter
|
||||
* Copyright (C) 2006 The ScummVM project
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* $URL$
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#ifndef GUI_THEMEMODERN_H
|
||||
#define GUI_THEMEMODERN_H
|
||||
|
||||
#ifndef DISABLE_FANCY_THEMES
|
||||
|
||||
#include "gui/theme.h"
|
||||
|
||||
namespace GUI {
|
||||
|
||||
class ThemeModern : public Theme {
|
||||
public:
|
||||
ThemeModern(OSystem *system, const Common::String &stylefile, const Common::ConfigFile *cfg = 0);
|
||||
virtual ~ThemeModern();
|
||||
|
||||
bool init();
|
||||
void deinit();
|
||||
|
||||
void refresh();
|
||||
|
||||
bool ownCursor() { return _useCursor; }
|
||||
|
||||
void enable();
|
||||
void disable();
|
||||
|
||||
void openDialog(bool topDialog);
|
||||
void closeDialog();
|
||||
|
||||
void clearAll();
|
||||
void drawAll();
|
||||
|
||||
void setDrawArea(const Common::Rect &r);
|
||||
void resetDrawArea();
|
||||
|
||||
const Graphics::Font *getFont(FontStyle font = kFontStyleBold) const { return _fonts[font]; }
|
||||
int getFontHeight(FontStyle font = kFontStyleBold) const { if (_fonts[font]) return _fonts[font]->getFontHeight(); return 0; }
|
||||
int getStringWidth(const Common::String &str, FontStyle font = kFontStyleBold) const { if (_fonts[font]) return _fonts[font]->getStringWidth(str); return 0; }
|
||||
int getCharWidth(byte c, FontStyle font = kFontStyleBold) const { if (_fonts[font]) return _fonts[font]->getCharWidth(c); return 0; }
|
||||
|
||||
void drawDialogBackground(const Common::Rect &r, uint16 hints, State state);
|
||||
void drawText(const Common::Rect &r, const Common::String &str, State state, TextAlign align, bool inverted, int deltax, bool useEllipsis, FontStyle font);
|
||||
void drawChar(const Common::Rect &r, byte ch, const Graphics::Font *font, State state);
|
||||
|
||||
void drawWidgetBackground(const Common::Rect &r, uint16 hints, WidgetBackground background, State state);
|
||||
void drawButton(const Common::Rect &r, const Common::String &str, State state, uint16 hints);
|
||||
void drawSurface(const Common::Rect &r, const Graphics::Surface &surface, State state, int alpha, bool themeTrans);
|
||||
void drawSlider(const Common::Rect &r, int width, State state);
|
||||
void drawCheckbox(const Common::Rect &r, const Common::String &str, bool checked, State state);
|
||||
void drawTab(const Common::Rect &r, int tabHeight, int tabWidth, const Common::Array<Common::String> &tabs, int active, uint16 hints, int titleVPad, State state);
|
||||
void drawScrollbar(const Common::Rect &r, int sliderY, int sliderHeight, ScrollbarState, State state);
|
||||
void drawPopUpWidget(const Common::Rect &r, const Common::String &sel, int deltax, State state, TextAlign align);
|
||||
void drawCaret(const Common::Rect &r, bool erase, State state);
|
||||
void drawLineSeparator(const Common::Rect &r, State state);
|
||||
|
||||
void restoreBackground(Common::Rect r, bool special = false);
|
||||
bool addDirtyRect(Common::Rect r, bool backup = false, bool special = false);
|
||||
|
||||
int getTabSpacing() const;
|
||||
int getTabPadding() const;
|
||||
|
||||
bool supportsImages() const { return true; }
|
||||
const Graphics::Surface *getImageSurface(const kThemeImages n) const { return n == kImageLogo ? _images[kThemeLogo] : 0; }
|
||||
private:
|
||||
void colorFade(const Common::Rect &r, OverlayColor start, OverlayColor end, uint factor = 1);
|
||||
void drawRect(const Common::Rect &r, const Graphics::Surface *corner, const Graphics::Surface *top,
|
||||
const Graphics::Surface *left, const Graphics::Surface *fill, int alpha, bool skipLastRow = false);
|
||||
void drawRectMasked(const Common::Rect &r, const Graphics::Surface *corner, const Graphics::Surface *top,
|
||||
const Graphics::Surface *left, const Graphics::Surface *fill, int alpha,
|
||||
OverlayColor start, OverlayColor end, uint factor = 1, bool skipLastRow = false, bool skipTopRow = false);
|
||||
void drawSurface(const Common::Rect &r, const Graphics::Surface *surf, bool upDown, bool leftRight, int alpha);
|
||||
void drawSurfaceMasked(const Common::Rect &r, const Graphics::Surface *surf, bool upDown, bool leftRight, int alpha,
|
||||
OverlayColor start, OverlayColor end, uint factor = 1);
|
||||
|
||||
enum ShadowStyles {
|
||||
kShadowFull = 0,
|
||||
kShadowSmall = 1,
|
||||
kShadowButton = 2,
|
||||
kShadowEmboss = 3,
|
||||
kShadowPopUp = 4
|
||||
};
|
||||
|
||||
Common::Rect shadowRect(const Common::Rect &r, uint32 shadowStyle);
|
||||
void drawShadow(const Common::Rect &r, const Graphics::Surface *corner, const Graphics::Surface *top,
|
||||
const Graphics::Surface *left, const Graphics::Surface *fill, uint32 shadowStyle, bool skipLastRow = false,
|
||||
bool skipTopRow = false);
|
||||
void drawShadowRect(const Common::Rect &r, const Common::Rect &area, const Graphics::Surface *corner,
|
||||
const Graphics::Surface *top, const Graphics::Surface *left, const Graphics::Surface *fill,
|
||||
int alpha, bool skipLastRow = false, bool skipTopRow = false);
|
||||
|
||||
int _shadowLeftWidth, _shadowRightWidth;
|
||||
int _shadowTopHeight, _shadowBottomHeight;
|
||||
|
||||
OSystem *_system;
|
||||
Graphics::Surface _screen;
|
||||
Common::Rect _shadowDrawArea;
|
||||
|
||||
bool _initOk;
|
||||
bool _forceRedraw;
|
||||
bool _enabled;
|
||||
|
||||
int _lastUsedBitMask;
|
||||
void resetupGuiRenderer();
|
||||
void setupColors();
|
||||
|
||||
OverlayColor getColor(State state);
|
||||
|
||||
struct DialogState {
|
||||
Graphics::Surface screen;
|
||||
} *_dialog;
|
||||
|
||||
void setupFonts();
|
||||
void deleteFonts();
|
||||
|
||||
void setupFont(const Common::String &key, const Common::String &name, FontStyle style);
|
||||
|
||||
const Graphics::Font *_fonts[kFontStyleMax];
|
||||
|
||||
private:
|
||||
void processExtraValues();
|
||||
|
||||
enum ImageHandles {
|
||||
kDialogBkgdCorner = 0,
|
||||
kDialogBkgdTop = 1,
|
||||
kDialogBkgdLeft = 2,
|
||||
kDialogBkgd = 3,
|
||||
|
||||
kWidgetBkgdCorner = 4,
|
||||
kWidgetBkgdTop = 5,
|
||||
kWidgetBkgdLeft = 6,
|
||||
kWidgetBkgd = 7,
|
||||
|
||||
kCheckboxEmpty = 8,
|
||||
kCheckboxChecked = 9,
|
||||
|
||||
kWidgetArrow = 10,
|
||||
|
||||
kTabBkgdCorner = 11,
|
||||
kTabBkgdTop = 12,
|
||||
kTabBkgdLeft = 13,
|
||||
kTabBkgd = 14,
|
||||
|
||||
kSliderBkgdCorner = 15,
|
||||
kSliderBkgdTop = 16,
|
||||
kSliderBkgdLeft = 17,
|
||||
kSliderBkgd = 18,
|
||||
|
||||
kSliderCorner = 19,
|
||||
kSliderTop = 20,
|
||||
kSliderLeft = 21,
|
||||
kSlider = 22,
|
||||
|
||||
kScrollbarBkgdCorner = 23,
|
||||
kScrollbarBkgdTop = 24,
|
||||
kScrollbarBkgdLeft = 25,
|
||||
kScrollbarBkgd = 26,
|
||||
|
||||
kScrollbarCorner = 27,
|
||||
kScrollbarTop = 28,
|
||||
kScrollbarLeft = 29,
|
||||
kScrollbar = 30,
|
||||
|
||||
kButtonBkgdCorner = 31,
|
||||
kButtonBkgdTop = 32,
|
||||
kButtonBkgdLeft = 33,
|
||||
kButtonBkgd = 34,
|
||||
|
||||
kWidgetSmallBkgdCorner = 35,
|
||||
kWidgetSmallBkgdTop = 36,
|
||||
kWidgetSmallBkgdLeft = 37,
|
||||
kWidgetSmallBkgd = 38,
|
||||
|
||||
kThemeLogo = 39,
|
||||
|
||||
kPopUpWidgetBkgdCorner = 40,
|
||||
kPopUpWidgetBkgdTop = 41,
|
||||
kPopUpWidgetBkgdLeft = 42,
|
||||
kPopUpWidgetBkgd = 43,
|
||||
|
||||
kEditTextBkgdCorner = 44,
|
||||
kEditTextBkgdTop = 45,
|
||||
kEditTextBkgdLeft = 46,
|
||||
kEditTextBkgd = 47,
|
||||
|
||||
kGUICursor = 48,
|
||||
|
||||
kImageHandlesMax
|
||||
};
|
||||
|
||||
private:
|
||||
int _dimPercentValue;
|
||||
typedef OverlayColor (ThemeModern::*InactiveDialogCallback)(OverlayColor col);
|
||||
InactiveDialogCallback _dialogShadingCallback;
|
||||
|
||||
OverlayColor calcLuminance(OverlayColor col);
|
||||
OverlayColor calcDimColor(OverlayColor col);
|
||||
|
||||
bool _useCursor;
|
||||
void setUpCursor();
|
||||
void createCursor();
|
||||
int _cursorHotspotX, _cursorHotspotY;
|
||||
int _cursorTargetScale;
|
||||
#define MAX_CURS_COLORS 255
|
||||
byte *_cursor;
|
||||
bool _needPaletteUpdates;
|
||||
uint _cursorWidth, _cursorHeight;
|
||||
byte _cursorPal[4*MAX_CURS_COLORS];
|
||||
|
||||
private:
|
||||
Common::String _imageHandles[kImageHandlesMax];
|
||||
const Graphics::Surface **_images;
|
||||
|
||||
enum ColorHandles {
|
||||
kMainDialogStart = 0,
|
||||
kMainDialogEnd = 1,
|
||||
|
||||
kDialogStart = 2,
|
||||
kDialogEnd = 3,
|
||||
|
||||
kColorStateDisabled = 4,
|
||||
kColorStateHighlight = 5,
|
||||
kColorStateEnabled = 6,
|
||||
kColorTransparency = 7,
|
||||
|
||||
kTextInvertedBackground = 8,
|
||||
kTextInvertedColor = 9,
|
||||
|
||||
kWidgetBackgroundStart = 10,
|
||||
kWidgetBackgroundEnd = 11,
|
||||
kWidgetBackgroundSmallStart = 12,
|
||||
kWidgetBackgroundSmallEnd = 13,
|
||||
|
||||
kButtonBackgroundStart = 14,
|
||||
kButtonBackgroundEnd = 15,
|
||||
kButtonTextEnabled = 16,
|
||||
kButtonTextDisabled = 17,
|
||||
kButtonTextHighlight = 18,
|
||||
|
||||
kSliderBackgroundStart = 19,
|
||||
kSliderBackgroundEnd = 20,
|
||||
kSliderStart = 21,
|
||||
kSliderEnd = 22,
|
||||
|
||||
kTabBackgroundStart = 23,
|
||||
kTabBackgroundEnd = 24,
|
||||
|
||||
kScrollbarBackgroundStart = 25,
|
||||
kScrollbarBackgroundEnd = 26,
|
||||
kScrollbarButtonStart = 27,
|
||||
kScrollbarButtonEnd = 28,
|
||||
kScrollbarSliderStart = 29,
|
||||
kScrollbarSliderEnd = 30,
|
||||
|
||||
kCaretColor = 31,
|
||||
|
||||
kSliderHighStart = 32,
|
||||
kSliderHighEnd = 33,
|
||||
|
||||
kButtonBackgroundHighlightStart = 34,
|
||||
kButtonBackgroundHighlightEnd = 35,
|
||||
|
||||
kScrollbarButtonHighlightStart = 36,
|
||||
kScrollbarButtonHighlightEnd = 37,
|
||||
kScrollbarSliderHighlightStart = 38,
|
||||
kScrollbarSliderHighlightEnd = 39,
|
||||
|
||||
kPopUpWidgetStart = 40,
|
||||
kPopUpWidgetEnd = 41,
|
||||
kPopUpWidgetHighlightStart = 42,
|
||||
kPopUpWidgetHighlightEnd = 43,
|
||||
|
||||
kEditTextBackgroundStart = 44,
|
||||
kEditTextBackgroundEnd = 45,
|
||||
|
||||
kTabActiveStart = 46,
|
||||
kTabActiveEnd = 47,
|
||||
kTabInactiveStart = 48,
|
||||
kTabInactiveEnd = 49,
|
||||
|
||||
kColorHandlesMax
|
||||
};
|
||||
|
||||
OverlayColor _colors[kColorHandlesMax];
|
||||
|
||||
enum GradientFactors {
|
||||
kMainDialogFactor = 0,
|
||||
kDialogFactor = 1,
|
||||
kDialogSpecialFactor = 2,
|
||||
|
||||
kWidgetSmallFactor = 3,
|
||||
kWidgetFactor = 4,
|
||||
|
||||
kButtonFactor = 5,
|
||||
|
||||
kSliderFactor = 6,
|
||||
kSliderBackground = 7,
|
||||
|
||||
kTabFactor = 7,
|
||||
|
||||
kScrollbarFactor = 8,
|
||||
kScrollbarBkgdFactor = 9,
|
||||
|
||||
kPopUpWidgetFactor = 10,
|
||||
|
||||
kEditTextFactor = 11,
|
||||
|
||||
kMaxGradientFactors
|
||||
};
|
||||
|
||||
uint _gradientFactors[kMaxGradientFactors];
|
||||
};
|
||||
|
||||
} // end of namespace GUI
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
@ -27,6 +27,8 @@
|
||||
#include "gui/newgui.h"
|
||||
#include "gui/dialog.h"
|
||||
#include "gui/eval.h"
|
||||
#include "gui/ThemeModern.h"
|
||||
#include "gui/ThemeClassic.h"
|
||||
|
||||
#include "common/config-manager.h"
|
||||
|
||||
|
@ -28,6 +28,7 @@
|
||||
#include "common/str.h"
|
||||
#include "graphics/fontman.h"
|
||||
#include "gui/theme.h"
|
||||
#include "gui/widget.h"
|
||||
|
||||
class OSystem;
|
||||
|
||||
|
398
gui/theme.h
398
gui/theme.h
@ -32,8 +32,6 @@
|
||||
#include "graphics/surface.h"
|
||||
#include "graphics/fontman.h"
|
||||
|
||||
#include "gui/widget.h"
|
||||
|
||||
#define THEME_VERSION 19
|
||||
|
||||
namespace GUI {
|
||||
@ -247,402 +245,6 @@ private:
|
||||
static const char *_defaultConfigINI;
|
||||
int _loadedThemeX, _loadedThemeY;
|
||||
};
|
||||
|
||||
// enable this to disable transparency support for the classic theme
|
||||
//#define CT_NO_TRANSPARENCY
|
||||
|
||||
class ThemeClassic : public Theme {
|
||||
public:
|
||||
ThemeClassic(OSystem *system, const Common::String &config = "classic", const Common::ConfigFile *cfg = 0);
|
||||
virtual ~ThemeClassic();
|
||||
|
||||
bool init();
|
||||
void deinit();
|
||||
|
||||
void refresh();
|
||||
|
||||
void enable();
|
||||
void disable();
|
||||
|
||||
void openDialog(bool topDialog);
|
||||
void closeDialog();
|
||||
|
||||
void clearAll();
|
||||
void drawAll();
|
||||
|
||||
void resetDrawArea();
|
||||
|
||||
const Graphics::Font *getFont(FontStyle font) const { return _font; }
|
||||
int getFontHeight(FontStyle font = kFontStyleBold) const { if (_initOk) return _font->getFontHeight(); return 0; }
|
||||
int getStringWidth(const Common::String &str, FontStyle font) const { if (_initOk) return _font->getStringWidth(str); return 0; }
|
||||
int getCharWidth(byte c, FontStyle font) const { if (_initOk) return _font->getCharWidth(c); return 0; }
|
||||
|
||||
void drawDialogBackground(const Common::Rect &r, uint16 hints, State state);
|
||||
void drawText(const Common::Rect &r, const Common::String &str, State state, TextAlign align, bool inverted, int deltax, bool useEllipsis, FontStyle font);
|
||||
void drawChar(const Common::Rect &r, byte ch, const Graphics::Font *font, State state);
|
||||
|
||||
void drawWidgetBackground(const Common::Rect &r, uint16 hints, WidgetBackground background, State state);
|
||||
void drawButton(const Common::Rect &r, const Common::String &str, State state, uint16 hints);
|
||||
void drawSurface(const Common::Rect &r, const Graphics::Surface &surface, State state, int alpha, bool themeTrans);
|
||||
void drawSlider(const Common::Rect &r, int width, State state);
|
||||
void drawCheckbox(const Common::Rect &r, const Common::String &str, bool checked, State state);
|
||||
void drawTab(const Common::Rect &r, int tabHeight, int tabWidth, const Common::Array<Common::String> &tabs, int active, uint16 hints, int titleVPad, State state);
|
||||
void drawScrollbar(const Common::Rect &r, int sliderY, int sliderHeight, ScrollbarState, State state);
|
||||
void drawPopUpWidget(const Common::Rect &r, const Common::String &sel, int deltax, State state, TextAlign align);
|
||||
void drawCaret(const Common::Rect &r, bool erase, State state);
|
||||
void drawLineSeparator(const Common::Rect &r, State state);
|
||||
void restoreBackground(Common::Rect r, bool special = false);
|
||||
bool addDirtyRect(Common::Rect r, bool save = false, bool special = false);
|
||||
|
||||
int getTabSpacing() const;
|
||||
int getTabPadding() const;
|
||||
|
||||
private:
|
||||
void box(int x, int y, int width, int height, OverlayColor colorA, OverlayColor colorB, bool skipLastRow = false);
|
||||
void box(int x, int y, int width, int height);
|
||||
|
||||
OverlayColor getColor(State state);
|
||||
|
||||
OSystem *_system;
|
||||
Graphics::Surface _screen;
|
||||
|
||||
#ifndef CT_NO_TRANSPARENCY
|
||||
struct DialogState {
|
||||
Graphics::Surface screen;
|
||||
} *_dialog;
|
||||
|
||||
void blendScreenToDialog();
|
||||
#endif
|
||||
bool _enableBlending;
|
||||
|
||||
bool _forceRedraw;
|
||||
bool _initOk;
|
||||
bool _enabled;
|
||||
|
||||
Common::String _fontName;
|
||||
const Graphics::Font *_font;
|
||||
OverlayColor _color, _shadowcolor;
|
||||
OverlayColor _bgcolor;
|
||||
OverlayColor _textcolor;
|
||||
OverlayColor _textcolorhi;
|
||||
|
||||
enum {
|
||||
kColor = 0,
|
||||
kShadowColor = 1,
|
||||
kBGColor = 2,
|
||||
kTextColor = 3,
|
||||
kTextColorHi = 4,
|
||||
kMaxColors = 5
|
||||
};
|
||||
uint8 _colors[kMaxColors][3];
|
||||
|
||||
void setupConfig();
|
||||
bool loadConfig();
|
||||
};
|
||||
|
||||
#ifndef DISABLE_FANCY_THEMES
|
||||
|
||||
class ThemeModern : public Theme {
|
||||
public:
|
||||
ThemeModern(OSystem *system, const Common::String &stylefile, const Common::ConfigFile *cfg = 0);
|
||||
virtual ~ThemeModern();
|
||||
|
||||
bool init();
|
||||
void deinit();
|
||||
|
||||
void refresh();
|
||||
|
||||
bool ownCursor() { return _useCursor; }
|
||||
|
||||
void enable();
|
||||
void disable();
|
||||
|
||||
void openDialog(bool topDialog);
|
||||
void closeDialog();
|
||||
|
||||
void clearAll();
|
||||
void drawAll();
|
||||
|
||||
void setDrawArea(const Common::Rect &r);
|
||||
void resetDrawArea();
|
||||
|
||||
const Graphics::Font *getFont(FontStyle font = kFontStyleBold) const { return _fonts[font]; }
|
||||
int getFontHeight(FontStyle font = kFontStyleBold) const { if (_fonts[font]) return _fonts[font]->getFontHeight(); return 0; }
|
||||
int getStringWidth(const Common::String &str, FontStyle font = kFontStyleBold) const { if (_fonts[font]) return _fonts[font]->getStringWidth(str); return 0; }
|
||||
int getCharWidth(byte c, FontStyle font = kFontStyleBold) const { if (_fonts[font]) return _fonts[font]->getCharWidth(c); return 0; }
|
||||
|
||||
void drawDialogBackground(const Common::Rect &r, uint16 hints, State state);
|
||||
void drawText(const Common::Rect &r, const Common::String &str, State state, TextAlign align, bool inverted, int deltax, bool useEllipsis, FontStyle font);
|
||||
void drawChar(const Common::Rect &r, byte ch, const Graphics::Font *font, State state);
|
||||
|
||||
void drawWidgetBackground(const Common::Rect &r, uint16 hints, WidgetBackground background, State state);
|
||||
void drawButton(const Common::Rect &r, const Common::String &str, State state, uint16 hints);
|
||||
void drawSurface(const Common::Rect &r, const Graphics::Surface &surface, State state, int alpha, bool themeTrans);
|
||||
void drawSlider(const Common::Rect &r, int width, State state);
|
||||
void drawCheckbox(const Common::Rect &r, const Common::String &str, bool checked, State state);
|
||||
void drawTab(const Common::Rect &r, int tabHeight, int tabWidth, const Common::Array<Common::String> &tabs, int active, uint16 hints, int titleVPad, State state);
|
||||
void drawScrollbar(const Common::Rect &r, int sliderY, int sliderHeight, ScrollbarState, State state);
|
||||
void drawPopUpWidget(const Common::Rect &r, const Common::String &sel, int deltax, State state, TextAlign align);
|
||||
void drawCaret(const Common::Rect &r, bool erase, State state);
|
||||
void drawLineSeparator(const Common::Rect &r, State state);
|
||||
|
||||
void restoreBackground(Common::Rect r, bool special = false);
|
||||
bool addDirtyRect(Common::Rect r, bool backup = false, bool special = false);
|
||||
|
||||
int getTabSpacing() const;
|
||||
int getTabPadding() const;
|
||||
|
||||
bool supportsImages() const { return true; }
|
||||
const Graphics::Surface *getImageSurface(const kThemeImages n) const { return n == kImageLogo ? _images[kThemeLogo] : 0; }
|
||||
private:
|
||||
void colorFade(const Common::Rect &r, OverlayColor start, OverlayColor end, uint factor = 1);
|
||||
void drawRect(const Common::Rect &r, const Graphics::Surface *corner, const Graphics::Surface *top,
|
||||
const Graphics::Surface *left, const Graphics::Surface *fill, int alpha, bool skipLastRow = false);
|
||||
void drawRectMasked(const Common::Rect &r, const Graphics::Surface *corner, const Graphics::Surface *top,
|
||||
const Graphics::Surface *left, const Graphics::Surface *fill, int alpha,
|
||||
OverlayColor start, OverlayColor end, uint factor = 1, bool skipLastRow = false, bool skipTopRow = false);
|
||||
void drawSurface(const Common::Rect &r, const Graphics::Surface *surf, bool upDown, bool leftRight, int alpha);
|
||||
void drawSurfaceMasked(const Common::Rect &r, const Graphics::Surface *surf, bool upDown, bool leftRight, int alpha,
|
||||
OverlayColor start, OverlayColor end, uint factor = 1);
|
||||
|
||||
enum ShadowStyles {
|
||||
kShadowFull = 0,
|
||||
kShadowSmall = 1,
|
||||
kShadowButton = 2,
|
||||
kShadowEmboss = 3,
|
||||
kShadowPopUp = 4
|
||||
};
|
||||
|
||||
Common::Rect shadowRect(const Common::Rect &r, uint32 shadowStyle);
|
||||
void drawShadow(const Common::Rect &r, const Graphics::Surface *corner, const Graphics::Surface *top,
|
||||
const Graphics::Surface *left, const Graphics::Surface *fill, uint32 shadowStyle, bool skipLastRow = false,
|
||||
bool skipTopRow = false);
|
||||
void drawShadowRect(const Common::Rect &r, const Common::Rect &area, const Graphics::Surface *corner,
|
||||
const Graphics::Surface *top, const Graphics::Surface *left, const Graphics::Surface *fill,
|
||||
int alpha, bool skipLastRow = false, bool skipTopRow = false);
|
||||
|
||||
int _shadowLeftWidth, _shadowRightWidth;
|
||||
int _shadowTopHeight, _shadowBottomHeight;
|
||||
|
||||
OSystem *_system;
|
||||
Graphics::Surface _screen;
|
||||
Common::Rect _shadowDrawArea;
|
||||
|
||||
bool _initOk;
|
||||
bool _forceRedraw;
|
||||
bool _enabled;
|
||||
|
||||
int _lastUsedBitMask;
|
||||
void resetupGuiRenderer();
|
||||
void setupColors();
|
||||
|
||||
OverlayColor getColor(State state);
|
||||
|
||||
struct DialogState {
|
||||
Graphics::Surface screen;
|
||||
} *_dialog;
|
||||
|
||||
void setupFonts();
|
||||
void deleteFonts();
|
||||
|
||||
void setupFont(const Common::String &key, const Common::String &name, FontStyle style);
|
||||
|
||||
const Graphics::Font *_fonts[kFontStyleMax];
|
||||
|
||||
private:
|
||||
void processExtraValues();
|
||||
|
||||
enum ImageHandles {
|
||||
kDialogBkgdCorner = 0,
|
||||
kDialogBkgdTop = 1,
|
||||
kDialogBkgdLeft = 2,
|
||||
kDialogBkgd = 3,
|
||||
|
||||
kWidgetBkgdCorner = 4,
|
||||
kWidgetBkgdTop = 5,
|
||||
kWidgetBkgdLeft = 6,
|
||||
kWidgetBkgd = 7,
|
||||
|
||||
kCheckboxEmpty = 8,
|
||||
kCheckboxChecked = 9,
|
||||
|
||||
kWidgetArrow = 10,
|
||||
|
||||
kTabBkgdCorner = 11,
|
||||
kTabBkgdTop = 12,
|
||||
kTabBkgdLeft = 13,
|
||||
kTabBkgd = 14,
|
||||
|
||||
kSliderBkgdCorner = 15,
|
||||
kSliderBkgdTop = 16,
|
||||
kSliderBkgdLeft = 17,
|
||||
kSliderBkgd = 18,
|
||||
|
||||
kSliderCorner = 19,
|
||||
kSliderTop = 20,
|
||||
kSliderLeft = 21,
|
||||
kSlider = 22,
|
||||
|
||||
kScrollbarBkgdCorner = 23,
|
||||
kScrollbarBkgdTop = 24,
|
||||
kScrollbarBkgdLeft = 25,
|
||||
kScrollbarBkgd = 26,
|
||||
|
||||
kScrollbarCorner = 27,
|
||||
kScrollbarTop = 28,
|
||||
kScrollbarLeft = 29,
|
||||
kScrollbar = 30,
|
||||
|
||||
kButtonBkgdCorner = 31,
|
||||
kButtonBkgdTop = 32,
|
||||
kButtonBkgdLeft = 33,
|
||||
kButtonBkgd = 34,
|
||||
|
||||
kWidgetSmallBkgdCorner = 35,
|
||||
kWidgetSmallBkgdTop = 36,
|
||||
kWidgetSmallBkgdLeft = 37,
|
||||
kWidgetSmallBkgd = 38,
|
||||
|
||||
kThemeLogo = 39,
|
||||
|
||||
kPopUpWidgetBkgdCorner = 40,
|
||||
kPopUpWidgetBkgdTop = 41,
|
||||
kPopUpWidgetBkgdLeft = 42,
|
||||
kPopUpWidgetBkgd = 43,
|
||||
|
||||
kEditTextBkgdCorner = 44,
|
||||
kEditTextBkgdTop = 45,
|
||||
kEditTextBkgdLeft = 46,
|
||||
kEditTextBkgd = 47,
|
||||
|
||||
kGUICursor = 48,
|
||||
|
||||
kImageHandlesMax
|
||||
};
|
||||
|
||||
private:
|
||||
int _dimPercentValue;
|
||||
typedef OverlayColor (ThemeModern::*InactiveDialogCallback)(OverlayColor col);
|
||||
InactiveDialogCallback _dialogShadingCallback;
|
||||
|
||||
OverlayColor calcLuminance(OverlayColor col);
|
||||
OverlayColor calcDimColor(OverlayColor col);
|
||||
|
||||
bool _useCursor;
|
||||
void setUpCursor();
|
||||
void createCursor();
|
||||
int _cursorHotspotX, _cursorHotspotY;
|
||||
int _cursorTargetScale;
|
||||
#define MAX_CURS_COLORS 255
|
||||
byte *_cursor;
|
||||
bool _needPaletteUpdates;
|
||||
uint _cursorWidth, _cursorHeight;
|
||||
byte _cursorPal[4*MAX_CURS_COLORS];
|
||||
|
||||
private:
|
||||
Common::String _imageHandles[kImageHandlesMax];
|
||||
const Graphics::Surface **_images;
|
||||
|
||||
enum ColorHandles {
|
||||
kMainDialogStart = 0,
|
||||
kMainDialogEnd = 1,
|
||||
|
||||
kDialogStart = 2,
|
||||
kDialogEnd = 3,
|
||||
|
||||
kColorStateDisabled = 4,
|
||||
kColorStateHighlight = 5,
|
||||
kColorStateEnabled = 6,
|
||||
kColorTransparency = 7,
|
||||
|
||||
kTextInvertedBackground = 8,
|
||||
kTextInvertedColor = 9,
|
||||
|
||||
kWidgetBackgroundStart = 10,
|
||||
kWidgetBackgroundEnd = 11,
|
||||
kWidgetBackgroundSmallStart = 12,
|
||||
kWidgetBackgroundSmallEnd = 13,
|
||||
|
||||
kButtonBackgroundStart = 14,
|
||||
kButtonBackgroundEnd = 15,
|
||||
kButtonTextEnabled = 16,
|
||||
kButtonTextDisabled = 17,
|
||||
kButtonTextHighlight = 18,
|
||||
|
||||
kSliderBackgroundStart = 19,
|
||||
kSliderBackgroundEnd = 20,
|
||||
kSliderStart = 21,
|
||||
kSliderEnd = 22,
|
||||
|
||||
kTabBackgroundStart = 23,
|
||||
kTabBackgroundEnd = 24,
|
||||
|
||||
kScrollbarBackgroundStart = 25,
|
||||
kScrollbarBackgroundEnd = 26,
|
||||
kScrollbarButtonStart = 27,
|
||||
kScrollbarButtonEnd = 28,
|
||||
kScrollbarSliderStart = 29,
|
||||
kScrollbarSliderEnd = 30,
|
||||
|
||||
kCaretColor = 31,
|
||||
|
||||
kSliderHighStart = 32,
|
||||
kSliderHighEnd = 33,
|
||||
|
||||
kButtonBackgroundHighlightStart = 34,
|
||||
kButtonBackgroundHighlightEnd = 35,
|
||||
|
||||
kScrollbarButtonHighlightStart = 36,
|
||||
kScrollbarButtonHighlightEnd = 37,
|
||||
kScrollbarSliderHighlightStart = 38,
|
||||
kScrollbarSliderHighlightEnd = 39,
|
||||
|
||||
kPopUpWidgetStart = 40,
|
||||
kPopUpWidgetEnd = 41,
|
||||
kPopUpWidgetHighlightStart = 42,
|
||||
kPopUpWidgetHighlightEnd = 43,
|
||||
|
||||
kEditTextBackgroundStart = 44,
|
||||
kEditTextBackgroundEnd = 45,
|
||||
|
||||
kTabActiveStart = 46,
|
||||
kTabActiveEnd = 47,
|
||||
kTabInactiveStart = 48,
|
||||
kTabInactiveEnd = 49,
|
||||
|
||||
kColorHandlesMax
|
||||
};
|
||||
|
||||
OverlayColor _colors[kColorHandlesMax];
|
||||
|
||||
enum GradientFactors {
|
||||
kMainDialogFactor = 0,
|
||||
kDialogFactor = 1,
|
||||
kDialogSpecialFactor = 2,
|
||||
|
||||
kWidgetSmallFactor = 3,
|
||||
kWidgetFactor = 4,
|
||||
|
||||
kButtonFactor = 5,
|
||||
|
||||
kSliderFactor = 6,
|
||||
kSliderBackground = 7,
|
||||
|
||||
kTabFactor = 7,
|
||||
|
||||
kScrollbarFactor = 8,
|
||||
kScrollbarBkgdFactor = 9,
|
||||
|
||||
kPopUpWidgetFactor = 10,
|
||||
|
||||
kEditTextFactor = 11,
|
||||
|
||||
kMaxGradientFactors
|
||||
};
|
||||
|
||||
uint _gradientFactors[kMaxGradientFactors];
|
||||
};
|
||||
#endif // DISABLE_FANCY_THEMES
|
||||
} // end of namespace GUI
|
||||
|
||||
#endif // GUI_THEME_H
|
||||
|
Loading…
Reference in New Issue
Block a user