61 lines
1.6 KiB
C++
61 lines
1.6 KiB
C++
/*
|
|
* \brief Example window decorator that mimics the Motif look
|
|
* \author Norman Feske
|
|
* \date 2014-01-10
|
|
*/
|
|
|
|
/*
|
|
* Copyright (C) 2014 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.
|
|
*/
|
|
|
|
/* local includes */
|
|
#include "window.h"
|
|
|
|
Decorator::Window_base::Hover Decorator::Window::hover(Point abs_pos) const
|
|
{
|
|
Hover hover;
|
|
|
|
if (!_decor_geometry().contains(abs_pos))
|
|
return hover;
|
|
|
|
hover.window_id = id();
|
|
|
|
Rect const closer_geometry =
|
|
_theme.absolute(_theme.element_geometry(Theme::ELEMENT_TYPE_CLOSER),
|
|
outer_geometry());
|
|
if (closer_geometry.contains(abs_pos)) {
|
|
hover.closer = true;
|
|
return hover;
|
|
}
|
|
|
|
Rect const maximizer_geometry =
|
|
_theme.absolute(_theme.element_geometry(Theme::ELEMENT_TYPE_MAXIMIZER),
|
|
outer_geometry());
|
|
if (maximizer_geometry.contains(abs_pos)) {
|
|
hover.maximizer = true;
|
|
return hover;
|
|
}
|
|
|
|
Rect const title_geometry = _theme.absolute(_theme.title_geometry(),
|
|
outer_geometry());
|
|
if (title_geometry.contains(abs_pos)) {
|
|
hover.title = true;
|
|
return hover;
|
|
}
|
|
|
|
int const x = abs_pos.x();
|
|
int const y = abs_pos.y();
|
|
|
|
Area const theme_size = _theme.background_size();
|
|
|
|
hover.left_sizer = x < outer_geometry().x1() + (int)theme_size.w()/2;
|
|
hover.right_sizer = x > outer_geometry().x2() - (int)theme_size.w()/2;
|
|
hover.top_sizer = y < outer_geometry().y1() + (int)theme_size.h()/2;
|
|
hover.bottom_sizer = y > outer_geometry().y2() - (int)theme_size.h()/2;
|
|
|
|
return hover;
|
|
}
|