]> git.sesse.net Git - kdenlive/commitdiff
Add text alignment options to titler
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Tue, 5 May 2009 01:25:06 +0000 (01:25 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Tue, 5 May 2009 01:25:06 +0000 (01:25 +0000)
svn path=/trunk/kdenlive/; revision=3362

src/titledocument.cpp
src/titlewidget.cpp

index 4b6ab4e461fee973e908f04cbe07bf161296e42d..9ed00394680113e8b8d2eeb00d1ce6781a4b0f90 100644 (file)
@@ -29,6 +29,7 @@
 #include <QGraphicsSvgItem>
 #include <QFontInfo>
 #include <QFile>
+#include <QTextCursor>
 
 
 TitleDocument::TitleDocument()
@@ -84,6 +85,9 @@ QDomDocument TitleDocument::xml(QGraphicsPolygonItem* startv, QGraphicsPolygonIt
             content.setAttribute("font-italic", font.italic());
             content.setAttribute("font-underline", font.underline());
             content.setAttribute("font-color", colorToString(t->defaultTextColor()));
+            if (t->textWidth() != -1) {
+                content.setAttribute("alignment", t->textCursor().blockFormat().alignment());
+            }
             break;
         default:
             continue;
@@ -218,6 +222,18 @@ int TitleDocument::loadFromXml(QDomDocument doc, QGraphicsPolygonItem* /*startv*
                     QGraphicsTextItem *txt = m_scene->addText(items.item(i).namedItem("content").firstChild().nodeValue(), font);
                     txt->setDefaultTextColor(col);
                     txt->setTextInteractionFlags(Qt::NoTextInteraction);
+                    if (txtProperties.namedItem("alignment").isNull() == false) {
+                        txt->setTextWidth(txt->boundingRect().width());
+                        QTextCursor cur = txt->textCursor();
+                        QTextBlockFormat format = cur.blockFormat();
+                        format.setAlignment((Qt::Alignment) txtProperties.namedItem("alignment").nodeValue().toInt());
+                        cur.select(QTextCursor::Document);
+                        cur.setBlockFormat(format);
+                        txt->setTextCursor(cur);
+                        cur.clearSelection();
+                        txt->setTextCursor(cur);
+                    }
+
                     gitem = txt;
                 } else if (items.item(i).attributes().namedItem("type").nodeValue() == "QGraphicsRectItem") {
                     QString rect = items.item(i).namedItem("content").attributes().namedItem("rect").nodeValue();
index d8876baee1b957cd39d892de922a20c89ea938b8..b338bd599191b8e4186ff7a2df0187b8c33d5b78 100644 (file)
@@ -30,6 +30,8 @@
 #include <QTimer>
 #include <QToolBar>
 #include <QMenu>
+#include <QTextBlockFormat>
+#include <QTextCursor>
 
 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 ();