changeset 12897:323d905aa7b9 draft

(svn r17389) -Codechange: Add support for shaded viewports.
author alberth <alberth@openttd.org>
date Wed, 02 Sep 2009 20:28:41 +0000
parents 04374f6dcdc8
children 8b5b1dcdf299
files src/widget.cpp src/widget_type.h
diffstat 2 files changed, 28 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/src/widget.cpp
+++ b/src/widget.cpp
@@ -10,6 +10,7 @@
 /** @file widget.cpp Handling of the default/simple widgets. */
 
 #include "stdafx.h"
+#include "openttd.h"
 #include "company_func.h"
 #include "gfx_func.h"
 #include "window_gui.h"
@@ -17,6 +18,7 @@
 #include "zoom_func.h"
 #include "debug.h"
 #include "strings_func.h"
+#include "transparency.h"
 
 #include "table/sprites.h"
 #include "table/strings.h"
@@ -1866,7 +1868,20 @@
 
 void NWidgetViewport::Draw(const Window *w)
 {
-	w->DrawViewport();
+	if (this->disp_flags & ND_NO_TRANSPARENCY) {
+		TransparencyOptionBits to_backup = _transparency_opt;
+		_transparency_opt = 0; // Disable all transparency
+		w->DrawViewport();
+		_transparency_opt = to_backup;
+	} else {
+		w->DrawViewport();
+	}
+
+	/* Optionally shade the viewport. */
+	if (this->disp_flags & (ND_SHADE_GREY | ND_SHADE_DIMMED)) {
+		GfxFillRect(this->pos_x, this->pos_y, this->pos_x + this->current_x - 1, this->pos_y + this->current_y - 1,
+				(this->disp_flags & ND_SHADE_DIMMED) ? PALETTE_TO_TRANSPARENT : PALETTE_TO_STRUCT_GREY, FILLRECT_RECOLOUR);
+	}
 }
 
 Scrollbar *NWidgetViewport::FindScrollbar(Window *w, bool allow_next)
--- a/src/widget_type.h
+++ b/src/widget_type.h
@@ -281,11 +281,17 @@
 
 /** Nested widget flags that affect display and interaction withe 'real' widgets. */
 enum NWidgetDisplay {
-	NDB_LOWERED  = 0, ///< Widget is lowered (pressed down) bit.
-	NDB_DISABLED = 1, ///< Widget is disabled (greyed out) bit.
+	NDB_LOWERED         = 0, ///< Widget is lowered (pressed down) bit.
+	NDB_DISABLED        = 1, ///< Widget is disabled (greyed out) bit.
+	NDB_NO_TRANSPARENCY = 2, ///< Viewport is never transparent.
+	NDB_SHADE_GREY      = 3, ///< Shade viewport to grey-scale.
+	NDB_SHADE_DIMMED    = 4, ///< Display dimmed colours in the viewport.
 
-	ND_LOWERED  = 1 << NDB_LOWERED,  ///< Bit value of the lowered flag.
-	ND_DISABLED = 1 << NDB_DISABLED, ///< Bit value of the disabled flag.
+	ND_LOWERED  = 1 << NDB_LOWERED,                ///< Bit value of the lowered flag.
+	ND_DISABLED = 1 << NDB_DISABLED,               ///< Bit value of the disabled flag.
+	ND_NO_TRANSPARENCY = 1 << NDB_NO_TRANSPARENCY, ///< Bit value of the 'no transparency' flag.
+	ND_SHADE_GREY      = 1 << NDB_SHADE_GREY,      ///< Bit value of the 'shade to grey' flag.
+	ND_SHADE_DIMMED    = 1 << NDB_SHADE_DIMMED,    ///< Bit value of the 'dimmed colours' flag.
 };
 DECLARE_ENUM_AS_BIT_SET(NWidgetDisplay);
 
@@ -488,6 +494,8 @@
  * Nested widget to display a viewport in a window.
  * After initializing the nested widget tree, call #InitializeViewport(). After changing the window size,
  * call #UpdateViewportCoordinates() eg from Window::OnResize().
+ * If the #display_flags field contains the #ND_NO_TRANSPARENCY bit, the viewport will disable transparency.
+ * Shading to grey-scale is controlled with the #ND_SHADE_GREY bit (used for B&W news papers), the #ND_SHADE_DIMMED gives dimmed colours (for colour news papers).
  * @todo Class derives from #NWidgetCore, but does not use #colour, #widget_data, or #tool_tip.
  * @ingroup NestedWidgets */
 class NWidgetViewport : public NWidgetCore {