#include <QTimer>
#include <QToolBar>
#include <QMenu>
+#include <QTextBlockFormat>
+#include <QTextCursor>
int settingUp = false;
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
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"));
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);
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);
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());
}
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 ();
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 <QGraphicsItem *> items = graphicsView->scene()->items();
const double PI = 4.0 * atan(1.0);
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);
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);
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();
kcolorbutton->setColor(titleConfig.readEntry("background_color", kcolorbutton->color()));
horizontalSlider->setValue(titleConfig.readEntry("background_alpha", horizontalSlider->value()));
+
+ cropImage->setChecked(titleConfig.readEntry("crop_image", cropImage->isChecked()));
}