2017-07-20 21:03:13 +12:00
|
|
|
#include "orientation.h"
|
|
|
|
#include "toonz/columnfan.h"
|
2017-10-04 20:00:34 +13:00
|
|
|
#include "toonz/preferences.h"
|
2017-07-20 21:03:13 +12:00
|
|
|
|
|
|
|
#include <QPainterPath>
|
|
|
|
#include <QBoxLayout>
|
|
|
|
#include <math.h>
|
2017-07-06 21:28:04 +12:00
|
|
|
#include <stdexcept>
|
2017-07-20 21:03:13 +12:00
|
|
|
|
|
|
|
namespace {
|
2018-08-07 19:22:49 +12:00
|
|
|
const int KEY_ICON_WIDTH = 11;
|
2020-09-04 16:09:45 +12:00
|
|
|
const int KEY_ICON_HEIGHT = 11;
|
2018-08-07 19:22:49 +12:00
|
|
|
const int EASE_TRIANGLE_SIZE = 4;
|
|
|
|
const int PLAY_MARKER_SIZE = 10;
|
|
|
|
const int PINNED_SIZE = 10;
|
|
|
|
const int FRAME_MARKER_SIZE = 4;
|
|
|
|
const int FOLDED_CELL_SIZE = 9;
|
|
|
|
const int SHIFTTRACE_DOT_SIZE = 12;
|
2019-09-26 14:03:35 +12:00
|
|
|
|
|
|
|
QRect iconRect(const QRect &areaRect, const int iconWidth, const int iconHeight,
|
|
|
|
const int xOffset = 0) {
|
|
|
|
return QRect(
|
|
|
|
areaRect.left() + xOffset + ((areaRect.width() / 2) - (iconWidth / 2)),
|
|
|
|
areaRect.top() + ((areaRect.height() / 2) - (iconHeight / 2)), iconWidth,
|
|
|
|
iconHeight);
|
2017-07-20 21:03:13 +12:00
|
|
|
}
|
|
|
|
|
2019-09-26 14:03:35 +12:00
|
|
|
} // namespace
|
|
|
|
|
2017-07-20 21:03:13 +12:00
|
|
|
class TopToBottomOrientation : public Orientation {
|
2021-08-23 21:01:37 +12:00
|
|
|
int CELL_WIDTH = 74;
|
|
|
|
// const int CELL_WIDTH = 74;
|
2017-07-20 22:46:27 +12:00
|
|
|
const int CELL_HEIGHT = 20;
|
|
|
|
const int CELL_DRAG_WIDTH = 7;
|
2017-10-04 20:00:34 +13:00
|
|
|
const int EXTENDER_WIDTH = 20;
|
2017-07-20 22:46:27 +12:00
|
|
|
const int EXTENDER_HEIGHT = 8;
|
|
|
|
const int SOUND_PREVIEW_WIDTH = 7;
|
2017-10-04 20:00:34 +13:00
|
|
|
const int LAYER_HEADER_HEIGHT = 119;
|
2017-07-20 21:03:13 +12:00
|
|
|
const int FOLDED_LAYER_HEADER_HEIGHT = LAYER_HEADER_HEIGHT;
|
2017-07-20 22:46:27 +12:00
|
|
|
const int FOLDED_LAYER_HEADER_WIDTH = 8;
|
2021-08-23 21:01:37 +12:00
|
|
|
int FRAME_HEADER_WIDTH = CELL_WIDTH;
|
|
|
|
int PLAY_RANGE_X = FRAME_HEADER_WIDTH / 2 - PLAY_MARKER_SIZE;
|
|
|
|
const int ONION_X = 0;
|
|
|
|
int ONION_Y = 0;
|
|
|
|
// const int ICON_WIDTH = 18;
|
|
|
|
// const int ICON_HEIGHT = 18;
|
|
|
|
int ICON_WIDTH = 18;
|
|
|
|
int ICON_HEIGHT = 18;
|
2021-04-28 14:02:23 +12:00
|
|
|
const int TRACKLEN = 60;
|
|
|
|
const int SHIFTTRACE_DOT_OFFSET = 3;
|
|
|
|
const int CAMERA_CELL_WIDTH = 22;
|
|
|
|
const int LAYER_FOOTER_PANEL_WIDTH = 16;
|
2021-08-23 21:01:37 +12:00
|
|
|
int ONION_SIZE = 19;
|
|
|
|
int ONION_DOT_SIZE = 8;
|
2017-07-20 21:03:13 +12:00
|
|
|
|
|
|
|
public:
|
|
|
|
TopToBottomOrientation();
|
2020-09-14 06:39:43 +12:00
|
|
|
virtual ~TopToBottomOrientation(){};
|
2017-07-20 21:03:13 +12:00
|
|
|
|
|
|
|
virtual CellPosition xyToPosition(const QPoint &xy,
|
|
|
|
const ColumnFan *fan) const override;
|
|
|
|
virtual QPoint positionToXY(const CellPosition &position,
|
|
|
|
const ColumnFan *fan) const override;
|
2021-04-28 14:02:23 +12:00
|
|
|
virtual CellPositionRatio xyToPositionRatio(const QPointF &xy) const override;
|
|
|
|
virtual QPointF positionRatioToXY(
|
2017-07-20 21:03:13 +12:00
|
|
|
const CellPositionRatio &ratio) const override;
|
|
|
|
|
|
|
|
virtual int colToLayerAxis(int layer, const ColumnFan *fan) const override;
|
|
|
|
virtual int rowToFrameAxis(int frame) const override;
|
|
|
|
|
|
|
|
virtual QPoint frameLayerToXY(int frameAxis, int layerAxis) const override;
|
|
|
|
virtual int layerAxis(const QPoint &xy) const override;
|
|
|
|
virtual int frameAxis(const QPoint &xy) const override;
|
|
|
|
|
|
|
|
virtual NumberRange layerSide(const QRect &area) const override;
|
|
|
|
virtual NumberRange frameSide(const QRect &area) const override;
|
|
|
|
virtual QPoint topRightCorner(const QRect &area) const override;
|
|
|
|
|
|
|
|
virtual CellPosition arrowShift(int direction) const override;
|
|
|
|
|
|
|
|
virtual QString name() const override { return "TopToBottom"; }
|
2018-06-04 15:18:43 +12:00
|
|
|
virtual QString caption() const override { return QObject::tr("Xsheet"); }
|
2017-07-20 21:03:13 +12:00
|
|
|
virtual const Orientation *next() const override {
|
|
|
|
return Orientations::leftToRight();
|
|
|
|
}
|
|
|
|
|
|
|
|
virtual bool isVerticalTimeline() const override { return true; }
|
2017-10-04 20:00:34 +13:00
|
|
|
virtual bool flipVolume() const override { return false; }
|
2017-07-20 21:03:13 +12:00
|
|
|
|
|
|
|
virtual int cellWidth() const override { return CELL_WIDTH; }
|
|
|
|
virtual int cellHeight() const override { return CELL_HEIGHT; }
|
2017-11-29 00:29:52 +13:00
|
|
|
virtual int foldedCellSize() const override { return FOLDED_CELL_SIZE; }
|
2017-07-20 21:03:13 +12:00
|
|
|
};
|
|
|
|
|
|
|
|
class LeftToRightOrientation : public Orientation {
|
|
|
|
const int CELL_WIDTH = 50;
|
2018-10-31 15:56:59 +13:00
|
|
|
const int CELL_HEIGHT = 24;
|
|
|
|
const int CELL_DRAG_HEIGHT = 7;
|
2017-07-20 21:03:13 +12:00
|
|
|
const int EXTENDER_WIDTH = 8;
|
|
|
|
const int EXTENDER_HEIGHT = 12;
|
|
|
|
const int SOUND_PREVIEW_HEIGHT = 6;
|
|
|
|
const int FRAME_HEADER_HEIGHT = 50;
|
2017-11-24 22:15:54 +13:00
|
|
|
const int ONION_X = 0, ONION_Y = 0;
|
2021-08-23 21:01:37 +12:00
|
|
|
const int ONION_SIZE = 19;
|
|
|
|
const int ONION_DOT_SIZE = 8;
|
2017-07-20 21:03:13 +12:00
|
|
|
const int PLAY_RANGE_Y = ONION_SIZE;
|
2017-10-04 20:00:34 +13:00
|
|
|
const int ICON_WIDTH = 20;
|
|
|
|
const int ICON_HEIGHT = 20;
|
2017-07-20 21:03:13 +12:00
|
|
|
const int ICON_OFFSET = ICON_WIDTH;
|
2017-10-04 20:00:34 +13:00
|
|
|
const int ICONS_WIDTH = ICON_OFFSET * 4; // 88
|
2018-10-31 15:56:59 +13:00
|
|
|
const int THUMBNAIL_WIDTH = 43;
|
2017-07-20 21:03:13 +12:00
|
|
|
const int LAYER_NUMBER_WIDTH = 20;
|
2017-10-04 20:00:34 +13:00
|
|
|
const int LAYER_NAME_WIDTH = 150;
|
2017-07-20 21:03:13 +12:00
|
|
|
const int LAYER_HEADER_WIDTH =
|
2018-10-31 15:56:59 +13:00
|
|
|
ICONS_WIDTH + THUMBNAIL_WIDTH + LAYER_NUMBER_WIDTH + LAYER_NAME_WIDTH;
|
2017-07-20 21:03:13 +12:00
|
|
|
const int FOLDED_LAYER_HEADER_HEIGHT = 8;
|
2017-07-20 22:46:27 +12:00
|
|
|
const int FOLDED_LAYER_HEADER_WIDTH = LAYER_HEADER_WIDTH;
|
2017-10-04 20:00:34 +13:00
|
|
|
const int TRACKLEN = 60;
|
2018-08-07 19:22:49 +12:00
|
|
|
const int SHIFTTRACE_DOT_OFFSET = 5;
|
2018-10-31 15:56:59 +13:00
|
|
|
const int LAYER_HEADER_PANEL_HEIGHT = 20;
|
|
|
|
const int LAYER_FOOTER_PANEL_HEIGHT = 16;
|
2019-09-26 14:03:35 +12:00
|
|
|
const int CAMERA_CELL_HEIGHT = CELL_HEIGHT;
|
2017-07-20 21:03:13 +12:00
|
|
|
|
|
|
|
public:
|
|
|
|
LeftToRightOrientation();
|
2020-09-14 06:39:43 +12:00
|
|
|
virtual ~LeftToRightOrientation(){};
|
2017-07-20 21:03:13 +12:00
|
|
|
|
|
|
|
virtual CellPosition xyToPosition(const QPoint &xy,
|
|
|
|
const ColumnFan *fan) const override;
|
|
|
|
virtual QPoint positionToXY(const CellPosition &position,
|
|
|
|
const ColumnFan *fan) const override;
|
2021-04-28 14:02:23 +12:00
|
|
|
virtual CellPositionRatio xyToPositionRatio(const QPointF &xy) const override;
|
|
|
|
virtual QPointF positionRatioToXY(
|
2017-07-20 21:03:13 +12:00
|
|
|
const CellPositionRatio &ratio) const override;
|
|
|
|
|
|
|
|
virtual int colToLayerAxis(int layer, const ColumnFan *fan) const override;
|
|
|
|
virtual int rowToFrameAxis(int frame) const override;
|
|
|
|
|
|
|
|
virtual QPoint frameLayerToXY(int frameAxis, int layerAxis) const override;
|
|
|
|
virtual int layerAxis(const QPoint &xy) const override;
|
|
|
|
virtual int frameAxis(const QPoint &xy) const override;
|
|
|
|
|
|
|
|
virtual NumberRange layerSide(const QRect &area) const override;
|
|
|
|
virtual NumberRange frameSide(const QRect &area) const override;
|
|
|
|
virtual QPoint topRightCorner(const QRect &area) const override;
|
|
|
|
|
|
|
|
virtual CellPosition arrowShift(int direction) const override;
|
|
|
|
|
|
|
|
virtual QString name() const override { return "LeftToRight"; }
|
2018-06-04 15:18:43 +12:00
|
|
|
virtual QString caption() const override { return QObject::tr("Timeline"); }
|
2017-07-20 21:03:13 +12:00
|
|
|
virtual const Orientation *next() const override {
|
|
|
|
return Orientations::topToBottom();
|
|
|
|
}
|
|
|
|
|
|
|
|
virtual bool isVerticalTimeline() const override { return false; }
|
|
|
|
virtual bool flipVolume() const override { return false; }
|
|
|
|
|
|
|
|
virtual int cellWidth() const override { return CELL_WIDTH; }
|
|
|
|
virtual int cellHeight() const override { return CELL_HEIGHT; }
|
2017-11-29 00:29:52 +13:00
|
|
|
virtual int foldedCellSize() const override { return FOLDED_CELL_SIZE; }
|
2017-07-20 21:03:13 +12:00
|
|
|
};
|
|
|
|
|
|
|
|
/// -------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
int NumberRange::weight(double toWeight) const { // weight ranging 0..1
|
|
|
|
return _from + (_to - _from) * toWeight;
|
|
|
|
}
|
|
|
|
|
|
|
|
NumberRange NumberRange::adjusted(int addFrom, int addTo) const {
|
|
|
|
return NumberRange(_from + addFrom, _to + addTo);
|
|
|
|
}
|
|
|
|
|
|
|
|
double NumberRange::ratio(int at) const {
|
2020-05-31 16:24:30 +12:00
|
|
|
double result = ((double)at - _from) / (_to - _from);
|
2017-07-20 21:03:13 +12:00
|
|
|
if (result < 0) result = 0;
|
|
|
|
if (result > 1) result = 1;
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
/// -------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
// const int Orientations::COUNT = 2;
|
|
|
|
|
|
|
|
Orientations::Orientations() : _topToBottom(nullptr), _leftToRight(nullptr) {
|
|
|
|
_topToBottom = new TopToBottomOrientation();
|
|
|
|
_leftToRight = new LeftToRightOrientation();
|
|
|
|
|
|
|
|
_all.push_back(_topToBottom);
|
|
|
|
_all.push_back(_leftToRight);
|
|
|
|
}
|
|
|
|
Orientations::~Orientations() {
|
|
|
|
delete _topToBottom;
|
|
|
|
_topToBottom = nullptr;
|
|
|
|
delete _leftToRight;
|
|
|
|
_leftToRight = nullptr;
|
|
|
|
}
|
|
|
|
|
|
|
|
const Orientations &Orientations::instance() {
|
|
|
|
static Orientations singleton;
|
|
|
|
return singleton;
|
|
|
|
}
|
|
|
|
|
|
|
|
const Orientation *Orientations::topToBottom() {
|
|
|
|
return instance()._topToBottom;
|
|
|
|
}
|
|
|
|
const Orientation *Orientations::leftToRight() {
|
|
|
|
return instance()._leftToRight;
|
|
|
|
}
|
2020-11-13 10:40:58 +13:00
|
|
|
const std::vector<const Orientation *> &Orientations::all() {
|
2017-07-20 21:03:13 +12:00
|
|
|
return instance()._all;
|
|
|
|
}
|
|
|
|
const Orientation *Orientations::byName(const QString &name) {
|
2020-11-13 10:40:58 +13:00
|
|
|
std::vector<const Orientation *> m_all = all();
|
2017-07-20 21:03:13 +12:00
|
|
|
for (auto it = m_all.begin(); it != m_all.end(); it++)
|
|
|
|
if ((*it)->name() == name) return *it;
|
|
|
|
throw std::runtime_error(
|
|
|
|
(QString("no such orientation: ") + name).toStdString().c_str());
|
|
|
|
}
|
|
|
|
|
|
|
|
/// -------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
QLine Orientation::verticalLine(int layerAxis,
|
|
|
|
const NumberRange &frameAxis) const {
|
|
|
|
QPoint first = frameLayerToXY(frameAxis.from(), layerAxis);
|
|
|
|
QPoint second = frameLayerToXY(frameAxis.to(), layerAxis);
|
|
|
|
return QLine(first, second);
|
|
|
|
}
|
|
|
|
QLine Orientation::horizontalLine(int frameAxis,
|
|
|
|
const NumberRange &layerAxis) const {
|
|
|
|
QPoint first = frameLayerToXY(frameAxis, layerAxis.from());
|
|
|
|
QPoint second = frameLayerToXY(frameAxis, layerAxis.to());
|
|
|
|
return QLine(first, second);
|
|
|
|
}
|
|
|
|
QRect Orientation::frameLayerRect(const NumberRange &frameAxis,
|
|
|
|
const NumberRange &layerAxis) const {
|
|
|
|
QPoint topLeft = frameLayerToXY(frameAxis.from(), layerAxis.from());
|
|
|
|
QPoint bottomRight = frameLayerToXY(frameAxis.to(), layerAxis.to());
|
|
|
|
return QRect(topLeft, bottomRight);
|
|
|
|
}
|
|
|
|
|
|
|
|
QRect Orientation::foldedRectangle(int layerAxis, const NumberRange &frameAxis,
|
|
|
|
int i) const {
|
|
|
|
QPoint topLeft = frameLayerToXY(frameAxis.from(), layerAxis + 1 + i * 3);
|
|
|
|
QPoint size = frameLayerToXY(frameAxis.length(), 2);
|
|
|
|
return QRect(topLeft, QSize(size.x(), size.y()));
|
|
|
|
}
|
|
|
|
QLine Orientation::foldedRectangleLine(int layerAxis,
|
|
|
|
const NumberRange &frameAxis,
|
|
|
|
int i) const {
|
|
|
|
return verticalLine(layerAxis + i * 3, frameAxis);
|
|
|
|
}
|
|
|
|
|
|
|
|
void Orientation::addRect(PredefinedRect which, const QRect &rect) {
|
2017-10-04 20:00:34 +13:00
|
|
|
_rects.erase(which);
|
2020-11-13 10:40:58 +13:00
|
|
|
_rects.emplace(which, rect);
|
2017-07-20 21:03:13 +12:00
|
|
|
}
|
|
|
|
void Orientation::addLine(PredefinedLine which, const QLine &line) {
|
2017-10-04 20:00:34 +13:00
|
|
|
_lines.erase(which);
|
2020-11-13 10:40:58 +13:00
|
|
|
_lines.emplace(which, line);
|
2017-07-20 21:03:13 +12:00
|
|
|
}
|
|
|
|
void Orientation::addDimension(PredefinedDimension which, int dimension) {
|
2017-10-04 20:00:34 +13:00
|
|
|
_dimensions.erase(which);
|
2020-11-13 10:40:58 +13:00
|
|
|
_dimensions.emplace(which, dimension);
|
2017-07-20 21:03:13 +12:00
|
|
|
}
|
|
|
|
void Orientation::addPath(PredefinedPath which, const QPainterPath &path) {
|
2017-10-04 20:00:34 +13:00
|
|
|
_paths.erase(which);
|
2020-11-13 10:40:58 +13:00
|
|
|
_paths.emplace(which, path);
|
2017-07-20 21:03:13 +12:00
|
|
|
}
|
|
|
|
void Orientation::addPoint(PredefinedPoint which, const QPoint &point) {
|
2017-10-04 20:00:34 +13:00
|
|
|
_points.erase(which);
|
2020-11-13 10:40:58 +13:00
|
|
|
_points.emplace(which, point);
|
2017-07-20 21:03:13 +12:00
|
|
|
}
|
|
|
|
void Orientation::addRange(PredefinedRange which, const NumberRange &range) {
|
2017-10-04 20:00:34 +13:00
|
|
|
_ranges.erase(which);
|
2020-11-13 10:40:58 +13:00
|
|
|
_ranges.emplace(which, range);
|
2017-07-20 21:03:13 +12:00
|
|
|
}
|
2017-10-04 20:00:34 +13:00
|
|
|
void Orientation::addFlag(PredefinedFlag which, const bool &flag) {
|
|
|
|
_flags.erase(which);
|
2020-11-13 10:40:58 +13:00
|
|
|
_flags.emplace(which, flag);
|
2017-10-04 20:00:34 +13:00
|
|
|
}
|
2017-07-20 21:03:13 +12:00
|
|
|
/// -------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
TopToBottomOrientation::TopToBottomOrientation() {
|
2017-10-04 20:00:34 +13:00
|
|
|
QString layout = Preferences::instance()->getLoadedXsheetLayout();
|
|
|
|
|
|
|
|
int use_header_height = LAYER_HEADER_HEIGHT;
|
|
|
|
|
2021-08-23 21:01:37 +12:00
|
|
|
if (layout == QString("Compact"))
|
|
|
|
use_header_height -= 18;
|
|
|
|
else if (layout == QString("Minimum"))
|
|
|
|
use_header_height = CELL_HEIGHT * 2;
|
2017-10-04 20:00:34 +13:00
|
|
|
|
|
|
|
int user_folded_header_height = use_header_height;
|
|
|
|
|
2021-08-23 21:01:37 +12:00
|
|
|
if (layout == QString("Minimum")) {
|
|
|
|
CELL_WIDTH = 50;
|
|
|
|
ICON_WIDTH = 16;
|
|
|
|
ICON_HEIGHT = 16;
|
|
|
|
FRAME_HEADER_WIDTH = 45;
|
|
|
|
ONION_SIZE = 15;
|
|
|
|
ONION_DOT_SIZE = 6;
|
|
|
|
PLAY_RANGE_X = ONION_SIZE;
|
|
|
|
ONION_Y = (CELL_HEIGHT - ONION_SIZE) / 2;
|
|
|
|
}
|
|
|
|
|
2017-07-20 21:03:13 +12:00
|
|
|
//
|
|
|
|
// Area rectangles
|
|
|
|
//
|
|
|
|
|
|
|
|
// Cell viewer
|
|
|
|
QRect cellRect(0, 0, CELL_WIDTH, CELL_HEIGHT);
|
|
|
|
addRect(PredefinedRect::CELL, cellRect);
|
2019-09-26 14:03:35 +12:00
|
|
|
addRect(PredefinedRect::CAMERA_CELL,
|
|
|
|
QRect(0, 0, CAMERA_CELL_WIDTH, CELL_HEIGHT));
|
2017-07-20 22:46:27 +12:00
|
|
|
addRect(PredefinedRect::DRAG_HANDLE_CORNER,
|
|
|
|
QRect(0, 0, CELL_DRAG_WIDTH, CELL_HEIGHT));
|
|
|
|
QRect keyRect(CELL_WIDTH - KEY_ICON_WIDTH,
|
|
|
|
(CELL_HEIGHT - KEY_ICON_HEIGHT) / 2, KEY_ICON_WIDTH,
|
|
|
|
KEY_ICON_HEIGHT);
|
2017-07-20 21:03:13 +12:00
|
|
|
addRect(PredefinedRect::KEY_ICON, keyRect);
|
2020-09-04 16:09:45 +12:00
|
|
|
QRect cameraKeyRect((CAMERA_CELL_WIDTH - KEY_ICON_WIDTH) / 2 + 3,
|
2019-09-26 14:03:35 +12:00
|
|
|
(CELL_HEIGHT - KEY_ICON_HEIGHT) / 2, KEY_ICON_WIDTH,
|
|
|
|
KEY_ICON_HEIGHT);
|
|
|
|
addRect(PredefinedRect::CAMERA_KEY_ICON, cameraKeyRect);
|
2017-07-20 21:03:13 +12:00
|
|
|
QRect nameRect = cellRect.adjusted(8, 0, -6, 0);
|
|
|
|
addRect(PredefinedRect::CELL_NAME, nameRect);
|
2017-07-20 22:46:27 +12:00
|
|
|
addRect(PredefinedRect::CELL_NAME_WITH_KEYFRAME,
|
|
|
|
nameRect.adjusted(0, 0, -KEY_ICON_WIDTH, 0));
|
|
|
|
addRect(PredefinedRect::END_EXTENDER,
|
|
|
|
QRect(-EXTENDER_WIDTH - KEY_ICON_WIDTH, 0, EXTENDER_WIDTH,
|
|
|
|
EXTENDER_HEIGHT));
|
|
|
|
addRect(PredefinedRect::BEGIN_EXTENDER,
|
|
|
|
QRect(-EXTENDER_WIDTH - KEY_ICON_WIDTH, -EXTENDER_HEIGHT,
|
|
|
|
EXTENDER_WIDTH, EXTENDER_HEIGHT));
|
|
|
|
addRect(PredefinedRect::KEYFRAME_AREA,
|
|
|
|
QRect(CELL_WIDTH - KEY_ICON_WIDTH, 0, KEY_ICON_WIDTH, CELL_HEIGHT));
|
2017-07-20 21:03:13 +12:00
|
|
|
addRect(PredefinedRect::DRAG_AREA, QRect(0, 0, CELL_DRAG_WIDTH, CELL_HEIGHT));
|
2021-11-22 22:49:42 +13:00
|
|
|
int markSize = CELL_HEIGHT * 8 / 10; // 80% size
|
|
|
|
addRect(PredefinedRect::CELL_MARK_AREA,
|
|
|
|
QRect(CELL_DRAG_WIDTH - 3, 2, markSize, markSize));
|
2017-07-20 22:46:27 +12:00
|
|
|
QRect soundRect(CELL_DRAG_WIDTH, 0,
|
|
|
|
CELL_WIDTH - CELL_DRAG_WIDTH - SOUND_PREVIEW_WIDTH,
|
|
|
|
CELL_HEIGHT);
|
2017-07-20 21:03:13 +12:00
|
|
|
addRect(PredefinedRect::SOUND_TRACK, soundRect);
|
2017-07-20 22:46:27 +12:00
|
|
|
addRect(PredefinedRect::PREVIEW_TRACK,
|
|
|
|
QRect(CELL_WIDTH - SOUND_PREVIEW_WIDTH + 1, 0, SOUND_PREVIEW_WIDTH,
|
|
|
|
CELL_HEIGHT));
|
|
|
|
addRect(PredefinedRect::BEGIN_SOUND_EDIT,
|
|
|
|
QRect(CELL_DRAG_WIDTH, 0, CELL_WIDTH - CELL_DRAG_WIDTH, 2));
|
|
|
|
addRect(
|
|
|
|
PredefinedRect::END_SOUND_EDIT,
|
|
|
|
QRect(CELL_DRAG_WIDTH, CELL_HEIGHT - 2, CELL_WIDTH - CELL_DRAG_WIDTH, 2));
|
2017-07-20 21:03:13 +12:00
|
|
|
addRect(PredefinedRect::LOOP_ICON, QRect(keyRect.left(), 0, 10, 11));
|
2019-09-26 14:03:35 +12:00
|
|
|
addRect(PredefinedRect::CAMERA_LOOP_ICON,
|
|
|
|
QRect(cameraKeyRect.left(), 0, 10, 11));
|
2021-04-28 14:02:23 +12:00
|
|
|
QRect frameMarker(CELL_WIDTH - FRAME_MARKER_SIZE - 6,
|
|
|
|
(CELL_HEIGHT - FRAME_MARKER_SIZE) / 2, FRAME_MARKER_SIZE,
|
|
|
|
FRAME_MARKER_SIZE);
|
|
|
|
addRect(PredefinedRect::FRAME_MARKER_AREA, frameMarker);
|
|
|
|
addRect(PredefinedRect::CAMERA_FRAME_MARKER_AREA,
|
|
|
|
cameraKeyRect.translated(-3, 0));
|
2017-07-20 21:03:13 +12:00
|
|
|
|
|
|
|
// Note viewer
|
2021-08-23 21:01:37 +12:00
|
|
|
addRect(PredefinedRect::NOTE_AREA,
|
|
|
|
QRect(QPoint(0, 0), QSize(FRAME_HEADER_WIDTH, use_header_height)));
|
2017-07-20 22:46:27 +12:00
|
|
|
addRect(PredefinedRect::NOTE_ICON,
|
|
|
|
QRect(QPoint(0, 0), QSize(CELL_WIDTH - 2, CELL_HEIGHT - 2)));
|
2018-10-31 15:56:59 +13:00
|
|
|
|
|
|
|
// Layer header panel
|
|
|
|
addRect(PredefinedRect::LAYER_HEADER_PANEL, QRect(0, 0, -1, -1)); // hide
|
|
|
|
addRect(PredefinedRect::PANEL_EYE, QRect(0, 0, -1, -1)); // hide
|
|
|
|
addRect(PredefinedRect::PANEL_PREVIEW_LAYER, QRect(0, 0, -1, -1)); // hide
|
|
|
|
addRect(PredefinedRect::PANEL_LOCK, QRect(0, 0, -1, -1)); // hide
|
|
|
|
addRect(PredefinedRect::PANEL_LAYER_NAME, QRect(0, 0, -1, -1)); // hide
|
2017-07-20 21:03:13 +12:00
|
|
|
|
|
|
|
// Row viewer
|
2021-08-23 21:01:37 +12:00
|
|
|
if (layout == QString("Minimum"))
|
|
|
|
addRect(PredefinedRect::FRAME_LABEL,
|
|
|
|
QRect(0, 0, FRAME_HEADER_WIDTH - 2, CELL_HEIGHT));
|
|
|
|
else
|
|
|
|
addRect(PredefinedRect::FRAME_LABEL,
|
|
|
|
QRect(0, 0, CELL_WIDTH - 4, CELL_HEIGHT));
|
2017-07-20 22:46:27 +12:00
|
|
|
addRect(PredefinedRect::FRAME_HEADER,
|
2017-08-14 06:19:02 +12:00
|
|
|
QRect(0, 0, FRAME_HEADER_WIDTH, CELL_HEIGHT));
|
2017-07-20 22:46:27 +12:00
|
|
|
addRect(PredefinedRect::PLAY_RANGE,
|
|
|
|
QRect(PLAY_RANGE_X, 0, PLAY_MARKER_SIZE, CELL_HEIGHT));
|
|
|
|
addRect(PredefinedRect::ONION,
|
|
|
|
QRect(ONION_X + (3 * ONION_DOT_SIZE - ONION_SIZE) / 2, ONION_Y,
|
2017-11-14 18:24:32 +13:00
|
|
|
ONION_SIZE, ONION_SIZE)
|
|
|
|
.adjusted(2, 1, 2, 1));
|
2017-07-20 21:03:13 +12:00
|
|
|
int adjustOnion = (ONION_SIZE - ONION_DOT_SIZE) / 2;
|
2017-07-20 22:46:27 +12:00
|
|
|
addRect(PredefinedRect::ONION_DOT,
|
|
|
|
QRect(ONION_X + ONION_DOT_SIZE, ONION_Y + adjustOnion, ONION_DOT_SIZE,
|
2017-11-14 18:24:32 +13:00
|
|
|
ONION_DOT_SIZE)
|
|
|
|
.adjusted(1, 1, 1, 1));
|
|
|
|
addRect(PredefinedRect::ONION_DOT_FIXED,
|
|
|
|
QRect(ONION_X, ONION_Y + adjustOnion, ONION_DOT_SIZE, ONION_DOT_SIZE)
|
|
|
|
.adjusted(1, 1, 1, 1));
|
2017-07-20 22:46:27 +12:00
|
|
|
addRect(PredefinedRect::ONION_AREA,
|
|
|
|
QRect(ONION_X, ONION_Y, PLAY_RANGE_X, CELL_HEIGHT));
|
|
|
|
addRect(PredefinedRect::ONION_FIXED_DOT_AREA,
|
2018-12-28 22:07:09 +13:00
|
|
|
QRect(ONION_X, ONION_Y, ONION_DOT_SIZE + 1, CELL_HEIGHT));
|
|
|
|
addRect(PredefinedRect::ONION_DOT_AREA,
|
|
|
|
QRect(ONION_X + ONION_DOT_SIZE + 1, ONION_Y, ONION_DOT_SIZE + 1,
|
|
|
|
CELL_HEIGHT));
|
2017-07-20 22:46:27 +12:00
|
|
|
addRect(PredefinedRect::PINNED_CENTER_KEY,
|
|
|
|
QRect((FRAME_HEADER_WIDTH - PINNED_SIZE) / 2,
|
|
|
|
(CELL_HEIGHT - PINNED_SIZE) / 2, PINNED_SIZE, PINNED_SIZE));
|
2018-06-20 15:09:22 +12:00
|
|
|
addRect(
|
|
|
|
PredefinedRect::PREVIEW_FRAME_AREA,
|
|
|
|
QRect(PLAY_RANGE_X, 0, (FRAME_HEADER_WIDTH - PLAY_RANGE_X), CELL_HEIGHT));
|
2017-07-20 21:03:13 +12:00
|
|
|
|
2018-08-07 19:22:49 +12:00
|
|
|
addRect(PredefinedRect::SHIFTTRACE_DOT,
|
|
|
|
QRect(SHIFTTRACE_DOT_OFFSET, (CELL_HEIGHT - SHIFTTRACE_DOT_SIZE) / 2,
|
|
|
|
SHIFTTRACE_DOT_SIZE, SHIFTTRACE_DOT_SIZE));
|
|
|
|
addRect(PredefinedRect::SHIFTTRACE_DOT_AREA,
|
|
|
|
QRect(SHIFTTRACE_DOT_OFFSET, 0, SHIFTTRACE_DOT_SIZE, CELL_HEIGHT));
|
|
|
|
|
2017-07-20 21:03:13 +12:00
|
|
|
// Column viewer
|
2017-07-20 22:46:27 +12:00
|
|
|
addRect(PredefinedRect::LAYER_HEADER,
|
2017-10-04 20:00:34 +13:00
|
|
|
QRect(0, 1, CELL_WIDTH, use_header_height - 3));
|
2017-07-20 22:46:27 +12:00
|
|
|
addRect(
|
|
|
|
PredefinedRect::FOLDED_LAYER_HEADER,
|
2017-10-04 20:00:34 +13:00
|
|
|
QRect(0, 1, FOLDED_LAYER_HEADER_WIDTH, user_folded_header_height - 3));
|
2019-09-26 14:03:35 +12:00
|
|
|
addRect(PredefinedRect::CAMERA_LAYER_HEADER,
|
|
|
|
QRect(0, 1, CAMERA_CELL_WIDTH, use_header_height - 3));
|
2017-10-04 20:00:34 +13:00
|
|
|
|
|
|
|
static int THUMBNAIL_HEIGHT;
|
|
|
|
static int HDRROW_HEIGHT;
|
|
|
|
static int HDRROW_HEIGHT2;
|
|
|
|
static int INDENT;
|
|
|
|
static int HDRROW1;
|
|
|
|
static int HDRROW2;
|
|
|
|
static int HDRROW3;
|
|
|
|
static int HDRROW4;
|
|
|
|
static int HDRROW5;
|
2019-09-26 14:03:35 +12:00
|
|
|
QRect layername, eyeArea, previewArea, lockArea, cameraLockArea, configArea,
|
|
|
|
cameraConfigArea, thumbnailArea, thumbnail, cameraIconArea, pegbarname,
|
|
|
|
volumeArea;
|
2017-10-04 20:00:34 +13:00
|
|
|
QPoint soundTopLeft;
|
|
|
|
|
2021-08-23 21:01:37 +12:00
|
|
|
if (layout == QString("Minimum")) {
|
|
|
|
THUMBNAIL_HEIGHT = -1;
|
|
|
|
HDRROW_HEIGHT = CELL_HEIGHT - 1;
|
|
|
|
INDENT = 0;
|
|
|
|
HDRROW1 = 1; // Name, number
|
|
|
|
HDRROW2 = HDRROW1 + HDRROW_HEIGHT; // eye, preview, config
|
|
|
|
|
|
|
|
addRect(PredefinedRect::DRAG_LAYER, QRect(0, 0, -1, -1));
|
|
|
|
|
|
|
|
addRect(PredefinedRect::RENAME_COLUMN,
|
|
|
|
QRect(0, HDRROW1, CELL_WIDTH, HDRROW_HEIGHT));
|
|
|
|
|
|
|
|
layername =
|
|
|
|
QRect(INDENT + 1, HDRROW1 + 1, CELL_WIDTH - 1, HDRROW_HEIGHT - 1);
|
|
|
|
addRect(PredefinedRect::LAYER_NAME, layername);
|
|
|
|
addRect(PredefinedRect::CAMERA_LAYER_NAME, QRect(0, 0, -1, -1));
|
|
|
|
addRect(PredefinedRect::LAYER_NUMBER,
|
|
|
|
QRect(INDENT + layername.width() - 20, HDRROW1, 20, HDRROW_HEIGHT));
|
|
|
|
|
|
|
|
eyeArea = QRect(INDENT, HDRROW2, ICON_WIDTH + 1, HDRROW_HEIGHT); // Compact
|
|
|
|
addRect(PredefinedRect::EYE_AREA, eyeArea);
|
|
|
|
addRect(PredefinedRect::EYE,
|
|
|
|
iconRect(eyeArea, ICON_WIDTH, ICON_HEIGHT - 1, 1));
|
|
|
|
|
|
|
|
previewArea =
|
|
|
|
QRect(INDENT + eyeArea.width(), HDRROW2, ICON_WIDTH + 1, HDRROW_HEIGHT);
|
|
|
|
addRect(PredefinedRect::PREVIEW_LAYER_AREA, previewArea);
|
|
|
|
addRect(PredefinedRect::PREVIEW_LAYER,
|
|
|
|
iconRect(previewArea, ICON_WIDTH, ICON_HEIGHT - 1, 1));
|
|
|
|
|
|
|
|
addRect(PredefinedRect::LOCK_AREA, QRect(0, 0, -1, -1));
|
|
|
|
addRect(PredefinedRect::LOCK, QRect(0, 0, -1, -1));
|
|
|
|
addRect(PredefinedRect::CAMERA_LOCK_AREA, QRect(0, 0, -1, -1));
|
|
|
|
addRect(PredefinedRect::CAMERA_LOCK, QRect(0, 0, -1, -1));
|
|
|
|
|
|
|
|
configArea = QRect(INDENT + eyeArea.width() + previewArea.width(), HDRROW2,
|
|
|
|
ICON_WIDTH, HDRROW_HEIGHT);
|
|
|
|
addRect(PredefinedRect::CONFIG_AREA, configArea);
|
|
|
|
addRect(PredefinedRect::CONFIG,
|
|
|
|
iconRect(configArea, ICON_WIDTH - 1, ICON_HEIGHT - 1));
|
|
|
|
cameraConfigArea = QRect(INDENT, HDRROW2, CAMERA_CELL_WIDTH, HDRROW_HEIGHT);
|
|
|
|
addRect(PredefinedRect::CAMERA_CONFIG_AREA, cameraConfigArea);
|
|
|
|
addRect(PredefinedRect::CAMERA_CONFIG,
|
|
|
|
iconRect(cameraConfigArea, ICON_WIDTH - 1, ICON_HEIGHT - 1));
|
|
|
|
addRect(PredefinedRect::THUMBNAIL_AREA, QRect(0, 0, -1, -1));
|
|
|
|
addRect(PredefinedRect::THUMBNAIL, QRect(0, 0, -1, -1));
|
|
|
|
cameraIconArea = QRect(INDENT, HDRROW1, CAMERA_CELL_WIDTH, HDRROW_HEIGHT);
|
|
|
|
addRect(PredefinedRect::CAMERA_ICON_AREA, cameraIconArea);
|
|
|
|
addRect(PredefinedRect::CAMERA_ICON,
|
|
|
|
iconRect(cameraIconArea, ICON_WIDTH, ICON_HEIGHT));
|
|
|
|
|
|
|
|
addRect(PredefinedRect::FILTER_COLOR, rect(PredefinedRect::CONFIG));
|
|
|
|
addRect(PredefinedRect::SOUND_ICON, QRect(0, 0, -1, -1));
|
|
|
|
addRect(PredefinedRect::VOLUME_AREA, QRect(0, 0, -1, -1));
|
|
|
|
addRect(PredefinedRect::PEGBAR_NAME, QRect(0, 0, -1, -1));
|
|
|
|
addRect(PredefinedRect::PARENT_HANDLE_NAME, QRect(0, 0, -1, -1));
|
|
|
|
|
|
|
|
addFlag(PredefinedFlag::DRAG_LAYER_BORDER, false);
|
|
|
|
addFlag(PredefinedFlag::DRAG_LAYER_VISIBLE, false);
|
|
|
|
addFlag(PredefinedFlag::LAYER_NAME_BORDER, false);
|
|
|
|
addFlag(PredefinedFlag::LAYER_NAME_VISIBLE, true);
|
|
|
|
addFlag(PredefinedFlag::LAYER_NUMBER_BORDER, false);
|
|
|
|
addFlag(PredefinedFlag::LAYER_NUMBER_VISIBLE, false);
|
|
|
|
addFlag(PredefinedFlag::EYE_AREA_BORDER, true);
|
|
|
|
addFlag(PredefinedFlag::EYE_AREA_VISIBLE, true);
|
|
|
|
addFlag(PredefinedFlag::LOCK_AREA_BORDER, false);
|
|
|
|
addFlag(PredefinedFlag::LOCK_AREA_VISIBLE, false);
|
|
|
|
addFlag(PredefinedFlag::PREVIEW_LAYER_AREA_BORDER, true);
|
|
|
|
addFlag(PredefinedFlag::PREVIEW_LAYER_AREA_VISIBLE, true);
|
|
|
|
addFlag(PredefinedFlag::CONFIG_AREA_BORDER, true);
|
|
|
|
addFlag(PredefinedFlag::CAMERA_CONFIG_AREA_BORDER, true);
|
|
|
|
addFlag(PredefinedFlag::CONFIG_AREA_VISIBLE, true);
|
|
|
|
addFlag(PredefinedFlag::CAMERA_CONFIG_AREA_VISIBLE, true);
|
|
|
|
addFlag(PredefinedFlag::PEGBAR_NAME_BORDER, false);
|
|
|
|
addFlag(PredefinedFlag::PEGBAR_NAME_VISIBLE, false);
|
|
|
|
addFlag(PredefinedFlag::PARENT_HANDLE_NAME_BORDER, false);
|
|
|
|
addFlag(PredefinedFlag::PARENT_HANDLE_NAME_VISIBILE, true);
|
|
|
|
addFlag(PredefinedFlag::THUMBNAIL_AREA_BORDER, false);
|
|
|
|
addFlag(PredefinedFlag::THUMBNAIL_AREA_VISIBLE, false);
|
|
|
|
addFlag(PredefinedFlag::CAMERA_ICON_VISIBLE, true);
|
|
|
|
addFlag(PredefinedFlag::VOLUME_AREA_VERTICAL, false);
|
|
|
|
addFlag(PredefinedFlag::NOTE_AREA_IN_POPUP, true);
|
|
|
|
} else if (layout == QString("Compact")) {
|
2017-10-04 20:00:34 +13:00
|
|
|
THUMBNAIL_HEIGHT = 44;
|
|
|
|
HDRROW_HEIGHT = CELL_HEIGHT - 2;
|
|
|
|
INDENT = 0;
|
|
|
|
HDRROW1 = 1; // Name, number
|
|
|
|
HDRROW2 = HDRROW1 + HDRROW_HEIGHT; // eye, preview, lock, config
|
|
|
|
HDRROW3 = HDRROW2 + HDRROW_HEIGHT; // thumbnail
|
|
|
|
HDRROW4 = HDRROW3 + THUMBNAIL_HEIGHT; // pegbar, parent handle
|
|
|
|
|
|
|
|
addRect(PredefinedRect::DRAG_LAYER, QRect(0, 0, -1, -1));
|
|
|
|
|
|
|
|
addRect(PredefinedRect::RENAME_COLUMN,
|
|
|
|
QRect(0, HDRROW1, CELL_WIDTH, HDRROW_HEIGHT));
|
|
|
|
|
|
|
|
layername =
|
|
|
|
QRect(INDENT + 1, HDRROW1 + 1, CELL_WIDTH - 1, HDRROW_HEIGHT - 1);
|
|
|
|
addRect(PredefinedRect::LAYER_NAME, layername);
|
2019-09-26 14:03:35 +12:00
|
|
|
addRect(PredefinedRect::CAMERA_LAYER_NAME,
|
|
|
|
QRect(INDENT + 1, HDRROW3, CAMERA_CELL_WIDTH - 1,
|
|
|
|
THUMBNAIL_HEIGHT + HDRROW_HEIGHT));
|
2017-10-04 20:00:34 +13:00
|
|
|
addRect(PredefinedRect::LAYER_NUMBER,
|
|
|
|
QRect(INDENT + layername.width() - 20, HDRROW1, 20, HDRROW_HEIGHT));
|
|
|
|
|
|
|
|
eyeArea = QRect(INDENT, HDRROW2, ICON_WIDTH + 1, HDRROW_HEIGHT); // Compact
|
|
|
|
addRect(PredefinedRect::EYE_AREA, eyeArea);
|
2019-09-26 14:03:35 +12:00
|
|
|
addRect(PredefinedRect::EYE,
|
|
|
|
iconRect(eyeArea, ICON_WIDTH, ICON_HEIGHT - 1, 1));
|
2017-10-04 20:00:34 +13:00
|
|
|
|
|
|
|
previewArea =
|
|
|
|
QRect(INDENT + eyeArea.width(), HDRROW2, ICON_WIDTH + 1, HDRROW_HEIGHT);
|
|
|
|
addRect(PredefinedRect::PREVIEW_LAYER_AREA, previewArea);
|
2019-09-26 14:03:35 +12:00
|
|
|
addRect(PredefinedRect::PREVIEW_LAYER,
|
|
|
|
iconRect(previewArea, ICON_WIDTH, ICON_HEIGHT - 1, 1));
|
2017-10-04 20:00:34 +13:00
|
|
|
|
|
|
|
lockArea = QRect(INDENT + eyeArea.width() + previewArea.width(), HDRROW2,
|
|
|
|
ICON_WIDTH, HDRROW_HEIGHT);
|
|
|
|
addRect(PredefinedRect::LOCK_AREA, lockArea);
|
2019-09-26 14:03:35 +12:00
|
|
|
addRect(PredefinedRect::LOCK,
|
|
|
|
iconRect(lockArea, ICON_WIDTH - 1, ICON_HEIGHT - 1));
|
|
|
|
cameraLockArea = QRect(INDENT, HDRROW1, CAMERA_CELL_WIDTH, HDRROW_HEIGHT);
|
|
|
|
addRect(PredefinedRect::CAMERA_LOCK_AREA, cameraLockArea);
|
|
|
|
addRect(PredefinedRect::CAMERA_LOCK,
|
|
|
|
iconRect(cameraLockArea, ICON_WIDTH - 1, ICON_HEIGHT - 1));
|
2017-10-04 20:00:34 +13:00
|
|
|
|
|
|
|
configArea =
|
|
|
|
QRect(INDENT + eyeArea.width() + previewArea.width() + lockArea.width(),
|
|
|
|
HDRROW2, ICON_WIDTH, HDRROW_HEIGHT);
|
|
|
|
addRect(PredefinedRect::CONFIG_AREA, configArea);
|
2019-09-26 14:03:35 +12:00
|
|
|
addRect(PredefinedRect::CONFIG,
|
|
|
|
iconRect(configArea, ICON_WIDTH - 1, ICON_HEIGHT - 1));
|
|
|
|
cameraConfigArea = QRect(INDENT, HDRROW2, CAMERA_CELL_WIDTH, HDRROW_HEIGHT);
|
|
|
|
addRect(PredefinedRect::CAMERA_CONFIG_AREA, cameraConfigArea);
|
|
|
|
addRect(PredefinedRect::CAMERA_CONFIG,
|
|
|
|
iconRect(cameraConfigArea, ICON_WIDTH - 1, ICON_HEIGHT - 1));
|
2017-10-04 20:00:34 +13:00
|
|
|
|
|
|
|
thumbnailArea = QRect(INDENT, HDRROW3, CELL_WIDTH, THUMBNAIL_HEIGHT);
|
|
|
|
addRect(PredefinedRect::THUMBNAIL_AREA, thumbnailArea);
|
|
|
|
thumbnail = thumbnailArea.adjusted(1, 1, 0, 0);
|
|
|
|
addRect(PredefinedRect::THUMBNAIL, thumbnail);
|
2019-09-26 14:03:35 +12:00
|
|
|
|
|
|
|
addRect(PredefinedRect::CAMERA_ICON_AREA, QRect(0, 0, -1, -1));
|
|
|
|
addRect(PredefinedRect::CAMERA_ICON, QRect(0, 0, -1, -1));
|
|
|
|
|
2017-10-04 20:00:34 +13:00
|
|
|
addRect(PredefinedRect::FILTER_COLOR,
|
|
|
|
QRect(thumbnail.right() - 14, thumbnail.top() + 3, 12, 12));
|
|
|
|
|
|
|
|
addRect(PredefinedRect::SOUND_ICON,
|
2018-10-31 15:56:59 +13:00
|
|
|
QRect(thumbnailArea.topLeft(), QSize(40, 30))
|
|
|
|
.adjusted((thumbnailArea.width() / 2) - (40 / 2),
|
|
|
|
(thumbnailArea.height() / 2) - (30 / 2),
|
|
|
|
(thumbnailArea.width() / 2) - (40 / 2),
|
|
|
|
(thumbnailArea.height() / 2) - (30 / 2)));
|
2017-10-04 20:00:34 +13:00
|
|
|
|
|
|
|
volumeArea =
|
|
|
|
QRect(QPoint(thumbnailArea.left() + 3, thumbnailArea.bottom() - 16),
|
|
|
|
QSize(TRACKLEN + 8, 14));
|
|
|
|
addRect(PredefinedRect::VOLUME_AREA, volumeArea);
|
|
|
|
|
|
|
|
pegbarname = QRect(INDENT, HDRROW4, CELL_WIDTH, HDRROW_HEIGHT);
|
|
|
|
addRect(PredefinedRect::PEGBAR_NAME, pegbarname);
|
|
|
|
addRect(
|
|
|
|
PredefinedRect::PARENT_HANDLE_NAME,
|
|
|
|
QRect(INDENT + pegbarname.width() - 20, HDRROW4, 20, HDRROW_HEIGHT));
|
|
|
|
|
|
|
|
addFlag(PredefinedFlag::DRAG_LAYER_BORDER, false);
|
|
|
|
addFlag(PredefinedFlag::DRAG_LAYER_VISIBLE, false);
|
|
|
|
addFlag(PredefinedFlag::LAYER_NAME_BORDER, false);
|
|
|
|
addFlag(PredefinedFlag::LAYER_NAME_VISIBLE, true);
|
|
|
|
addFlag(PredefinedFlag::LAYER_NUMBER_BORDER, false);
|
|
|
|
addFlag(PredefinedFlag::LAYER_NUMBER_VISIBLE, true);
|
|
|
|
addFlag(PredefinedFlag::EYE_AREA_BORDER, true);
|
|
|
|
addFlag(PredefinedFlag::EYE_AREA_VISIBLE, true);
|
|
|
|
addFlag(PredefinedFlag::LOCK_AREA_BORDER, true);
|
|
|
|
addFlag(PredefinedFlag::LOCK_AREA_VISIBLE, true);
|
|
|
|
addFlag(PredefinedFlag::PREVIEW_LAYER_AREA_BORDER, true);
|
|
|
|
addFlag(PredefinedFlag::PREVIEW_LAYER_AREA_VISIBLE, true);
|
|
|
|
addFlag(PredefinedFlag::CONFIG_AREA_BORDER, true);
|
2019-09-26 14:03:35 +12:00
|
|
|
addFlag(PredefinedFlag::CAMERA_CONFIG_AREA_BORDER, false);
|
2017-10-04 20:00:34 +13:00
|
|
|
addFlag(PredefinedFlag::CONFIG_AREA_VISIBLE, true);
|
2019-09-30 20:09:18 +13:00
|
|
|
addFlag(PredefinedFlag::CAMERA_CONFIG_AREA_VISIBLE, true);
|
2017-10-04 20:00:34 +13:00
|
|
|
addFlag(PredefinedFlag::PEGBAR_NAME_BORDER, true);
|
|
|
|
addFlag(PredefinedFlag::PEGBAR_NAME_VISIBLE, true);
|
|
|
|
addFlag(PredefinedFlag::PARENT_HANDLE_NAME_BORDER, false);
|
|
|
|
addFlag(PredefinedFlag::PARENT_HANDLE_NAME_VISIBILE, true);
|
|
|
|
addFlag(PredefinedFlag::THUMBNAIL_AREA_BORDER, false);
|
|
|
|
addFlag(PredefinedFlag::THUMBNAIL_AREA_VISIBLE, true);
|
2019-09-26 14:03:35 +12:00
|
|
|
addFlag(PredefinedFlag::CAMERA_ICON_VISIBLE, false);
|
2017-10-04 20:00:34 +13:00
|
|
|
addFlag(PredefinedFlag::VOLUME_AREA_VERTICAL, false);
|
2021-08-23 21:01:37 +12:00
|
|
|
addFlag(PredefinedFlag::NOTE_AREA_IN_POPUP, false);
|
2020-07-01 18:20:28 +12:00
|
|
|
} else if (layout == QString("Roomy")) {
|
2017-10-04 20:00:34 +13:00
|
|
|
THUMBNAIL_HEIGHT = 44;
|
|
|
|
HDRROW_HEIGHT = CELL_HEIGHT - 2;
|
|
|
|
INDENT = 0;
|
|
|
|
HDRROW1 = 1; // Name, number
|
|
|
|
HDRROW2 = HDRROW1 + HDRROW_HEIGHT; // eye, lock
|
|
|
|
HDRROW3 = HDRROW2 + HDRROW_HEIGHT; // preview, config
|
|
|
|
HDRROW4 = HDRROW3 + HDRROW_HEIGHT; // thumbnail
|
|
|
|
HDRROW5 = HDRROW4 + THUMBNAIL_HEIGHT; // pegbar, parent handle
|
|
|
|
|
|
|
|
addRect(PredefinedRect::DRAG_LAYER,
|
|
|
|
QRect(0, 0, -1, -1)); // hide - Theme/Compact
|
|
|
|
|
|
|
|
addRect(PredefinedRect::RENAME_COLUMN,
|
|
|
|
QRect(0, HDRROW1, CELL_WIDTH, HDRROW_HEIGHT));
|
|
|
|
|
|
|
|
layername =
|
|
|
|
QRect(INDENT + 1, HDRROW1 + 1, CELL_WIDTH - 1, HDRROW_HEIGHT - 1);
|
|
|
|
addRect(PredefinedRect::LAYER_NAME, layername);
|
2019-09-26 14:03:35 +12:00
|
|
|
addRect(PredefinedRect::CAMERA_LAYER_NAME,
|
|
|
|
QRect(INDENT + 1, HDRROW4, CAMERA_CELL_WIDTH - 1,
|
|
|
|
THUMBNAIL_HEIGHT + HDRROW_HEIGHT));
|
2017-10-04 20:00:34 +13:00
|
|
|
addRect(PredefinedRect::LAYER_NUMBER,
|
|
|
|
QRect(INDENT + layername.width() - 20, HDRROW1, 20, HDRROW_HEIGHT));
|
|
|
|
|
|
|
|
eyeArea = QRect(INDENT, HDRROW2, CELL_WIDTH - ICON_WIDTH, HDRROW_HEIGHT);
|
|
|
|
addRect(PredefinedRect::EYE_AREA, eyeArea);
|
2019-09-26 14:03:35 +12:00
|
|
|
addRect(PredefinedRect::EYE,
|
|
|
|
iconRect(eyeArea, ICON_WIDTH, ICON_HEIGHT - 1, 1));
|
2017-10-04 20:00:34 +13:00
|
|
|
|
|
|
|
previewArea =
|
|
|
|
QRect(INDENT, HDRROW3, CELL_WIDTH - ICON_WIDTH, HDRROW_HEIGHT);
|
|
|
|
addRect(PredefinedRect::PREVIEW_LAYER_AREA, previewArea);
|
2019-09-26 14:03:35 +12:00
|
|
|
addRect(PredefinedRect::PREVIEW_LAYER,
|
|
|
|
iconRect(previewArea, ICON_WIDTH, ICON_HEIGHT - 1, 1));
|
2017-10-04 20:00:34 +13:00
|
|
|
|
|
|
|
lockArea =
|
|
|
|
QRect(INDENT + eyeArea.width(), HDRROW2, ICON_WIDTH, HDRROW_HEIGHT);
|
|
|
|
addRect(PredefinedRect::LOCK_AREA, lockArea);
|
2019-09-26 14:03:35 +12:00
|
|
|
addRect(PredefinedRect::LOCK,
|
|
|
|
iconRect(lockArea, ICON_WIDTH - 1, ICON_HEIGHT - 1));
|
|
|
|
cameraLockArea = QRect(INDENT, HDRROW2, CAMERA_CELL_WIDTH, HDRROW_HEIGHT);
|
|
|
|
addRect(PredefinedRect::CAMERA_LOCK_AREA, cameraLockArea);
|
|
|
|
addRect(PredefinedRect::CAMERA_LOCK,
|
|
|
|
iconRect(cameraLockArea, ICON_WIDTH - 1, ICON_HEIGHT - 1));
|
2017-10-04 20:00:34 +13:00
|
|
|
|
|
|
|
configArea =
|
|
|
|
QRect(INDENT + previewArea.width(), HDRROW3, ICON_WIDTH, HDRROW_HEIGHT);
|
|
|
|
addRect(PredefinedRect::CONFIG_AREA, configArea);
|
2019-09-26 14:03:35 +12:00
|
|
|
addRect(PredefinedRect::CONFIG,
|
|
|
|
iconRect(configArea, ICON_WIDTH - 1, ICON_HEIGHT - 1));
|
|
|
|
cameraConfigArea = QRect(INDENT, HDRROW3, CAMERA_CELL_WIDTH, HDRROW_HEIGHT);
|
|
|
|
addRect(PredefinedRect::CAMERA_CONFIG_AREA, cameraConfigArea);
|
|
|
|
addRect(PredefinedRect::CAMERA_CONFIG,
|
|
|
|
iconRect(cameraConfigArea, ICON_WIDTH - 1, ICON_HEIGHT - 1));
|
2017-10-04 20:00:34 +13:00
|
|
|
|
|
|
|
thumbnailArea = QRect(INDENT, HDRROW4, CELL_WIDTH, THUMBNAIL_HEIGHT);
|
|
|
|
addRect(PredefinedRect::THUMBNAIL_AREA, thumbnailArea);
|
|
|
|
thumbnail = thumbnailArea.adjusted(1, 1, 0, 0);
|
|
|
|
addRect(PredefinedRect::THUMBNAIL, thumbnail);
|
2019-09-26 14:03:35 +12:00
|
|
|
|
|
|
|
cameraIconArea = QRect(INDENT, HDRROW1, CAMERA_CELL_WIDTH, HDRROW_HEIGHT);
|
|
|
|
addRect(PredefinedRect::CAMERA_ICON_AREA, cameraIconArea);
|
|
|
|
addRect(PredefinedRect::CAMERA_ICON,
|
|
|
|
iconRect(cameraIconArea, ICON_WIDTH, ICON_HEIGHT));
|
|
|
|
|
2017-10-04 20:00:34 +13:00
|
|
|
addRect(PredefinedRect::FILTER_COLOR,
|
|
|
|
QRect(thumbnail.right() - 14, thumbnail.top() + 3, 12, 12));
|
|
|
|
|
|
|
|
addRect(PredefinedRect::SOUND_ICON,
|
2018-10-31 15:56:59 +13:00
|
|
|
QRect(thumbnailArea.topLeft(), QSize(40, 30))
|
|
|
|
.adjusted((thumbnailArea.width() / 2) - (40 / 2),
|
|
|
|
(thumbnailArea.height() / 2) - (30 / 2),
|
|
|
|
(thumbnailArea.width() / 2) - (40 / 2),
|
|
|
|
(thumbnailArea.height() / 2) - (30 / 2)));
|
2017-10-04 20:00:34 +13:00
|
|
|
|
|
|
|
volumeArea =
|
|
|
|
QRect(QPoint(thumbnailArea.left() + 3, thumbnailArea.bottom() - 16),
|
|
|
|
QSize(TRACKLEN + 8, 14));
|
|
|
|
addRect(PredefinedRect::VOLUME_AREA, volumeArea);
|
|
|
|
|
|
|
|
pegbarname = QRect(INDENT, HDRROW5, CELL_WIDTH, HDRROW_HEIGHT);
|
|
|
|
addRect(PredefinedRect::PEGBAR_NAME, pegbarname);
|
|
|
|
addRect(
|
|
|
|
PredefinedRect::PARENT_HANDLE_NAME,
|
|
|
|
QRect(INDENT + pegbarname.width() - 20, HDRROW5, 20, HDRROW_HEIGHT));
|
|
|
|
|
|
|
|
addFlag(PredefinedFlag::DRAG_LAYER_BORDER, false);
|
|
|
|
addFlag(PredefinedFlag::DRAG_LAYER_VISIBLE, false);
|
|
|
|
addFlag(PredefinedFlag::LAYER_NAME_BORDER, false);
|
|
|
|
addFlag(PredefinedFlag::LAYER_NAME_VISIBLE, true);
|
|
|
|
addFlag(PredefinedFlag::LAYER_NUMBER_BORDER, false);
|
|
|
|
addFlag(PredefinedFlag::LAYER_NUMBER_VISIBLE, true);
|
|
|
|
addFlag(PredefinedFlag::EYE_AREA_BORDER, true);
|
|
|
|
addFlag(PredefinedFlag::EYE_AREA_VISIBLE, true);
|
|
|
|
addFlag(PredefinedFlag::LOCK_AREA_BORDER, true);
|
|
|
|
addFlag(PredefinedFlag::LOCK_AREA_VISIBLE, true);
|
|
|
|
addFlag(PredefinedFlag::PREVIEW_LAYER_AREA_BORDER, true);
|
|
|
|
addFlag(PredefinedFlag::PREVIEW_LAYER_AREA_VISIBLE, true);
|
|
|
|
addFlag(PredefinedFlag::CONFIG_AREA_BORDER, true);
|
2019-09-26 14:03:35 +12:00
|
|
|
addFlag(PredefinedFlag::CAMERA_CONFIG_AREA_BORDER, false);
|
2017-10-04 20:00:34 +13:00
|
|
|
addFlag(PredefinedFlag::CONFIG_AREA_VISIBLE, true);
|
2019-09-30 20:09:18 +13:00
|
|
|
addFlag(PredefinedFlag::CAMERA_CONFIG_AREA_VISIBLE, true);
|
2017-10-04 20:00:34 +13:00
|
|
|
addFlag(PredefinedFlag::PEGBAR_NAME_BORDER, true);
|
|
|
|
addFlag(PredefinedFlag::PEGBAR_NAME_VISIBLE, true);
|
|
|
|
addFlag(PredefinedFlag::PARENT_HANDLE_NAME_BORDER, false);
|
|
|
|
addFlag(PredefinedFlag::PARENT_HANDLE_NAME_VISIBILE, true);
|
|
|
|
addFlag(PredefinedFlag::THUMBNAIL_AREA_BORDER, true);
|
|
|
|
addFlag(PredefinedFlag::THUMBNAIL_AREA_VISIBLE, true);
|
2019-09-26 14:03:35 +12:00
|
|
|
addFlag(PredefinedFlag::CAMERA_ICON_VISIBLE, true);
|
2017-10-04 20:00:34 +13:00
|
|
|
addFlag(PredefinedFlag::VOLUME_AREA_VERTICAL, false);
|
2021-08-23 21:01:37 +12:00
|
|
|
addFlag(PredefinedFlag::NOTE_AREA_IN_POPUP, false);
|
2017-10-04 20:00:34 +13:00
|
|
|
} else {
|
|
|
|
THUMBNAIL_HEIGHT = 43;
|
|
|
|
HDRROW_HEIGHT = CELL_HEIGHT - 2;
|
|
|
|
INDENT = CELL_DRAG_WIDTH + 2;
|
|
|
|
HDRROW1 = 7; // Name/eye
|
|
|
|
HDRROW2 = HDRROW1 + CELL_HEIGHT; // lock, preview
|
|
|
|
HDRROW3 = HDRROW2 + CELL_HEIGHT; // thumbnail
|
|
|
|
HDRROW4 = HDRROW3 + THUMBNAIL_HEIGHT + 5; // pegbar, parenthandle
|
|
|
|
|
|
|
|
addRect(PredefinedRect::DRAG_LAYER,
|
|
|
|
QRect(0, 0, CELL_DRAG_WIDTH, use_header_height - 3));
|
|
|
|
|
|
|
|
addRect(PredefinedRect::RENAME_COLUMN,
|
|
|
|
QRect(0, HDRROW1, CELL_WIDTH, HDRROW_HEIGHT));
|
|
|
|
|
|
|
|
layername = QRect(INDENT + 1, HDRROW1 + 1, CELL_WIDTH - INDENT - 3,
|
|
|
|
HDRROW_HEIGHT - 1);
|
|
|
|
addRect(PredefinedRect::LAYER_NAME, layername);
|
2019-09-26 14:03:35 +12:00
|
|
|
addRect(PredefinedRect::CAMERA_LAYER_NAME,
|
2019-09-30 20:09:18 +13:00
|
|
|
QRect(1, HDRROW3 + HDRROW_HEIGHT - 8, CAMERA_CELL_WIDTH - 1,
|
2019-09-26 14:03:35 +12:00
|
|
|
THUMBNAIL_HEIGHT + CELL_HEIGHT));
|
2017-10-04 20:00:34 +13:00
|
|
|
addRect(PredefinedRect::LAYER_NUMBER, QRect(0, 0, -1, -1));
|
|
|
|
|
|
|
|
eyeArea =
|
|
|
|
QRect(INDENT, HDRROW1, CELL_WIDTH - INDENT - 2, HDRROW_HEIGHT - 1);
|
|
|
|
addRect(PredefinedRect::EYE_AREA, eyeArea);
|
|
|
|
addRect(PredefinedRect::EYE,
|
|
|
|
eyeArea.adjusted(eyeArea.width() - ICON_WIDTH, 0, 0, 0));
|
|
|
|
|
|
|
|
previewArea = QRect(INDENT, HDRROW2, CELL_WIDTH - INDENT - 2,
|
|
|
|
HDRROW_HEIGHT - 1); // Legacy
|
|
|
|
addRect(PredefinedRect::PREVIEW_LAYER_AREA, previewArea);
|
|
|
|
addRect(PredefinedRect::PREVIEW_LAYER,
|
|
|
|
previewArea.adjusted(previewArea.width() - ICON_WIDTH, 0, 0, 0));
|
|
|
|
|
|
|
|
lockArea = QRect(INDENT, HDRROW2, ICON_WIDTH - 1, HDRROW_HEIGHT - 1);
|
|
|
|
addRect(PredefinedRect::LOCK_AREA, lockArea);
|
|
|
|
addRect(PredefinedRect::LOCK, lockArea);
|
2019-09-26 14:03:35 +12:00
|
|
|
cameraLockArea = QRect(0, HDRROW2, CAMERA_CELL_WIDTH, HDRROW_HEIGHT - 1);
|
|
|
|
addRect(PredefinedRect::CAMERA_LOCK_AREA, cameraLockArea);
|
|
|
|
addRect(PredefinedRect::CAMERA_LOCK,
|
|
|
|
iconRect(cameraLockArea, ICON_WIDTH - 1, ICON_HEIGHT - 1));
|
2017-10-04 20:00:34 +13:00
|
|
|
|
|
|
|
addRect(PredefinedRect::CONFIG_AREA, QRect(0, 0, -1, -1));
|
|
|
|
addRect(PredefinedRect::CONFIG, QRect(0, 0, -1, -1));
|
2019-09-30 20:09:18 +13:00
|
|
|
cameraConfigArea =
|
|
|
|
QRect(0, HDRROW3 - 2, CAMERA_CELL_WIDTH, HDRROW_HEIGHT - 4);
|
|
|
|
addRect(PredefinedRect::CAMERA_CONFIG_AREA, cameraConfigArea);
|
|
|
|
addRect(PredefinedRect::CAMERA_CONFIG,
|
|
|
|
iconRect(cameraConfigArea, ICON_WIDTH - 1, ICON_HEIGHT - 1));
|
2017-10-04 20:00:34 +13:00
|
|
|
|
|
|
|
thumbnailArea =
|
|
|
|
QRect(INDENT - 1, HDRROW3, CELL_WIDTH - INDENT - 1, THUMBNAIL_HEIGHT);
|
|
|
|
addRect(PredefinedRect::THUMBNAIL_AREA, thumbnailArea);
|
|
|
|
thumbnail = thumbnailArea.adjusted(1, 1, 0, 0);
|
|
|
|
addRect(PredefinedRect::THUMBNAIL, thumbnail);
|
2019-09-26 14:03:35 +12:00
|
|
|
|
|
|
|
cameraIconArea = QRect(0, HDRROW1, CAMERA_CELL_WIDTH, HDRROW_HEIGHT);
|
|
|
|
addRect(PredefinedRect::CAMERA_ICON_AREA, cameraIconArea);
|
|
|
|
addRect(PredefinedRect::CAMERA_ICON,
|
|
|
|
iconRect(cameraIconArea, ICON_WIDTH, ICON_HEIGHT));
|
|
|
|
|
2017-10-04 20:00:34 +13:00
|
|
|
addRect(PredefinedRect::FILTER_COLOR,
|
|
|
|
QRect(thumbnail.right() - 14, thumbnail.top() + 3, 12, 12));
|
|
|
|
|
|
|
|
addRect(
|
|
|
|
PredefinedRect::SOUND_ICON,
|
|
|
|
QRect(thumbnailArea.topLeft(), QSize(40, 30)).adjusted(21, 19, 21, 19));
|
|
|
|
|
|
|
|
volumeArea =
|
|
|
|
QRect(QPoint(thumbnailArea.left() + 3, thumbnailArea.top() - 1),
|
|
|
|
QSize(14, TRACKLEN + 8));
|
|
|
|
addRect(PredefinedRect::VOLUME_AREA, volumeArea);
|
|
|
|
|
|
|
|
pegbarname =
|
|
|
|
QRect(INDENT, HDRROW4, CELL_WIDTH - INDENT - 2, HDRROW_HEIGHT - 1);
|
|
|
|
addRect(PredefinedRect::PEGBAR_NAME, pegbarname);
|
|
|
|
addRect(PredefinedRect::PARENT_HANDLE_NAME,
|
|
|
|
QRect(INDENT + pegbarname.width() - 20, HDRROW4, 20,
|
|
|
|
HDRROW_HEIGHT - 1));
|
|
|
|
|
|
|
|
addFlag(PredefinedFlag::DRAG_LAYER_BORDER, false);
|
|
|
|
addFlag(PredefinedFlag::DRAG_LAYER_VISIBLE, true);
|
|
|
|
addFlag(PredefinedFlag::LAYER_NAME_BORDER, false);
|
|
|
|
addFlag(PredefinedFlag::LAYER_NAME_VISIBLE, true);
|
|
|
|
addFlag(PredefinedFlag::LAYER_NUMBER_BORDER, false);
|
|
|
|
addFlag(PredefinedFlag::LAYER_NUMBER_VISIBLE, false);
|
|
|
|
addFlag(PredefinedFlag::EYE_AREA_BORDER, false);
|
|
|
|
addFlag(PredefinedFlag::EYE_AREA_VISIBLE, true);
|
|
|
|
// addFlag(PredefinedFlag::LOCK_AREA_BORDER, true);
|
|
|
|
addFlag(PredefinedFlag::LOCK_AREA_BORDER, false);
|
|
|
|
addFlag(PredefinedFlag::LOCK_AREA_VISIBLE, true);
|
|
|
|
addFlag(PredefinedFlag::PREVIEW_LAYER_AREA_BORDER, false);
|
|
|
|
addFlag(PredefinedFlag::PREVIEW_LAYER_AREA_VISIBLE, true);
|
|
|
|
addFlag(PredefinedFlag::CONFIG_AREA_BORDER, false);
|
2019-09-26 14:03:35 +12:00
|
|
|
addFlag(PredefinedFlag::CAMERA_CONFIG_AREA_BORDER, false);
|
2017-10-04 20:00:34 +13:00
|
|
|
addFlag(PredefinedFlag::CONFIG_AREA_VISIBLE, false);
|
2019-09-30 20:09:18 +13:00
|
|
|
addFlag(PredefinedFlag::CAMERA_CONFIG_AREA_VISIBLE, true);
|
2017-10-04 20:00:34 +13:00
|
|
|
addFlag(PredefinedFlag::PEGBAR_NAME_BORDER, false);
|
|
|
|
addFlag(PredefinedFlag::PEGBAR_NAME_VISIBLE, true);
|
|
|
|
addFlag(PredefinedFlag::PARENT_HANDLE_NAME_BORDER, false);
|
|
|
|
addFlag(PredefinedFlag::PARENT_HANDLE_NAME_VISIBILE, true);
|
|
|
|
addFlag(PredefinedFlag::THUMBNAIL_AREA_BORDER, false);
|
|
|
|
addFlag(PredefinedFlag::THUMBNAIL_AREA_VISIBLE, true);
|
2019-09-26 14:03:35 +12:00
|
|
|
addFlag(PredefinedFlag::CAMERA_ICON_VISIBLE, true);
|
2017-10-04 20:00:34 +13:00
|
|
|
addFlag(PredefinedFlag::VOLUME_AREA_VERTICAL, true);
|
2021-08-23 21:01:37 +12:00
|
|
|
addFlag(PredefinedFlag::NOTE_AREA_IN_POPUP, false);
|
2017-10-04 20:00:34 +13:00
|
|
|
}
|
2017-07-20 21:03:13 +12:00
|
|
|
|
2017-10-04 20:00:34 +13:00
|
|
|
if (flag(PredefinedFlag::VOLUME_AREA_VERTICAL)) {
|
|
|
|
soundTopLeft = QPoint(volumeArea.left() + 4, volumeArea.top() + 4);
|
|
|
|
addRect(PredefinedRect::VOLUME_TRACK,
|
|
|
|
QRect(soundTopLeft, QSize(3, TRACKLEN)));
|
|
|
|
} else {
|
|
|
|
soundTopLeft = QPoint(volumeArea.left() + 4, volumeArea.bottom() - 6);
|
|
|
|
addRect(PredefinedRect::VOLUME_TRACK,
|
|
|
|
QRect(soundTopLeft, QSize(TRACKLEN, 3)));
|
|
|
|
}
|
2017-07-20 21:03:13 +12:00
|
|
|
|
2021-04-28 14:02:23 +12:00
|
|
|
// Layer footer panel
|
|
|
|
QRect layerFooterPanel(
|
|
|
|
QRect(0, 0, LAYER_FOOTER_PANEL_WIDTH + 2, use_header_height));
|
|
|
|
addRect(PredefinedRect::LAYER_FOOTER_PANEL, layerFooterPanel);
|
|
|
|
|
|
|
|
QRect zoomSlider, zoomIn, zoomOut, noteArea;
|
|
|
|
|
|
|
|
zoomSlider = QRect(0, 17, LAYER_FOOTER_PANEL_WIDTH, use_header_height - 34);
|
|
|
|
addRect(PredefinedRect::ZOOM_SLIDER_AREA, zoomSlider);
|
2021-08-23 21:01:37 +12:00
|
|
|
if (layout == QString("Minimum"))
|
|
|
|
addRect(PredefinedRect::ZOOM_SLIDER, QRect(0, 0, -1, -1));
|
|
|
|
else
|
|
|
|
addRect(PredefinedRect::ZOOM_SLIDER, zoomSlider.adjusted(0, 1, 0, 0));
|
2021-04-28 14:02:23 +12:00
|
|
|
|
|
|
|
zoomIn = QRect(0, zoomSlider.bottom() + 1, LAYER_FOOTER_PANEL_WIDTH, 16);
|
|
|
|
addRect(PredefinedRect::ZOOM_IN_AREA, zoomIn);
|
|
|
|
addRect(PredefinedRect::ZOOM_IN, zoomIn.adjusted(1, 1, 0, 0));
|
|
|
|
|
|
|
|
zoomOut = QRect(0, zoomSlider.top() - 17, LAYER_FOOTER_PANEL_WIDTH, 16);
|
|
|
|
addRect(PredefinedRect::ZOOM_OUT_AREA, zoomOut);
|
|
|
|
addRect(PredefinedRect::ZOOM_OUT, zoomOut.adjusted(1, 1, 0, 0));
|
2021-08-23 21:01:37 +12:00
|
|
|
|
2021-04-28 14:02:23 +12:00
|
|
|
/*
|
2018-05-16 20:23:35 +12:00
|
|
|
// Layer footer panel
|
|
|
|
addRect(PredefinedRect::LAYER_FOOTER_PANEL, QRect(0, 0, -1, -1)); // hide
|
|
|
|
addRect(PredefinedRect::ZOOM_SLIDER, QRect(0, 0, -1, -1));
|
|
|
|
addRect(PredefinedRect::ZOOM_IN, QRect(0, 0, -1, -1));
|
|
|
|
addRect(PredefinedRect::ZOOM_OUT, QRect(0, 0, -1, -1));
|
2021-04-28 14:02:23 +12:00
|
|
|
*/
|
|
|
|
|
|
|
|
noteArea = QRect(0, 0, 0, 0);
|
|
|
|
addRect(PredefinedRect::FOOTER_NOTE_AREA, noteArea);
|
|
|
|
addRect(PredefinedRect::FOOTER_NOTE_OBJ_AREA, noteArea.adjusted(1, 0, 0, 0));
|
2018-05-16 20:23:35 +12:00
|
|
|
|
2017-07-20 21:03:13 +12:00
|
|
|
//
|
|
|
|
// Lines
|
|
|
|
//
|
2017-07-20 22:46:27 +12:00
|
|
|
addLine(PredefinedLine::LOCKED,
|
|
|
|
verticalLine((CELL_DRAG_WIDTH + 1) / 2, NumberRange(0, CELL_HEIGHT)));
|
|
|
|
addLine(PredefinedLine::SEE_MARKER_THROUGH,
|
|
|
|
horizontalLine(0, NumberRange(0, CELL_DRAG_WIDTH)));
|
|
|
|
addLine(PredefinedLine::CONTINUE_LEVEL,
|
|
|
|
verticalLine(CELL_WIDTH / 2, NumberRange(0, CELL_HEIGHT)));
|
|
|
|
addLine(PredefinedLine::CONTINUE_LEVEL_WITH_NAME,
|
2019-09-26 14:03:35 +12:00
|
|
|
verticalLine(CELL_WIDTH - 14, NumberRange(0, CELL_HEIGHT)));
|
2017-07-20 22:46:27 +12:00
|
|
|
addLine(PredefinedLine::EXTENDER_LINE,
|
|
|
|
horizontalLine(0, NumberRange(-EXTENDER_WIDTH - KEY_ICON_WIDTH, 0)));
|
2017-07-20 21:03:13 +12:00
|
|
|
|
|
|
|
//
|
|
|
|
// Dimensions
|
|
|
|
//
|
|
|
|
addDimension(PredefinedDimension::LAYER, CELL_WIDTH);
|
|
|
|
addDimension(PredefinedDimension::FRAME, CELL_HEIGHT);
|
|
|
|
addDimension(PredefinedDimension::INDEX, 0);
|
2017-07-20 22:46:27 +12:00
|
|
|
addDimension(PredefinedDimension::SOUND_AMPLITUDE,
|
|
|
|
int(sqrt(CELL_HEIGHT * soundRect.width()) / 2));
|
2021-04-28 14:02:23 +12:00
|
|
|
addDimension(PredefinedDimension::FRAME_LABEL_ALIGN,
|
|
|
|
Qt::AlignVCenter | Qt::AlignRight);
|
2017-07-20 21:03:13 +12:00
|
|
|
addDimension(PredefinedDimension::ONION_TURN, 0);
|
2017-07-20 22:46:27 +12:00
|
|
|
addDimension(PredefinedDimension::QBOXLAYOUT_DIRECTION,
|
|
|
|
QBoxLayout::Direction::TopToBottom);
|
2017-07-20 21:03:13 +12:00
|
|
|
addDimension(PredefinedDimension::CENTER_ALIGN, Qt::AlignHCenter);
|
2019-09-26 14:03:35 +12:00
|
|
|
addDimension(PredefinedDimension::CAMERA_LAYER, CAMERA_CELL_WIDTH);
|
2021-04-28 14:02:23 +12:00
|
|
|
addDimension(PredefinedDimension::SCALE_THRESHOLD, 57);
|
2017-07-20 21:03:13 +12:00
|
|
|
|
|
|
|
//
|
|
|
|
// Paths
|
|
|
|
//
|
|
|
|
QPainterPath corner(QPointF(0, CELL_HEIGHT));
|
|
|
|
corner.lineTo(QPointF(CELL_DRAG_WIDTH, CELL_HEIGHT));
|
|
|
|
corner.lineTo(QPointF(CELL_DRAG_WIDTH, CELL_HEIGHT - CELL_DRAG_WIDTH));
|
|
|
|
corner.lineTo(QPointF(0, CELL_HEIGHT));
|
|
|
|
addPath(PredefinedPath::DRAG_HANDLE_CORNER, corner);
|
|
|
|
|
2021-04-28 14:02:23 +12:00
|
|
|
QPainterPath diamond(QPointF(0, -4));
|
|
|
|
diamond.lineTo(4, 0);
|
|
|
|
diamond.lineTo(0, 4);
|
|
|
|
diamond.lineTo(-4, 0);
|
|
|
|
diamond.lineTo(0, -4);
|
|
|
|
addPath(PredefinedPath::FRAME_MARKER_DIAMOND, diamond);
|
|
|
|
|
2017-07-20 21:03:13 +12:00
|
|
|
QPainterPath fromTriangle(QPointF(0, EASE_TRIANGLE_SIZE / 2));
|
|
|
|
fromTriangle.lineTo(QPointF(EASE_TRIANGLE_SIZE, -EASE_TRIANGLE_SIZE / 2));
|
|
|
|
fromTriangle.lineTo(QPointF(-EASE_TRIANGLE_SIZE, -EASE_TRIANGLE_SIZE / 2));
|
|
|
|
fromTriangle.lineTo(QPointF(0, EASE_TRIANGLE_SIZE / 2));
|
|
|
|
addPath(PredefinedPath::BEGIN_EASE_TRIANGLE, fromTriangle);
|
|
|
|
|
|
|
|
QPainterPath toTriangle(QPointF(0, -EASE_TRIANGLE_SIZE / 2));
|
|
|
|
toTriangle.lineTo(QPointF(EASE_TRIANGLE_SIZE, EASE_TRIANGLE_SIZE / 2));
|
|
|
|
toTriangle.lineTo(QPointF(-EASE_TRIANGLE_SIZE, EASE_TRIANGLE_SIZE / 2));
|
|
|
|
toTriangle.lineTo(QPointF(0, -EASE_TRIANGLE_SIZE / 2));
|
|
|
|
addPath(PredefinedPath::END_EASE_TRIANGLE, toTriangle);
|
|
|
|
|
|
|
|
QPainterPath playFrom(QPointF(0, 0));
|
|
|
|
playFrom.lineTo(QPointF(PLAY_MARKER_SIZE, 0));
|
|
|
|
playFrom.lineTo(QPointF(0, PLAY_MARKER_SIZE));
|
|
|
|
playFrom.lineTo(QPointF(0, 0));
|
|
|
|
playFrom.translate(PLAY_RANGE_X, 1);
|
|
|
|
addPath(PredefinedPath::BEGIN_PLAY_RANGE, playFrom);
|
|
|
|
|
|
|
|
QPainterPath playTo(QPointF(0, 0));
|
|
|
|
playTo.lineTo(QPointF(PLAY_MARKER_SIZE, 0));
|
|
|
|
playTo.lineTo(QPointF(0, -PLAY_MARKER_SIZE));
|
|
|
|
playTo.lineTo(QPointF(0, 0));
|
|
|
|
playTo.translate(PLAY_RANGE_X, CELL_HEIGHT - 1);
|
|
|
|
addPath(PredefinedPath::END_PLAY_RANGE, playTo);
|
|
|
|
|
|
|
|
QPainterPath track(QPointF(0, 0));
|
2017-10-04 20:00:34 +13:00
|
|
|
if (flag(PredefinedFlag::VOLUME_AREA_VERTICAL)) {
|
|
|
|
track.lineTo(QPointF(1, 1));
|
|
|
|
track.lineTo(QPointF(1, TRACKLEN - 1));
|
|
|
|
track.lineTo(QPointF(0, TRACKLEN));
|
|
|
|
track.lineTo(QPointF(-1, TRACKLEN - 1));
|
|
|
|
track.lineTo(QPointF(-1, 1));
|
|
|
|
track.lineTo(QPointF(0, 0));
|
|
|
|
track.translate(soundTopLeft + QPoint(3, 0));
|
|
|
|
} else {
|
|
|
|
track.lineTo(QPointF(1, 1));
|
|
|
|
track.lineTo(QPointF(TRACKLEN - 1, 1));
|
|
|
|
track.lineTo(QPointF(TRACKLEN, 0));
|
|
|
|
track.lineTo(QPointF(TRACKLEN - 1, -1));
|
|
|
|
track.lineTo(QPointF(1, -1));
|
|
|
|
track.lineTo(QPointF(0, 0));
|
|
|
|
track.translate(soundTopLeft);
|
|
|
|
}
|
2017-07-20 21:03:13 +12:00
|
|
|
addPath(PredefinedPath::VOLUME_SLIDER_TRACK, track);
|
|
|
|
|
|
|
|
QPainterPath head(QPointF(0, 0));
|
2017-10-04 20:00:34 +13:00
|
|
|
if (flag(PredefinedFlag::VOLUME_AREA_VERTICAL)) {
|
|
|
|
head.lineTo(QPointF(4, 4));
|
|
|
|
head.lineTo(QPointF(8, 4));
|
|
|
|
head.lineTo(QPointF(8, -4));
|
|
|
|
head.lineTo(QPointF(4, -4));
|
|
|
|
head.lineTo(QPointF(0, 0));
|
|
|
|
} else {
|
|
|
|
head.lineTo(QPointF(4, -4));
|
|
|
|
head.lineTo(QPointF(4, -8));
|
|
|
|
head.lineTo(QPointF(-4, -8));
|
|
|
|
head.lineTo(QPointF(-4, -4));
|
|
|
|
head.lineTo(QPointF(0, 0));
|
|
|
|
}
|
2017-07-20 21:03:13 +12:00
|
|
|
addPath(PredefinedPath::VOLUME_SLIDER_HEAD, head);
|
|
|
|
|
|
|
|
//
|
|
|
|
// Points
|
|
|
|
//
|
|
|
|
addPoint(PredefinedPoint::KEY_HIDDEN, QPoint(KEY_ICON_WIDTH, 0));
|
|
|
|
addPoint(PredefinedPoint::EXTENDER_XY_RADIUS, QPoint(30, 75));
|
2017-10-04 20:00:34 +13:00
|
|
|
|
|
|
|
if (flag(PredefinedFlag::VOLUME_AREA_VERTICAL))
|
|
|
|
addPoint(PredefinedPoint::VOLUME_DIVISIONS_TOP_LEFT, soundTopLeft);
|
|
|
|
else
|
|
|
|
addPoint(PredefinedPoint::VOLUME_DIVISIONS_TOP_LEFT,
|
|
|
|
soundTopLeft + QPoint(0, 3));
|
2017-07-20 21:03:13 +12:00
|
|
|
|
|
|
|
//
|
|
|
|
// Ranges
|
|
|
|
//
|
|
|
|
addRange(PredefinedRange::HEADER_LAYER, NumberRange(0, FRAME_HEADER_WIDTH));
|
2017-10-04 20:00:34 +13:00
|
|
|
addRange(PredefinedRange::HEADER_FRAME, NumberRange(0, use_header_height));
|
2017-07-20 21:03:13 +12:00
|
|
|
}
|
|
|
|
|
|
|
|
CellPosition TopToBottomOrientation::xyToPosition(const QPoint &xy,
|
|
|
|
const ColumnFan *fan) const {
|
|
|
|
int layer = fan->layerAxisToCol(xy.x());
|
|
|
|
int frame = xy.y() / CELL_HEIGHT;
|
|
|
|
return CellPosition(frame, layer);
|
|
|
|
}
|
|
|
|
QPoint TopToBottomOrientation::positionToXY(const CellPosition &position,
|
|
|
|
const ColumnFan *fan) const {
|
|
|
|
int x = colToLayerAxis(position.layer(), fan);
|
|
|
|
int y = rowToFrameAxis(position.frame());
|
|
|
|
return QPoint(x, y);
|
|
|
|
}
|
|
|
|
CellPositionRatio TopToBottomOrientation::xyToPositionRatio(
|
2021-04-28 14:02:23 +12:00
|
|
|
const QPointF &xy) const {
|
|
|
|
double frame = xy.y() / (double)CELL_HEIGHT;
|
|
|
|
double layer = xy.x() / (double)CELL_WIDTH;
|
2017-07-20 21:03:13 +12:00
|
|
|
return CellPositionRatio{frame, layer};
|
|
|
|
}
|
2021-04-28 14:02:23 +12:00
|
|
|
QPointF TopToBottomOrientation::positionRatioToXY(
|
2017-07-20 21:03:13 +12:00
|
|
|
const CellPositionRatio &ratio) const {
|
2021-04-28 14:02:23 +12:00
|
|
|
double x = ratio.layer() * (double)CELL_WIDTH;
|
|
|
|
double y = ratio.frame() * (double)CELL_HEIGHT;
|
|
|
|
return QPointF(x, y);
|
2017-07-20 21:03:13 +12:00
|
|
|
}
|
|
|
|
|
|
|
|
int TopToBottomOrientation::colToLayerAxis(int layer,
|
|
|
|
const ColumnFan *fan) const {
|
|
|
|
return fan->colToLayerAxis(layer);
|
|
|
|
}
|
|
|
|
int TopToBottomOrientation::rowToFrameAxis(int frame) const {
|
|
|
|
return frame * CELL_HEIGHT;
|
|
|
|
}
|
|
|
|
QPoint TopToBottomOrientation::frameLayerToXY(int frameAxis,
|
|
|
|
int layerAxis) const {
|
|
|
|
return QPoint(layerAxis, frameAxis);
|
|
|
|
}
|
|
|
|
int TopToBottomOrientation::layerAxis(const QPoint &xy) const { return xy.x(); }
|
|
|
|
int TopToBottomOrientation::frameAxis(const QPoint &xy) const { return xy.y(); }
|
|
|
|
NumberRange TopToBottomOrientation::layerSide(const QRect &area) const {
|
|
|
|
return NumberRange(area.left(), area.right());
|
|
|
|
}
|
|
|
|
NumberRange TopToBottomOrientation::frameSide(const QRect &area) const {
|
|
|
|
return NumberRange(area.top(), area.bottom());
|
|
|
|
}
|
|
|
|
QPoint TopToBottomOrientation::topRightCorner(const QRect &area) const {
|
|
|
|
return area.topRight();
|
|
|
|
}
|
|
|
|
|
|
|
|
CellPosition TopToBottomOrientation::arrowShift(int direction) const {
|
|
|
|
switch (direction) {
|
|
|
|
case Qt::Key_Up:
|
|
|
|
return CellPosition(-1, 0);
|
|
|
|
case Qt::Key_Down:
|
|
|
|
return CellPosition(1, 0);
|
|
|
|
case Qt::Key_Left:
|
|
|
|
return CellPosition(0, -1);
|
|
|
|
case Qt::Key_Right:
|
|
|
|
return CellPosition(0, 1);
|
|
|
|
default:
|
|
|
|
return CellPosition(0, 0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/// --------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
LeftToRightOrientation::LeftToRightOrientation() {
|
|
|
|
//
|
|
|
|
// Ranges
|
|
|
|
//
|
|
|
|
|
|
|
|
// Cell viewer
|
|
|
|
QRect cellRect(0, 0, CELL_WIDTH, CELL_HEIGHT);
|
|
|
|
addRect(PredefinedRect::CELL, cellRect);
|
2019-09-26 14:03:35 +12:00
|
|
|
addRect(PredefinedRect::CAMERA_CELL, cellRect);
|
2017-07-20 22:46:27 +12:00
|
|
|
addRect(PredefinedRect::DRAG_HANDLE_CORNER,
|
|
|
|
QRect(0, 0, CELL_WIDTH, CELL_DRAG_HEIGHT));
|
|
|
|
QRect keyRect((CELL_WIDTH - KEY_ICON_WIDTH) / 2,
|
2021-08-30 05:44:01 +12:00
|
|
|
CELL_HEIGHT - KEY_ICON_HEIGHT - 3, KEY_ICON_WIDTH,
|
2018-10-31 15:56:59 +13:00
|
|
|
KEY_ICON_HEIGHT);
|
2017-07-20 21:03:13 +12:00
|
|
|
addRect(PredefinedRect::KEY_ICON, keyRect);
|
2021-08-30 05:44:01 +12:00
|
|
|
addRect(PredefinedRect::CAMERA_KEY_ICON, keyRect.adjusted(0, -3, 0, -3));
|
|
|
|
QRect nameRect = cellRect.adjusted(4, 3, -6, -1);
|
2017-07-20 21:03:13 +12:00
|
|
|
addRect(PredefinedRect::CELL_NAME, nameRect);
|
|
|
|
addRect(PredefinedRect::CELL_NAME_WITH_KEYFRAME, nameRect);
|
2017-07-20 22:46:27 +12:00
|
|
|
addRect(PredefinedRect::END_EXTENDER,
|
2018-10-31 15:56:59 +13:00
|
|
|
QRect(0, -EXTENDER_HEIGHT - 14, EXTENDER_WIDTH, EXTENDER_HEIGHT));
|
2017-07-20 22:46:27 +12:00
|
|
|
addRect(PredefinedRect::BEGIN_EXTENDER,
|
2018-10-31 15:56:59 +13:00
|
|
|
QRect(-EXTENDER_WIDTH, -EXTENDER_HEIGHT - 14, EXTENDER_WIDTH,
|
2017-07-20 22:46:27 +12:00
|
|
|
EXTENDER_HEIGHT));
|
2017-07-20 21:03:13 +12:00
|
|
|
addRect(PredefinedRect::KEYFRAME_AREA, keyRect);
|
|
|
|
addRect(PredefinedRect::DRAG_AREA, QRect(0, 0, CELL_WIDTH, CELL_DRAG_HEIGHT));
|
2021-11-22 22:49:42 +13:00
|
|
|
int markSize = CELL_HEIGHT / 2; // 50% size (12px)
|
|
|
|
addRect(PredefinedRect::CELL_MARK_AREA,
|
|
|
|
QRect(1, CELL_DRAG_HEIGHT + 1, markSize, markSize));
|
2017-07-20 22:46:27 +12:00
|
|
|
QRect soundRect(0, CELL_DRAG_HEIGHT, CELL_WIDTH,
|
|
|
|
CELL_HEIGHT - CELL_DRAG_HEIGHT - SOUND_PREVIEW_HEIGHT);
|
2017-07-20 21:03:13 +12:00
|
|
|
addRect(PredefinedRect::SOUND_TRACK, soundRect);
|
2017-07-20 22:46:27 +12:00
|
|
|
addRect(PredefinedRect::PREVIEW_TRACK,
|
|
|
|
QRect(0, CELL_HEIGHT - SOUND_PREVIEW_HEIGHT + 1, CELL_WIDTH,
|
|
|
|
SOUND_PREVIEW_HEIGHT));
|
|
|
|
addRect(PredefinedRect::BEGIN_SOUND_EDIT,
|
|
|
|
QRect(0, CELL_DRAG_HEIGHT, 2, CELL_HEIGHT - CELL_DRAG_HEIGHT));
|
|
|
|
addRect(PredefinedRect::END_SOUND_EDIT,
|
|
|
|
QRect(CELL_WIDTH - 2, CELL_DRAG_HEIGHT, 2,
|
|
|
|
CELL_HEIGHT - CELL_DRAG_HEIGHT));
|
2017-07-20 21:03:13 +12:00
|
|
|
addRect(PredefinedRect::LOOP_ICON, QRect(0, keyRect.top(), 10, 11));
|
2019-09-26 14:03:35 +12:00
|
|
|
addRect(PredefinedRect::CAMERA_LOOP_ICON, rect(PredefinedRect::LOOP_ICON));
|
2018-06-20 15:09:22 +12:00
|
|
|
QRect frameMarker((CELL_WIDTH - FRAME_MARKER_SIZE) / 2 - 1,
|
2018-10-31 15:56:59 +13:00
|
|
|
CELL_HEIGHT - FRAME_MARKER_SIZE - 7, FRAME_MARKER_SIZE,
|
2018-06-20 15:09:22 +12:00
|
|
|
FRAME_MARKER_SIZE);
|
|
|
|
addRect(PredefinedRect::FRAME_MARKER_AREA, frameMarker);
|
2021-04-28 14:02:23 +12:00
|
|
|
addRect(PredefinedRect::CAMERA_FRAME_MARKER_AREA,
|
|
|
|
rect(PredefinedRect::FRAME_MARKER_AREA));
|
2017-07-20 21:03:13 +12:00
|
|
|
|
|
|
|
// Notes viewer
|
2017-07-20 22:46:27 +12:00
|
|
|
addRect(
|
|
|
|
PredefinedRect::NOTE_AREA,
|
|
|
|
QRect(QPoint(0, 0), QSize(LAYER_HEADER_WIDTH - 1, FRAME_HEADER_HEIGHT)));
|
|
|
|
addRect(PredefinedRect::NOTE_ICON,
|
|
|
|
QRect(QPoint(0, 0), QSize(CELL_WIDTH - 2, CELL_HEIGHT - 2)));
|
2018-10-31 15:56:59 +13:00
|
|
|
|
|
|
|
// Layer header panel
|
2017-07-20 22:46:27 +12:00
|
|
|
addRect(PredefinedRect::LAYER_HEADER_PANEL,
|
|
|
|
QRect(0, FRAME_HEADER_HEIGHT - CELL_HEIGHT, LAYER_HEADER_WIDTH,
|
2018-10-31 15:56:59 +13:00
|
|
|
LAYER_HEADER_PANEL_HEIGHT));
|
|
|
|
QRect panelEye(1, 0, ICON_WIDTH, ICON_HEIGHT);
|
|
|
|
addRect(PredefinedRect::PANEL_EYE, panelEye.adjusted(1, 1, -1, -1));
|
|
|
|
addRect(PredefinedRect::PANEL_PREVIEW_LAYER,
|
|
|
|
panelEye.translated(ICON_OFFSET, 0).adjusted(1, 1, -1, -1));
|
|
|
|
addRect(PredefinedRect::PANEL_LOCK,
|
|
|
|
panelEye.translated(2 * ICON_OFFSET, 0).adjusted(1, 1, -1, -1));
|
|
|
|
QRect panelName(ICONS_WIDTH + THUMBNAIL_WIDTH + 1, 0,
|
|
|
|
LAYER_NAME_WIDTH + LAYER_NUMBER_WIDTH - 4,
|
|
|
|
LAYER_HEADER_PANEL_HEIGHT);
|
|
|
|
addRect(PredefinedRect::PANEL_LAYER_NAME, panelName);
|
2017-07-20 21:03:13 +12:00
|
|
|
|
|
|
|
// Row viewer
|
2017-07-20 22:46:27 +12:00
|
|
|
addRect(PredefinedRect::FRAME_LABEL,
|
|
|
|
QRect(CELL_WIDTH / 4, 1, CELL_WIDTH / 2, FRAME_HEADER_HEIGHT - 2));
|
|
|
|
addRect(PredefinedRect::FRAME_HEADER,
|
2017-08-14 06:19:02 +12:00
|
|
|
QRect(0, 0, CELL_WIDTH, FRAME_HEADER_HEIGHT));
|
2017-07-20 22:46:27 +12:00
|
|
|
addRect(PredefinedRect::PLAY_RANGE,
|
|
|
|
QRect(0, PLAY_RANGE_Y, CELL_WIDTH, PLAY_MARKER_SIZE));
|
|
|
|
addRect(PredefinedRect::ONION,
|
2017-11-24 22:15:54 +13:00
|
|
|
QRect(ONION_X + (CELL_WIDTH - ONION_SIZE) / 2 - 1,
|
|
|
|
ONION_Y + (3 * ONION_DOT_SIZE - ONION_SIZE) / 2, ONION_SIZE,
|
|
|
|
ONION_SIZE)
|
2017-11-14 18:24:32 +13:00
|
|
|
.adjusted(1, 2, 1, 2));
|
2017-07-20 21:03:13 +12:00
|
|
|
int adjustOnion = (ONION_SIZE - ONION_DOT_SIZE) / 2;
|
2017-07-20 22:46:27 +12:00
|
|
|
addRect(PredefinedRect::ONION_DOT,
|
2017-11-24 22:15:54 +13:00
|
|
|
QRect(ONION_X + adjustOnion + (CELL_WIDTH - ONION_SIZE) / 2,
|
|
|
|
ONION_Y + ONION_DOT_SIZE, ONION_DOT_SIZE, ONION_DOT_SIZE)
|
2017-11-14 18:24:32 +13:00
|
|
|
.adjusted(1, 1, 1, 1));
|
|
|
|
addRect(PredefinedRect::ONION_DOT_FIXED,
|
2017-11-24 22:15:54 +13:00
|
|
|
QRect(ONION_X + adjustOnion + (CELL_WIDTH - ONION_SIZE) / 2, ONION_Y,
|
|
|
|
ONION_DOT_SIZE, ONION_DOT_SIZE)
|
2017-11-14 18:24:32 +13:00
|
|
|
.adjusted(1, 1, 1, 1));
|
2017-07-20 22:46:27 +12:00
|
|
|
addRect(PredefinedRect::ONION_AREA,
|
|
|
|
QRect(ONION_X, ONION_Y, CELL_WIDTH, ONION_SIZE));
|
|
|
|
addRect(PredefinedRect::ONION_FIXED_DOT_AREA,
|
2018-12-28 22:07:09 +13:00
|
|
|
QRect(ONION_X, ONION_Y, CELL_WIDTH, ONION_DOT_SIZE + 1));
|
2017-07-20 22:46:27 +12:00
|
|
|
addRect(PredefinedRect::ONION_DOT_AREA,
|
2018-12-28 22:07:09 +13:00
|
|
|
QRect(ONION_X, ONION_Y + ONION_DOT_SIZE + 1, CELL_WIDTH,
|
|
|
|
ONION_DOT_SIZE + 1));
|
2017-07-20 22:46:27 +12:00
|
|
|
addRect(
|
|
|
|
PredefinedRect::PINNED_CENTER_KEY,
|
|
|
|
QRect((CELL_WIDTH - PINNED_SIZE) / 2,
|
|
|
|
(FRAME_HEADER_HEIGHT - PINNED_SIZE) / 2, PINNED_SIZE, PINNED_SIZE));
|
2018-06-20 15:09:22 +12:00
|
|
|
addRect(
|
|
|
|
PredefinedRect::PREVIEW_FRAME_AREA,
|
|
|
|
QRect(0, PLAY_RANGE_Y, CELL_WIDTH, (FRAME_HEADER_HEIGHT - PLAY_RANGE_Y)));
|
2017-07-20 21:03:13 +12:00
|
|
|
|
2018-08-07 19:22:49 +12:00
|
|
|
addRect(PredefinedRect::SHIFTTRACE_DOT,
|
|
|
|
QRect((CELL_WIDTH - SHIFTTRACE_DOT_SIZE) / 2, SHIFTTRACE_DOT_OFFSET,
|
|
|
|
SHIFTTRACE_DOT_SIZE, SHIFTTRACE_DOT_SIZE)
|
|
|
|
.adjusted(-1, 0, -1, 0));
|
|
|
|
addRect(PredefinedRect::SHIFTTRACE_DOT_AREA,
|
|
|
|
QRect(0, SHIFTTRACE_DOT_OFFSET, CELL_WIDTH, SHIFTTRACE_DOT_SIZE));
|
|
|
|
|
2017-07-20 21:03:13 +12:00
|
|
|
// Column viewer
|
2017-07-20 22:46:27 +12:00
|
|
|
addRect(PredefinedRect::LAYER_HEADER,
|
2017-12-11 16:48:31 +13:00
|
|
|
QRect(1, 0, LAYER_HEADER_WIDTH - 2, CELL_HEIGHT));
|
2017-07-20 22:46:27 +12:00
|
|
|
addRect(
|
|
|
|
PredefinedRect::FOLDED_LAYER_HEADER,
|
2017-12-11 16:48:31 +13:00
|
|
|
QRect(1, 0, FOLDED_LAYER_HEADER_WIDTH - 2, FOLDED_LAYER_HEADER_HEIGHT));
|
2019-09-26 14:03:35 +12:00
|
|
|
addRect(PredefinedRect::CAMERA_LAYER_HEADER,
|
|
|
|
QRect(1, 0, LAYER_HEADER_WIDTH - 2, CAMERA_CELL_HEIGHT));
|
2018-10-31 15:56:59 +13:00
|
|
|
QRect columnName(ICONS_WIDTH + THUMBNAIL_WIDTH + 1, 0,
|
2018-06-20 15:09:22 +12:00
|
|
|
LAYER_NAME_WIDTH + LAYER_NUMBER_WIDTH - 4, CELL_HEIGHT);
|
2017-07-20 21:03:13 +12:00
|
|
|
addRect(PredefinedRect::RENAME_COLUMN, columnName);
|
2018-10-31 15:56:59 +13:00
|
|
|
QRect eyeArea(1, 0, ICON_WIDTH, CELL_HEIGHT);
|
|
|
|
QRect eye(1,
|
|
|
|
eyeArea.top() + ((eyeArea.height() / 2) - ((ICON_HEIGHT - 1) / 2)),
|
|
|
|
ICON_WIDTH, ICON_HEIGHT);
|
|
|
|
addRect(PredefinedRect::EYE_AREA, eyeArea);
|
2017-10-04 20:00:34 +13:00
|
|
|
addRect(PredefinedRect::EYE, eye.adjusted(1, 1, -1, -1));
|
2018-10-31 15:56:59 +13:00
|
|
|
addRect(PredefinedRect::PREVIEW_LAYER_AREA,
|
|
|
|
eyeArea.translated(ICON_OFFSET, 0));
|
2017-07-20 22:46:27 +12:00
|
|
|
addRect(PredefinedRect::PREVIEW_LAYER,
|
2017-10-04 20:00:34 +13:00
|
|
|
eye.translated(ICON_OFFSET, 0).adjusted(1, 1, -1, -1));
|
2018-10-31 15:56:59 +13:00
|
|
|
addRect(PredefinedRect::LOCK_AREA, eyeArea.translated(2 * ICON_OFFSET, 0));
|
2017-07-20 22:46:27 +12:00
|
|
|
addRect(PredefinedRect::LOCK,
|
2017-10-04 20:00:34 +13:00
|
|
|
eye.translated(2 * ICON_OFFSET, 0).adjusted(1, 1, -1, -1));
|
2019-09-26 14:03:35 +12:00
|
|
|
addRect(PredefinedRect::CAMERA_LOCK_AREA, rect(PredefinedRect::LOCK_AREA));
|
|
|
|
addRect(PredefinedRect::CAMERA_LOCK, rect(PredefinedRect::LOCK));
|
2018-10-31 15:56:59 +13:00
|
|
|
addRect(PredefinedRect::CONFIG_AREA, eyeArea.translated(3 * ICON_OFFSET, 0));
|
2017-10-04 20:00:34 +13:00
|
|
|
addRect(PredefinedRect::CONFIG,
|
|
|
|
eye.translated(3 * ICON_OFFSET, 0).adjusted(1, 1, -1, -1));
|
2019-09-26 14:03:35 +12:00
|
|
|
addRect(PredefinedRect::CAMERA_CONFIG_AREA,
|
|
|
|
rect(PredefinedRect::CONFIG_AREA));
|
|
|
|
addRect(PredefinedRect::CAMERA_CONFIG, rect(PredefinedRect::CONFIG));
|
2017-07-20 22:46:27 +12:00
|
|
|
addRect(PredefinedRect::DRAG_LAYER,
|
2018-10-31 15:56:59 +13:00
|
|
|
QRect(ICONS_WIDTH + THUMBNAIL_WIDTH + 1, 0,
|
|
|
|
LAYER_HEADER_WIDTH - ICONS_WIDTH - THUMBNAIL_WIDTH - 3,
|
2017-07-20 22:46:27 +12:00
|
|
|
CELL_DRAG_HEIGHT));
|
2017-07-20 21:03:13 +12:00
|
|
|
addRect(PredefinedRect::LAYER_NAME, columnName);
|
2019-09-26 14:03:35 +12:00
|
|
|
addRect(PredefinedRect::CAMERA_LAYER_NAME, rect(PredefinedRect::LAYER_NAME));
|
2017-07-20 22:46:27 +12:00
|
|
|
addRect(PredefinedRect::LAYER_NUMBER,
|
2018-10-31 15:56:59 +13:00
|
|
|
QRect(ICONS_WIDTH + THUMBNAIL_WIDTH + 1, 0, LAYER_NUMBER_WIDTH,
|
|
|
|
CELL_HEIGHT));
|
|
|
|
QRect thumbnailArea = QRect(ICONS_WIDTH + 1, 0, THUMBNAIL_WIDTH, CELL_HEIGHT);
|
|
|
|
addRect(PredefinedRect::THUMBNAIL_AREA, thumbnailArea);
|
|
|
|
QRect thumbnail = thumbnailArea.adjusted(1, 1, 0, 0);
|
|
|
|
addRect(PredefinedRect::THUMBNAIL, thumbnail);
|
2019-09-26 14:03:35 +12:00
|
|
|
addRect(PredefinedRect::CAMERA_ICON_AREA,
|
|
|
|
rect(PredefinedRect::THUMBNAIL_AREA));
|
|
|
|
addRect(PredefinedRect::CAMERA_ICON, rect(PredefinedRect::THUMBNAIL));
|
|
|
|
|
2017-07-20 22:46:27 +12:00
|
|
|
addRect(PredefinedRect::FILTER_COLOR,
|
2018-10-31 15:56:59 +13:00
|
|
|
QRect(thumbnail.right() - 14, thumbnail.top() + 3, 12, 12));
|
2017-07-20 22:46:27 +12:00
|
|
|
addRect(PredefinedRect::PEGBAR_NAME, QRect(0, 0, -1, -1)); // hide
|
|
|
|
addRect(PredefinedRect::PARENT_HANDLE_NAME, QRect(0, 0, -1, -1)); // hide
|
2017-07-20 21:03:13 +12:00
|
|
|
|
2017-07-20 22:46:27 +12:00
|
|
|
addRect(PredefinedRect::SOUND_ICON,
|
2018-10-31 15:56:59 +13:00
|
|
|
QRect(thumbnailArea.topLeft(), QSize(27, thumbnailArea.height()))
|
|
|
|
.adjusted((thumbnailArea.width() / 2) - (27 / 2), 0,
|
|
|
|
(thumbnailArea.width() / 2) - (27 / 2), 0));
|
2017-07-20 21:03:13 +12:00
|
|
|
|
2018-10-31 15:56:59 +13:00
|
|
|
QRect volumeArea(
|
|
|
|
QRect(columnName.topRight(), QSize(TRACKLEN + 8, 14))
|
|
|
|
.adjusted(-77, CELL_DRAG_HEIGHT + 1, -77, CELL_DRAG_HEIGHT + 1));
|
2017-10-04 20:00:34 +13:00
|
|
|
addRect(PredefinedRect::VOLUME_AREA, volumeArea);
|
|
|
|
QPoint soundTopLeft(volumeArea.left() + 4, volumeArea.bottom() - 6);
|
|
|
|
addRect(PredefinedRect::VOLUME_TRACK,
|
|
|
|
QRect(soundTopLeft, QSize(TRACKLEN, 3)));
|
|
|
|
|
2018-05-16 20:23:35 +12:00
|
|
|
// Layer footer panel
|
2018-10-31 15:56:59 +13:00
|
|
|
QRect layerFooterPanel(
|
|
|
|
QRect(0, 0, LAYER_HEADER_WIDTH + 2, LAYER_FOOTER_PANEL_HEIGHT));
|
2018-05-16 20:23:35 +12:00
|
|
|
addRect(PredefinedRect::LAYER_FOOTER_PANEL, layerFooterPanel);
|
|
|
|
|
2020-06-01 16:13:38 +12:00
|
|
|
QRect zoomSlider, zoomIn, zoomOut, noteArea; // addLevel,
|
2018-05-16 20:23:35 +12:00
|
|
|
|
2018-10-31 15:56:59 +13:00
|
|
|
zoomSlider =
|
|
|
|
QRect(layerFooterPanel.width() - 100, 0, 81, LAYER_FOOTER_PANEL_HEIGHT);
|
2018-05-16 20:23:35 +12:00
|
|
|
addRect(PredefinedRect::ZOOM_SLIDER_AREA, zoomSlider);
|
|
|
|
addRect(PredefinedRect::ZOOM_SLIDER, zoomSlider.adjusted(1, 0, 0, 0));
|
|
|
|
|
2018-10-31 15:56:59 +13:00
|
|
|
zoomIn = QRect(zoomSlider.right() + 1, 0, 16, LAYER_FOOTER_PANEL_HEIGHT);
|
2018-05-16 20:23:35 +12:00
|
|
|
addRect(PredefinedRect::ZOOM_IN_AREA, zoomIn);
|
|
|
|
addRect(PredefinedRect::ZOOM_IN, zoomIn.adjusted(1, 1, 0, 0));
|
|
|
|
|
2018-10-31 15:56:59 +13:00
|
|
|
zoomOut = QRect(zoomSlider.left() - 16, 0, 16, LAYER_FOOTER_PANEL_HEIGHT);
|
2018-05-16 20:23:35 +12:00
|
|
|
addRect(PredefinedRect::ZOOM_OUT_AREA, zoomOut);
|
|
|
|
addRect(PredefinedRect::ZOOM_OUT, zoomOut.adjusted(1, 1, 0, 0));
|
|
|
|
|
2020-06-01 16:13:38 +12:00
|
|
|
// addLevel = QRect(zoomOut.left() - 24, 0, 16, LAYER_FOOTER_PANEL_HEIGHT);
|
|
|
|
// addRect(PredefinedRect::ADD_LEVEL_AREA, addLevel);
|
|
|
|
// addRect(PredefinedRect::ADD_LEVEL, addLevel.adjusted(1, 1, 0, 0));
|
|
|
|
|
|
|
|
noteArea = QRect(zoomOut.left() - 75, 0, 68, LAYER_FOOTER_PANEL_HEIGHT);
|
|
|
|
addRect(PredefinedRect::FOOTER_NOTE_AREA, noteArea);
|
|
|
|
addRect(PredefinedRect::FOOTER_NOTE_OBJ_AREA, noteArea.adjusted(1, 0, 0, 0));
|
2020-05-31 16:24:30 +12:00
|
|
|
|
2018-05-16 20:23:35 +12:00
|
|
|
// Flags
|
2017-10-04 20:00:34 +13:00
|
|
|
addFlag(PredefinedFlag::DRAG_LAYER_BORDER, false);
|
|
|
|
addFlag(PredefinedFlag::DRAG_LAYER_VISIBLE, true);
|
2018-06-20 15:09:22 +12:00
|
|
|
addFlag(PredefinedFlag::LAYER_NAME_BORDER, true);
|
2017-10-04 20:00:34 +13:00
|
|
|
addFlag(PredefinedFlag::LAYER_NAME_VISIBLE, true);
|
2018-06-20 15:09:22 +12:00
|
|
|
addFlag(PredefinedFlag::LAYER_NUMBER_BORDER, true);
|
2017-10-04 20:00:34 +13:00
|
|
|
addFlag(PredefinedFlag::LAYER_NUMBER_VISIBLE, true);
|
|
|
|
addFlag(PredefinedFlag::EYE_AREA_BORDER, true);
|
|
|
|
addFlag(PredefinedFlag::EYE_AREA_VISIBLE, true);
|
|
|
|
addFlag(PredefinedFlag::LOCK_AREA_BORDER, true);
|
|
|
|
addFlag(PredefinedFlag::LOCK_AREA_VISIBLE, true);
|
|
|
|
addFlag(PredefinedFlag::PREVIEW_LAYER_AREA_BORDER, true);
|
|
|
|
addFlag(PredefinedFlag::PREVIEW_LAYER_AREA_VISIBLE, true);
|
|
|
|
addFlag(PredefinedFlag::CONFIG_AREA_BORDER, true);
|
2019-09-26 14:03:35 +12:00
|
|
|
addFlag(PredefinedFlag::CAMERA_CONFIG_AREA_BORDER, true);
|
2017-10-04 20:00:34 +13:00
|
|
|
addFlag(PredefinedFlag::CONFIG_AREA_VISIBLE, true);
|
2019-09-30 20:09:18 +13:00
|
|
|
addFlag(PredefinedFlag::CAMERA_CONFIG_AREA_VISIBLE, true);
|
2017-10-04 20:00:34 +13:00
|
|
|
addFlag(PredefinedFlag::PEGBAR_NAME_BORDER, false);
|
|
|
|
addFlag(PredefinedFlag::PEGBAR_NAME_VISIBLE, false);
|
|
|
|
addFlag(PredefinedFlag::PARENT_HANDLE_NAME_BORDER, false);
|
|
|
|
addFlag(PredefinedFlag::PARENT_HANDLE_NAME_VISIBILE, false);
|
2018-10-31 15:56:59 +13:00
|
|
|
addFlag(PredefinedFlag::THUMBNAIL_AREA_BORDER, true);
|
|
|
|
addFlag(PredefinedFlag::THUMBNAIL_AREA_VISIBLE, true);
|
2019-09-26 14:03:35 +12:00
|
|
|
addFlag(PredefinedFlag::CAMERA_ICON_VISIBLE, true);
|
2017-10-04 20:00:34 +13:00
|
|
|
addFlag(PredefinedFlag::VOLUME_AREA_VERTICAL, false);
|
2021-08-23 21:01:37 +12:00
|
|
|
addFlag(PredefinedFlag::NOTE_AREA_IN_POPUP, false);
|
2017-10-04 20:00:34 +13:00
|
|
|
|
2017-07-20 21:03:13 +12:00
|
|
|
//
|
|
|
|
// Lines
|
|
|
|
//
|
2017-07-20 22:46:27 +12:00
|
|
|
addLine(PredefinedLine::LOCKED,
|
2018-06-20 15:09:22 +12:00
|
|
|
verticalLine((CELL_DRAG_HEIGHT + 1) / 2, NumberRange(0, CELL_WIDTH)));
|
2017-07-20 22:46:27 +12:00
|
|
|
addLine(PredefinedLine::SEE_MARKER_THROUGH,
|
|
|
|
horizontalLine(0, NumberRange(0, CELL_DRAG_HEIGHT)));
|
|
|
|
addLine(PredefinedLine::CONTINUE_LEVEL,
|
|
|
|
verticalLine(CELL_HEIGHT / 2, NumberRange(0, CELL_WIDTH)));
|
|
|
|
addLine(PredefinedLine::CONTINUE_LEVEL_WITH_NAME,
|
|
|
|
verticalLine(CELL_HEIGHT / 2, NumberRange(0, CELL_WIDTH)));
|
|
|
|
addLine(PredefinedLine::EXTENDER_LINE,
|
|
|
|
horizontalLine(0, NumberRange(-EXTENDER_WIDTH - KEY_ICON_WIDTH, 0)));
|
2017-07-20 21:03:13 +12:00
|
|
|
|
|
|
|
//
|
|
|
|
// Dimensions
|
|
|
|
//
|
|
|
|
addDimension(PredefinedDimension::LAYER, CELL_HEIGHT);
|
|
|
|
addDimension(PredefinedDimension::FRAME, CELL_WIDTH);
|
|
|
|
addDimension(PredefinedDimension::INDEX, 1);
|
|
|
|
addDimension(PredefinedDimension::SOUND_AMPLITUDE, soundRect.height() / 2);
|
2017-07-20 22:46:27 +12:00
|
|
|
addDimension(PredefinedDimension::FRAME_LABEL_ALIGN,
|
|
|
|
Qt::AlignHCenter | Qt::AlignBottom | Qt::TextWordWrap);
|
2017-07-20 21:03:13 +12:00
|
|
|
addDimension(PredefinedDimension::ONION_TURN, 90);
|
2017-07-20 22:46:27 +12:00
|
|
|
addDimension(PredefinedDimension::QBOXLAYOUT_DIRECTION,
|
|
|
|
QBoxLayout::Direction::LeftToRight);
|
2017-07-20 21:03:13 +12:00
|
|
|
addDimension(PredefinedDimension::CENTER_ALIGN, Qt::AlignVCenter);
|
2019-09-26 14:03:35 +12:00
|
|
|
addDimension(PredefinedDimension::CAMERA_LAYER, CAMERA_CELL_HEIGHT);
|
2021-04-28 14:02:23 +12:00
|
|
|
addDimension(PredefinedDimension::SCALE_THRESHOLD, 50);
|
2017-07-20 21:03:13 +12:00
|
|
|
|
|
|
|
//
|
|
|
|
// Paths
|
|
|
|
//
|
|
|
|
QPainterPath corner(QPointF(CELL_WIDTH, 0));
|
|
|
|
corner.lineTo(QPointF(CELL_WIDTH, CELL_DRAG_HEIGHT));
|
|
|
|
corner.lineTo(QPointF(CELL_WIDTH - CELL_DRAG_HEIGHT, CELL_DRAG_HEIGHT));
|
|
|
|
corner.lineTo(QPointF(CELL_WIDTH, 0));
|
|
|
|
addPath(PredefinedPath::DRAG_HANDLE_CORNER, corner);
|
|
|
|
|
2018-06-20 15:09:22 +12:00
|
|
|
QPainterPath diamond(QPointF(0, -4));
|
|
|
|
diamond.lineTo(4, 0);
|
|
|
|
diamond.lineTo(0, 4);
|
|
|
|
diamond.lineTo(-4, 0);
|
|
|
|
diamond.lineTo(0, -4);
|
|
|
|
addPath(PredefinedPath::FRAME_MARKER_DIAMOND, diamond);
|
|
|
|
|
2017-07-20 21:03:13 +12:00
|
|
|
QPainterPath fromTriangle(QPointF(EASE_TRIANGLE_SIZE / 2, 0));
|
|
|
|
fromTriangle.lineTo(QPointF(-EASE_TRIANGLE_SIZE / 2, EASE_TRIANGLE_SIZE));
|
|
|
|
fromTriangle.lineTo(QPointF(-EASE_TRIANGLE_SIZE / 2, -EASE_TRIANGLE_SIZE));
|
|
|
|
fromTriangle.lineTo(QPointF(EASE_TRIANGLE_SIZE / 2, 0));
|
|
|
|
addPath(PredefinedPath::BEGIN_EASE_TRIANGLE, fromTriangle);
|
|
|
|
|
|
|
|
QPainterPath toTriangle(QPointF(-EASE_TRIANGLE_SIZE / 2, 0));
|
|
|
|
toTriangle.lineTo(QPointF(EASE_TRIANGLE_SIZE / 2, EASE_TRIANGLE_SIZE));
|
|
|
|
toTriangle.lineTo(QPointF(EASE_TRIANGLE_SIZE / 2, -EASE_TRIANGLE_SIZE));
|
|
|
|
toTriangle.lineTo(QPointF(-EASE_TRIANGLE_SIZE / 2, 0));
|
|
|
|
addPath(PredefinedPath::END_EASE_TRIANGLE, toTriangle);
|
|
|
|
|
|
|
|
QPainterPath playFrom(QPointF(0, 0));
|
|
|
|
playFrom.lineTo(QPointF(PLAY_MARKER_SIZE, 0));
|
|
|
|
playFrom.lineTo(QPointF(0, PLAY_MARKER_SIZE));
|
|
|
|
playFrom.lineTo(QPointF(0, 0));
|
|
|
|
playFrom.translate(1, PLAY_RANGE_Y);
|
|
|
|
addPath(PredefinedPath::BEGIN_PLAY_RANGE, playFrom);
|
|
|
|
|
|
|
|
QPainterPath playTo(QPointF(0, 0));
|
|
|
|
playTo.lineTo(QPointF(-PLAY_MARKER_SIZE, 0));
|
|
|
|
playTo.lineTo(QPointF(0, PLAY_MARKER_SIZE));
|
|
|
|
playTo.lineTo(QPointF(0, 0));
|
2018-06-20 15:09:22 +12:00
|
|
|
playTo.translate(CELL_WIDTH - 2, PLAY_RANGE_Y);
|
2017-07-20 21:03:13 +12:00
|
|
|
addPath(PredefinedPath::END_PLAY_RANGE, playTo);
|
|
|
|
|
|
|
|
QPainterPath track(QPointF(0, 0));
|
|
|
|
track.lineTo(QPointF(1, 1));
|
2017-10-04 20:00:34 +13:00
|
|
|
track.lineTo(QPointF(TRACKLEN - 1, 1));
|
|
|
|
track.lineTo(QPointF(TRACKLEN, 0));
|
|
|
|
track.lineTo(QPointF(TRACKLEN - 1, -1));
|
2017-07-20 21:03:13 +12:00
|
|
|
track.lineTo(QPointF(1, -1));
|
|
|
|
track.lineTo(QPointF(0, 0));
|
|
|
|
track.translate(soundTopLeft);
|
|
|
|
addPath(PredefinedPath::VOLUME_SLIDER_TRACK, track);
|
|
|
|
|
|
|
|
QPainterPath head(QPointF(0, 0));
|
|
|
|
head.lineTo(QPointF(4, -4));
|
|
|
|
head.lineTo(QPointF(4, -8));
|
|
|
|
head.lineTo(QPointF(-4, -8));
|
|
|
|
head.lineTo(QPointF(-4, -4));
|
|
|
|
head.lineTo(QPointF(0, 0));
|
|
|
|
addPath(PredefinedPath::VOLUME_SLIDER_HEAD, head);
|
|
|
|
|
2017-11-14 18:24:32 +13:00
|
|
|
QPainterPath timeIndicator(QPointF(0, 0));
|
|
|
|
timeIndicator.lineTo(QPointF(-9, -5));
|
|
|
|
timeIndicator.lineTo(QPointF(-9, -18));
|
|
|
|
timeIndicator.lineTo(QPointF(9, -18));
|
|
|
|
timeIndicator.lineTo(QPointF(9, -4));
|
|
|
|
timeIndicator.lineTo(QPointF(0, 0));
|
|
|
|
addPath(PredefinedPath::TIME_INDICATOR_HEAD, timeIndicator);
|
|
|
|
|
2017-07-20 21:03:13 +12:00
|
|
|
//
|
|
|
|
// Points
|
|
|
|
//
|
|
|
|
addPoint(PredefinedPoint::KEY_HIDDEN, QPoint(0, 10));
|
|
|
|
addPoint(PredefinedPoint::EXTENDER_XY_RADIUS, QPoint(75, 30));
|
2017-07-20 22:46:27 +12:00
|
|
|
addPoint(PredefinedPoint::VOLUME_DIVISIONS_TOP_LEFT,
|
|
|
|
soundTopLeft + QPoint(0, 3));
|
2017-07-20 21:03:13 +12:00
|
|
|
|
|
|
|
//
|
|
|
|
// Ranges
|
|
|
|
//
|
|
|
|
addRange(PredefinedRange::HEADER_LAYER, NumberRange(0, FRAME_HEADER_HEIGHT));
|
|
|
|
addRange(PredefinedRange::HEADER_FRAME, NumberRange(0, LAYER_HEADER_WIDTH));
|
|
|
|
}
|
|
|
|
|
|
|
|
CellPosition LeftToRightOrientation::xyToPosition(const QPoint &xy,
|
|
|
|
const ColumnFan *fan) const {
|
|
|
|
int layer = fan->layerAxisToCol(xy.y());
|
|
|
|
int frame = xy.x() / CELL_WIDTH;
|
|
|
|
return CellPosition(frame, layer);
|
|
|
|
}
|
|
|
|
QPoint LeftToRightOrientation::positionToXY(const CellPosition &position,
|
|
|
|
const ColumnFan *fan) const {
|
|
|
|
int y = colToLayerAxis(position.layer(), fan);
|
|
|
|
int x = rowToFrameAxis(position.frame());
|
|
|
|
return QPoint(x, y);
|
|
|
|
}
|
|
|
|
CellPositionRatio LeftToRightOrientation::xyToPositionRatio(
|
2021-04-28 14:02:23 +12:00
|
|
|
const QPointF &xy) const {
|
|
|
|
double frame = xy.x() / (double)CELL_WIDTH;
|
|
|
|
double layer = xy.y() / (double)CELL_HEIGHT;
|
2017-07-20 21:03:13 +12:00
|
|
|
return CellPositionRatio{frame, layer};
|
|
|
|
}
|
2021-04-28 14:02:23 +12:00
|
|
|
QPointF LeftToRightOrientation::positionRatioToXY(
|
2017-07-20 21:03:13 +12:00
|
|
|
const CellPositionRatio &ratio) const {
|
2021-04-28 14:02:23 +12:00
|
|
|
double x = ratio.frame() * (double)CELL_WIDTH;
|
|
|
|
double y = ratio.layer() * (double)CELL_HEIGHT;
|
|
|
|
return QPointF(x, y);
|
2017-07-20 21:03:13 +12:00
|
|
|
}
|
|
|
|
|
|
|
|
int LeftToRightOrientation::colToLayerAxis(int layer,
|
|
|
|
const ColumnFan *fan) const {
|
|
|
|
return fan->colToLayerAxis(layer);
|
|
|
|
}
|
|
|
|
int LeftToRightOrientation::rowToFrameAxis(int frame) const {
|
|
|
|
return frame * CELL_WIDTH;
|
|
|
|
}
|
|
|
|
QPoint LeftToRightOrientation::frameLayerToXY(int frameAxis,
|
|
|
|
int layerAxis) const {
|
|
|
|
return QPoint(frameAxis, layerAxis);
|
|
|
|
}
|
|
|
|
int LeftToRightOrientation::layerAxis(const QPoint &xy) const { return xy.y(); }
|
|
|
|
int LeftToRightOrientation::frameAxis(const QPoint &xy) const { return xy.x(); }
|
|
|
|
NumberRange LeftToRightOrientation::layerSide(const QRect &area) const {
|
|
|
|
return NumberRange(area.top(), area.bottom());
|
|
|
|
}
|
|
|
|
NumberRange LeftToRightOrientation::frameSide(const QRect &area) const {
|
|
|
|
return NumberRange(area.left(), area.right());
|
|
|
|
}
|
|
|
|
QPoint LeftToRightOrientation::topRightCorner(const QRect &area) const {
|
|
|
|
return area.bottomLeft();
|
|
|
|
}
|
|
|
|
CellPosition LeftToRightOrientation::arrowShift(int direction) const {
|
|
|
|
switch (direction) {
|
|
|
|
case Qt::Key_Up:
|
|
|
|
return CellPosition(0, 1);
|
2017-11-29 00:29:52 +13:00
|
|
|
case Qt::Key_Down:
|
|
|
|
return CellPosition(0, -1);
|
2017-07-20 21:03:13 +12:00
|
|
|
case Qt::Key_Left:
|
|
|
|
return CellPosition(-1, 0);
|
|
|
|
case Qt::Key_Right:
|
|
|
|
return CellPosition(1, 0);
|
|
|
|
default:
|
|
|
|
return CellPosition(0, 0);
|
|
|
|
}
|
|
|
|
}
|