X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;ds=sidebyside;f=src%2Fframe.hh;h=0c3a93f2a8d885dcc4d713857f6dfee23c3e7594;hb=c4a1fac49da32250dc4567880b385feb7feaa908;hp=1c398932c30033af881d41701c69305d050d1d76;hpb=b9cac2146e1dfe54cb6c0ce647d6c7d58d17de54;p=chaz%2Fopenbox diff --git a/src/frame.hh b/src/frame.hh index 1c398932..0c3a93f2 100644 --- a/src/frame.hh +++ b/src/frame.hh @@ -9,23 +9,22 @@ extern "C" { #include } -#include - +#include "client.hh" #include "otk/strut.hh" #include "otk/rect.hh" #include "otk/screeninfo.hh" #include "otk/style.hh" -namespace ob { +#include -class OBClient; +namespace ob { //! Holds and decorates a frame around an OBClient (client window) /*! */ class OBFrame { private: - const OBClient *_client; + OBClient *_client; const otk::ScreenInfo *_screen; //! The style to use for size and display the decorations @@ -36,8 +35,45 @@ private: //! The size of the frame on each side of the client window otk::Strut _size; + // decoration windows + Window _titlebar; + otk::Rect _titlebar_area; + + Window _button_close; + otk::Rect _button_close_area; + + Window _button_iconify; + otk::Rect _button_iconify_area; + + Window _button_max; + otk::Rect _button_max_area; + + Window _button_stick; + otk::Rect _button_stick_area; + + Window _label; + otk::Rect _label_area; + + Window _handle; + otk::Rect _handle_area; + + Window _grip_left; + otk::Rect _grip_left_area; + + Window _grip_right; + otk::Rect _grip_right_area; + + //! The decorations to display on the window. + /*! + This is by default the same value as in the OBClient::decorations, but it + is duplicated here so that it can be overridden per-window by the user. + */ + OBClient::DecorationFlags _decorations; + //! Creates the base frame window Window createFrame(); + //! Creates a child frame decoration element window + Window createChild(Window parent, Cursor cursor); //! Reparents the client window from the root window onto the frame void grabClient(); @@ -53,21 +89,31 @@ public: @param client The client window which will be decorated by the new OBFrame @param style The style to use to decorate the frame */ - OBFrame(const OBClient *client, const otk::Style *style); + OBFrame(OBClient *client, const otk::Style *style); //! Destroys the OBFrame object virtual ~OBFrame(); //! Load a style to decorate the frame with void loadStyle(const otk::Style *style); - //! Size the frame to the client - void resize(); + //! Update the frame to match the client + void update(); //! Shape the frame window to the client window - void shape(); + void updateShape(); //! Returns the frame's most-parent window, which is a child of the root //! window inline Window window() const { return _window; } + + inline Window titlebar() const { return _titlebar; } + inline Window label() const { return _label; } + inline Window buttonIconify() const { return _button_iconify; } + inline Window buttonMax() const { return _button_max; } + inline Window buttonStick() const { return _button_stick; } + inline Window buttonClose() const { return _button_close; } + inline Window handle() const { return _handle; } + inline Window gripLeft() const { return _grip_left; } + inline Window gripRight() const { return _grip_right; } }; }