Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/windowmanager/intern/wm_window.c')
-rw-r--r--source/blender/windowmanager/intern/wm_window.c39
1 files changed, 30 insertions, 9 deletions
diff --git a/source/blender/windowmanager/intern/wm_window.c b/source/blender/windowmanager/intern/wm_window.c
index ef1e4d24e7f..0c3d2544bb4 100644
--- a/source/blender/windowmanager/intern/wm_window.c
+++ b/source/blender/windowmanager/intern/wm_window.c
@@ -2135,23 +2135,44 @@ int WM_window_pixels_y(const wmWindow *win)
}
/**
- * Get the total pixels that are usable by the screen-layouts, excluding global areas.
+ * Get boundaries usable by all window contents, including global areas.
*/
-int WM_window_screen_pixels_x(const wmWindow *win)
+void WM_window_rect_calc(const wmWindow *win, rcti *r_rect)
{
- return WM_window_pixels_x(win);
+ BLI_rcti_init(r_rect, 0, WM_window_pixels_x(win), 0, WM_window_pixels_y(win));
}
-int WM_window_screen_pixels_y(const wmWindow *win)
+/**
+ * Get boundaries usable by screen-layouts, excluding global areas.
+ * \note Depends on U.dpi_fac. Should that be outdated, call #WM_window_set_dpi first.
+ */
+void WM_window_screen_rect_calc(const wmWindow *win, rcti *r_rect)
{
- short screen_size_y = WM_window_pixels_y(win);
+ rcti rect;
- for (ScrArea *sa = win->global_areas.areabase.first; sa; sa = sa->next) {
- if ((sa->global->flag & GLOBAL_AREA_IS_HIDDEN) == 0) {
- screen_size_y -= ED_area_global_size_y(sa);
+ BLI_rcti_init(&rect, 0, WM_window_pixels_x(win), 0, WM_window_pixels_y(win));
+
+ /* Substract global areas from screen rectangle. */
+ for (ScrArea *global_area = win->global_areas.areabase.first; global_area; global_area = global_area->next) {
+ if (global_area->global->flag & GLOBAL_AREA_IS_HIDDEN) {
+ continue;
+ }
+
+ switch (global_area->global->align) {
+ case GLOBAL_AREA_ALIGN_TOP:
+ rect.ymax -= ED_area_global_size_y(global_area);
+ break;
+ case GLOBAL_AREA_ALIGN_BOTTOM:
+ rect.ymin += ED_area_global_size_y(global_area);
+ break;
+ default:
+ BLI_assert(0);
+ break;
}
}
- return screen_size_y;
+ BLI_assert(rect.xmin < rect.xmax);
+ BLI_assert(rect.ymin < rect.ymax);
+ *r_rect = rect;
}
bool WM_window_is_fullscreen(wmWindow *win)