From f55fdfb7c42b2e2e39b165fd17f7671e14516303 Mon Sep 17 00:00:00 2001 From: belugas Date: Sat, 10 Nov 2007 01:17:15 +0000 Subject: (svn r11399) -Feature(ette): transparency settings can now be saved and thus remembered. -Codechange: Wrap all transparency settings in accessors, hiding the implementation -Change: Clicking "transparent building" menu will toggle Houses And Trees only. The other options can be used in the transparency gui. Initial patch by Smatz (FS#1349), with some rework by BigBB and your humble servant. --- src/transparency.h | 69 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 src/transparency.h (limited to 'src/transparency.h') diff --git a/src/transparency.h b/src/transparency.h new file mode 100644 index 000000000..3dae9cecc --- /dev/null +++ b/src/transparency.h @@ -0,0 +1,69 @@ +/* $Id$ */ + +/** @file transparency.h */ + +#ifndef TRANSPARENCY_H +#define TRANSPARENCY_H + +/** + * Transparency option bits: which position in _transparency_opt stands for which transparency. + * If you change the order, change the order of the ShowTransparencyToolbar() stuff in transparency_gui.cpp too. + * If you add or remove an option don't forget to change the transparency 'hot keys' in main_gui.cpp. + * If you add an option and have more then 8, change the typedef TransparencyOptionBits and + * the save stuff (e.g. SLE_UINT8 to SLE_UINT16) in settings.cpp . + */ +enum TransparencyOption { + TO_SIGNS = 0, ///< signs + TO_TREES, ///< trees + TO_HOUSES, ///< town buildings + TO_INDUSTRIES, ///< industries + TO_BUILDINGS, ///< player buildings - depots, stations, HQ, ... + TO_BRIDGES, ///< bridges + TO_STRUCTURES, ///< unmovable structures + TO_LOADING, ///< loading indicators + TO_END, +}; + +typedef byte TransparencyOptionBits; ///< transparency option bits +extern TransparencyOptionBits _transparency_opt; + +/** + * Check if the transparency option bit is set + * and if we aren't in the game menu (there's never transparency) + * + * @param to the structure which transparency option is ask for + */ +static inline bool IsTransparencySet(TransparencyOption to) +{ + return (HASBIT(_transparency_opt, to) && _game_mode != GM_MENU); +} + +/** + * Toggle the transparency option bit + * + * @param to the structure which transparency option is toggle + */ +static inline void ToggleTransparency(TransparencyOption to) +{ + TOGGLEBIT(_transparency_opt, to); +} + +/** Toggle all transparency options (except signs) or restore the stored transparencies */ +static inline void ResetRestoreAllTransparency() +{ + /* backup of the original transparencies or if all transparencies false toggle them to true */ + static TransparencyOptionBits trans_opt = ~0; + + if (_transparency_opt == 0) { + /* no structure is transparent, so restore the old transparency if present otherwise set all true */ + _transparency_opt = trans_opt; + } else { + /* any structure is transparent, so store current transparency settings and reset it */ + trans_opt = _transparency_opt; + _transparency_opt = 0; + } + + MarkWholeScreenDirty(); +} + +#endif /* TRANSPARENCY_H */ -- cgit v1.2.3-54-g00ecf