+void CornersWidget::slotInsertKeyframe()
+{
+ keyframe_list->blockSignals(true);
+
+ int row;
+ QTableWidgetItem *keyframe, *keyframeOld;
+ keyframe = keyframeOld = keyframe_list->item(0, 0);
+ for (row = 0; row < keyframe_list->rowCount(); ++row) {
+ keyframeOld = keyframe;
+ keyframe = keyframe_list->item(row, 0);
+ if (getPos(row) >= m_pos)
+ break;
+ }
+
+
+ int pos2;
+ if (row == keyframe_list->rowCount()) {
+ pos2 = m_max;
+ } else {
+ pos2 = getPos(row);
+ if (pos2 == m_pos)
+ return;
+ }
+
+ int pos1 = 0;
+ if (row > 0)
+ pos1 = getPos(row - 1);
+
+ int col = keyframe_list->currentColumn();
+ double pos = (m_pos - pos1) / (double)(pos2 - pos1 + 1);
+
+ keyframe_list->insertRow(row);
+ keyframe_list->setVerticalHeaderItem(row, new QTableWidgetItem(getPosString(m_pos)));
+
+ QPolygonF pol = m_item->polygon();
+ double val;
+ for (int i = 0; i < keyframe_list->columnCount(); ++i) {
+ if (i < 8) {
+ if (i % 2 == 0)
+ val = pol.at(i / 2).x() / (double)m_monitor->render->frameRenderWidth();
+ else
+ val = pol.at(i / 2).y() / (double)m_monitor->render->renderHeight();
+ val *= 2000;
+ val += 2000;
+ keyframe_list->setItem(row, i, new QTableWidgetItem(QString::number((int)val)));
+ } else {
+ keyframe_list->setItem(row, i, new QTableWidgetItem(QString::number(lerp(keyframe_list->item(keyframeOld->row(), i)->text().toInt(), keyframe_list->item(keyframe->row(), i)->text().toInt(), pos))));
+ }
+ }
+
+ keyframe_list->resizeRowsToContents();
+ slotAdjustKeyframeInfo();
+ keyframe_list->blockSignals(false);
+ generateAllParams();
+ button_delete->setEnabled(true);
+ keyframe_list->setCurrentCell(row, col);
+ keyframe_list->selectRow(row);
+}
+
+