/* * \brief Platform abstraction * \date 2005-10-24 * \author Norman Feske * * This interface specifies the target-platform-specific functions. */ /* * Copyright (C) 2005-2013 Genode Labs GmbH * * This file is part of the Genode OS framework, which is distributed * under the terms of the GNU General Public License version 2. */ #ifndef _PLATFORM_H_ #define _PLATFORM_H_ #include "event.h" /* * We use two buffers, a foreground buffer that is displayed on screen and a * back buffer. While the foreground buffer must contain valid data all the * time, the back buffer can be used to prepare pixel data. For example, * drawing multiple pixel layers with alpha channel must be done in the back * buffer to avoid artifacts on the screen. */ class Screen_update { public: virtual ~Screen_update() { } /** * Request screen base address */ virtual void *scr_adr() = 0; /** * Request back buffer address */ virtual void *buf_adr() { return scr_adr(); } /** * Flip fore and back buffers */ virtual void flip_buf_scr() { } /** * Copy background buffer to foreground */ virtual void copy_buf_to_scr(int x, int y, int w, int h) { } /** * Flush pixels of specified screen area */ virtual void scr_update(int x, int y, int w, int h) = 0; }; class Platform : public Screen_update { private: int _max_vw, _max_vh; /* maximum view size */ public: enum pixel_format { UNDEFINED = 0, RGB565 = 1, }; /** * Constructor - initialize platform * * \param vx,vy initial view position * \param vw,vw initial view width and height * \param max_vw maximum view width * * When using the default value for 'max_vw', the window's * max width will correspond to the screen size. */ Platform(unsigned vx, unsigned vy, unsigned vw, unsigned vh, unsigned max_vw = 0, unsigned max_vh = 0); /** * Check initialization state of the platform * * \retval 1 platform was successfully initialized * \retval 0 platform initialization failed */ int initialized(); /** * Request screen width and height */ int scr_w(); int scr_h(); /** * Request pixel format */ pixel_format scr_pixel_format(); /** * Define geometry of viewport on screen * * The specified area is relative to the screen * of the platform. */ void view_geometry(int x, int y, int w, int h, int do_redraw = 0, int buf_x = 0, int buf_y = 0); /** * Bring Scouts view ontop */ void top_view(); /** * View geometry accessor functions */ int vx(); int vy(); int vw(); int vh(); int vbx(); int vby(); /** * Get timer ticks in miilliseconds */ unsigned long timer_ticks(); /** * Request if an event is pending * * \retval 1 event is pending * \retval 0 no event pending */ int event_pending(); /** * Request event * * \param e destination where to store event information. * * If there is no event pending, this function blocks * until there is an event to deliver. */ void get_event(Event *out_e); /** * Screen update interface */ void *scr_adr(); void *buf_adr(); void flip_buf_scr(); void copy_buf_to_scr(int x, int y, int w, int h); void scr_update(int x, int y, int w, int h); }; #endif /* _PLATFORM_H_ */