Blender V4.3
screen_intern.hh File Reference
#include "DNA_space_types.h"

Go to the source code of this file.

Macros

#define SCREEN_DIR_IS_VERTICAL(dir)   (ELEM(dir, SCREEN_DIR_N, SCREEN_DIR_S))
 
#define SCREEN_DIR_IS_HORIZONTAL(dir)   (ELEM(dir, SCREEN_DIR_W, SCREEN_DIR_E))
 
#define AZONESPOTW   UI_HEADER_OFFSET /* width of corner #AZone - max */
 
#define AZONESPOTH   (0.6f * U.widget_unit) /* height of corner #AZone */
 
#define AZONEFADEIN   (5.0f * U.widget_unit) /* when #AZone is totally visible */
 
#define AZONEFADEOUT   (6.5f * U.widget_unit) /* when we start seeing the #AZone */
 
#define AREAJOINTOLERANCEX   (AREAMINX * UI_SCALE_FAC)
 
#define AREAJOINTOLERANCEY   (HEADERY * UI_SCALE_FAC)
 
#define BORDERPADDING   ((3.0f * UI_SCALE_FAC) + U.pixelsize)
 

Enumerations

enum  eScreenDir {
  SCREEN_DIR_NONE = -1 , SCREEN_DIR_W = 0 , SCREEN_DIR_N = 1 , SCREEN_DIR_E = 2 ,
  SCREEN_DIR_S = 3
}
 
enum  eScreenAxis { SCREEN_AXIS_H = 'h' , SCREEN_AXIS_V = 'v' }
 
enum class  AreaDockTarget {
  None , Right , Left , Top ,
  Bottom , Center
}
 

Functions

void ED_area_data_copy (ScrArea *area_dst, ScrArea *area_src, bool do_free)
 
void ED_area_data_swap (ScrArea *area_dst, ScrArea *area_src)
 
void region_toggle_hidden (bContext *C, ARegion *region, bool do_fade)
 
void screen_draw_join_highlight (const wmWindow *win, ScrArea *sa1, ScrArea *sa2, eScreenDir dir)
 
void screen_draw_dock_preview (ScrArea *source, ScrArea *target, AreaDockTarget dock_target, float factor, int x, int y)
 
void screen_draw_split_preview (ScrArea *area, eScreenAxis dir_axis, float factor)
 
void screen_draw_move_highlight (bScreen *screen, eScreenAxis dir_axis)
 
bScreenscreen_add (Main *bmain, const char *name, const rcti *rect)
 
void screen_data_copy (bScreen *to, bScreen *from)
 
void screen_new_activate_prepare (const wmWindow *win, bScreen *screen_new)
 
void screen_change_update (bContext *C, wmWindow *win, bScreen *screen)
 
void screen_change_prepare (bScreen *screen_old, bScreen *screen_new, Main *bmain, bContext *C, wmWindow *win)
 
ScrAreaarea_split (const wmWindow *win, bScreen *screen, ScrArea *area, eScreenAxis dir_axis, float fac, bool merge)
 
int screen_area_join (bContext *C, bScreen *screen, ScrArea *sa1, ScrArea *sa2)
 
eScreenDir area_getorientation (ScrArea *sa_a, ScrArea *sa_b)
 
void area_getoffsets (ScrArea *sa_a, ScrArea *sa_b, eScreenDir dir, int *r_offset1, int *r_offset2)
 
bool screen_area_close (bContext *C, bScreen *screen, ScrArea *area)
 
void screen_area_spacelink_add (const Scene *scene, ScrArea *area, eSpace_Type space_type)
 
AZoneED_area_actionzone_find_xy (ScrArea *area, const int xy[2])
 
int screen_geom_area_height (const ScrArea *area)
 
int screen_geom_area_width (const ScrArea *area)
 
ScrVertscreen_geom_vertex_add_ex (ScrAreaMap *area_map, short x, short y)
 
ScrVertscreen_geom_vertex_add (bScreen *screen, short x, short y)
 
ScrEdgescreen_geom_edge_add_ex (ScrAreaMap *area_map, ScrVert *v1, ScrVert *v2)
 
ScrEdgescreen_geom_edge_add (bScreen *screen, ScrVert *v1, ScrVert *v2)
 
bool screen_geom_edge_is_horizontal (ScrEdge *se)
 
ScrEdgescreen_geom_area_map_find_active_scredge (const ScrAreaMap *area_map, const rcti *bounds_rect, int mx, int my)
 
ScrEdgescreen_geom_find_active_scredge (const wmWindow *win, const bScreen *screen, int mx, int my)
 
void screen_geom_vertices_scale (const wmWindow *win, bScreen *screen)
 Main screen-layout calculation function.
 
short screen_geom_find_area_split_point (const ScrArea *area, const rcti *window_rect, eScreenAxis dir_axis, float fac)
 
void screen_geom_select_connected_edge (const wmWindow *win, ScrEdge *edge)
 
int ed_screen_context (const bContext *C, const char *member, bContextDataResult *result)
 
void SCREEN_OT_screenshot (wmOperatorType *ot)
 
void SCREEN_OT_screenshot_area (wmOperatorType *ot)
 
bool workspace_layout_set_poll (const WorkSpaceLayout *layout)
 

Variables

const char * screen_context_dir []
 

Macro Definition Documentation

◆ AREAJOINTOLERANCEX

#define AREAJOINTOLERANCEX   (AREAMINX * UI_SCALE_FAC)

Definition at line 65 of file screen_intern.hh.

Referenced by area_getorientation(), screen_area_trim(), and screen_areas_can_align().

◆ AREAJOINTOLERANCEY

#define AREAJOINTOLERANCEY   (HEADERY * UI_SCALE_FAC)

Definition at line 66 of file screen_intern.hh.

Referenced by area_getorientation(), screen_area_trim(), and screen_areas_can_align().

◆ AZONEFADEIN

#define AZONEFADEIN   (5.0f * U.widget_unit) /* when #AZone is totally visible */

Definition at line 61 of file screen_intern.hh.

Referenced by area_actionzone_refresh_xy().

◆ AZONEFADEOUT

#define AZONEFADEOUT   (6.5f * U.widget_unit) /* when we start seeing the #AZone */

Definition at line 62 of file screen_intern.hh.

Referenced by area_actionzone_refresh_xy(), and fullscreen_azone_init().

◆ AZONESPOTH

#define AZONESPOTH   (0.6f * U.widget_unit) /* height of corner #AZone */

Definition at line 60 of file screen_intern.hh.

Referenced by area_azone_init().

◆ AZONESPOTW

#define AZONESPOTW   UI_HEADER_OFFSET /* width of corner #AZone - max */

Definition at line 59 of file screen_intern.hh.

Referenced by area_actionzone_refresh_xy(), and area_azone_init().

◆ BORDERPADDING

#define BORDERPADDING   ((3.0f * UI_SCALE_FAC) + U.pixelsize)

Expanded interaction influence of area borders.

Definition at line 71 of file screen_intern.hh.

Referenced by ED_screen_draw_edges(), ED_screen_set_active_region(), and screen_geom_area_map_find_active_scredge().

◆ SCREEN_DIR_IS_HORIZONTAL

#define SCREEN_DIR_IS_HORIZONTAL ( dir)    (ELEM(dir, SCREEN_DIR_W, SCREEN_DIR_E))

Definition at line 41 of file screen_intern.hh.

Referenced by screen_areas_align(), and screen_areas_can_align().

◆ SCREEN_DIR_IS_VERTICAL

Enumeration Type Documentation

◆ AreaDockTarget

enum class AreaDockTarget
strong
Enumerator
None 
Right 
Left 
Top 
Bottom 
Center 

Definition at line 50 of file screen_intern.hh.

◆ eScreenAxis

Enumerator
SCREEN_AXIS_H 

Horizontal.

SCREEN_AXIS_V 

Vertical.

Definition at line 43 of file screen_intern.hh.

◆ eScreenDir

enum eScreenDir
Enumerator
SCREEN_DIR_NONE 

This can mean unset, unknown or invalid.

SCREEN_DIR_W 

West/Left.

SCREEN_DIR_N 

North/Up.

SCREEN_DIR_E 

East/Right.

SCREEN_DIR_S 

South/Down.

Definition at line 27 of file screen_intern.hh.

Function Documentation

◆ area_getoffsets()

void area_getoffsets ( ScrArea * sa_a,
ScrArea * sa_b,
eScreenDir dir,
int * r_offset1,
int * r_offset2 )

◆ area_getorientation()

eScreenDir area_getorientation ( ScrArea * sa_a,
ScrArea * sa_b )

◆ area_split()

◆ ED_area_actionzone_find_xy()

AZone * ED_area_actionzone_find_xy ( ScrArea * area,
const int xy[2] )

◆ ED_area_data_copy()

◆ ED_area_data_swap()

void ED_area_data_swap ( ScrArea * area_dst,
ScrArea * area_src )

◆ ed_screen_context()

int ed_screen_context ( const bContext * C,
const char * member,
bContextDataResult * result )

◆ region_toggle_hidden()

void region_toggle_hidden ( bContext * C,
ARegion * region,
bool do_fade )

◆ screen_add()

bScreen * screen_add ( Main * bmain,
const char * name,
const rcti * rect )

Empty screen, with 1 dummy area without space-data. Uses window size.

Definition at line 193 of file screen_edit.cc.

References BKE_libblock_alloc(), bScreen::do_refresh, ID_SCR, screen_addarea(), screen_geom_edge_add(), screen_geom_vertex_add(), SPACE_EMPTY, TIME_ALL_3D_WIN, TIME_ALL_ANIM_WIN, rcti::xmax, rcti::xmin, rcti::ymax, and rcti::ymin.

Referenced by ED_workspace_layout_add().

◆ screen_area_close()

bool screen_area_close ( bContext * C,
bScreen * screen,
ScrArea * area )

Close a screen area, allowing most-aligned neighbor to take its place.

Definition at line 567 of file screen_edit.cc.

References area_getorientation(), float, LISTBASE_FOREACH, screen_area_join_ex(), SCREEN_DIR_IS_VERTICAL, and SCREEN_DIR_NONE.

Referenced by area_close_exec(), area_docking_apply(), area_join_modal(), and screen_area_join_ex().

◆ screen_area_join()

int screen_area_join ( bContext * C,
bScreen * screen,
ScrArea * sa1,
ScrArea * sa2 )

Join any two neighboring areas. Might involve complex changes.

Definition at line 562 of file screen_edit.cc.

References screen_area_join_ex().

Referenced by area_docking_apply(), area_join_apply(), and area_split_cancel().

◆ screen_area_spacelink_add()

void screen_area_spacelink_add ( const Scene * scene,
ScrArea * area,
eSpace_Type space_type )

◆ screen_change_prepare()

void screen_change_prepare ( bScreen * screen_old,
bScreen * screen_new,
Main * bmain,
bContext * C,
wmWindow * win )
Returns
the screen to activate.
Warning
The returned screen may not always equal screen_new!

Definition at line 1274 of file screen_edit.cc.

References bScreen::animtimer, bScreen::areabase, BLI_assert, BLI_findindex(), CTX_wm_manager(), ED_screen_exit(), LISTBASE_FOREACH, wmWindow::modalhandlers, Main::screens, UNUSED_VARS_NDEBUG, WM_event_remove_area_handler(), and WM_event_timer_sleep().

Referenced by ED_screen_change(), and ED_workspace_change().

◆ screen_change_update()

◆ screen_data_copy()

◆ screen_draw_dock_preview()

◆ screen_draw_join_highlight()

void screen_draw_join_highlight ( const wmWindow * win,
ScrArea * sa1,
ScrArea * sa2,
eScreenDir dir )

Visual indication of the two areas involved in a proposed join.

Parameters
sa1Area from which the resultant originates.
sa2Target area that will be replaced.

Definition at line 379 of file screen_draw.cc.

References area_getoffsets(), wmWindow::eventstate, IFACE_, SCREEN_DIR_IS_VERTICAL, SCREEN_DIR_NONE, screen_draw_area_closed(), screen_draw_area_drag_tip(), ScrArea::totrct, UI_CNR_ALL, UI_draw_roundbox_4fv_ex(), UI_draw_roundbox_corner_set(), rcti::xmax, rctf::xmin, rcti::xmin, wmEvent::xy, rcti::ymax, and rcti::ymin.

Referenced by area_join_draw_cb().

◆ screen_draw_move_highlight()

void screen_draw_move_highlight ( bScreen * screen,
eScreenAxis dir_axis )

◆ screen_draw_split_preview()

◆ screen_geom_area_height()

int screen_geom_area_height ( const ScrArea * area)

◆ screen_geom_area_map_find_active_scredge()

ScrEdge * screen_geom_area_map_find_active_scredge ( const ScrAreaMap * area_map,
const rcti * bounds_rect,
int mx,
int my )
Parameters
bounds_rectEither window or screen bounds. Used to exclude edges along window/screen edges.

Definition at line 74 of file screen_geometry.cc.

References abs(), BORDERPADDING, CLAMP_MIN, ScrAreaMap::edgebase, LISTBASE_FOREACH, max, min, screen_geom_edge_is_horizontal(), rcti::xmax, rcti::xmin, rcti::ymax, and rcti::ymin.

Referenced by actionzone_modal(), area_split_invoke(), screen_area_edge_from_cursor(), and screen_geom_find_active_scredge().

◆ screen_geom_area_width()

int screen_geom_area_width ( const ScrArea * area)

Definition at line 34 of file screen_geometry.cc.

Referenced by area_move_set_limits(), and screen_geom_find_area_split_point().

◆ screen_geom_edge_add()

ScrEdge * screen_geom_edge_add ( bScreen * screen,
ScrVert * v1,
ScrVert * v2 )

◆ screen_geom_edge_add_ex()

ScrEdge * screen_geom_edge_add_ex ( ScrAreaMap * area_map,
ScrVert * v1,
ScrVert * v2 )

◆ screen_geom_edge_is_horizontal()

◆ screen_geom_find_active_scredge()

ScrEdge * screen_geom_find_active_scredge ( const wmWindow * win,
const bScreen * screen,
int mx,
int my )

Need win size to make sure not to include edges along screen edge.

Definition at line 111 of file screen_geometry.cc.

References AREAMAP_FROM_SCREEN, wmWindow::global_areas, screen_geom_area_map_find_active_scredge(), USER_APP_LOCK_EDGE_RESIZE, WM_window_rect_calc(), and WM_window_screen_rect_calc().

Referenced by area_move_init(), and screen_cursor_set().

◆ screen_geom_find_area_split_point()

short screen_geom_find_area_split_point ( const ScrArea * area,
const rcti * window_rect,
eScreenAxis dir_axis,
float fac )
Returns
0 if no split is possible, otherwise the screen-coordinate at which to split.

Definition at line 283 of file screen_geometry.cc.

References AREAMINX, CLAMP, ED_area_headersize(), round_fl_to_short(), SCREEN_AXIS_H, SCREEN_AXIS_V, screen_geom_area_height(), screen_geom_area_width(), UI_SCALE_FAC, x, rcti::xmax, rcti::xmin, y, rcti::ymax, and rcti::ymin.

Referenced by area_split().

◆ screen_geom_select_connected_edge()

void screen_geom_select_connected_edge ( const wmWindow * win,
ScrEdge * edge )

Select all edges that are directly or indirectly connected to edge.

Definition at line 351 of file screen_geometry.cc.

References ED_screen_verts_iter, LISTBASE_FOREACH, SCREEN_AXIS_H, SCREEN_AXIS_V, and WM_window_get_active_screen().

Referenced by area_move_init(), and screen_geom_vertices_scale_pass().

◆ screen_geom_vertex_add()

ScrVert * screen_geom_vertex_add ( bScreen * screen,
short x,
short y )

Definition at line 48 of file screen_geometry.cc.

References AREAMAP_FROM_SCREEN, and screen_geom_vertex_add_ex().

Referenced by area_split(), and screen_add().

◆ screen_geom_vertex_add_ex()

ScrVert * screen_geom_vertex_add_ex ( ScrAreaMap * area_map,
short x,
short y )

◆ screen_geom_vertices_scale()

void screen_geom_vertices_scale ( const wmWindow * win,
bScreen * screen )

Main screen-layout calculation function.

  • Scale areas nicely on window size and DPI changes.
  • Ensure areas have a minimum height.
  • Correctly set global areas to their fixed height.

Definition at line 236 of file screen_geometry.cc.

References ScrAreaMap::areabase, ED_area_global_size_y(), GLOBAL_AREA_ALIGN_BOTTOM, GLOBAL_AREA_ALIGN_TOP, GLOBAL_AREA_IS_HIDDEN, wmWindow::global_areas, LISTBASE_FOREACH, screen_geom_vertices_scale_pass(), WM_window_rect_calc(), WM_window_screen_rect_calc(), rcti::xmax, rcti::xmin, rcti::ymax, and rcti::ymin.

Referenced by screen_refresh().

◆ screen_new_activate_prepare()

void screen_new_activate_prepare ( const wmWindow * win,
bScreen * screen_new )

Prepare a newly created screen for initializing it as active screen.

Definition at line 263 of file screen_edit.cc.

References bScreen::do_draw, bScreen::do_refresh, bScreen::winid, and wmWindow::winid.

◆ SCREEN_OT_screenshot()

◆ SCREEN_OT_screenshot_area()

◆ workspace_layout_set_poll()

Variable Documentation

◆ screen_context_dir

const char* screen_context_dir[]

Definition at line 194 of file screen_intern.hh.