@@ -171,7 +171,7 @@ void PointerTool::MouseMove(TimelineViewMouseEvent *event)
|
|||||||
|
|
||||||
// If we're performing an action, we can initiate ghosts
|
// If we're performing an action, we can initiate ghosts
|
||||||
if (drag_movement_mode_ != Timeline::kNone) {
|
if (drag_movement_mode_ != Timeline::kNone) {
|
||||||
InitiateDrag(clicked_item_, drag_movement_mode_);
|
InitiateDrag(clicked_item_, drag_movement_mode_, event->GetModifiers());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set dragging to true here so no matter what, the drag isn't re-initiated until it's completed
|
// Set dragging to true here so no matter what, the drag isn't re-initiated until it's completed
|
||||||
@@ -244,6 +244,7 @@ void SetGhostToSlideMode(TimelineViewGhostItem* g)
|
|||||||
|
|
||||||
void PointerTool::InitiateDragInternal(Block *clicked_item,
|
void PointerTool::InitiateDragInternal(Block *clicked_item,
|
||||||
Timeline::MovementMode trim_mode,
|
Timeline::MovementMode trim_mode,
|
||||||
|
Qt::KeyboardModifiers modifiers,
|
||||||
bool dont_roll_trims,
|
bool dont_roll_trims,
|
||||||
bool allow_nongap_rolling,
|
bool allow_nongap_rolling,
|
||||||
bool slide_instead_of_moving)
|
bool slide_instead_of_moving)
|
||||||
@@ -407,30 +408,41 @@ void PointerTool::InitiateDragInternal(Block *clicked_item,
|
|||||||
}
|
}
|
||||||
|
|
||||||
Timeline::MovementMode flipped_mode = FlipTrimMode(trim_mode);
|
Timeline::MovementMode flipped_mode = FlipTrimMode(trim_mode);
|
||||||
TimelineViewGhostItem* adjacent_ghost;
|
QVector<TimelineViewGhostItem*> adjacent_ghosts;
|
||||||
|
|
||||||
if (adjacent) {
|
if (adjacent) {
|
||||||
adjacent_ghost = AddGhostFromBlock(adjacent, flipped_mode);
|
adjacent_ghosts.append(AddGhostFromBlock(adjacent, flipped_mode));
|
||||||
|
|
||||||
|
// Select adjacent's links if applicable
|
||||||
|
// FIXME: The check for `clips.size() == 1` may not be necessary, but I don't know yet.
|
||||||
|
// I'm only including it to prevent any potentially unintended behavior.
|
||||||
|
if (clips.size() == 1 && !(modifiers & Qt::AltModifier)) {
|
||||||
|
if (ClipBlock *adjacent_clip = dynamic_cast<ClipBlock*>(adjacent)) {
|
||||||
|
foreach (Block *adjacent_link, adjacent_clip->block_links()) {
|
||||||
|
adjacent_ghosts.append(AddGhostFromBlock(adjacent_link, flipped_mode));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
} else if (trim_mode == Timeline::kTrimIn || block->next()) {
|
} else if (trim_mode == Timeline::kTrimIn || block->next()) {
|
||||||
rational null_ghost_pos = (trim_mode == Timeline::kTrimIn) ? block->in() : block->out();
|
rational null_ghost_pos = (trim_mode == Timeline::kTrimIn) ? block->in() : block->out();
|
||||||
|
|
||||||
adjacent_ghost = AddGhostFromNull(null_ghost_pos, null_ghost_pos, clip_item->track()->ToReference(), flipped_mode);
|
adjacent_ghosts.append(AddGhostFromNull(null_ghost_pos, null_ghost_pos, clip_item->track()->ToReference(), flipped_mode));
|
||||||
} else {
|
|
||||||
adjacent_ghost = nullptr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// If we have an adjacent block (for any reason), this is a roll edit and the adjacent is
|
// If we have an adjacent block (for any reason), this is a roll edit and the adjacent is
|
||||||
// expected to fill the remaining space (no gap needs to be created)
|
// expected to fill the remaining space (no gap needs to be created)
|
||||||
ghost->SetData(TimelineViewGhostItem::kTrimIsARollEdit, static_cast<bool>(adjacent));
|
ghost->SetData(TimelineViewGhostItem::kTrimIsARollEdit, static_cast<bool>(adjacent));
|
||||||
|
|
||||||
if (adjacent_ghost) {
|
foreach (TimelineViewGhostItem *adjacent_ghost, adjacent_ghosts) {
|
||||||
if (treat_trim_as_slide) {
|
if (adjacent_ghost) {
|
||||||
// We're sliding a transition rather than a pure trim/roll
|
if (treat_trim_as_slide) {
|
||||||
SetGhostToSlideMode(adjacent_ghost);
|
// We're sliding a transition rather than a pure trim/roll
|
||||||
} else if (dynamic_cast<GapBlock*>(block)) {
|
SetGhostToSlideMode(adjacent_ghost);
|
||||||
ghost->SetData(TimelineViewGhostItem::kTrimShouldBeIgnored, true);
|
} else if (dynamic_cast<GapBlock*>(block)) {
|
||||||
} else {
|
ghost->SetData(TimelineViewGhostItem::kTrimShouldBeIgnored, true);
|
||||||
adjacent_ghost->SetData(TimelineViewGhostItem::kTrimShouldBeIgnored, true);
|
} else {
|
||||||
|
adjacent_ghost->SetData(TimelineViewGhostItem::kTrimShouldBeIgnored, true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -716,9 +728,9 @@ Timeline::MovementMode PointerTool::IsCursorInTrimHandle(Block *block, qreal cur
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void PointerTool::InitiateDrag(Block *clicked_item, Timeline::MovementMode trim_mode)
|
void PointerTool::InitiateDrag(Block *clicked_item, Timeline::MovementMode trim_mode, Qt::KeyboardModifiers modifiers)
|
||||||
{
|
{
|
||||||
InitiateDragInternal(clicked_item, trim_mode, false, false, false);
|
InitiateDragInternal(clicked_item, trim_mode, modifiers, false, false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
//#define HIDE_GAP_GHOSTS
|
//#define HIDE_GAP_GHOSTS
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ public:
|
|||||||
protected:
|
protected:
|
||||||
virtual void FinishDrag(TimelineViewMouseEvent *event);
|
virtual void FinishDrag(TimelineViewMouseEvent *event);
|
||||||
|
|
||||||
virtual void InitiateDrag(Block* clicked_item, Timeline::MovementMode trim_mode);
|
virtual void InitiateDrag(Block* clicked_item, Timeline::MovementMode trim_mode, Qt::KeyboardModifiers modifiers);
|
||||||
|
|
||||||
TimelineViewGhostItem* AddGhostFromBlock(Block *block, Timeline::MovementMode mode, bool check_if_exists = false);
|
TimelineViewGhostItem* AddGhostFromBlock(Block *block, Timeline::MovementMode mode, bool check_if_exists = false);
|
||||||
|
|
||||||
@@ -65,6 +65,7 @@ protected:
|
|||||||
|
|
||||||
void InitiateDragInternal(Block* clicked_item,
|
void InitiateDragInternal(Block* clicked_item,
|
||||||
Timeline::MovementMode trim_mode,
|
Timeline::MovementMode trim_mode,
|
||||||
|
Qt::KeyboardModifiers modifiers,
|
||||||
bool dont_roll_trims,
|
bool dont_roll_trims,
|
||||||
bool allow_nongap_rolling, bool slide_instead_of_moving);
|
bool allow_nongap_rolling, bool slide_instead_of_moving);
|
||||||
|
|
||||||
|
|||||||
@@ -34,10 +34,9 @@ RippleTool::RippleTool(TimelineWidget* parent) :
|
|||||||
SetGapTrimmingAllowed(true);
|
SetGapTrimmingAllowed(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RippleTool::InitiateDrag(Block *clicked_item,
|
void RippleTool::InitiateDrag(Block *clicked_item, Timeline::MovementMode trim_mode, Qt::KeyboardModifiers modifiers)
|
||||||
Timeline::MovementMode trim_mode)
|
|
||||||
{
|
{
|
||||||
InitiateDragInternal(clicked_item, trim_mode, true, true, false);
|
InitiateDragInternal(clicked_item, trim_mode, modifiers, true, true, false);
|
||||||
|
|
||||||
if (!parent()->HasGhosts()) {
|
if (!parent()->HasGhosts()) {
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -32,8 +32,7 @@ public:
|
|||||||
protected:
|
protected:
|
||||||
virtual void FinishDrag(TimelineViewMouseEvent *event) override;
|
virtual void FinishDrag(TimelineViewMouseEvent *event) override;
|
||||||
|
|
||||||
virtual void InitiateDrag(Block* clicked_item,
|
virtual void InitiateDrag(Block* clicked_item, Timeline::MovementMode trim_mode, Qt::KeyboardModifiers modifiers) override;
|
||||||
Timeline::MovementMode trim_mode) override;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,10 +33,9 @@ RollingTool::RollingTool(TimelineWidget* parent) :
|
|||||||
SetGapTrimmingAllowed(true);
|
SetGapTrimmingAllowed(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RollingTool::InitiateDrag(Block *clicked_item,
|
void RollingTool::InitiateDrag(Block *clicked_item, Timeline::MovementMode trim_mode, Qt::KeyboardModifiers modifiers)
|
||||||
Timeline::MovementMode trim_mode)
|
|
||||||
{
|
{
|
||||||
InitiateDragInternal(clicked_item, trim_mode, false, true, false);
|
InitiateDragInternal(clicked_item, trim_mode, modifiers, false, true, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,8 +31,7 @@ public:
|
|||||||
RollingTool(TimelineWidget* parent);
|
RollingTool(TimelineWidget* parent);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void InitiateDrag(Block* clicked_item,
|
virtual void InitiateDrag(Block* clicked_item, Timeline::MovementMode trim_mode, Qt::KeyboardModifiers modifiers) override;
|
||||||
Timeline::MovementMode trim_mode) override;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,9 +34,9 @@ SlideTool::SlideTool(TimelineWidget* parent) :
|
|||||||
SetGapTrimmingAllowed(true);
|
SetGapTrimmingAllowed(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SlideTool::InitiateDrag(Block *clicked_item, Timeline::MovementMode trim_mode)
|
void SlideTool::InitiateDrag(Block *clicked_item, Timeline::MovementMode trim_mode, Qt::KeyboardModifiers modifiers)
|
||||||
{
|
{
|
||||||
InitiateDragInternal(clicked_item, trim_mode, false, true, true);
|
InitiateDragInternal(clicked_item, trim_mode, modifiers, false, true, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,8 +31,7 @@ public:
|
|||||||
SlideTool(TimelineWidget* parent);
|
SlideTool(TimelineWidget* parent);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void InitiateDrag(Block* clicked_item,
|
virtual void InitiateDrag(Block* clicked_item, Timeline::MovementMode trim_mode, Qt::KeyboardModifiers modifiers) override;
|
||||||
Timeline::MovementMode trim_mode) override;
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user