Actually add marker source code

This commit is contained in:
Thomas Wilshaw
2021-10-22 22:15:48 +01:00
parent 4ce922536e
commit 5d1a854c3f
3 changed files with 180 additions and 0 deletions
+22
View File
@@ -0,0 +1,22 @@
# Olive - Non-Linear Video Editor
# Copyright (C) 2021 Olive Team
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
set(OLIVE_SOURCES
${OLIVE_SOURCES}
widget/marker/marker.h
widget/marker/marker.cpp
PARENT_SCOPE
)
+100
View File
@@ -0,0 +1,100 @@
/***
Olive - Non-Linear Video Editor
Copyright (C) 2021 Olive Team
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
***/
#include "marker.h"
#include <QPainter>
#include "common/qtutils.h"
#include "ui/colorcoding.h"
#include "widget/menu/menu.h"
#include "widget/menu/menushared.h"
namespace olive {
Marker::Marker(QWidget *parent) :
QWidget(parent),
marker_color_(Qt::green)
{
setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
setMinimumSize(20, 20);
setContextMenuPolicy(Qt::CustomContextMenu);
connect(this, &Marker::customContextMenuRequested, this, &Marker::ShowContextMenu);
color_coding_menu_ = new ColorLabelMenu();
connect(color_coding_menu_, &ColorLabelMenu::ColorSelected, this, &Marker::SetColor);
}
void Marker::paintEvent(QPaintEvent *event)
{
QFontMetrics fm = fontMetrics();
int text_height = fm.height();
int marker_width_ = QtUtils::QFontMetricsWidth(fm, "H");
int y = text_height; //13
int half_width = marker_width_ / 2;
int x = half_width; //3
if (x + half_width < 0 || x - half_width > width()) {
return;
}
QPainter p(this);
p.setPen(Qt::black);
p.setBrush(marker_color_);
p.setRenderHint(QPainter::Antialiasing);
int half_text_height = text_height / 3;
QPoint points[] = {
QPoint(x, y),
QPoint(x - half_width, y - half_text_height),
QPoint(x - half_width, y - text_height),
QPoint(x + 1 + half_width, y - text_height),
QPoint(x + 1 + half_width, y - half_text_height),
QPoint(x + 1, y),
};
p.drawPolygon(points, 6);
p.setRenderHint(QPainter::Antialiasing, false);
}
void Marker::ShowContextMenu() {
Menu m(this);
m.addMenu(color_coding_menu_);
m.exec(QCursor::pos());
}
void Marker::SetColor(int c)
{
marker_color_ = ColorCoding::GetColor(c).toQColor();
update();
}
} // namespace olive
+58
View File
@@ -0,0 +1,58 @@
/***
Olive - Non-Linear Video Editor
Copyright (C) 2021 Olive Team
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
***/
#ifndef MARKER_H
#define MARKER_H
#include <QWidget>
#include <QPushButton>
#include "common/define.h"
#include "widget/colorlabelmenu/colorlabelmenu.h"
namespace olive {
class Marker : public QWidget {
Q_OBJECT
public:
Marker(QWidget* parent = nullptr);
protected:
void paintEvent(QPaintEvent* event) override;
//virtual void mouseReleaseEvent(QMouseEvent* event) override;
//virtual void mouseDoubleClickEvent(QMouseEvent* event) override;
signals:
//void MouseClicked();
//void MouseDoubleClicked();
private:
ColorLabelMenu* color_coding_menu_;
QColor marker_color_;
private slots:
void ShowContextMenu();
void SetColor(int c);
};
} // namespace olive
#endif // MARKER_H