Skip to content

Commit

Permalink
Add an option for clip information
Browse files Browse the repository at this point in the history
  • Loading branch information
darbyjohnston committed Apr 7, 2024
1 parent 585e96a commit fe85a11
Show file tree
Hide file tree
Showing 10 changed files with 104 additions and 56 deletions.
5 changes: 5 additions & 0 deletions lib/tlPlayApp/MainWindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,8 @@ namespace tl
!timelineui::ItemOptions().tracks.empty());
p.settings->setDefaultValue("Timeline/TrackInfo",
timelineui::ItemOptions().trackInfo);
p.settings->setDefaultValue("Timeline/ClipInfo",
timelineui::ItemOptions().clipInfo);
p.settings->setDefaultValue("Timeline/Thumbnails",
timelineui::ItemOptions().thumbnails);
p.settings->setDefaultValue("Timeline/ThumbnailsSize",
Expand Down Expand Up @@ -221,6 +223,7 @@ namespace tl
itemOptions.tracks = { 0 };
}
itemOptions.trackInfo = p.settings->getValue<bool>("Timeline/TrackInfo");
itemOptions.clipInfo = p.settings->getValue<bool>("Timeline/ClipInfo");
itemOptions.thumbnails = p.settings->getValue<bool>("Timeline/Thumbnails");
itemOptions.thumbnailHeight = p.settings->getValue<int>("Timeline/ThumbnailsSize");
itemOptions.transitions = p.settings->getValue<bool>("Timeline/Transitions");
Expand Down Expand Up @@ -643,6 +646,8 @@ namespace tl
!timelineItemOptions.tracks.empty());
p.settings->setValue("Timeline/TrackInfo",
timelineItemOptions.trackInfo);
p.settings->setValue("Timeline/ClipInfo",
timelineItemOptions.clipInfo);
p.settings->setValue("Timeline/Thumbnails",
timelineItemOptions.thumbnails);
p.settings->setValue("Timeline/ThumbnailsSize",
Expand Down
12 changes: 12 additions & 0 deletions lib/tlPlayApp/TimelineActions.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,18 @@ namespace tl
}
});

p.actions["ClipInfo"] = std::make_shared<ui::Action>(
"Clip Information",
[mainWindowWeak](bool value)
{
if (auto mainWindow = mainWindowWeak.lock())
{
auto options = mainWindow->getTimelineWidget()->getItemOptions();
options.clipInfo = value;
mainWindow->getTimelineWidget()->setItemOptions(options);
}
});

p.actions["Thumbnails"] = std::make_shared<ui::Action>(
"Thumbnails",
[mainWindowWeak](bool value)
Expand Down
2 changes: 2 additions & 0 deletions lib/tlPlayApp/TimelineMenu.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ namespace tl
addDivider();
addItem(p.actions["FirstTrack"]);
addItem(p.actions["TrackInfo"]);
addItem(p.actions["ClipInfo"]);
addItem(p.actions["Thumbnails"]);
p.thumbnailsSizeMenu = addSubMenu("Thumbnails Size");
p.thumbnailsSizeMenu->addItem(p.actions["Thumbnails100"]);
Expand Down Expand Up @@ -90,6 +91,7 @@ namespace tl
setItemChecked(_p->actions["EditAssociatedClips"], value.editAssociatedClips);
setItemChecked(_p->actions["FirstTrack"], !value.tracks.empty());
setItemChecked(_p->actions["TrackInfo"], value.trackInfo);
setItemChecked(_p->actions["ClipInfo"], value.clipInfo);
setItemChecked(_p->actions["Thumbnails"], value.thumbnails);
_thumbnailsSizeUpdate();
setItemChecked(_p->actions["Transitions"], value.transitions);
Expand Down
5 changes: 5 additions & 0 deletions lib/tlPlayQtApp/MainWindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,8 @@ namespace tl
!timelineui::ItemOptions().tracks.empty());
settings->setDefaultValue("Timeline/TrackInfo",
timelineui::ItemOptions().trackInfo);
settings->setDefaultValue("Timeline/ClipInfo",
timelineui::ItemOptions().clipInfo);
settings->setDefaultValue("Timeline/Thumbnails",
timelineui::ItemOptions().thumbnails);
settings->setDefaultValue("Timeline/ThumbnailsSize",
Expand Down Expand Up @@ -180,6 +182,7 @@ namespace tl
itemOptions.tracks = { 0 };
}
itemOptions.trackInfo = settings->getValue<bool>("Timeline/TrackInfo");
itemOptions.clipInfo = settings->getValue<bool>("Timeline/ClipInfo");
itemOptions.thumbnails = settings->getValue<bool>("Timeline/Thumbnails");
itemOptions.thumbnailHeight = settings->getValue<int>("Timeline/ThumbnailsSize");
itemOptions.transitions = settings->getValue<bool>("Timeline/Transitions");
Expand Down Expand Up @@ -670,6 +673,8 @@ namespace tl
!timelineItemOptions.tracks.empty());
settings->setValue("Timeline/TrackInfo",
timelineItemOptions.trackInfo);
settings->setValue("Timeline/ClipInfo",
timelineItemOptions.clipInfo);
settings->setValue("Timeline/Thumbnails",
timelineItemOptions.thumbnails);
settings->setValue("Timeline/ThumbnailsSize",
Expand Down
21 changes: 21 additions & 0 deletions lib/tlPlayQtApp/TimelineActions.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,10 @@ namespace tl
p.actions["TrackInfo"]->setCheckable(true);
p.actions["TrackInfo"]->setText(tr("Track Information"));

p.actions["ClipInfo"] = new QAction(parent);
p.actions["ClipInfo"]->setCheckable(true);
p.actions["ClipInfo"]->setText(tr("Clip Information"));

p.actions["Thumbnails"] = new QAction(parent);
p.actions["Thumbnails"]->setCheckable(true);
p.actions["Thumbnails"]->setText(tr("Thumbnails"));
Expand Down Expand Up @@ -97,6 +101,7 @@ namespace tl
p.menu->addSeparator();
p.menu->addAction(p.actions["FirstTrack"]);
p.menu->addAction(p.actions["TrackInfo"]);
p.menu->addAction(p.actions["ClipInfo"]);
p.menu->addAction(p.actions["Thumbnails"]);
auto thumbnailsSizeMenu = p.menu->addMenu(tr("Thumbnails Size"));
thumbnailsSizeMenu->addAction(p.actions["ThumbnailsSize/Small"]);
Expand Down Expand Up @@ -168,6 +173,17 @@ namespace tl
timelineWidget->setItemOptions(itemOptions);
});

connect(
p.actions["ClipInfo"],
&QAction::toggled,
[mainWindow](bool value)
{
auto timelineWidget = mainWindow->timelineWidget();
auto itemOptions = timelineWidget->itemOptions();
itemOptions.clipInfo = value;
timelineWidget->setItemOptions(itemOptions);
});

connect(
p.actions["Thumbnails"],
&QAction::toggled,
Expand Down Expand Up @@ -260,6 +276,11 @@ namespace tl
const auto itemOptions = p.mainWindow->timelineWidget()->itemOptions();
p.actions["TrackInfo"]->setChecked(itemOptions.trackInfo);
}
{
QSignalBlocker blocker(p.actions["ClipInfo"]);
const auto itemOptions = p.mainWindow->timelineWidget()->itemOptions();
p.actions["ClipInfo"]->setChecked(itemOptions.clipInfo);
}
{
QSignalBlocker blocker(p.actions["Thumbnails"]);
const auto itemOptions = p.mainWindow->timelineWidget()->itemOptions();
Expand Down
4 changes: 2 additions & 2 deletions lib/tlTimelineUI/AudioClipItem.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -210,7 +210,7 @@ namespace tl
const math::Box2i box(
g.min.x,
g.min.y +
_getLineHeight() + m * 2,
(_options.clipInfo ? (_getLineHeight() + m * 2) : 0),
g.w(),
_options.waveformHeight);
event.render->drawRect(
Expand Down Expand Up @@ -243,7 +243,7 @@ namespace tl
g.min.x +
x,
g.min.y +
_getLineHeight() + m * 2,
(_options.clipInfo ? (_getLineHeight() + m * 2) : 0),
_options.waveformWidth,
_options.waveformHeight);
if (box.intersects(clipRect))
Expand Down
105 changes: 53 additions & 52 deletions lib/tlTimelineUI/IBasicItem.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,15 +30,13 @@ namespace tl
image::FontMetrics fontMetrics;
math::Size2i labelSize;
math::Size2i durationSize;
std::vector<math::Size2i> markerSizes;
};
SizeData size;

struct DrawData
{
std::vector<std::shared_ptr<image::Glyph> > labelGlyphs;
std::vector<std::shared_ptr<image::Glyph> > durationGlyphs;
std::vector<std::vector<std::shared_ptr<image::Glyph> > > markerGlyphs;
};
DrawData draw;
};
Expand Down Expand Up @@ -114,26 +112,27 @@ namespace tl
_options.regularFont,
_options.fontSize * _displayScale);
p.size.fontMetrics = event.fontSystem->getMetrics(p.size.fontInfo);
p.size.labelSize = event.fontSystem->getSize(p.label, p.size.fontInfo);
p.size.durationSize = event.fontSystem->getSize(p.durationLabel, p.size.fontInfo);
p.size.markerSizes.clear();
for (const auto& marker : p.markers)
{
p.size.markerSizes.push_back(
event.fontSystem->getSize(marker.name, p.size.fontInfo));
}
p.size.labelSize = _options.clipInfo ?
event.fontSystem->getSize(p.label, p.size.fontInfo) :
math::Size2i();
p.size.durationSize = _options.clipInfo ?
event.fontSystem->getSize(p.durationLabel, p.size.fontInfo) :
math::Size2i();
p.draw.labelGlyphs.clear();
p.draw.durationGlyphs.clear();
p.draw.markerGlyphs.clear();
}
p.size.sizeInit = false;
p.size.textInit = false;

_sizeHint = math::Size2i(
_timeRange.duration().rescaled_to(1.0).value() * _scale,
p.size.fontMetrics.lineHeight +
p.size.margin * 2 +
p.size.border * 4);
_sizeHint.w = _timeRange.duration().rescaled_to(1.0).value() * _scale;
_sizeHint.h = 0;
if (_options.clipInfo)
{
_sizeHint.h +=
p.size.fontMetrics.lineHeight +
p.size.margin * 2;
}
_sizeHint.h += p.size.border * 4;
}

void IBasicItem::clipEvent(const math::Box2i& clipRect, bool clipped)
Expand All @@ -144,7 +143,6 @@ namespace tl
{
p.draw.labelGlyphs.clear();
p.draw.durationGlyphs.clear();
p.draw.markerGlyphs.clear();
}
}

Expand Down Expand Up @@ -175,47 +173,50 @@ namespace tl
event.render->setClipRectEnabled(true);
event.render->setClipRect(g2.intersect(drawRect));

math::Box2i labelGeometry(
g2.min.x + p.size.margin,
g2.min.y + p.size.margin,
p.size.labelSize.w,
p.size.fontMetrics.lineHeight);
if (drawRect.intersects(labelGeometry))
if (_options.clipInfo)
{
if (!p.label.empty() && p.draw.labelGlyphs.empty())
const math::Box2i labelGeometry(
g2.min.x + p.size.margin,
g2.min.y + p.size.margin,
p.size.labelSize.w,
p.size.fontMetrics.lineHeight);
if (drawRect.intersects(labelGeometry))
{
p.draw.labelGlyphs = event.fontSystem->getGlyphs(p.label, p.size.fontInfo);
if (!p.label.empty() && p.draw.labelGlyphs.empty())
{
p.draw.labelGlyphs = event.fontSystem->getGlyphs(p.label, p.size.fontInfo);
}
event.render->drawText(
p.draw.labelGlyphs,
math::Vector2i(
labelGeometry.min.x,
labelGeometry.min.y +
p.size.fontMetrics.ascender),
event.style->getColorRole(ui::ColorRole::Text));
}
event.render->drawText(
p.draw.labelGlyphs,
math::Vector2i(
labelGeometry.min.x,
labelGeometry.min.y +
p.size.fontMetrics.ascender),
event.style->getColorRole(ui::ColorRole::Text));
}

const math::Box2i durationGeometry(
g2.max.x -
p.size.durationSize.w -
p.size.margin,
g2.min.y + p.size.margin,
p.size.durationSize.w,
p.size.fontMetrics.lineHeight);
if (drawRect.intersects(durationGeometry) &&
!durationGeometry.intersects(labelGeometry))
{
if (!p.durationLabel.empty() && p.draw.durationGlyphs.empty())
const math::Box2i durationGeometry(
g2.max.x -
p.size.durationSize.w -
p.size.margin,
g2.min.y + p.size.margin,
p.size.durationSize.w,
p.size.fontMetrics.lineHeight);
if (drawRect.intersects(durationGeometry) &&
!durationGeometry.intersects(labelGeometry))
{
p.draw.durationGlyphs = event.fontSystem->getGlyphs(p.durationLabel, p.size.fontInfo);
if (!p.durationLabel.empty() && p.draw.durationGlyphs.empty())
{
p.draw.durationGlyphs = event.fontSystem->getGlyphs(p.durationLabel, p.size.fontInfo);
}
event.render->drawText(
p.draw.durationGlyphs,
math::Vector2i(
durationGeometry.min.x,
durationGeometry.min.y +
p.size.fontMetrics.ascender),
event.style->getColorRole(ui::ColorRole::Text));
}
event.render->drawText(
p.draw.durationGlyphs,
math::Vector2i(
durationGeometry.min.x,
durationGeometry.min.y +
p.size.fontMetrics.ascender),
event.style->getColorRole(ui::ColorRole::Text));
}
}

Expand Down
1 change: 1 addition & 0 deletions lib/tlTimelineUI/IItem.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ namespace tl
cacheDisplay == other.cacheDisplay &&
tracks == other.tracks &&
trackInfo == other.trackInfo &&
clipInfo == other.clipInfo &&
thumbnails == other.thumbnails &&
thumbnailHeight == other.thumbnailHeight &&
waveformWidth == other.waveformWidth &&
Expand Down
1 change: 1 addition & 0 deletions lib/tlTimelineUI/IItem.h
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ namespace tl
CacheDisplay cacheDisplay = CacheDisplay::VideoAndAudio;
std::vector<int> tracks;
bool trackInfo = true;
bool clipInfo = true;
bool thumbnails = true;
int thumbnailHeight = 100;
int waveformWidth = 200;
Expand Down
4 changes: 2 additions & 2 deletions lib/tlTimelineUI/VideoClipItem.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -221,7 +221,7 @@ namespace tl
const math::Box2i box(
g.min.x,
g.min.y +
_getLineHeight() + m * 2,
(_options.clipInfo ? (_getLineHeight() + m * 2) : 0),
g.w(),
_options.thumbnailHeight);
event.render->drawRect(
Expand Down Expand Up @@ -256,7 +256,7 @@ namespace tl
g.min.x +
x,
g.min.y +
_getLineHeight() + m * 2,
(_options.clipInfo ? (_getLineHeight() + m * 2) : 0),
thumbnailWidth,
_options.thumbnailHeight);
if (box.intersects(clipRect))
Expand Down

0 comments on commit fe85a11

Please sign in to comment.