|
Blender V4.3
|
#include <cstdio>#include <cstring>#include "GHOST_C-api.h"#include "BLI_utildefines.h"#include "DNA_listBase.h"#include "DNA_userdef_types.h"#include "DNA_workspace_types.h"#include "BKE_global.hh"#include "BKE_main.hh"#include "WM_api.hh"#include "WM_types.hh"#include "wm_cursors.hh"#include "wm_window.hh"Go to the source code of this file.
Classes | |
| struct | BCursor |
Macros | |
| #define | BEGIN_CURSOR_BLOCK |
| #define | END_CURSOR_BLOCK |
Functions | |
| static GHOST_TStandardCursor | convert_to_ghost_standard_cursor (WMCursorType curs) |
| static void | window_set_custom_cursor (wmWindow *win, const uchar mask[16][2], const uchar bitmap[16][2], int hotx, int hoty) |
| static void | window_set_custom_cursor_ex (wmWindow *win, BCursor *cursor) |
| void | WM_cursor_set (wmWindow *win, int curs) |
| bool | WM_cursor_set_from_tool (wmWindow *win, const ScrArea *area, const ARegion *region) |
| void | WM_cursor_modal_set (wmWindow *win, int val) |
| void | WM_cursor_modal_restore (wmWindow *win) |
| void | WM_cursor_wait (bool val) |
| void | WM_cursor_grab_enable (wmWindow *win, const eWM_CursorWrapAxis wrap, const rcti *wrap_region, const bool hide) |
| void | WM_cursor_grab_disable (wmWindow *win, const int mouse_ungrab_xy[2]) |
| static void | wm_cursor_warp_relative (wmWindow *win, int x, int y) |
| bool | wm_cursor_arrow_move (wmWindow *win, const wmEvent *event) |
| void | WM_cursor_time (wmWindow *win, int nr) |
| void | wm_init_cursor_data () |
Variables | |
| static BCursor * | BlenderCursor [WM_CURSOR_NUM] = {nullptr} |
Cursor pixmap and cursor utility functions to change the cursor.
Definition in file wm_cursors.cc.
| #define BEGIN_CURSOR_BLOCK |
Each bit represents a pixel, so 1 byte = 8 pixels, the bytes go Left to Right. Top to bottom the bits in a byte go right to left (ie; 0x01, 0x80 represents a line of 16 pix with the first and last pix set.)
This type of cursor is 16x16 pixels only.
There is a nice Python GUI utility that can be used for drawing cursors in this format in the Blender source distribution, in ./tools/utils/make_cursor_gui.py .
Start it with the command python3 make_cursor_gui.py It will copy its output to the console when you press 'Do it'. Because defining a cursor mixes declarations and executable code each cursor needs its own scoping block or it would be split up over several hundred lines of code. To enforce/document this better I define 2 pretty brain-dead macros so it's obvious what the extra "[]" are for.
Definition at line 431 of file wm_cursors.cc.
Referenced by wm_init_cursor_data().
| #define END_CURSOR_BLOCK |
Definition at line 434 of file wm_cursors.cc.
Referenced by wm_init_cursor_data().
|
static |
Definition at line 42 of file wm_cursors.cc.
References GHOST_kStandardCursorBothHandles, GHOST_kStandardCursorCopy, GHOST_kStandardCursorCrosshair, GHOST_kStandardCursorCrosshairA, GHOST_kStandardCursorCrosshairB, GHOST_kStandardCursorCrosshairC, GHOST_kStandardCursorCustom, GHOST_kStandardCursorDefault, GHOST_kStandardCursorDownArrow, GHOST_kStandardCursorEraser, GHOST_kStandardCursorEWScroll, GHOST_kStandardCursorEyedropper, GHOST_kStandardCursorHandClosed, GHOST_kStandardCursorHandOpen, GHOST_kStandardCursorHandPoint, GHOST_kStandardCursorHorizontalSplit, GHOST_kStandardCursorKnife, GHOST_kStandardCursorLeftArrow, GHOST_kStandardCursorLeftHandle, GHOST_kStandardCursorLeftRight, GHOST_kStandardCursorMove, GHOST_kStandardCursorNSEWScroll, GHOST_kStandardCursorNSScroll, GHOST_kStandardCursorPencil, GHOST_kStandardCursorRightArrow, GHOST_kStandardCursorRightHandle, GHOST_kStandardCursorStop, GHOST_kStandardCursorText, GHOST_kStandardCursorUpArrow, GHOST_kStandardCursorUpDown, GHOST_kStandardCursorVerticalSplit, GHOST_kStandardCursorWait, GHOST_kStandardCursorZoomIn, GHOST_kStandardCursorZoomOut, WM_CURSOR_BOTH_HANDLES, WM_CURSOR_COPY, WM_CURSOR_CROSS, WM_CURSOR_CROSSC, WM_CURSOR_DEFAULT, WM_CURSOR_DOT, WM_CURSOR_E_ARROW, WM_CURSOR_EDIT, WM_CURSOR_ERASER, WM_CURSOR_EW_SCROLL, WM_CURSOR_EYEDROPPER, WM_CURSOR_H_SPLIT, WM_CURSOR_HAND, WM_CURSOR_HAND_CLOSED, WM_CURSOR_HAND_POINT, WM_CURSOR_KNIFE, WM_CURSOR_LEFT_HANDLE, WM_CURSOR_MOVE, WM_CURSOR_N_ARROW, WM_CURSOR_NS_SCROLL, WM_CURSOR_NSEW_SCROLL, WM_CURSOR_PAINT, WM_CURSOR_PAINT_BRUSH, WM_CURSOR_RIGHT_HANDLE, WM_CURSOR_S_ARROW, WM_CURSOR_STOP, WM_CURSOR_TEXT_EDIT, WM_CURSOR_V_SPLIT, WM_CURSOR_W_ARROW, WM_CURSOR_WAIT, WM_CURSOR_X_MOVE, WM_CURSOR_Y_MOVE, WM_CURSOR_ZOOM_IN, and WM_CURSOR_ZOOM_OUT.
Referenced by WM_cursor_set().
|
static |
Definition at line 117 of file wm_cursors.cc.
References GHOST_SetCustomCursorShape(), and wmWindow::ghostwin.
Referenced by WM_cursor_time().
Definition at line 130 of file wm_cursors.cc.
References GHOST_SetCustomCursorShape(), and wmWindow::ghostwin.
Referenced by WM_cursor_set().
Definition at line 331 of file wm_cursors.cc.
References EVT_DOWNARROWKEY, EVT_LEFTARROWKEY, EVT_RIGHTARROWKEY, EVT_UPARROWKEY, GHOST_GetNativePixelSize(), wmWindow::ghostwin, KM_PRESS, wmEvent::type, wmEvent::val, and wm_cursor_warp_relative().
Referenced by wm_handlers_do_intern().
Definition at line 296 of file wm_cursors.cc.
References G, G_DEBUG, GHOST_kAxisNone, GHOST_kGrabDisable, GHOST_SetCursorGrab(), wmWindow::ghostwin, wmWindow::grabcursor, and wm_cursor_position_to_ghost_screen_coords().
Referenced by button_activate_state(), walkEnd(), WM_event_remove_handlers(), wm_gizmomap_modal_set(), and wm_handler_operator_call().
| void WM_cursor_grab_enable | ( | wmWindow * | win, |
| eWM_CursorWrapAxis | wrap, | ||
| const rcti * | wrap_region, | ||
| bool | hide ) |
Enable cursor grabbing, optionally hiding the cursor and wrapping cursor-motion within a sub-region of the window.
| wrap | an enum (WM_CURSOR_WRAP_NONE, WM_CURSOR_WRAP_XY... etc). |
| wrap_region | Window-relative region for cursor wrapping (when wrap is WM_CURSOR_WRAP_XY). When NULL, the window bounds are used for wrapping. |
Definition at line 244 of file wm_cursors.cc.
References wmWindow::eventstate, G, G_DEBUG, GHOST_kAxisX, GHOST_kAxisY, GHOST_kGrabHide, GHOST_kGrabNormal, GHOST_kGrabWrap, GHOST_SetCursorGrab(), wmWindow::ghostwin, wmWindow::grabcursor, wmTabletData::is_motion_absolute, wmEvent::tablet, wm_cursor_position_to_ghost_screen_coords(), WM_CURSOR_WRAP_NONE, WM_CURSOR_WRAP_X, WM_CURSOR_WRAP_Y, wrap(), rcti::xmax, rcti::xmin, rcti::ymax, and rcti::ymin.
Referenced by button_activate_state(), initWalkInfo(), wm_gizmomap_modal_set(), wm_macro_modal(), and wm_operator_invoke().
| void WM_cursor_modal_restore | ( | wmWindow * | win | ) |
Definition at line 218 of file wm_cursors.cc.
References wmWindow::lastcursor, wmWindow::modalcursor, and WM_cursor_set().
Referenced by annotation_draw_exit(), area_split_exit(), area_swap_exit(), blender::ui::bonedropper_exit(), button_activate_exit(), blender::ed::curves::curve_draw_exit(), curve_draw_exit(), datadropper_exit(), depthdropper_exit(), driverdropper_exit(), blender::ui::eyedropper_colorband_exit(), eyedropper_exit(), gesture_modal_end(), graph_slider_exit(), blender::ed::sculpt_paint::grease_pencil_apply_fill(), blender::ed::sculpt_paint::grease_pencil_fill_exit(), blender::ed::sculpt_paint::greasepencil::grease_pencil_interpolate_modal(), blender::ed::greasepencil::grease_pencil_primitive_exit(), image_view_pan_exit(), image_view_zoom_exit(), knifetool_exit_ex(), blender::ed::space_node::node_resize_exit(), pose_slide_modal(), poselib_blend_exit(), postTrans(), sample_color_modal(), screen_opengl_render_end(), blender::ed::sculpt_paint::filter::sculpt_mesh_filter_modal(), blender::ed::sculpt_paint::dyntopo::sculpt_sample_detail_size_modal(), ui_handler_wait_for_input(), ui_numedit_set_active(), ui_textedit_end(), view_pan_exit(), view_pan_modal(), view_zoom_exit(), view_zoomdrag_modal(), WM_cursor_wait(), and wm_drags_exit().
Definition at line 209 of file wm_cursors.cc.
References wmWindow::cursor, wmWindow::lastcursor, wmWindow::modalcursor, and WM_cursor_set().
Referenced by annotation_draw_cursor_set(), area_swap_invoke(), blender::ui::bonedropper_invoke(), button_activate_init(), curve_draw_invoke(), blender::ed::curves::curves_draw_invoke(), datadropper_invoke(), depthdropper_invoke(), driverdropper_invoke(), blender::ui::eyedropper_colorband_invoke(), eyedropper_invoke(), graph_slider_invoke(), blender::ed::sculpt_paint::grease_pencil_fill_event_modal_map(), blender::ed::sculpt_paint::grease_pencil_fill_invoke(), blender::ed::sculpt_paint::greasepencil::grease_pencil_interpolate_invoke(), blender::ed::greasepencil::grease_pencil_primitive_cursor_update(), blender::ed::greasepencil::grease_pencil_primitive_invoke(), image_view_pan_init(), image_view_zoom_init(), initMouseInputMode(), knifetool_invoke(), blender::ed::space_node::node_resize_init(), pose_slide_invoke_common(), poselib_blend_invoke(), sample_color_invoke(), blender::ed::sculpt_paint::filter::sculpt_mesh_filter_modal(), blender::ed::sculpt_paint::dyntopo::sculpt_sample_detail_size_invoke(), ui_numedit_set_active(), ui_textedit_begin(), view_pan_init(), view_pan_invoke(), view_zoom_init(), view_zoomdrag_invoke(), WM_cursor_wait(), wm_drags_check_ops(), WM_gesture_lasso_invoke(), WM_gesture_lines_invoke(), WM_gesture_polyline_invoke(), WM_gesture_straightline_invoke(), and WM_operator_name_call_ptr_with_depends_on_cursor().
Definition at line 142 of file wm_cursors.cc.
References BlenderCursor, BLI_assert_msg, convert_to_ghost_standard_cursor(), wmWindow::cursor, G, GHOST_HasCursorShape(), GHOST_kStandardCursorCustom, GHOST_kStandardCursorDefault, GHOST_SetCursorShape(), GHOST_SetCursorVisibility(), wmWindow::ghostwin, wmWindow::modalcursor, window_set_custom_cursor_ex(), WM_CURSOR_DEFAULT, WM_CURSOR_NONE, and WM_CURSOR_NUM.
Referenced by actionzone_modal(), area_join_cancel(), area_join_invoke(), area_join_modal(), area_split_preview_update_cursor(), area_swap_modal(), clip_tracking_hide_cursor(), clip_tracking_show_cursor(), console_cursor(), ED_region_cursor_set(), file_external_operation_exec(), blender::ed::sculpt_paint::grease_pencil_fill_event_modal_map(), blender::ed::space_node::node_set_cursor(), blender::ed::sculpt_paint::paint_draw_cursor(), blender::ed::sculpt_paint::paint_update_mouse_cursor(), screen_cursor_set(), sequencer_main_cursor(), text_cursor(), ui_handle_menu_event(), ui_popup_block_create(), view3d_main_region_cursor(), WM_cursor_modal_restore(), WM_cursor_modal_set(), WM_cursor_set_from_tool(), WM_gizmomap_cursor_set(), and wm_gizmomap_highlight_set().
Definition at line 192 of file wm_cursors.cc.
References bToolRef_Runtime::cursor, wmWindow::cursor, ELEM, wmWindow::modalcursor, RGN_TYPE_PREVIEW, RGN_TYPE_WINDOW, WM_CURSOR_DEFAULT, and WM_cursor_set().
Referenced by ED_region_cursor_set(), and view3d_main_region_cursor().
After this you can call restore too.
Definition at line 359 of file wm_cursors.cc.
References wmWindow::cursor, wmWindow::lastcursor, window_set_custom_cursor(), and x.
Referenced by screen_opengl_render_anim_step().
| void WM_cursor_wait | ( | bool | val | ) |
To allow usage all over, we do entire WM.
Definition at line 227 of file wm_cursors.cc.
References ListBase::first, G, G_MAIN, wmWindow::next, wmWindowManager::windows, WM_cursor_modal_restore(), WM_cursor_modal_set(), and WM_CURSOR_WAIT.
Referenced by blender::ed::object::apply_grease_pencil_for_modifier_all_keyframes(), blender::ed::asset::asset_bundle_install_exec(), associate_blend_exec(), blender::ed::greasepencil::bake_grease_pencil_animation_exec(), blender::ed::object::bake_invoke(), edbm_duplicate_invoke(), blender::ed::greasepencil::grease_pencil_separate_exec(), image_clipboard_copy_exec(), image_clipboard_paste_exec(), lightprobe_cache_bake_invoke(), blender::ed::object::multiresbake_image_exec(), pack_islands_exec(), pack_islands_freejob(), blender::ed::object::parent_set(), redraw_timer_exec(), save_image_op(), screen_render_invoke(), script_reload_exec(), blender::ed::sculpt_paint::dyntopo::sculpt_dynamic_topology_toggle_exec(), separate_armature_exec(), separate_exec(), solve_camera_invoke(), track_markers(), unassociate_blend_exec(), unpack_all_exec(), unpack_item_exec(), unpack_libraries_exec(), WM_file_read(), and wm_file_write().
Definition at line 322 of file wm_cursors.cc.
References wm_cursor_position_get(), and WM_cursor_warp().
Referenced by wm_cursor_arrow_move().
| void wm_init_cursor_data | ( | ) |
Definition at line 438 of file wm_cursors.cc.
References BEGIN_CURSOR_BLOCK, BlenderCursor, END_CURSOR_BLOCK, WM_CURSOR_BOTH_HANDLES, WM_CURSOR_COPY, WM_CURSOR_CROSS, WM_CURSOR_CROSSC, WM_CURSOR_DEFAULT, WM_CURSOR_DOT, WM_CURSOR_E_ARROW, WM_CURSOR_EDIT, WM_CURSOR_ERASER, WM_CURSOR_EW_ARROW, WM_CURSOR_EW_SCROLL, WM_CURSOR_EYEDROPPER, WM_CURSOR_H_SPLIT, WM_CURSOR_HAND, WM_CURSOR_KNIFE, WM_CURSOR_LEFT_HANDLE, WM_CURSOR_MUTE, WM_CURSOR_N_ARROW, WM_CURSOR_NS_ARROW, WM_CURSOR_NS_SCROLL, WM_CURSOR_NSEW_SCROLL, WM_CURSOR_NW_ARROW, WM_CURSOR_PAINT, WM_CURSOR_PAINT_BRUSH, WM_CURSOR_PICK_AREA, WM_CURSOR_RIGHT_HANDLE, WM_CURSOR_S_ARROW, WM_CURSOR_STOP, WM_CURSOR_SWAP_AREA, WM_CURSOR_TEXT_EDIT, WM_CURSOR_V_SPLIT, WM_CURSOR_VERTEX_LOOP, WM_CURSOR_W_ARROW, WM_CURSOR_WAIT, WM_CURSOR_X_MOVE, WM_CURSOR_Y_MOVE, WM_CURSOR_ZOOM_IN, and WM_CURSOR_ZOOM_OUT.
Referenced by WM_init().
|
static |
Definition at line 39 of file wm_cursors.cc.
Referenced by WM_cursor_set(), and wm_init_cursor_data().