--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/Graphics/Display.hh Wed Jan 21 01:57:24 2009 +0200
@@ -0,0 +1,92 @@
+#ifndef GRAPHICS_DISPLAY_HH
+#define GRAPHICS_DISPLAY_HH
+
+#include "../Types.hh"
+#include "../Config.hh"
+#include "../Timer.hh"
+
+#include <ClanLib/display.h>
+
+namespace graphics
+{
+
+struct DisplayConfig {
+ /** Display resolution */
+ PixelDimensions resolution;
+
+ /** Fullscreen mode? */
+ bool fullscreen;
+};
+
+/**
+ * We wrap ClanLib's DisplayWindow for our own functionality. This is the core of the graphics code
+ */
+class Display : public CL_DisplayWindow {
+private:
+ /**
+ * Our engine reference
+ */
+ Engine &engine;
+
+ /**
+ * Our configuration
+ */
+ DisplayConfig config;
+
+ /**
+ * Our timer that drives redraws
+ */
+ Timer update_timer;
+
+ CL_SlotContainer slots;
+
+public:
+ /**
+ * Construct default display, empty window unless otherwise build
+ */
+ Display (Engine &engine, const DisplayConfig &config) :
+ engine(engine), config(config), update_timer(GRAPHICS_UPDATE_INTERVAL_MS)
+ {
+ // connect timer signal
+ slots.connect(update_timer.sig_tick(), this, &Display::on_update);
+ slots.connect(this->sig_resize(), this, &Display::on_window_resize);
+
+ }
+
+ /**
+ * Returns a vector of CL_DisplayModes that lists possible display modes to use for fullscreen mode.
+ */
+ static const std::vector<CL_DisplayMode> & getDisplayModes (void);
+
+ /**
+ * Returns the "best" CL_DisplayMode to use for fullscreen mode.
+ *
+ * Currently, this just means the largest resolution.
+ */
+ static const CL_DisplayMode getBestMode (void);
+
+ /**
+ * Get current resolution
+ *
+ * XXX: should be PixelDimensions...
+ */
+ PixelCoordinate getResolution (void) {
+ return PixelCoordinate(get_width(), get_height());
+ }
+
+private:
+ /**
+ * Draw next frame
+ */
+ void on_update (TimeMS dt);
+
+ /**
+ * Handles window resize. This just updates resolution
+ */
+ void on_window_resize (int new_x, int new_y);
+
+};
+
+}
+
+#endif