X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Ftitlewidget.cpp;h=e3d1f8251405bc17c9033068787b8267aa88aa71;hb=2bc1e097b59002f245b0378d99b7dbfa4fcb0713;hp=d8876baee1b957cd39d892de922a20c89ea938b8;hpb=a25ce8f8a435d7d7df06df7f074c5f2fef53d8c8;p=kdenlive diff --git a/src/titlewidget.cpp b/src/titlewidget.cpp index d8876bae..e3d1f825 100644 --- a/src/titlewidget.cpp +++ b/src/titlewidget.cpp @@ -30,6 +30,8 @@ #include #include #include +#include +#include int settingUp = false; @@ -99,6 +101,10 @@ TitleWidget::TitleWidget(KUrl url, QString projectPath, Render *render, QWidget connect(buttonBold, SIGNAL(clicked()), this, SLOT(slotUpdateText())); connect(buttonItalic, SIGNAL(clicked()), this, SLOT(slotUpdateText())); connect(buttonUnder, SIGNAL(clicked()), this, SLOT(slotUpdateText())); + connect(buttonAlignLeft, SIGNAL(clicked()), this, SLOT(slotUpdateText())); + connect(buttonAlignRight, SIGNAL(clicked()), this, SLOT(slotUpdateText())); + connect(buttonAlignCenter, SIGNAL(clicked()), this, SLOT(slotUpdateText())); + connect(buttonAlignNone, SIGNAL(clicked()), this, SLOT(slotUpdateText())); connect(displayBg, SIGNAL(stateChanged(int)), this, SLOT(displayBackgroundFrame())); // mbd @@ -109,6 +115,13 @@ TitleWidget::TitleWidget(KUrl url, QString projectPath, Render *render, QWidget buttonBold->setIcon(KIcon("format-text-bold")); buttonItalic->setIcon(KIcon("format-text-italic")); buttonUnder->setIcon(KIcon("format-text-underline")); + buttonAlignCenter->setIcon(KIcon("format-justify-center")); + buttonAlignLeft->setIcon(KIcon("format-justify-left")); + buttonAlignRight->setIcon(KIcon("format-justify-right")); + buttonAlignNone->setToolTip(i18n("No alignment")); + buttonAlignRight->setToolTip(i18n("Align right")); + buttonAlignLeft->setToolTip(i18n("Align left")); + buttonAlignCenter->setToolTip(i18n("Align center")); itemhcenter->setIcon(KIcon("kdenlive-align-hor")); itemhcenter->setToolTip(i18n("Align item horizontally")); @@ -458,6 +471,10 @@ void TitleWidget::selectionChanged() buttonUnder->blockSignals(true); fontColorButton->blockSignals(true); textAlpha->blockSignals(true); + buttonAlignLeft->blockSignals(true); + buttonAlignRight->blockSignals(true); + buttonAlignNone->blockSignals(true); + buttonAlignCenter->blockSignals(true); QFont font = i->font(); font_family->setCurrentFont(font); @@ -470,6 +487,13 @@ void TitleWidget::selectionChanged() fontColorButton->setColor(color); textAlpha->setValue(color.alpha()); + QTextCursor cur = i->textCursor(); + QTextBlockFormat format = cur.blockFormat(); + if (i->textWidth() == -1) buttonAlignNone->setChecked(true); + else if (format.alignment() == Qt::AlignHCenter) buttonAlignCenter->setChecked(true); + else if (format.alignment() == Qt::AlignRight) buttonAlignRight->setChecked(true); + else if (format.alignment() == Qt::AlignLeft) buttonAlignLeft->setChecked(true); + font_size->blockSignals(false); font_family->blockSignals(false); buttonBold->blockSignals(false); @@ -477,6 +501,10 @@ void TitleWidget::selectionChanged() buttonUnder->blockSignals(false); fontColorButton->blockSignals(false); textAlpha->blockSignals(false); + buttonAlignLeft->blockSignals(false); + buttonAlignRight->blockSignals(false); + buttonAlignNone->blockSignals(false); + buttonAlignCenter->blockSignals(false); value_x->setValue((int) i->pos().x()); value_y->setValue((int) i->pos().y()); @@ -576,9 +604,27 @@ void TitleWidget::slotUpdateText() } if (!item) return; //if (item->textCursor().selection ().isEmpty()) + QTextCursor cur = item->textCursor(); + QTextBlockFormat format = cur.blockFormat(); + if (buttonAlignLeft->isChecked() || buttonAlignCenter->isChecked() || buttonAlignRight->isChecked()) { + item->setTextWidth(item->boundingRect().width()); + if (buttonAlignCenter->isChecked()) format.setAlignment(Qt::AlignHCenter); + else if (buttonAlignRight->isChecked()) format.setAlignment(Qt::AlignRight); + else if (buttonAlignLeft->isChecked()) format.setAlignment(Qt::AlignLeft); + } else { + format.setAlignment(Qt::AlignLeft); + item->setTextWidth(-1); + } + { item->setFont(font); item->setDefaultTextColor(color); + cur.select(QTextCursor::Document); + cur.setBlockFormat(format); + item->setTextCursor(cur); + cur.clearSelection(); + item->setTextCursor(cur); + } /*else { QTextDocumentFragment selec = item->textCursor().selection (); @@ -722,12 +768,18 @@ void TitleWidget::saveTitle(KUrl url) QDomDocument TitleWidget::xml() { - return m_titledocument.xml(m_startViewport, m_endViewport); + QDomDocument doc = m_titledocument.xml(m_startViewport, m_endViewport); + if (cropImage->isChecked()) { + doc.documentElement().setAttribute("crop", 1); + } + return doc; } void TitleWidget::setXml(QDomDocument doc) { m_count = m_titledocument.loadFromXml(doc, m_startViewport, m_endViewport); + QDomElement e = doc.documentElement(); + cropImage->setChecked(e.hasAttribute("crop")); m_transformations.clear(); QList items = graphicsView->scene()->items(); const double PI = 4.0 * atan(1.0); @@ -754,7 +806,27 @@ void TitleWidget::setXml(QDomDocument doc) QImage TitleWidget::renderedPixmap() { - QImage pix(m_frameWidth, m_frameHeight, QImage::Format_ARGB32); + int minX = 0; + int minY = 0; + int maxX = m_frameWidth; + int maxY = m_frameHeight; + if (!cropImage->isChecked()) { + m_scene->removeItem(m_startViewport); + m_scene->removeItem(m_endViewport); + QRect boundingRect = m_scene->itemsBoundingRect().toRect(); + if (boundingRect.left() < 0) minX = boundingRect.left(); + if (boundingRect.top() < 0) minY = boundingRect.top(); + if (boundingRect.right() > maxX) maxX = boundingRect.right(); + if (boundingRect.bottom() > maxY) maxY = boundingRect.bottom(); + if (minX < 0) { + maxX = maxX - minX; + } + if (minY < 0) { + maxY = maxY - minY; + } + } + + QImage pix(maxX, maxY, QImage::Format_ARGB32); pix.fill(Qt::transparent); QPainter painter(&pix); painter.setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing | QPainter::HighQualityAntialiasing); @@ -765,7 +837,7 @@ QImage TitleWidget::renderedPixmap() m_endViewport->setVisible(false); m_frameImage->setVisible(false); - m_scene->render(&painter, QRectF(), QRectF(0, 0, m_frameWidth, m_frameHeight)); + m_scene->render(&painter, QRectF(), QRectF(minX, minY, maxX - minX, maxY - minY)); painter.end(); m_frameBorder->setPen(framepen); m_startViewport->setVisible(true); @@ -804,6 +876,8 @@ void TitleWidget::writeChoices() titleConfig.writeEntry("background_color", kcolorbutton->color()); titleConfig.writeEntry("background_alpha", horizontalSlider->value()); + + titleConfig.writeEntry("crop_image", cropImage->isChecked()); //! \todo Not sure if I should sync - it is probably safe to do it config->sync(); @@ -832,5 +906,7 @@ void TitleWidget::readChoices() kcolorbutton->setColor(titleConfig.readEntry("background_color", kcolorbutton->color())); horizontalSlider->setValue(titleConfig.readEntry("background_alpha", horizontalSlider->value())); + + cropImage->setChecked(titleConfig.readEntry("crop_image", cropImage->isChecked())); }