a5061ecec5
An effort was started some time ago to consolidate all internal documentation in the git tree. However, this was just an accumulation of files in various formats without any strucutre or way to browse it, which results in no one even knowing that we have docs here. This converts most of the files to restructuredtext and uses Sphinx to generate an HTML browsable user manual (with a table of content and a first attempt to put things in a global hierarchy). There are almost no changes to the documentation content in this commit (some obviously obsolete things were removed). The plan is to get the toolchain up and running to make these docs easily available, and only then see about improving the content. We can migrate some things off the wiki and website, and rework the table of contents to have some more hierarchy levels because currently it's a bit messy. Change-Id: I924ac9dc6e753887ab56f18a09bdb0a1e1793bfd Reviewed-on: https://review.haiku-os.org/c/haiku/+/4370 Reviewed-by: Niels Sascha Reedijk <niels.reedijk@gmail.com>
237 lines
10 KiB
ReStructuredText
237 lines
10 KiB
ReStructuredText
WinBorder class : public Layer
|
|
##############################
|
|
|
|
WinBorder objects provide window management functionality and ensure
|
|
that the border for each window is drawn.
|
|
|
|
Member Functions
|
|
================
|
|
|
|
WinBorder(BRect r, const char \*name, int32 resize, int32 flags, ServerWindow \*win)
|
|
------------------------------------------------------------------------------------
|
|
|
|
1. Pass parameters to Layer constructor
|
|
2. Instantiate a decorator
|
|
3. Initialize visible and full regions via Decorator::GetFootprint()
|
|
|
|
~WinBorder(void)
|
|
----------------
|
|
|
|
1. Delete decorator instance
|
|
|
|
void RequestDraw(void)
|
|
----------------------
|
|
|
|
Reimplements Layer::RequestDraw() because it has no corresponding BView
|
|
|
|
1. if IsDirty()==false, return
|
|
2. Iterate through each BRect in the invalid region and call Decorator::Draw(BRect) for each invalid rectangle
|
|
3. Perform recursive child calls as in Layer::RequestDraw()
|
|
|
|
void MoveBy(BPoint pt), void MoveBy(float x, float y)
|
|
-----------------------------------------------------
|
|
|
|
Moves the WinBorder's position on screen - reimplements Layer::MoveBy()
|
|
|
|
1. Call the decorator's MoveBy()
|
|
2. Call Layer::MoveBy()
|
|
|
|
void ResizeBy(BPoint pt), void ResizeBy(float x, float y)
|
|
---------------------------------------------------------
|
|
|
|
Resizes the WinBorder - reimplements Layer::MoveBy()
|
|
|
|
1. Call the decorator's ResizeBy()
|
|
2. Call Layer::ResizeBy()
|
|
|
|
void MouseDown(int8 \*buffer)
|
|
-----------------------------
|
|
|
|
Figures out what to do with B_MOUSE_DOWN messages sent to the window's border.
|
|
|
|
1. Extract data from the buffer
|
|
2. Call the decorator's Clicked() function
|
|
3. Feed return value to a switch() function (table below)
|
|
4. Call the ServerWindow's Activate() function
|
|
|
|
+-----------------------------------+-----------------------------------+
|
|
| CLICK_MOVETOBACK | call MoveToBack() |
|
|
+-----------------------------------+-----------------------------------+
|
|
| CLICK_MOVETOFRONT | call MoveToFront() |
|
|
+-----------------------------------+-----------------------------------+
|
|
| CLICK_CLOSE | 1) call SetCloseButton(true) |
|
|
| | |
|
|
| | 2) call decorator->DrawClose |
|
|
+-----------------------------------+-----------------------------------+
|
|
| CLICK_ZOOM | 1) call SetZoomButton(true) |
|
|
| | |
|
|
| | 2) call decorator->DrawZoom |
|
|
+-----------------------------------+-----------------------------------+
|
|
| CLICK_MINIMIZE | 1) call SetMinimizeButton(true) |
|
|
| | |
|
|
| | 2) call decorator->DrawMinimize |
|
|
+-----------------------------------+-----------------------------------+
|
|
| CLICK_DRAG | 1) call MoveToFront() |
|
|
| | |
|
|
| | 2) call set_is_win_moving(true) |
|
|
| | |
|
|
| | 3) Save the mouse position |
|
|
+-----------------------------------+-----------------------------------+
|
|
| CLICK_RESIZE | 1) call MoveToFront() |
|
|
| | |
|
|
| | 2) call set_is_win_resizing(true) |
|
|
+-----------------------------------+-----------------------------------+
|
|
| CLICK_NONE | do nothing |
|
|
+-----------------------------------+-----------------------------------+
|
|
| default: | Spew an error to stderr and |
|
|
| | return |
|
|
+-----------------------------------+-----------------------------------+
|
|
|
|
void MouseUp(int8 \*buffer)
|
|
---------------------------
|
|
|
|
Figures out what to do with B_MOUSE_UP messages sent to the window's border.
|
|
|
|
1. Extract data from the buffer
|
|
2. Call the decorator's Clicked() function
|
|
3. Feed return value to a switch() function (table below)
|
|
4. if is_resizing_window, call set_is_resizing_window(false)
|
|
5. if is_moving_window, call set_is_moving_window(false)
|
|
|
|
+-----------------------------------+-----------------------------------+
|
|
| CLICK_MOVETOBACK | call MoveToBack() |
|
|
+-----------------------------------+-----------------------------------+
|
|
| CLICK_MOVETOFRONT | call MoveToFront() |
|
|
+-----------------------------------+-----------------------------------+
|
|
| CLICK_CLOSE | 1) call SetCloseButton(false) |
|
|
| | |
|
|
| | 2) call decorator->DrawClose |
|
|
| | |
|
|
| | 3) send B_QUIT_REQUESTED to the |
|
|
| | target BWindow |
|
|
+-----------------------------------+-----------------------------------+
|
|
| CLICK_ZOOM | 1) call SetZoomButton(false) |
|
|
| | |
|
|
| | 2) call decorator->DrawZoom |
|
|
| | |
|
|
| | 3) send B_ZOOM to the target |
|
|
| | BWindow |
|
|
+-----------------------------------+-----------------------------------+
|
|
| CLICK_MINIMIZE | 1) call SetMinimizeButton(false) |
|
|
| | |
|
|
| | 2) call decorator->DrawMinimize |
|
|
| | |
|
|
| | 3) send B_MINIMIZE to the target |
|
|
| | BWindow |
|
|
+-----------------------------------+-----------------------------------+
|
|
| CLICK_DRAG | call set_is_win_moving(false) |
|
|
+-----------------------------------+-----------------------------------+
|
|
| CLICK_RESIZE | call set_is_win_resizing(false) |
|
|
+-----------------------------------+-----------------------------------+
|
|
| CLICK_NONE | do nothing |
|
|
+-----------------------------------+-----------------------------------+
|
|
| default: | Spew an error to stderr |
|
|
+-----------------------------------+-----------------------------------+
|
|
|
|
void MouseMoved(int8 \*buffer)
|
|
------------------------------
|
|
|
|
Figures out what to do with B_MOUSE_MOVED messages sent to the window's border.
|
|
|
|
1. Extract data from the buffer
|
|
2. Call the decorator's Clicked() function
|
|
3. If not CLICK_CLOSE and decorator->GetClose is true, call SetClose(false) and DrawClose()
|
|
4. If not CLICK_ZOOM and decorator->GetZoom is true, call SetZoom(false) and DrawZoom()
|
|
5. If not CLICK_MINIMIZE and decorator->GetMinimize is true, call SetMinimize(false) and DrawMinimize()
|
|
6. if CLICK_RESIZE or its variants, call CursorManager::SetCursor() with the appropriate system cursor.
|
|
7. if is_moving_window() is true, calculate the amount the mouse has moved and call decorator->MoveBy() followed by Layer::MoveBy()
|
|
8. if is_resizing_window() is true, calculate the amount the mouse has moved and call decorator->ResizeBy() followed by Layer::ResizeBy()
|
|
|
|
void UpdateDecorator(void)
|
|
--------------------------
|
|
|
|
Hook function called by the WinBorder's ServerWindow when the decorator used is changed.
|
|
|
|
1. Delete the current decorator
|
|
2. Call instantiate_decorator
|
|
3. Get the new decorator's footprint region and assign it to the full and visible regions
|
|
4. Call RebuildRegions and then RequestDraw
|
|
|
|
void UpdateColors(void)
|
|
-----------------------
|
|
|
|
Hook function called by the WinBorder's ServerWindow when system colors change
|
|
|
|
1. Call the decorator's SetColors(), passing the SystemPalette's GetGUIColors() value
|
|
|
|
void UpdateFont(void)
|
|
---------------------
|
|
|
|
Hook function called by the WinBorder's ServerWindow when system fonts change
|
|
|
|
| TODO: implementation details
|
|
|
|
void UpdateScreen(void)
|
|
-----------------------
|
|
|
|
Hook function called by the WinBorder's ServerWindow when screen
|
|
attributes change
|
|
|
|
1. Call the decorator's UpdateScreen and then RequestDraw
|
|
|
|
void RebuildRegions(bool recursive=true)
|
|
----------------------------------------
|
|
|
|
Reimplementation of Layer::RebuildRegions which changes it such that
|
|
lower siblings are clipped to the footprint instead of the frame.
|
|
|
|
void Activate(bool state)
|
|
-------------------------
|
|
|
|
This function is never directly called except from within
|
|
set_active_winborder. It exists to force redraw and set the internal
|
|
state information to the proper values for when a window receives or
|
|
loses focus.
|
|
|
|
1. call the decorator's SetFocus(state)
|
|
2. set the internal is_active flag to state
|
|
3. iterate through each rectangle in the visible region and call the decorator's Draw on it.
|
|
|
|
Global Functions
|
|
================
|
|
|
|
|
|
bool is_moving_window(void), void set_is_moving_window(bool state)
|
|
------------------------------------------------------------------
|
|
|
|
|
|
These two functions set and return the variable
|
|
winborder_private::is_moving_a_window.
|
|
|
|
|
|
bool is_resizing_window(void), void set_is_resizing_window(bool state)
|
|
----------------------------------------------------------------------
|
|
|
|
|
|
These two functions set and return the variable
|
|
winborder_private::is_resizing_a_window.
|
|
|
|
|
|
void set_active_winborder(WinBorder \*win), WinBorder \* get_active_winborder(void)
|
|
-----------------------------------------------------------------------------------
|
|
|
|
|
|
These two functions set and return the variable winborder_private::active_winborder
|
|
|
|
Namespaces
|
|
==========
|
|
|
|
.. code-block:: cpp
|
|
|
|
winborder_private {
|
|
bool is_moving_a_window
|
|
bool is_resizing_a_window
|
|
WinBorder *active_winborder
|
|
}
|
|
|