Krita Source Code Documentation
Loading...
Searching...
No Matches
KisAnimTimelineTimeHeader Class Reference

#include <KisAnimTimelineTimeHeader.h>

+ Inheritance diagram for KisAnimTimelineTimeHeader:

Classes

struct  Private
 

Public Slots

void slotSaveThrottle (qreal value)
 

Signals

void sigClearCache ()
 
void sigCopyColumns ()
 
void sigCutColumns ()
 
void sigInsertColumnLeft ()
 
void sigInsertColumnRight ()
 
void sigInsertHoldColumns ()
 
void sigInsertHoldColumnsCustom ()
 
void sigInsertMultipleColumns ()
 
void sigMirrorColumns ()
 
void sigPasteColumns ()
 
void sigRemoveColumns ()
 
void sigRemoveColumnsAndShift ()
 
void sigRemoveHoldColumns ()
 
void sigRemoveHoldColumnsCustom ()
 
void sigZoomChanged (qreal zoom)
 

Public Member Functions

int estimateFirstVisibleColumn ()
 
int estimateLastVisibleColumn ()
 
 KisAnimTimelineTimeHeader (QWidget *parent=0)
 
void mouseMoveEvent (QMouseEvent *e) override
 
void setActionManager (KisActionManager *actionManager)
 
void setFramePerSecond (int fps)
 
void setModel (QAbstractItemModel *model) override
 
void setPixelOffset (qreal offset)
 
bool setZoom (qreal zoomLevel)
 
qreal zoom ()
 
void zoomToFitFrameRange (int start, int end)
 
 ~KisAnimTimelineTimeHeader () override
 

Protected Member Functions

void changeEvent (QEvent *event) override
 
void mousePressEvent (QMouseEvent *e) override
 
void mouseReleaseEvent (QMouseEvent *e) override
 
void paintEvent (QPaintEvent *e) override
 
void paintSection (QPainter *painter, const QRect &rect, int logicalIndex) const override
 
void paintSection1 (QPainter *painter, const QRect &rect, int logicalIndex) const
 

Private Member Functions

void paintSpan (QPainter *painter, int userFrameId, const QRect &spanRect, bool isIntegralLine, bool isPrevIntegralLine, QStyle *style, const QPalette &palette, const QPen &gridPen) const
 
void updateMinimumSize ()
 

Private Attributes

const QScopedPointer< Privatem_d
 

Detailed Description

Definition at line 18 of file KisAnimTimelineTimeHeader.h.

Constructor & Destructor Documentation

◆ KisAnimTimelineTimeHeader()

KisAnimTimelineTimeHeader::KisAnimTimelineTimeHeader ( QWidget * parent = 0)

Definition at line 66 of file KisAnimTimelineTimeHeader.cpp.

67 : QHeaderView(Qt::Horizontal, parent)
68 , m_d(new Private)
69{
70 setSectionResizeMode(QHeaderView::Fixed);
71 setDefaultSectionSize(18);
72 setMinimumSectionSize(8);
73}
const QScopedPointer< Private > m_d

◆ ~KisAnimTimelineTimeHeader()

KisAnimTimelineTimeHeader::~KisAnimTimelineTimeHeader ( )
override

Definition at line 75 of file KisAnimTimelineTimeHeader.cpp.

76{
77}

Member Function Documentation

◆ changeEvent()

void KisAnimTimelineTimeHeader::changeEvent ( QEvent * event)
overrideprotected

Definition at line 400 of file KisAnimTimelineTimeHeader.cpp.

401{
402 Q_UNUSED(event);
403
405}

References updateMinimumSize().

◆ estimateFirstVisibleColumn()

int KisAnimTimelineTimeHeader::estimateFirstVisibleColumn ( )

Definition at line 595 of file KisAnimTimelineTimeHeader.cpp.

596{
597 const int sectionWidth = defaultSectionSize();
598 return ceil(qreal(m_d->offset) / sectionWidth);
599}

References m_d.

◆ estimateLastVisibleColumn()

int KisAnimTimelineTimeHeader::estimateLastVisibleColumn ( )

Definition at line 589 of file KisAnimTimelineTimeHeader.cpp.

590{
591 const int sectionWidth = defaultSectionSize();
592 return (m_d->offset + width() - 1) / sectionWidth;
593}

References m_d.

◆ mouseMoveEvent()

void KisAnimTimelineTimeHeader::mouseMoveEvent ( QMouseEvent * e)
override

Definition at line 554 of file KisAnimTimelineTimeHeader.cpp.

555{
556 int logical = logicalIndexAt(e->pos());
557 if (logical != -1) {
558
559 if (e->buttons() & Qt::LeftButton) {
560
561 m_d->model->setScrubState(true);
562 QVariant activeValue = model()->headerData(logical, orientation(), KisTimeBasedItemModel::ActiveFrameRole);
563 KIS_ASSERT(activeValue.type() == QVariant::Bool);
564 if (activeValue.toBool() != true) {
565 model()->setHeaderData(logical, orientation(), true, KisTimeBasedItemModel::ActiveFrameRole);
566 model()->setHeaderData(logical, orientation(), QVariant(int(SEEK_PUSH_AUDIO)), KisTimeBasedItemModel::ScrubToRole);
567 }
568
569 if (m_d->lastPressSectionIndex >= 0 &&
570 logical != m_d->lastPressSectionIndex &&
571 e->modifiers() & Qt::ShiftModifier) {
572
573 const int minCol = qMin(m_d->lastPressSectionIndex, logical);
574 const int maxCol = qMax(m_d->lastPressSectionIndex, logical);
575
576 QItemSelection sel(m_d->model->index(0, minCol), m_d->model->index(0, maxCol));
577 selectionModel()->select(sel,
578 QItemSelectionModel::Columns |
579 QItemSelectionModel::SelectCurrent);
580 }
581
582 }
583
584 }
585
586 QHeaderView::mouseMoveEvent(e);
587}
@ SEEK_PUSH_AUDIO
#define KIS_ASSERT(cond)
Definition kis_assert.h:33

References KisTimeBasedItemModel::ActiveFrameRole, KIS_ASSERT, m_d, KisTimeBasedItemModel::ScrubToRole, and SEEK_PUSH_AUDIO.

◆ mousePressEvent()

void KisAnimTimelineTimeHeader::mousePressEvent ( QMouseEvent * e)
overrideprotected

Definition at line 476 of file KisAnimTimelineTimeHeader.cpp.

477{
478 int logical = logicalIndexAt(e->pos());
479 if (logical != -1) {
480 QModelIndexList selectedIndexes = selectionModel()->selectedIndexes();
481 int numSelectedColumns = getColumnCount(selectedIndexes, 0, 0);
482
483 if (e->button() == Qt::RightButton) {
484 if (numSelectedColumns <= 1) {
485 model()->setHeaderData(logical, orientation(), true, KisTimeBasedItemModel::ActiveFrameRole);
486 model()->setHeaderData(logical, orientation(), QVariant(int(SEEK_FINALIZE | SEEK_PUSH_AUDIO)), KisTimeBasedItemModel::ScrubToRole);
487 }
488
489 /* Fix for safe-assert involving kis_animation_curve_docker.
490 * There should probably be a more elegant way for dealing
491 * with reused timeline_ruler_header instances in other
492 * timeline views instead of simply animation_frame_view.
493 *
494 * This works for now though... */
495 if(!m_d->actionMan){
496 return;
497 }
498
499 QMenu menu;
500
501 menu.addSection(i18n("Edit Columns:"));
502 menu.addSeparator();
503
504 KisActionManager::safePopulateMenu(&menu, "cut_columns_to_clipboard", m_d->actionMan);
505 KisActionManager::safePopulateMenu(&menu, "copy_columns_to_clipboard", m_d->actionMan);
506 KisActionManager::safePopulateMenu(&menu, "paste_columns_from_clipboard", m_d->actionMan);
507
508 menu.addSeparator();
509
510 { //Frame Columns Submenu
511 QMenu *frames = menu.addMenu(i18nc("@item:inmenu", "Keyframe Columns"));
512 KisActionManager::safePopulateMenu(frames, "insert_column_left", m_d->actionMan);
513 KisActionManager::safePopulateMenu(frames, "insert_column_right", m_d->actionMan);
514 frames->addSeparator();
515 KisActionManager::safePopulateMenu(frames, "insert_multiple_columns", m_d->actionMan);
516 }
517
518 { //Hold Columns Submenu
519 QMenu *hold = menu.addMenu(i18nc("@item:inmenu", "Hold Frame Columns"));
520 KisActionManager::safePopulateMenu(hold, "insert_hold_column", m_d->actionMan);
521 KisActionManager::safePopulateMenu(hold, "remove_hold_column", m_d->actionMan);
522 hold->addSeparator();
523 KisActionManager::safePopulateMenu(hold, "insert_multiple_hold_columns", m_d->actionMan);
524 KisActionManager::safePopulateMenu(hold, "remove_multiple_hold_columns", m_d->actionMan);
525 }
526
527 menu.addSeparator();
528
529 KisActionManager::safePopulateMenu(&menu, "remove_columns", m_d->actionMan);
530 KisActionManager::safePopulateMenu(&menu, "remove_columns_and_pull", m_d->actionMan);
531
532 if (numSelectedColumns > 1) {
533 menu.addSeparator();
534 KisActionManager::safePopulateMenu(&menu, "mirror_columns", m_d->actionMan);
535 }
536
537 menu.addSeparator();
538
539 KisActionManager::safePopulateMenu(&menu, "clear_animation_cache", m_d->actionMan);
540
541 menu.exec(e->globalPos());
542
543 return;
544
545 } else if (e->button() == Qt::LeftButton) {
546 m_d->lastPressSectionIndex = logical;
547 model()->setHeaderData(logical, orientation(), true, KisTimeBasedItemModel::ActiveFrameRole);
548 }
549 }
550
551 QHeaderView::mousePressEvent(e);
552}
int getColumnCount(const QModelIndexList &indexes, int *leftmostCol, int *rightmostCol)
@ SEEK_FINALIZE
static void safePopulateMenu(QMenu *menu, const QString &actionId, KisActionManager *actionManager)

References KisTimeBasedItemModel::ActiveFrameRole, getColumnCount(), m_d, KisActionManager::safePopulateMenu(), KisTimeBasedItemModel::ScrubToRole, SEEK_FINALIZE, and SEEK_PUSH_AUDIO.

◆ mouseReleaseEvent()

void KisAnimTimelineTimeHeader::mouseReleaseEvent ( QMouseEvent * e)
overrideprotected

Definition at line 610 of file KisAnimTimelineTimeHeader.cpp.

611{
612 if (!m_d->model)
613 return;
614
615 if (e->button() == Qt::LeftButton) {
616 int timeUnderMouse = qMax(logicalIndexAt(e->pos()), 0);
617 model()->setHeaderData(timeUnderMouse, orientation(), true, KisTimeBasedItemModel::ActiveFrameRole);
618 if (timeUnderMouse != m_d->model->currentTime()) {
619 model()->setHeaderData(timeUnderMouse, orientation(), QVariant(int(SEEK_PUSH_AUDIO | SEEK_FINALIZE)), KisTimeBasedItemModel::ScrubToRole);
620 }
621 m_d->model->setScrubState(false);
622 }
623
624 QHeaderView::mouseReleaseEvent(e);
625}

References KisTimeBasedItemModel::ActiveFrameRole, m_d, KisTimeBasedItemModel::ScrubToRole, SEEK_FINALIZE, and SEEK_PUSH_AUDIO.

◆ paintEvent()

void KisAnimTimelineTimeHeader::paintEvent ( QPaintEvent * e)
overrideprotected

Krita specific code. We should update in spans!

End of Krita specific code

Definition at line 144 of file KisAnimTimelineTimeHeader.cpp.

145{
146 QHeaderView::paintEvent(e);
147
148 // Copied from Qt 4.8...
149
150 if (count() == 0)
151 return;
152
153 QPainter painter(viewport());
154 const QPoint offset = dirtyRegionOffset();
155 QRect translatedEventRect = e->rect();
156 translatedEventRect.translate(offset);
157
158 int start = -1;
159 int end = -1;
160 if (orientation() == Qt::Horizontal) {
161 start = visualIndexAt(translatedEventRect.left());
162 end = visualIndexAt(translatedEventRect.right());
163 } else {
164 start = visualIndexAt(translatedEventRect.top());
165 end = visualIndexAt(translatedEventRect.bottom());
166 }
167
168 const bool reverseImpl = orientation() == Qt::Horizontal && isRightToLeft();
169
170 if (reverseImpl) {
171 start = (start == -1 ? count() - 1 : start);
172 end = (end == -1 ? 0 : end);
173 } else {
174 start = (start == -1 ? 0 : start);
175 end = (end == -1 ? count() - 1 : end);
176 }
177
178 int tmp = start;
179 start = qMin(start, end);
180 end = qMax(tmp, end);
181
184
185 const int spanStart = start - start % m_d->fps;
186 const int spanEnd = end - end % m_d->fps + m_d->fps - 1;
187
188 start = spanStart;
189 end = qMin(count() - 1, spanEnd);
190
193
194 QRect currentSectionRect;
195 int logical;
196 const int width = viewport()->width();
197 const int height = viewport()->height();
198
199 for (int i = start; i <= end; ++i) {
200 // DK: cannot copy-paste easily...
201 // if (d->isVisualIndexHidden(i))
202 // continue;
203 painter.save();
204 logical = logicalIndex(i);
205 if (orientation() == Qt::Horizontal) {
206 currentSectionRect.setRect(sectionViewportPosition(logical), 0, sectionSize(logical), height);
207 } else {
208 currentSectionRect.setRect(0, sectionViewportPosition(logical), width, sectionSize(logical));
209 }
210 currentSectionRect.translate(offset);
211
212 QVariant variant = model()->headerData(logical, orientation(),
213 Qt::FontRole);
214 if (variant.isValid() && variant.canConvert<QFont>()) {
215 QFont sectionFont = qvariant_cast<QFont>(variant);
216 painter.setFont(sectionFont);
217 }
218 paintSection1(&painter, currentSectionRect, logical);
219 painter.restore();
220 }
221}
void paintSection1(QPainter *painter, const QRect &rect, int logicalIndex) const

References m_d, and paintSection1().

◆ paintSection()

void KisAnimTimelineTimeHeader::paintSection ( QPainter * painter,
const QRect & rect,
int logicalIndex ) const
overrideprotected

Definition at line 223 of file KisAnimTimelineTimeHeader.cpp.

224{
225 // Base paint event should paint nothing in the sections area
226
227 Q_UNUSED(painter);
228 Q_UNUSED(rect);
229 Q_UNUSED(logicalIndex);
230}

◆ paintSection1()

void KisAnimTimelineTimeHeader::paintSection1 ( QPainter * painter,
const QRect & rect,
int logicalIndex ) const
protected

Definition at line 324 of file KisAnimTimelineTimeHeader.cpp.

325{
326
327 if (!rect.isValid())
328 return;
329
330 QFontMetrics metrics(this->font());
331 const int textHeight = metrics.height();
332
333 QPoint p1 = rect.topLeft() + QPoint(0, textHeight);
334 QPoint p2 = rect.topRight() + QPoint(0, textHeight);
335
336 QRect frameRect = QRect(p1, QSize(rect.width(), rect.height() - textHeight));
337
338 const int width = rect.width();
339
340 int spanWidth = m_d->calcSpanWidth(width);
341
342 const int internalIndex = logicalIndex % spanWidth;
343 const int userFrameId = logicalIndex;
344
345 const int spanEnd = qMin(count(), logicalIndex + spanWidth);
346 QRect spanRect(rect.topLeft(), QSize(width * (spanEnd - logicalIndex), textHeight));
347
348#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0))
349 QStyleOptionViewItem option = viewOptions();
350#else
351 QStyleOptionViewItem option;
352 initViewItemOption(&option);
353#endif
354 const int gridHint = style()->styleHint(QStyle::SH_Table_GridLineColor, &option, this);
355 const QColor gridColor = static_cast<QRgb>(gridHint);
356 const QPen gridPen = QPen(gridColor);
357
358 if (!internalIndex) {
359 bool isIntegralLine = (logicalIndex + spanWidth) % m_d->fps == 0;
360 bool isPrevIntegralLine = logicalIndex % m_d->fps == 0;
361 paintSpan(painter, userFrameId, spanRect, isIntegralLine, isPrevIntegralLine, style(), palette(), gridPen);
362 }
363
364 {
365 QBrush fillColor = KisAnimTimelineColors::instance()->headerEmpty();
366
367 QVariant activeValue = model()->headerData(logicalIndex, orientation(),
369
370 QVariant cachedValue = model()->headerData(logicalIndex, orientation(),
372
373 QVariant withinRangeValue = model()->headerData(logicalIndex, orientation(),
375
376 const bool isActive = activeValue.isValid() && activeValue.toBool();
377 const bool isCached = cachedValue.isValid() && cachedValue.toBool();
378 const bool isWithinRange = withinRangeValue.isValid() && withinRangeValue.toBool();
379
380 if (isActive) {
382 } else if (isCached && isWithinRange) {
384 }
385
386 painter->fillRect(frameRect, fillColor);
387
388 QVector<QLine> lines;
389 lines << QLine(p1, p2);
390 lines << QLine(frameRect.topRight(), frameRect.bottomRight());
391 lines << QLine(frameRect.bottomLeft(), frameRect.bottomRight());
392
393 QPen oldPen = painter->pen();
394 painter->setPen(gridPen);
395 painter->drawLines(lines);
396 painter->setPen(oldPen);
397 }
398}
QPointF p2
QPointF p1
static KisAnimTimelineColors * instance()
void paintSpan(QPainter *painter, int userFrameId, const QRect &spanRect, bool isIntegralLine, bool isPrevIntegralLine, QStyle *style, const QPalette &palette, const QPen &gridPen) const
unsigned int QRgb
rgba palette[MAX_PALETTE]
Definition palette.c:35

References KisTimeBasedItemModel::ActiveFrameRole, KisTimeBasedItemModel::FrameCachedRole, KisAnimTimelineColors::headerActive(), KisAnimTimelineColors::headerCachedFrame(), KisAnimTimelineColors::headerEmpty(), KisAnimTimelineColors::instance(), m_d, p1, p2, paintSpan(), palette, and KisTimeBasedItemModel::WithinClipRange.

◆ paintSpan()

void KisAnimTimelineTimeHeader::paintSpan ( QPainter * painter,
int userFrameId,
const QRect & spanRect,
bool isIntegralLine,
bool isPrevIntegralLine,
QStyle * style,
const QPalette & palette,
const QPen & gridPen ) const
private

Definition at line 232 of file KisAnimTimelineTimeHeader.cpp.

239{
240 painter->fillRect(spanRect, palette.brush(QPalette::Button));
241
242 int safeRight = spanRect.right();
243
244 QPen oldPen = painter->pen();
245 painter->setPen(gridPen);
246
247 int adjustedTop = spanRect.top() + (!isIntegralLine ? spanRect.height() / 2 : 0);
248 painter->drawLine(safeRight, adjustedTop, safeRight, spanRect.bottom());
249
250 if (isPrevIntegralLine) {
251 painter->drawLine(spanRect.left() + 1, spanRect.top(), spanRect.left() + 1, spanRect.bottom());
252 }
253
254 painter->setPen(oldPen);
255
256 QString frameIdText = QString::number(userFrameId);
257 QRect textRect(spanRect.topLeft() + QPoint(2, 0), QSize(spanRect.width() - 2, spanRect.height()));
258
259 QStyleOptionHeader opt;
260 initStyleOption(&opt);
261
262 QStyle::State state = QStyle::State_None;
263 if (isEnabled())
264 state |= QStyle::State_Enabled;
265 if (window()->isActiveWindow())
266 state |= QStyle::State_Active;
267 opt.state |= state;
268 opt.selectedPosition = QStyleOptionHeader::NotAdjacent;
269
270 opt.textAlignment = Qt::AlignLeft | Qt::AlignTop;
271 opt.rect = textRect;
272 opt.text = frameIdText;
273 style->drawControl(QStyle::CE_HeaderLabel, &opt, painter, this);
274}

References palette.

◆ setActionManager()

void KisAnimTimelineTimeHeader::setActionManager ( KisActionManager * actionManager)

Definition at line 86 of file KisAnimTimelineTimeHeader.cpp.

87{
88 m_d->actionMan = actionManager;
89
91
92 if (actionManager) {
93 KisAction *action;
94
95 action = actionManager->createAction("insert_column_left");
96 connect(action, SIGNAL(triggered()), SIGNAL(sigInsertColumnLeft()));
97
98 action = actionManager->createAction("insert_column_right");
99 connect(action, SIGNAL(triggered()), SIGNAL(sigInsertColumnRight()));
100
101 action = actionManager->createAction("insert_multiple_columns");
102 connect(action, SIGNAL(triggered()), SIGNAL(sigInsertMultipleColumns()));
103
104 action = actionManager->createAction("remove_columns_and_pull");
105 connect(action, SIGNAL(triggered()), SIGNAL(sigRemoveColumnsAndShift()));
106
107 action = actionManager->createAction("remove_columns");
108 connect(action, SIGNAL(triggered()), SIGNAL(sigRemoveColumns()));
109
110 action = actionManager->createAction("insert_hold_column");
111 connect(action, SIGNAL(triggered()), SIGNAL(sigInsertHoldColumns()));
112
113 action = actionManager->createAction("insert_multiple_hold_columns");
114 connect(action, SIGNAL(triggered()), SIGNAL(sigInsertHoldColumnsCustom()));
115
116 action = actionManager->createAction("remove_hold_column");
117 connect(action, SIGNAL(triggered()), SIGNAL(sigRemoveHoldColumns()));
118
119 action = actionManager->createAction("remove_multiple_hold_columns");
120 connect(action, SIGNAL(triggered()), SIGNAL(sigRemoveHoldColumnsCustom()));
121
122 action = actionManager->createAction("mirror_columns");
123 connect(action, SIGNAL(triggered()), SIGNAL(sigMirrorColumns()));
124
125 action = actionManager->createAction("clear_animation_cache");
126 connect(action, SIGNAL(triggered()), SIGNAL(sigClearCache()));
127
128 action = actionManager->createAction("copy_columns_to_clipboard");
129 connect(action, SIGNAL(triggered()), SIGNAL(sigCopyColumns()));
130
131 action = actionManager->createAction("cut_columns_to_clipboard");
132 connect(action, SIGNAL(triggered()), SIGNAL(sigCutColumns()));
133
134 action = actionManager->createAction("paste_columns_from_clipboard");
135 connect(action, SIGNAL(triggered()), SIGNAL(sigPasteColumns()));
136
137 KisConfig cfg(true);
138 setZoom(cfg.timelineZoom());
140 }
141}
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
KisAction * createAction(const QString &name)
void sigZoomChanged(qreal zoom)

References connect(), KisActionManager::createAction(), m_d, setZoom(), sigClearCache(), sigCopyColumns(), sigCutColumns(), sigInsertColumnLeft(), sigInsertColumnRight(), sigInsertHoldColumns(), sigInsertHoldColumnsCustom(), sigInsertMultipleColumns(), sigMirrorColumns(), sigPasteColumns(), sigRemoveColumns(), sigRemoveColumnsAndShift(), sigRemoveHoldColumns(), sigRemoveHoldColumnsCustom(), sigZoomChanged(), slotSaveThrottle(), and KisConfig::timelineZoom().

◆ setFramePerSecond()

void KisAnimTimelineTimeHeader::setFramePerSecond ( int fps)

Definition at line 407 of file KisAnimTimelineTimeHeader.cpp.

408{
409 m_d->fps = fps;
410 update();
411}
bool update(QSpinBox *spinBox)

References m_d.

◆ setModel()

void KisAnimTimelineTimeHeader::setModel ( QAbstractItemModel * model)
override

Definition at line 448 of file KisAnimTimelineTimeHeader.cpp.

449{
450 KisTimeBasedItemModel *framesModel = qobject_cast<KisTimeBasedItemModel*>(model);
451 m_d->model = framesModel;
452
453 QHeaderView::setModel(model);
454}

References m_d.

◆ setPixelOffset()

void KisAnimTimelineTimeHeader::setPixelOffset ( qreal offset)

Definition at line 79 of file KisAnimTimelineTimeHeader.cpp.

80{
81 m_d->offset = qMax(offset, qreal(0.f));
82 setOffset(m_d->offset);
83 viewport()->update();
84}

References m_d.

◆ setZoom()

bool KisAnimTimelineTimeHeader::setZoom ( qreal zoomLevel)

Definition at line 413 of file KisAnimTimelineTimeHeader.cpp.

414{
415 qreal newSectionSize = zoom * m_d->unitSectionSize;
416
417 if (newSectionSize < m_d->minSectionSize) {
418 newSectionSize = m_d->minSectionSize;
419 zoom = qreal(newSectionSize) / m_d->unitSectionSize;
420 } else if (newSectionSize > m_d->maxSectionSize) {
421 newSectionSize = m_d->maxSectionSize;
422 zoom = qreal(newSectionSize) / m_d->unitSectionSize;
423 }
424
425 m_d->remainder = newSectionSize - floor(newSectionSize);
426
427 if (newSectionSize != defaultSectionSize()) {
428 setDefaultSectionSize(newSectionSize);
429 Q_EMIT sigZoomChanged(zoom);
430 return true;
431 }
432
433 return false;
434}

References m_d, sigZoomChanged(), and zoom().

◆ sigClearCache

void KisAnimTimelineTimeHeader::sigClearCache ( )
signal

◆ sigCopyColumns

void KisAnimTimelineTimeHeader::sigCopyColumns ( )
signal

◆ sigCutColumns

void KisAnimTimelineTimeHeader::sigCutColumns ( )
signal

◆ sigInsertColumnLeft

void KisAnimTimelineTimeHeader::sigInsertColumnLeft ( )
signal

◆ sigInsertColumnRight

void KisAnimTimelineTimeHeader::sigInsertColumnRight ( )
signal

◆ sigInsertHoldColumns

void KisAnimTimelineTimeHeader::sigInsertHoldColumns ( )
signal

◆ sigInsertHoldColumnsCustom

void KisAnimTimelineTimeHeader::sigInsertHoldColumnsCustom ( )
signal

◆ sigInsertMultipleColumns

void KisAnimTimelineTimeHeader::sigInsertMultipleColumns ( )
signal

◆ sigMirrorColumns

void KisAnimTimelineTimeHeader::sigMirrorColumns ( )
signal

◆ sigPasteColumns

void KisAnimTimelineTimeHeader::sigPasteColumns ( )
signal

◆ sigRemoveColumns

void KisAnimTimelineTimeHeader::sigRemoveColumns ( )
signal

◆ sigRemoveColumnsAndShift

void KisAnimTimelineTimeHeader::sigRemoveColumnsAndShift ( )
signal

◆ sigRemoveHoldColumns

void KisAnimTimelineTimeHeader::sigRemoveHoldColumns ( )
signal

◆ sigRemoveHoldColumnsCustom

void KisAnimTimelineTimeHeader::sigRemoveHoldColumnsCustom ( )
signal

◆ sigZoomChanged

void KisAnimTimelineTimeHeader::sigZoomChanged ( qreal zoom)
signal

◆ slotSaveThrottle

void KisAnimTimelineTimeHeader::slotSaveThrottle ( qreal value)
slot

Definition at line 276 of file KisAnimTimelineTimeHeader.cpp.

277{
278 m_d->zoomSaveCompressor->start(value);
279}
float value(const T *src, size_t ch)

References m_d, and value().

◆ updateMinimumSize()

void KisAnimTimelineTimeHeader::updateMinimumSize ( )
private

Definition at line 440 of file KisAnimTimelineTimeHeader.cpp.

441{
442 QFontMetrics metrics(this->font());
443 const int textHeight = metrics.height();
444
445 setMinimumSize(0, 1.5 * textHeight);
446}

◆ zoom()

qreal KisAnimTimelineTimeHeader::zoom ( )

Definition at line 436 of file KisAnimTimelineTimeHeader.cpp.

436 {
437 return (qreal(defaultSectionSize() + m_d->remainder) / m_d->unitSectionSize);
438}

References m_d.

◆ zoomToFitFrameRange()

void KisAnimTimelineTimeHeader::zoomToFitFrameRange ( int start,
int end )

Definition at line 601 of file KisAnimTimelineTimeHeader.cpp.

602{
603 const int PADDING = 2;
604 qreal lengthSections = (end + PADDING) - start;
605 qreal desiredZoom = width() / lengthSections;
606
607 setZoom(desiredZoom / m_d->unitSectionSize);
608}

References m_d, and setZoom().

Member Data Documentation

◆ m_d

const QScopedPointer<Private> KisAnimTimelineTimeHeader::m_d
private

Definition at line 89 of file KisAnimTimelineTimeHeader.h.


The documentation for this class was generated from the following files: