1 // -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 2; -*-
13 #include "otk/strut.hh"
14 #include "otk/rect.hh"
15 #include "otk/screeninfo.hh"
16 #include "otk/style.hh"
17 #include "otk/widget.hh"
18 #include "otk/button.hh"
19 #include "otk/focuswidget.hh"
20 #include "otk/focuslabel.hh"
26 //! Holds and decorates a frame around an OBClient (client window)
29 class OBFrame
: public otk::OtkWidget
{
32 const otk::ScreenInfo
*_screen
;
34 //! The style to use for size and display the decorations
37 //! The size of the frame on each side of the client window
41 otk::OtkFocusWidget _plate
; // sits entirely under the client window
42 otk::OtkFocusWidget _titlebar
;
43 otk::OtkButton _button_close
;
44 otk::OtkButton _button_iconify
;
45 otk::OtkButton _button_max
;
46 otk::OtkButton _button_stick
;
47 otk::OtkFocusLabel _label
;
48 otk::OtkFocusWidget _handle
;
49 otk::OtkButton _grip_left
;
50 otk::OtkButton _grip_right
;
52 //! The decorations to display on the window.
54 This is by default the same value as in the OBClient::decorations, but it
55 is duplicated here so that it can be overridden per-window by the user.
57 OBClient::DecorationFlags _decorations
;
59 //! Reparents the client window from the root window onto the frame
61 //! Reparents the client window back to the root window
63 @param remap Re-map the client window when we're done reparenting?
65 void releaseClient(bool remap
);
68 //! Constructs an OBFrame object, and reparents the client to itself
70 @param client The client window which will be decorated by the new OBFrame
71 @param style The style to use to decorate the frame
73 OBFrame(OBClient
*client
, otk::Style
*style
);
74 //! Destroys the OBFrame object
77 //! Set the style to decorate the frame with
78 virtual void setStyle(otk::Style
*style
);
80 //! Update the frame to match the client
82 //! Shape the frame window to the client window
85 //! Applies gravity for the client's gravity, moving the frame to the