int file_hilight_set(SpaceFile *sfile, ARegion *ar, int mx, int my) { View2D* v2d = &ar->v2d; FileSelectParams* params; int numfiles, origfile; if(sfile==NULL || sfile->files==NULL) return 0; numfiles = filelist_numfiles(sfile->files); params = ED_fileselect_get_params(sfile); origfile= params->active_file; mx -= ar->winrct.xmin; my -= ar->winrct.ymin; if(BLI_in_rcti(&ar->v2d.mask, mx, my)) { float fx, fy; int active_file; UI_view2d_region_to_view(v2d, mx, my, &fx, &fy); active_file = ED_fileselect_layout_offset(sfile->layout, (int)(v2d->tot.xmin + fx), (int)(v2d->tot.ymax - fy)); if((active_file >= 0) && (active_file < numfiles)) params->active_file=active_file; else params->active_file= -1; } else params->active_file= -1; return (params->active_file != origfile); }
static int file_select_invoke(bContext *C, wmOperator *op, wmEvent *event) { ARegion *ar= CTX_wm_region(C); SpaceFile *sfile= CTX_wm_space_file(C); FileSelect ret; rcti rect; int extend = RNA_boolean_get(op->ptr, "extend"); int fill = RNA_boolean_get(op->ptr, "fill"); if(ar->regiontype != RGN_TYPE_WINDOW) return OPERATOR_CANCELLED; rect.xmin = rect.xmax = event->mval[0]; rect.ymin = rect.ymax = event->mval[1]; if(!BLI_in_rcti(&ar->v2d.mask, rect.xmin, rect.ymin)) return OPERATOR_CANCELLED; /* single select, deselect all selected first */ if (!extend) file_deselect_all(sfile, SELECTED_FILE); ret = file_select(C, &rect, extend ? FILE_SEL_TOGGLE : FILE_SEL_ADD, fill); if (FILE_SELECT_DIR == ret) WM_event_add_notifier(C, NC_SPACE|ND_SPACE_FILE_LIST, NULL); else if (FILE_SELECT_FILE == ret) WM_event_add_notifier(C, NC_SPACE|ND_SPACE_FILE_PARAMS, NULL); WM_event_add_mousemove(C); /* for directory changes */ WM_event_add_notifier(C, NC_SPACE|ND_SPACE_FILE_PARAMS, NULL); return OPERATOR_FINISHED; }
static int do_lasso_select_marker(bContext *C, int mcords[][2], short moves, short select) { SpaceClip *sc = CTX_wm_space_clip(C); ARegion *ar = CTX_wm_region(C); MovieClip *clip = ED_space_clip_get_clip(sc); MovieTracking *tracking = &clip->tracking; MovieTrackingTrack *track; ListBase *tracksbase = BKE_tracking_get_active_tracks(tracking); rcti rect; int change = FALSE; int framenr = ED_space_clip_get_clip_frame_number(sc); /* get rectangle from operator */ BLI_lasso_boundbox(&rect, mcords, moves); /* do actual selection */ track = tracksbase->first; while (track) { if ((track->flag & TRACK_HIDDEN) == 0) { MovieTrackingMarker *marker = BKE_tracking_marker_get(track, framenr); if (MARKER_VISIBLE(sc, track, marker)) { float screen_co[2]; /* marker in screen coords */ ED_clip_point_stable_pos__reverse(sc, ar, marker->pos, screen_co); if (BLI_in_rcti(&rect, screen_co[0], screen_co[1]) && BLI_lasso_is_point_inside(mcords, moves, screen_co[0], screen_co[1], V2D_IS_CLIPPED)) { if (select) BKE_tracking_track_flag_set(track, TRACK_AREA_ALL, SELECT); else BKE_tracking_track_flag_clear(track, TRACK_AREA_ALL, SELECT); } change = TRUE; } } track = track->next; } if (change) { BKE_tracking_dopesheet_tag_update(tracking); WM_event_add_notifier(C, NC_GEOM | ND_SELECT, NULL); } return change; }
static void ui_do_drag(const bContext *C, wmEvent *event, Panel *panel) { uiHandlePanelData *data= panel->activedata; ScrArea *sa= CTX_wm_area(C); ARegion *ar= CTX_wm_region(C); short align= panel_aligned(sa, ar), dx=0, dy=0; /* first clip for window, no dragging outside */ if(!BLI_in_rcti(&ar->winrct, event->x, event->y)) return; dx= (event->x-data->startx) & ~(PNL_GRID-1); dy= (event->y-data->starty) & ~(PNL_GRID-1); dx *= (float)(ar->v2d.cur.xmax - ar->v2d.cur.xmin)/(float)(ar->winrct.xmax - ar->winrct.xmin); dy *= (float)(ar->v2d.cur.ymax - ar->v2d.cur.ymin)/(float)(ar->winrct.ymax - ar->winrct.ymin); if(data->state == PANEL_STATE_DRAG_SCALE) { panel->sizex = MAX2(data->startsizex+dx, UI_PANEL_MINX); if(data->startsizey-dy < UI_PANEL_MINY) dy= -UI_PANEL_MINY+data->startsizey; panel->sizey= data->startsizey-dy; panel->ofsy= data->startofsy+dy; } else { /* reset the panel snapping, to allow dragging away from snapped edges */ panel->snap = PNL_SNAP_NONE; panel->ofsx = data->startofsx+dx; panel->ofsy = data->startofsy+dy; check_panel_overlap(ar, panel); if(align) uiAlignPanelStep(sa, ar, 0.2, 1); } ED_region_tag_redraw(ar); }