/* * \brief Browser window interface * \date 2005-10-24 * \author Norman Feske */ /* * Copyright (C) 2005-2017 Genode Labs GmbH * * This file is part of the Genode OS framework, which is distributed * under the terms of the GNU Affero General Public License version 3. */ #ifndef _BROWSER_WINDOW_H_ #define _BROWSER_WINDOW_H_ #include #include #include "elements.h" #include "widgets.h" #include "sky_texture.h" #include "refracted_icon.h" #include "scrollbar.h" #include "browser.h" #include "titlebar.h" namespace Scout { template class Browser_window; } template class Scout::Browser_window : public Scrollbar_listener, public Browser, public Window { enum { ICON_HOME = 0, ICON_BACKWARD = 1, ICON_FORWARD = 2, ICON_INDEX = 3, ICON_ABOUT = 4 }; private: /** * Constants */ enum { _NUM_ICONS = 5, /* number of icons */ _IW = 64, /* browser icon width */ _IH = 64, /* browser icon height */ _TH = 32, /* height of title bar */ _PANEL_W = 320, /* panel tile width */ _PANEL_H = _IH, /* panel tile height */ _SB_XPAD = 5, /* hor. pad of scrollbar */ _SB_YPAD = 10, /* vert. pad of scrollbar */ _SCRATCH = 7 /* scratching factor */ }; /** * General properties */ Config const &_config; int _attr = _config.browser_attr; /* attribute mask */ /** * Remember graphics backend used as texture allocator */ Graphics_backend &_gfx_backend; /** * Widgets */ Titlebar _titlebar { }; Sky_texture _texture { _config.background_detail }; PT _icon_fg [_NUM_ICONS][_IH][_IW]; unsigned char _icon_fg_alpha [_NUM_ICONS][_IH][_IW]; Refracted_icon _icon [_NUM_ICONS]; PT _icon_backbuf [_IH*2][_IW*2]; PT _panel_fg [_PANEL_H][_PANEL_W]; unsigned char _panel_fg_alpha [_PANEL_H][_PANEL_W]; short _panel_distmap [_PANEL_H*2][_PANEL_W*2]; Refracted_icon _panel { }; PT _panel_backbuf [_PANEL_H*2][_PANEL_W*2]; Horizontal_shadow _shadow { }; Scrollbar _scrollbar { }; Fade_icon _glow_icon[_NUM_ICONS]; Docview _docview { }; Fade_icon _sizer { }; protected: /** * Browser interface */ void _content(Element *content) override; Element *_content() override; public: /** * Browser window attributes */ enum { ATTR_SIZER = 0x1, /* browser window has resize handle */ ATTR_TITLEBAR = 0x2, /* browser window has titlebar */ ATTR_BORDER = 0x4, /* draw black outline around browser */ }; /** * Constructor */ Browser_window(Document *content, Graphics_backend &gfx_backend, Point position, Area size, Area max_size, Config const &config); /** * Return visible document offset */ inline int doc_offset() { return 10 + _IH + (_attr & ATTR_TITLEBAR ? _TH : 0); } /** * Define vertical scroll offset of document * * \param update_scrollbar if set to one, adjust scrollbar properties * to the new view position. */ void ypos_sb(int ypos, int update_scrollbar = 1); /** * Browser interface */ void format(Area) override; void ypos(int ypos) override { ypos_sb(ypos, 1); } Anchor *curr_anchor() override; Browser *browser() { return this; } /** * Element interface */ void draw(Canvas_base &canvas, Point abs_position) override { Parent_element::draw(canvas, abs_position); if (_attr & ATTR_BORDER) { Color color(0, 0, 0); canvas.draw_box(0, 0, _size.w(), 1, color); canvas.draw_box(0, _size.h() - 1, _size.w(), 1, color); canvas.draw_box(0, 1, 1, _size.h() - 2, color); canvas.draw_box(_size.w() - 1, 1, 1, _size.h() - 2, color); } }; /** * Scrollbar listener interface */ void handle_scroll(int view_pos) override; }; #endif /* _BROWSER_WINDOW_H_ */