diff --git a/data/strings/en.ini b/data/strings/en.ini index 7afabac69..0cbee2274 100644 --- a/data/strings/en.ini +++ b/data/strings/en.ini @@ -2120,6 +2120,8 @@ jumble = Jumble Tool shortcut = Shortcut: {0} preview_hide = Hide Preview preview_show = Show Preview +timeline_hide = Hide Timeline +timeline_show = Show Timeline [undo_history] title = Undo History diff --git a/src/app/ui/toolbar.cpp b/src/app/ui/toolbar.cpp index 4f3492596..91fd81ab4 100644 --- a/src/app/ui/toolbar.cpp +++ b/src/app/ui/toolbar.cpp @@ -156,6 +156,14 @@ bool ToolBar::onProcessMessage(Message* msg) bool state = preview->isPreviewEnabled(); preview->setPreviewEnabled(!state); } + + toolrc = getToolGroupBounds(TimelineVisibilityIndex); + if (mousePos.y >= toolrc.y && + mousePos.y < toolrc.y + toolrc.h) { + // Toggle timeline visibility + bool state = App::instance()->mainWindow()->getTimelineVisibility(); + App::instance()->mainWindow()->setTimelineVisibility(!state); + } break; } @@ -193,6 +201,12 @@ bool ToolBar::onProcessMessage(Message* msg) new_hot_index = PreviewVisibilityIndex; } + toolrc = getToolGroupBounds(TimelineVisibilityIndex); + if (mousePos.y >= toolrc.y && + mousePos.y < toolrc.y + toolrc.h) { + new_hot_index = TimelineVisibilityIndex; + } + // hot button changed if (new_hot_tool != m_hotTool || new_hot_index != m_hotIndex) { @@ -299,13 +313,14 @@ void ToolBar::onPaint(ui::PaintEvent& ev) ToolGroupList::iterator it = toolbox->begin_group(); int groups = toolbox->getGroupsCount(); Rect toolrc; + SkinPartPtr nw; + os::Surface* icon; g->fillRect(theme->colors.tabActiveFace(), bounds); for (int c=0; cparts.toolbuttonHot(); @@ -315,36 +330,28 @@ void ToolBar::onPaint(ui::PaintEvent& ev) theme->parts.toolbuttonLast(); } - toolrc = getToolGroupBounds(c); - toolrc.offset(-origin()); - theme->drawRect(g, toolrc, nw.get()); - // Draw the tool icon - os::Surface* icon = theme->getToolIcon(tool->getId().c_str()); - if (icon) { - g->drawRgbaSurface(icon, - CALC_FOR_CENTER(toolrc.x, toolrc.w, icon->width()), - CALC_FOR_CENTER(toolrc.y, toolrc.h, icon->height())); - } + icon = theme->getToolIcon(tool->getId().c_str()); + drawToolIcon(g, c, nw, icon); } // Draw button to show/hide preview - toolrc = getToolGroupBounds(PreviewVisibilityIndex); - toolrc.offset(-origin()); bool isHot = (m_hotIndex == PreviewVisibilityIndex || App::instance()->mainWindow()->getPreviewEditor()->isPreviewEnabled()); - theme->drawRect( - g, - toolrc, - (isHot ? theme->parts.toolbuttonHot().get(): - theme->parts.toolbuttonLast().get())); + nw = isHot ? theme->parts.toolbuttonHot(): + theme->parts.toolbuttonLast(); + icon = theme->getToolIcon("minieditor"); - os::Surface* icon = theme->getToolIcon("minieditor"); - if (icon) { - g->drawRgbaSurface(icon, - CALC_FOR_CENTER(toolrc.x, toolrc.w, icon->width()), - CALC_FOR_CENTER(toolrc.y, toolrc.h, icon->height())); - } + drawToolIcon(g, PreviewVisibilityIndex, nw, icon); + + // Draw button to show/hide timeline + isHot = (m_hotIndex == TimelineVisibilityIndex || + App::instance()->mainWindow()->getTimelineVisibility()); + nw = isHot ? theme->parts.toolbuttonHot(): + theme->parts.toolbuttonLast(); + icon = theme->getToolIcon("minieditor"); + + drawToolIcon(g, TimelineVisibilityIndex, nw, icon); } void ToolBar::onVisible(bool visible) @@ -457,6 +464,11 @@ Rect ToolBar::getToolGroupBounds(int group_index) rc.h = iconsize.h+2*guiscale(); break; + case TimelineVisibilityIndex: + rc.y += rc.h - iconsize.h - iconsize.h - 2*guiscale(); + rc.h = iconsize.h+2*guiscale(); + break; + default: rc.y += group_index*(iconsize.h-1*guiscale()); rc.h = group_index < groups-1 ? iconsize.h+1*guiscale(): @@ -517,6 +529,12 @@ void ToolBar::openTipWindow(int group_index, Tool* tool) else tooltip = Strings::tools_preview_show(); } + else if (group_index == TimelineVisibilityIndex) { + if (App::instance()->mainWindow()->getTimelineVisibility()) + tooltip = Strings::tools_timeline_hide(); + else + tooltip = Strings::tools_timeline_show(); + } else return; @@ -586,6 +604,20 @@ void ToolBar::onClosePopup() invalidate(); } +void ToolBar::drawToolIcon(Graphics* g, int group_index, SkinPartPtr skin, os::Surface* icon) { + auto theme = SkinTheme::get(this); + Rect toolrc = getToolGroupBounds(group_index); + toolrc.offset(-origin()); + + theme->drawRect(g, toolrc, skin.get()); + + if (icon) { + g->drawRgbaSurface(icon, + CALC_FOR_CENTER(toolrc.x, toolrc.w, icon->width()), + CALC_FOR_CENTER(toolrc.y, toolrc.h, icon->height())); + } +} + ////////////////////////////////////////////////////////////////////// // ToolStrip ////////////////////////////////////////////////////////////////////// diff --git a/src/app/ui/toolbar.h b/src/app/ui/toolbar.h index e8ec82f34..d411e9c18 100644 --- a/src/app/ui/toolbar.h +++ b/src/app/ui/toolbar.h @@ -9,6 +9,7 @@ #pragma once #include "app/tools/active_tool_observer.h" +#include "app/ui/skin/skin_part.h" #include "gfx/point.h" #include "obs/connection.h" #include "ui/timer.h" @@ -37,6 +38,7 @@ namespace app { static const int NoneIndex = -1; static const int PreviewVisibilityIndex = -2; + static const int TimelineVisibilityIndex = -3; ToolBar(); ~ToolBar(); @@ -62,6 +64,7 @@ namespace app { gfx::Point getToolPositionInGroup(int group_index, tools::Tool* tool); void openTipWindow(int group_index, tools::Tool* tool); void onClosePopup(); + void drawToolIcon(ui::Graphics* g, int group_index, skin::SkinPartPtr skin, os::Surface* icon); // ActiveToolObserver impl void onActiveToolChange(tools::Tool* tool) override;