Blender  V3.3
Classes | Functions | Variables
wm_dragdrop.cc File Reference
#include <cstring>
#include "DNA_screen_types.h"
#include "DNA_space_types.h"
#include "DNA_windowmanager_types.h"
#include "MEM_guardedalloc.h"
#include "BLT_translation.h"
#include "BLI_bitmap.h"
#include "BLI_blenlib.h"
#include "BLI_math_color.h"
#include "BIF_glutil.h"
#include "BKE_context.h"
#include "BKE_global.h"
#include "BKE_idprop.h"
#include "BKE_idtype.h"
#include "BKE_lib_id.h"
#include "BKE_main.h"
#include "BKE_screen.h"
#include "GHOST_C-api.h"
#include "BLO_readfile.h"
#include "ED_asset.h"
#include "ED_screen.h"
#include "GPU_shader.h"
#include "GPU_state.h"
#include "GPU_viewport.h"
#include "IMB_imbuf_types.h"
#include "UI_interface.h"
#include "UI_interface_icons.h"
#include "UI_resources.h"
#include "RNA_access.h"
#include "WM_api.h"
#include "WM_types.h"
#include "wm_event_system.h"
#include "wm_window.h"

Go to the source code of this file.

Classes

struct  wmDropBoxMap
 

Functions

static void wm_drag_free_asset_data (wmDragAsset **asset_data)
 
ListBaseWM_dropboxmap_find (const char *idname, int spaceid, int regionid)
 
wmDropBoxWM_dropbox_add (ListBase *lb, const char *idname, bool(*poll)(bContext *, wmDrag *, const wmEvent *), void(*copy)(bContext *, wmDrag *, wmDropBox *), void(*cancel)(Main *, wmDrag *, wmDropBox *), WMDropboxTooltipFunc tooltip)
 
void wm_dropbox_free (void)
 
static void wm_dropbox_invoke (bContext *C, wmDrag *drag)
 
wmDragWM_drag_data_create (bContext *C, int icon, int type, void *poin, double value, unsigned int flags)
 
void WM_event_start_prepared_drag (bContext *C, wmDrag *drag)
 
void WM_event_start_drag (bContext *C, int icon, int type, void *poin, double value, unsigned int flags)
 
void wm_drags_exit (wmWindowManager *wm, wmWindow *win)
 
static bContextStorewm_drop_ui_context_create (const bContext *C)
 
static void wm_drop_ui_context_free (bContextStore **context_store)
 
void WM_event_drag_image (wmDrag *drag, ImBuf *imb, float scale)
 
void WM_drag_data_free (int dragtype, void *poin)
 
void WM_drag_free (wmDrag *drag)
 
void WM_drag_free_list (ListBase *lb)
 
static char * dropbox_tooltip (bContext *C, wmDrag *drag, const int xy[2], wmDropBox *drop)
 
static wmDropBoxdropbox_active (bContext *C, ListBase *handlers, wmDrag *drag, const wmEvent *event)
 
static wmDropBoxwm_dropbox_active (bContext *C, wmDrag *drag, const wmEvent *event)
 
static void wm_drop_update_active (bContext *C, wmDrag *drag, const wmEvent *event)
 
void wm_drop_prepare (bContext *C, wmDrag *drag, wmDropBox *drop)
 
void wm_drop_end (bContext *C, wmDrag *UNUSED(drag), wmDropBox *UNUSED(drop))
 
void wm_drags_check_ops (bContext *C, const wmEvent *event)
 
wmOperatorCallContext wm_drop_operator_context_get (const wmDropBox *UNUSED(drop))
 
void WM_drag_add_local_ID (wmDrag *drag, ID *id, ID *from_parent)
 
IDWM_drag_get_local_ID (const wmDrag *drag, short idcode)
 
IDWM_drag_get_local_ID_from_event (const wmEvent *event, short idcode)
 
bool WM_drag_is_ID_type (const wmDrag *drag, int idcode)
 
wmDragAssetWM_drag_create_asset_data (const AssetHandle *asset, AssetMetaData *metadata, const char *path, int import_type)
 
wmDragAssetWM_drag_get_asset_data (const wmDrag *drag, int idcode)
 
AssetMetaDataWM_drag_get_asset_meta_data (const wmDrag *drag, int idcode)
 
IDWM_drag_asset_id_import (wmDragAsset *asset_drag, const int flag_extra)
 
bool WM_drag_asset_will_import_linked (const wmDrag *drag)
 
IDWM_drag_get_local_ID_or_import_from_asset (const wmDrag *drag, int idcode)
 
void WM_drag_free_imported_drag_ID (Main *bmain, wmDrag *drag, wmDropBox *drop)
 Free asset ID imported for canceled drop. More...
 
wmDragAssetCatalogWM_drag_get_asset_catalog_data (const wmDrag *drag)
 
void WM_drag_add_asset_list_item (wmDrag *drag, const bContext *C, const AssetLibraryReference *asset_library_ref, const AssetHandle *asset)
 
const ListBaseWM_drag_asset_list_get (const wmDrag *drag)
 
static void wm_drop_operator_draw (const char *name, int x, int y)
 
static void wm_drop_redalert_draw (const char *redalert_str, int x, int y)
 
const char * WM_drag_get_item_name (wmDrag *drag)
 
static int wm_drag_imbuf_icon_width_get (const wmDrag *drag)
 
static int wm_drag_imbuf_icon_height_get (const wmDrag *drag)
 
static void wm_drag_draw_icon (bContext *UNUSED(C), wmWindow *UNUSED(win), wmDrag *drag, const int xy[2])
 
static void wm_drag_draw_item_name (wmDrag *drag, const int x, const int y)
 
void WM_drag_draw_item_name_fn (bContext *UNUSED(C), wmWindow *UNUSED(win), wmDrag *drag, const int xy[2])
 
static void wm_drag_draw_tooltip (bContext *C, wmWindow *win, wmDrag *drag, const int xy[2])
 
static void wm_drag_draw_default (bContext *C, wmWindow *win, wmDrag *drag, const int xy[2])
 
void WM_drag_draw_default_fn (bContext *C, wmWindow *win, wmDrag *drag, const int xy[2])
 
void wm_drags_draw (bContext *C, wmWindow *win)
 

Variables

static ListBase dropboxes = {nullptr, nullptr}
 

Detailed Description

Our own drag-and-drop, drag state and drop boxes.

Definition in file wm_dragdrop.cc.

Function Documentation

◆ dropbox_active()

static wmDropBox* dropbox_active ( bContext C,
ListBase handlers,
wmDrag drag,
const wmEvent event 
)
static

◆ dropbox_tooltip()

static char* dropbox_tooltip ( bContext C,
wmDrag drag,
const int  xy[2],
wmDropBox drop 
)
static

◆ WM_drag_add_asset_list_item()

void WM_drag_add_asset_list_item ( wmDrag drag,
const bContext C,
const AssetLibraryReference asset_library_ref,
const AssetHandle asset 
)

◆ WM_drag_add_local_ID()

void WM_drag_add_local_ID ( wmDrag drag,
ID id,
ID from_parent 
)

◆ WM_drag_asset_id_import()

ID* WM_drag_asset_id_import ( wmDragAsset asset_drag,
int  flag_extra 
)

◆ WM_drag_asset_list_get()

const ListBase* WM_drag_asset_list_get ( const wmDrag drag)

◆ WM_drag_asset_will_import_linked()

bool WM_drag_asset_will_import_linked ( const wmDrag drag)

◆ WM_drag_create_asset_data()

wmDragAsset* WM_drag_create_asset_data ( const AssetHandle asset,
AssetMetaData metadata,
const char *  path,
int  import_type 
)

◆ WM_drag_data_create()

wmDrag* WM_drag_data_create ( struct bContext C,
int  icon,
int  type,
void poin,
double  value,
unsigned int  flags 
)

Create and fill the dragging data, but don't start dragging just yet (unlike WM_event_start_drag()). Must be followed up by WM_event_start_prepared_drag(), otherwise the returned pointer will leak memory.

Note that poin should be valid allocated and not on stack.

Definition at line 177 of file wm_dragdrop.cc.

References BLI_freelistN(), BLI_strncpy(), C, CTX_data_collection_get(), CTX_wm_asset_library_ref(), FILE_MAX, wmDrag::flags, wmDrag::icon, LISTBASE_FOREACH, MEM_freeN, wmDrag::path, wmDrag::poin, type, wmDrag::type, wmDrag::value, WM_drag_add_asset_list_item(), WM_drag_add_local_ID(), WM_DRAG_ASSET, WM_DRAG_ASSET_CATALOG, WM_DRAG_ASSET_LIST, WM_DRAG_FREE_DATA, WM_DRAG_ID, and WM_DRAG_PATH.

Referenced by outliner_item_drag_drop_invoke(), ui_but_drag_start(), and WM_event_start_drag().

◆ WM_drag_data_free()

void WM_drag_data_free ( int  dragtype,
void poin 
)

◆ wm_drag_draw_default()

static void wm_drag_draw_default ( bContext C,
wmWindow win,
wmDrag drag,
const int  xy[2] 
)
static

◆ WM_drag_draw_default_fn()

void WM_drag_draw_default_fn ( bContext C,
wmWindow win,
wmDrag drag,
const int  xy[2] 
)

Definition at line 961 of file wm_dragdrop.cc.

References C, wm_drag_draw_default(), and xy.

◆ wm_drag_draw_icon()

static void wm_drag_draw_icon ( bContext UNUSEDC,
wmWindow UNUSEDwin,
wmDrag drag,
const int  xy[2] 
)
static

◆ wm_drag_draw_item_name()

static void wm_drag_draw_item_name ( wmDrag drag,
const int  x,
const int  y 
)
static

◆ WM_drag_draw_item_name_fn()

void WM_drag_draw_item_name_fn ( bContext UNUSEDC,
wmWindow UNUSEDwin,
wmDrag drag,
const int  xy[2] 
)

Definition at line 872 of file wm_dragdrop.cc.

References UI_DPI_FAC, wm_drag_draw_item_name(), x, xy, and y.

Referenced by view3d_dropboxes().

◆ wm_drag_draw_tooltip()

static void wm_drag_draw_tooltip ( bContext C,
wmWindow win,
wmDrag drag,
const int  xy[2] 
)
static

◆ WM_drag_free()

void WM_drag_free ( wmDrag drag)

◆ wm_drag_free_asset_data()

static void wm_drag_free_asset_data ( wmDragAsset **  asset_data)
static

Definition at line 577 of file wm_dragdrop.cc.

References MEM_freeN, and MEM_SAFE_FREE.

Referenced by WM_drag_data_free(), and WM_drag_free().

◆ WM_drag_free_imported_drag_ID()

void WM_drag_free_imported_drag_ID ( struct Main bmain,
struct wmDrag drag,
struct wmDropBox drop 
)

Free asset ID imported for canceled drop.

If the asset was imported (linked/appended) using WM_drag_get_local_ID_or_import_from_asset()` (typically via a wmDropBox.copy() callback), we want the ID to be removed again if the drop operator cancels. This is for use as wmDropBox.cancel() callback.

Definition at line 686 of file wm_dragdrop.cc.

References BKE_id_free_us(), wmDragAsset::id_type, id_us_plus(), wmDropBox::ptr, wmDrag::type, WM_DRAG_ASSET, WM_drag_get_asset_data(), and WM_operator_properties_id_lookup_from_name_or_session_uuid().

Referenced by ED_dropboxes_ui(), blender::ed::space_node::node_dropboxes(), and view3d_dropboxes().

◆ WM_drag_free_list()

void WM_drag_free_list ( ListBase lb)

◆ WM_drag_get_asset_catalog_data()

wmDragAssetCatalog* WM_drag_get_asset_catalog_data ( const wmDrag drag)

◆ WM_drag_get_asset_data()

wmDragAsset* WM_drag_get_asset_data ( const wmDrag drag,
int  idcode 
)

◆ WM_drag_get_asset_meta_data()

AssetMetaData* WM_drag_get_asset_meta_data ( const wmDrag drag,
int  idcode 
)

◆ WM_drag_get_item_name()

const char* WM_drag_get_item_name ( wmDrag drag)

◆ WM_drag_get_local_ID()

ID* WM_drag_get_local_ID ( const wmDrag drag,
short  idcode 
)

◆ WM_drag_get_local_ID_from_event()

ID* WM_drag_get_local_ID_from_event ( const wmEvent event,
short  idcode 
)

◆ WM_drag_get_local_ID_or_import_from_asset()

ID* WM_drag_get_local_ID_or_import_from_asset ( const wmDrag drag,
int  idcode 
)

◆ wm_drag_imbuf_icon_height_get()

static int wm_drag_imbuf_icon_height_get ( const wmDrag drag)
static

◆ wm_drag_imbuf_icon_width_get()

static int wm_drag_imbuf_icon_width_get ( const wmDrag drag)
static

◆ WM_drag_is_ID_type()

bool WM_drag_is_ID_type ( const wmDrag drag,
int  idcode 
)

◆ wm_drags_check_ops()

void wm_drags_check_ops ( bContext C,
const wmEvent event 
)

◆ wm_drags_draw()

void wm_drags_draw ( bContext C,
wmWindow win 
)

◆ wm_drags_exit()

void wm_drags_exit ( wmWindowManager wm,
wmWindow win 
)

Additional work to cleanly end dragging. Additional because this doesn't actually remove the drag items. Should be called whenever dragging is stopped (successful or not, also when canceled).

Definition at line 244 of file wm_dragdrop.cc.

References wmWindowManager::drags, LISTBASE_FOREACH, wmWindow::tag_cursor_refresh, WM_cursor_modal_restore(), and WM_event_add_mousemove().

Referenced by wm_drop_prepare(), wm_event_drag_and_drop_test(), and wm_handlers_do_intern().

◆ wm_drop_end()

void wm_drop_end ( bContext C,
wmDrag UNUSEDdrag,
wmDropBox UNUSEDdrop 
)

Definition at line 476 of file wm_dragdrop.cc.

References C, and CTX_store_set().

Referenced by wm_handlers_do_intern().

◆ wm_drop_operator_context_get()

wmOperatorCallContext wm_drop_operator_context_get ( const wmDropBox UNUSEDdrop)

Definition at line 501 of file wm_dragdrop.cc.

References WM_OP_INVOKE_DEFAULT.

Referenced by dropbox_active(), wm_drop_prepare(), and wm_handlers_do_intern().

◆ wm_drop_operator_draw()

static void wm_drop_operator_draw ( const char *  name,
int  x,
int  y 
)
static

◆ wm_drop_prepare()

void wm_drop_prepare ( bContext C,
wmDrag drag,
wmDropBox drop 
)

◆ wm_drop_redalert_draw()

static void wm_drop_redalert_draw ( const char *  redalert_str,
int  x,
int  y 
)
static

◆ wm_drop_ui_context_create()

static bContextStore* wm_drop_ui_context_create ( const bContext C)
static

◆ wm_drop_ui_context_free()

static void wm_drop_ui_context_free ( bContextStore **  context_store)
static

Definition at line 279 of file wm_dragdrop.cc.

References CTX_store_free().

Referenced by WM_drag_free(), and wm_drop_update_active().

◆ wm_drop_update_active()

static void wm_drop_update_active ( bContext C,
wmDrag drag,
const wmEvent event 
)
static

◆ wm_dropbox_active()

static wmDropBox* wm_dropbox_active ( bContext C,
wmDrag drag,
const wmEvent event 
)
static

◆ WM_dropbox_add()

wmDropBox* WM_dropbox_add ( ListBase lb,
const char *  idname,
bool(*)(bContext *, wmDrag *, const wmEvent *)  poll,
void(*)(bContext *, wmDrag *, wmDropBox *)  copy,
void(*)(Main *, wmDrag *, wmDropBox *)  cancel,
WMDropboxTooltipFunc  tooltip 
)

◆ wm_dropbox_free()

void wm_dropbox_free ( void  )

Definition at line 121 of file wm_dragdrop.cc.

References BLI_freelistN(), dropboxes, LISTBASE_FOREACH, MEM_freeN, and WM_operator_properties_free().

Referenced by WM_exit_ex().

◆ wm_dropbox_invoke()

static void wm_dropbox_invoke ( bContext C,
wmDrag drag 
)
static

◆ WM_dropboxmap_find()

ListBase* WM_dropboxmap_find ( const char *  idname,
int  spaceid,
int  regionid 
)

◆ WM_event_drag_image()

void WM_event_drag_image ( wmDrag drag,
ImBuf imb,
float  scale 
)

Definition at line 288 of file wm_dragdrop.cc.

References wmDrag::imb, and wmDrag::imbuf_scale.

Referenced by ui_but_drag_start().

◆ WM_event_start_drag()

void WM_event_start_drag ( struct bContext C,
int  icon,
int  type,
void poin,
double  value,
unsigned int  flags 
)

Start dragging immediately with the given data. Note that poin should be valid allocated and not on stack.

Definition at line 237 of file wm_dragdrop.cc.

References C, type, WM_drag_data_create(), and WM_event_start_prepared_drag().

Referenced by blender::ui::ViewItemAPIWrapper::drag_start(), ghost_event_proc(), ui_but_drag_init(), and ui_but_drag_start().

◆ WM_event_start_prepared_drag()

void WM_event_start_prepared_drag ( struct bContext C,
wmDrag drag 
)

Invoke dragging using the given drag data.

Definition at line 229 of file wm_dragdrop.cc.

References BLI_addtail(), C, CTX_wm_manager(), wmWindowManager::drags, and wm_dropbox_invoke().

Referenced by outliner_item_drag_drop_invoke(), ui_but_drag_start(), and WM_event_start_drag().

Variable Documentation

◆ dropboxes

ListBase dropboxes = {nullptr, nullptr}
static