diff options
Diffstat (limited to 'source/blender/windowmanager/intern/wm_window.c')
-rw-r--r-- | source/blender/windowmanager/intern/wm_window.c | 39 |
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) |