/***************************************************************************
- titlewidget.h - description
+ titlewidget.cpp - description
-------------------
begin : Feb 28 2008
copyright : (C) 2008 by Marco Gittler
#include "titlewidget.h"
#include "kdenlivesettings.h"
-#include <iostream>
-
#include <KDebug>
#include <KGlobalSettings>
#include <KFileDialog>
m_endViewport(NULL),
m_render(render),
m_count(0),
+ m_unicodeDialog(new UnicodeDialog(UnicodeDialog::InputHex)),
m_projectPath(projectPath)
{
setupUi(this);
text_properties->setFixedHeight(frame_properties->height() + 4);
m_frameWidth = render->renderWidth();
m_frameHeight = render->renderHeight();
- //connect(newTextButton, SIGNAL(clicked()), this, SLOT(slotNewText()));
- //connect(newRectButton, SIGNAL(clicked()), this, SLOT(slotNewRect()));
- // kcolorbutton == The color of the background
connect(kcolorbutton, SIGNAL(clicked()), this, SLOT(slotChangeBackground())) ;
- // horizontalslider == The alpha of the background
connect(horizontalSlider, SIGNAL(valueChanged(int)), this, SLOT(slotChangeBackground())) ;
-
+
connect(fontColorButton, SIGNAL(clicked()), this, SLOT(slotUpdateText())) ;
connect(font_family, SIGNAL(currentFontChanged(const QFont &)), this, SLOT(slotUpdateText())) ;
connect(itemhcenter, SIGNAL(clicked()), this, SLOT(itemHCenter()));
connect(itemvcenter, SIGNAL(clicked()), this, SLOT(itemVCenter()));
- connect(origin_x_left, SIGNAL(clicked()), this, SLOT(slotOriginXClicked()));
- connect(origin_y_top, SIGNAL(clicked()), this, SLOT(slotOriginYClicked()));
+ connect(origin_x_left, SIGNAL(clicked()), this, SLOT(slotOriginXClicked()));
+ connect(origin_y_top, SIGNAL(clicked()), this, SLOT(slotOriginYClicked()));
connect(value_x, SIGNAL(valueChanged(int)), this, SLOT(slotAdjustSelectedItem()));
connect(value_y, SIGNAL(valueChanged(int)), this, SLOT(slotAdjustSelectedItem()));
connect(buttonAlignRight, SIGNAL(clicked()), this, SLOT(slotUpdateText()));
connect(buttonAlignCenter, SIGNAL(clicked()), this, SLOT(slotUpdateText()));
connect(buttonAlignNone, SIGNAL(clicked()), this, SLOT(slotUpdateText()));
+ connect(buttonInsertUnicode, SIGNAL(clicked()), this, SLOT(slotInsertUnicode()));
+ connect(m_unicodeDialog, SIGNAL(charSelected(QString)), this, SLOT(slotInsertUnicodeString(QString)));
connect(displayBg, SIGNAL(stateChanged(int)), this, SLOT(displayBackgroundFrame()));
// mbd
buttonAlignCenter->setIcon(KIcon("format-justify-center"));
buttonAlignLeft->setIcon(KIcon("format-justify-left"));
buttonAlignRight->setIcon(KIcon("format-justify-right"));
+ buttonAlignNone->setIcon(KIcon("kdenlive-align-none"));
+ buttonInsertUnicode->setIcon(KIcon("kdenlive-insert-unicode"));
+
buttonAlignNone->setToolTip(i18n("No alignment"));
buttonAlignRight->setToolTip(i18n("Align right"));
buttonAlignLeft->setToolTip(i18n("Align left"));
buttonAlignCenter->setToolTip(i18n("Align center"));
+ buttonInsertUnicode->setToolTip(i18n("Insert Unicode character (Shift+Ctrl+U)"));
+ buttonInsertUnicode->setShortcut(Qt::SHIFT + Qt::CTRL + Qt::Key_U);
+ origin_x_left->setToolTip(i18n("Invert x axis and change 0 point"));
+ origin_y_top->setToolTip(i18n("Invert y axis and change 0 point"));
+ rectBColor->setToolTip(i18n("Select fill color"));
+ rectFColor->setToolTip(i18n("Select border color"));
+ rectBAlpha->setToolTip(i18n("Fill transparency"));
+ rectFAlpha->setToolTip(i18n("Border transparency"));
+ zoom_slider->setToolTip(i18n("Zoom"));
+ buttonRealSize->setToolTip(i18n("Original size (1:1)"));
+ buttonFitZoom->setToolTip(i18n("Fit zoom"));
+ kcolorbutton->setToolTip(i18n("Select background color"));
+ horizontalSlider->setToolTip(i18n("Background Transparency"));
itemhcenter->setIcon(KIcon("kdenlive-align-hor"));
itemhcenter->setToolTip(i18n("Align item horizontally"));
layout->setContentsMargins(2, 2, 2, 2);
QToolBar *m_toolbar = new QToolBar("titleToolBar", this);
- m_buttonRect = m_toolbar->addAction(KIcon("kdenlive-insert-rect"), i18n("Add Rectangle"));
+ m_buttonRect = m_toolbar->addAction(KIcon("kdenlive-insert-rect"), i18n("Add Rectangle (Alt+R)"));
m_buttonRect->setCheckable(true);
+ m_buttonRect->setShortcut(Qt::ALT + Qt::Key_R);
connect(m_buttonRect, SIGNAL(triggered()), this, SLOT(slotRectTool()));
- m_buttonText = m_toolbar->addAction(KIcon("insert-text"), i18n("Add Text"));
+ m_buttonText = m_toolbar->addAction(KIcon("insert-text"), i18n("Add Text (Alt+T)"));
m_buttonText->setCheckable(true);
+ m_buttonText->setShortcut(Qt::ALT + Qt::Key_T);
connect(m_buttonText, SIGNAL(triggered()), this, SLOT(slotTextTool()));
- m_buttonImage = m_toolbar->addAction(KIcon("insert-image"), i18n("Add Image"));
+ m_buttonImage = m_toolbar->addAction(KIcon("insert-image"), i18n("Add Image (Alt+I)"));
m_buttonImage->setCheckable(false);
+ m_buttonImage->setShortcut(Qt::ALT + Qt::Key_I);
connect(m_buttonImage, SIGNAL(triggered()), this, SLOT(slotImageTool()));
- m_buttonCursor = m_toolbar->addAction(KIcon("transform-move"), i18n("Selection Tool"));
+ m_buttonCursor = m_toolbar->addAction(KIcon("transform-move"), i18n("Selection Tool (Alt+S)"));
m_buttonCursor->setCheckable(true);
+ m_buttonCursor->setShortcut(Qt::ALT + Qt::Key_S);
connect(m_buttonCursor, SIGNAL(triggered()), this, SLOT(slotSelectTool()));
m_buttonLoad = m_toolbar->addAction(KIcon("document-open"), i18n("Open Document"));
m_buttonLoad->setCheckable(false);
+ m_buttonLoad->setShortcut(Qt::CTRL + Qt::Key_O);
connect(m_buttonLoad, SIGNAL(triggered()), this, SLOT(loadTitle()));
m_buttonSave = m_toolbar->addAction(KIcon("document-save-as"), i18n("Save As"));
m_buttonSave->setCheckable(false);
+ m_buttonSave->setShortcut(Qt::CTRL + Qt::Key_S);
connect(m_buttonSave, SIGNAL(triggered()), this, SLOT(saveTitle()));
layout->addWidget(m_toolbar);
m_scene = new GraphicsSceneRectMove(this);
graphicsView->setScene(m_scene);
m_titledocument.setScene(m_scene);
- connect(m_scene, SIGNAL(changed(QList<QRectF>)), this, SLOT(slotChanged()));
+ connect(m_scene, SIGNAL(changed(QList<QRectF>)), this, SLOT(slotChanged()));
// a gradient background
/*QRadialGradient *gradient = new QRadialGradient(0, 0, 10);
delete m_buttonSave;
delete m_buttonLoad;
+ delete m_unicodeDialog;
delete m_frameBorder;
delete m_frameImage;
delete m_startViewport;
value_h->blockSignals(true);
itemzoom->blockSignals(true);
itemrotate->blockSignals(true);
- if (l.size() == 1) {
+ if (l.size() == 0) {
+ bool blockX = !origin_x_left->signalsBlocked();
+ bool blockY = !origin_y_top->signalsBlocked();
+ if (blockX) origin_x_left->blockSignals(true);
+ if (blockY) origin_y_top->blockSignals(true);
+ origin_x_left->setChecked(false);
+ origin_y_top->setChecked(false);
+ updateTextOriginX();
+ updateTextOriginY();
+ frame_properties->setEnabled(false);
+ text_properties->setEnabled(false);
+ rect_properties->setEnabled(false);
+ if (blockX) origin_x_left->blockSignals(false);
+ if (blockY) origin_y_top->blockSignals(false);
+ } else if (l.size() == 1) {
if (l.at(0)->type() == TEXTITEM) {
rect_properties->setHidden(true);
text_properties->setHidden(false);
buttonAlignNone->blockSignals(false);
buttonAlignCenter->blockSignals(false);
- updateCoordinates(i);
- value_w->setValue((int) i->boundingRect().width());
- value_h->setValue((int) i->boundingRect().height());
+ updateAxisButtons(i);
+ updateCoordinates(i);
+ updateDimension(i);
+ //value_w->setValue((int) i->boundingRect().width());
+ //value_h->setValue((int) i->boundingRect().height());
frame_properties->setEnabled(true);
+ text_properties->setEnabled(true);
+ rect_properties->setEnabled(false);
value_w->setEnabled(false);
value_h->setEnabled(false);
+
} else if ((l.at(0))->type() == RECTITEM) {
rect_properties->setHidden(false);
text_properties->setHidden(true);
rectBColor->setColor(bcol);
settingUp = false;
rectLineWidth->setValue(rec->pen().width());
-
- updateCoordinates(rec);
- value_w->setValue((int) rec->rect().width());
- value_h->setValue((int) rec->rect().height());
+
+ updateAxisButtons(l.at(0));
+ updateCoordinates(rec);
+ updateDimension(rec);
+ //value_w->setValue((int) rec->rect().width());
+ //value_h->setValue((int) rec->rect().height());
frame_properties->setEnabled(true);
+ text_properties->setEnabled(false);
+ rect_properties->setEnabled(true);
value_w->setEnabled(true);
value_h->setEnabled(true);
+
+ } else if (l.at(0)->type() == IMAGEITEM) {
+ updateCoordinates(l.at(0));
+ updateDimension(l.at(0));
+
+ frame_properties->setEnabled(true);
+ text_properties->setEnabled(false);
+ rect_properties->setEnabled(false);
+ value_x->setEnabled(true);
+ value_w->setEnabled(false);
+ value_h->setEnabled(false);
+
} else {
//toolBox->setCurrentIndex(0);
frame_properties->setEnabled(false);
+ text_properties->setEnabled(false);
+ rect_properties->setEnabled(false);
}
zValue->setValue((int)l.at(0)->zValue());
itemzoom->setValue((int)(m_transformations.value(l.at(0)).scalex * 100.0 + 0.5));
value_h->blockSignals(false);
itemzoom->blockSignals(false);
itemrotate->blockSignals(false);
- } else frame_properties->setEnabled(false);
+ }
}
/** \brief Updates position/size of the selected item when a value
- * of a text field (coordinates, size) has changed */
+ * of an item (coordinates, size) has changed */
void TitleWidget::slotAdjustSelectedItem()
{
QList<QGraphicsItem*> l = graphicsView->scene()->selectedItems();
if (l.at(0)->type() == RECTITEM) {
//rect item
QGraphicsRectItem *rec = static_cast <QGraphicsRectItem *>(l.at(0));
- updatePosition(rec);
+ updatePosition(rec);
rec->setRect(QRect(0, 0, value_w->value(), value_h->value()));
} else if (l.at(0)->type() == TEXTITEM) {
//text item
updatePosition(l.at(0));
+ } else if (l.at(0)->type() == IMAGEITEM) {
+ //image item
+ updatePosition(l.at(0));
}
}
}
+/** \brief Updates width/height int the text fields, regarding transformation matrix */
+void TitleWidget::updateDimension(QGraphicsItem *i)
+{
+ bool blockW = !value_w->signalsBlocked();
+ bool blockH = !value_h->signalsBlocked();
+
+ if (blockW) value_w->blockSignals(true);
+ if (blockH) value_h->blockSignals(true);
+
+
+ if (i->type() == IMAGEITEM) {
+ // Get multipliers for rotation/scaling
+
+ /*Transform t = m_transformations.value(i);
+ QRectF r = i->boundingRect();
+ int width = (int) ( abs(r.width()*t.scalex * cos(t.rotate/180.0*M_PI))
+ + abs(r.height()*t.scaley * sin(t.rotate/180.0*M_PI)) );
+ int height = (int) ( abs(r.height()*t.scaley * cos(t.rotate/180*M_PI))
+ + abs(r.width()*t.scalex * sin(t.rotate/180*M_PI)) );*/
+
+ value_w->setValue(i->sceneBoundingRect().width());
+ value_h->setValue(i->sceneBoundingRect().height());
+ } else if (i->type() == RECTITEM) {
+ QGraphicsRectItem *r = static_cast <QGraphicsRectItem *>(i);
+ value_w->setValue((int) r->rect().width());
+ value_h->setValue((int) r->rect().height());
+ } else if (i->type() == TEXTITEM) {
+ QGraphicsTextItem *t = static_cast <QGraphicsTextItem *>(i);
+ value_w->setValue((int) t->boundingRect().width());
+ value_h->setValue((int) t->boundingRect().height());
+ }
+
+ if (blockW) value_w->blockSignals(false);
+ if (blockH) value_h->blockSignals(false);
+}
+
/** \brief Updates the coordinates in the text fields from the item */
-void TitleWidget::updateCoordinates(QGraphicsItem *i)
+void TitleWidget::updateCoordinates(QGraphicsItem *i)
{
- // Block signals emitted by this method
- value_x->blockSignals(true);
- value_y->blockSignals(true);
-
- if (i->type() == TEXTITEM) {
-
- QGraphicsTextItem *rec = static_cast <QGraphicsTextItem *> (i);
-
- // Set the correct x coordinate value
- if (origin_x_left->isChecked()) {
- // Origin (0 point) is at m_frameWidth, coordinate axis is inverted
- value_x->setValue((int) (m_frameWidth - rec->pos().x() - rec->boundingRect().width()));
- } else {
- // Origin is at 0 (default)
- value_x->setValue((int) rec->pos().x());
- }
-
- // Same for y
- if (origin_y_top->isChecked()) {
- value_y->setValue((int) (m_frameHeight - rec->pos().y() - rec->boundingRect().height()));
- } else {
- value_y->setValue((int) rec->pos().y());
- }
-
- } else if (i->type() == RECTITEM) {
-
- QGraphicsRectItem *rec = static_cast <QGraphicsRectItem *> (i);
-
- if (origin_x_left->isChecked()) {
- // Origin (0 point) is at m_frameWidth
- value_x->setValue((int) (m_frameWidth - rec->pos().x() - rec->rect().width()));
- } else {
- // Origin is at 0 (default)
- value_x->setValue((int) rec->pos().x());
- }
-
- if (origin_y_top->isChecked()) {
- value_y->setValue((int) (m_frameHeight - rec->pos().y() - rec->rect().height()));
- } else {
- value_y->setValue((int) rec->pos().y());
- }
-
-
- }
-
- // Stop blocking signals now
- value_x->blockSignals(false);
- value_y->blockSignals(false);
+
+ bool blockX = !value_x->signalsBlocked();
+ bool blockY = !value_y->signalsBlocked();
+
+ // Block signals emitted by this method
+ if (blockX) value_x->blockSignals(true);
+ if (blockY) value_y->blockSignals(true);
+
+ if (i->type() == TEXTITEM) {
+
+ QGraphicsTextItem *rec = static_cast <QGraphicsTextItem *>(i);
+
+ // Set the correct x coordinate value
+ if (origin_x_left->isChecked()) {
+ // Origin (0 point) is at m_frameWidth, coordinate axis is inverted
+ value_x->setValue((int)(m_frameWidth - rec->pos().x() - rec->boundingRect().width()));
+ } else {
+ // Origin is at 0 (default)
+ value_x->setValue((int) rec->pos().x());
+ }
+
+ // Same for y
+ if (origin_y_top->isChecked()) {
+ value_y->setValue((int)(m_frameHeight - rec->pos().y() - rec->boundingRect().height()));
+ } else {
+ value_y->setValue((int) rec->pos().y());
+ }
+
+ } else if (i->type() == RECTITEM) {
+
+ QGraphicsRectItem *rec = static_cast <QGraphicsRectItem *>(i);
+
+ if (origin_x_left->isChecked()) {
+ // Origin (0 point) is at m_frameWidth
+ value_x->setValue((int)(m_frameWidth - rec->pos().x() - rec->rect().width()));
+ } else {
+ // Origin is at 0 (default)
+ value_x->setValue((int) rec->pos().x());
+ }
+
+ if (origin_y_top->isChecked()) {
+ value_y->setValue((int)(m_frameHeight - rec->pos().y() - rec->rect().height()));
+ } else {
+ value_y->setValue((int) rec->pos().y());
+ }
+
+ } else if (i->type() == IMAGEITEM) {
+
+ if (origin_x_left->isChecked()) {
+ value_x->setValue((int)(m_frameWidth - i->pos().x() - i->sceneBoundingRect().width()));
+ } else {
+ value_x->setValue((int) i->pos().x());
+ }
+
+ if (origin_y_top->isChecked()) {
+ value_y->setValue((int)(m_frameHeight - i->pos().y() - i->sceneBoundingRect().height()));
+ } else {
+ value_y->setValue((int) i->pos().y());
+ }
+
+ }
+
+ // Stop blocking signals now
+ if (!blockX) value_x->blockSignals(false);
+ if (!blockY) value_y->blockSignals(false);
}
-/** \brief Updates the position of an item reading coordinates from the text fields */
-void TitleWidget::updatePosition(QGraphicsItem *i) {
-
- if (i->type() == TEXTITEM) {
- QGraphicsTextItem *rec = static_cast <QGraphicsTextItem *>(i);
-
- int posX;
- if (origin_x_left->isChecked()) {
- /* Origin of the x axis is at m_frameWidth,
- * and distance from right border of the item to the right
- * border of the frame is taken.
- * See comment to slotOriginXClicked().
- */
- posX = m_frameWidth - value_x->value() - rec->boundingRect().width();
- } else {
- posX = value_x->value();
- }
-
- int posY;
- if (origin_y_top->isChecked()) {
- /* Same for y axis */
- posY = m_frameHeight - value_y->value() - rec->boundingRect().height();
- } else {
- posY = value_y->value();
- }
-
- rec->setPos(posX, posY);
- } else if (i->type() == RECTITEM) {
-
- QGraphicsRectItem *rec = static_cast <QGraphicsRectItem *> (i);
-
- int posX;
- if (origin_x_left->isChecked()) {
- posX = m_frameWidth - value_x->value() - rec->rect().width();
- } else {
- posX = value_x->value();
- }
-
- int posY;
- if (origin_y_top->isChecked()) {
- posY = m_frameHeight - value_y->value() - rec->rect().height();
- } else {
- posY = value_y->value();
- }
-
- rec->setPos(posX, posY);
- }
-
+/** \brief Updates the position of an item by reading coordinates from the text fields */
+void TitleWidget::updatePosition(QGraphicsItem *i)
+{
+
+ if (i->type() == TEXTITEM) {
+ QGraphicsTextItem *rec = static_cast <QGraphicsTextItem *>(i);
+
+ int posX;
+ if (origin_x_left->isChecked()) {
+ /* Origin of the x axis is at m_frameWidth,
+ * and distance from right border of the item to the right
+ * border of the frame is taken.
+ * See comment to slotOriginXClicked().
+ */
+ posX = m_frameWidth - value_x->value() - rec->boundingRect().width();
+ } else {
+ posX = value_x->value();
+ }
+
+ int posY;
+ if (origin_y_top->isChecked()) {
+ /* Same for y axis */
+ posY = m_frameHeight - value_y->value() - rec->boundingRect().height();
+ } else {
+ posY = value_y->value();
+ }
+
+ rec->setPos(posX, posY);
+
+ } else if (i->type() == RECTITEM) {
+
+ QGraphicsRectItem *rec = static_cast <QGraphicsRectItem *>(i);
+
+ int posX;
+ if (origin_x_left->isChecked()) {
+ posX = m_frameWidth - value_x->value() - rec->rect().width();
+ } else {
+ posX = value_x->value();
+ }
+
+ int posY;
+ if (origin_y_top->isChecked()) {
+ posY = m_frameHeight - value_y->value() - rec->rect().height();
+ } else {
+ posY = value_y->value();
+ }
+
+ rec->setPos(posX, posY);
+
+ } else if (i->type() == IMAGEITEM) {
+
+ int posX;
+ if (origin_x_left->isChecked()) {
+ // Use the sceneBoundingRect because this also regards transformations like zoom
+ posX = m_frameWidth - value_x->value() - i->sceneBoundingRect().width();
+ } else {
+ posX = value_x->value();
+ }
+
+ int posY;
+ if (origin_y_top->isChecked()) {
+ posY = m_frameHeight - value_y->value() - i->sceneBoundingRect().height();
+ } else {
+ posY = value_y->value();
+ }
+
+ i->setPos(posX, posY);
+
+ }
+
+}
+
+void TitleWidget::updateTextOriginX()
+{
+ if (origin_x_left->isChecked()) {
+ origin_x_left->setText(i18n("\u2212X"));
+ } else {
+ origin_x_left->setText(i18n("+X"));
+ }
}
void TitleWidget::slotOriginXClicked()
{
- // Update the text displayed on the button.
- if (origin_x_left->isChecked()) {
- origin_x_left->setText(i18n("\u2212X"));
- } else {
- origin_x_left->setText(i18n("+X"));
- }
-
- QList<QGraphicsItem*> l = graphicsView->scene()->selectedItems();
- if (l.size() >= 1) {
- updateCoordinates(l.at(0));
- }
+ // Update the text displayed on the button.
+ updateTextOriginX();
+
+ QList<QGraphicsItem*> l = graphicsView->scene()->selectedItems();
+ if (l.size() >= 1) {
+ updateCoordinates(l.at(0));
+
+ // Remember x axis setting
+ l.at(0)->setData(TitleDocument::OriginXLeft, origin_x_left->isChecked() ?
+ TitleDocument::AxisInverted : TitleDocument::AxisDefault);
+ }
+}
+
+void TitleWidget::updateTextOriginY()
+{
+ if (origin_y_top->isChecked()) {
+ origin_y_top->setText(i18n("\u2212Y"));
+ } else {
+ origin_y_top->setText(i18n("+Y"));
+ }
}
void TitleWidget::slotOriginYClicked()
{
- // Update the text displayed on the button.
- if (origin_y_top->isChecked()) {
- origin_y_top->setText(i18n("\u2212Y"));
- } else {
- origin_y_top->setText(i18n("+Y"));
- }
-
- QList<QGraphicsItem*> l = graphicsView->scene()->selectedItems();
- if (l.size() >= 1) {
- updateCoordinates(l.at(0));
- }
+ // Update the text displayed on the button.
+ updateTextOriginY();
+
+ QList<QGraphicsItem*> l = graphicsView->scene()->selectedItems();
+ if (l.size() >= 1) {
+ updateCoordinates(l.at(0));
+
+ l.at(0)->setData(TitleDocument::OriginYTop, origin_y_top->isChecked() ?
+ TitleDocument::AxisInverted : TitleDocument::AxisDefault);
+
+ }
+}
+
+void TitleWidget::updateAxisButtons(QGraphicsItem *i)
+{
+ int xAxis = i->data(TitleDocument::OriginXLeft).toInt();
+ int yAxis = i->data(TitleDocument::OriginYTop).toInt();
+ origin_x_left->blockSignals(true);
+ origin_y_top->blockSignals(true);
+
+ if (xAxis == TitleDocument::AxisInverted) {
+ origin_x_left->setChecked(true);
+ } else {
+ origin_x_left->setChecked(false);
+ }
+ updateTextOriginX();
+
+ if (yAxis == TitleDocument::AxisInverted) {
+ origin_y_top->setChecked(true);
+ } else {
+ origin_y_top->setChecked(false);
+ }
+ updateTextOriginY();
+
+ origin_x_left->blockSignals(false);
+ origin_y_top->blockSignals(false);
}
void TitleWidget::slotChangeBackground()
/**
* Something (yeah) has changed in our QGraphicsScene.
- * If the user has activated origin_x_left (everything also for y),
- * we need to look whether a text element has been selected. If yes,
- * we need to ensure that the right border of the text field
+ */
+void TitleWidget::slotChanged()
+{
+ QList<QGraphicsItem*> l = graphicsView->scene()->selectedItems();
+ if (l.size() >= 1 && l.at(0)->type() == TEXTITEM) {
+ textChanged(static_cast <QGraphicsTextItem *>(l.at(0)));
+ }
+}
+
+/**
+ * If the user has set origin_x_left (everything also for y),
+ * we need to look whether a text element has been selected. If yes,
+ * we need to ensure that the right border of the text field
* remains fixed also when some text has been entered.
- *
+ *
* This is also known as right-justified, with the difference that
- * it is not valid for text but for its boundingRect. Text may still
+ * it is not valid for text but for its boundingRect. Text may still
* be left-justified.
*/
-void TitleWidget::slotChanged() {
- QList<QGraphicsItem*> l = graphicsView->scene()->selectedItems();
- if (l.size() >= 1 && l.at(0)->type() == TEXTITEM) {
- if (origin_x_left->isChecked() || origin_y_top->isChecked()) {
- updatePosition(l.at(0));
- }
- }
+void TitleWidget::textChanged(QGraphicsTextItem *i)
+{
+
+ updateDimension(i);
+
+ if (origin_x_left->isChecked() || origin_y_top->isChecked()) {
+
+ if (!i->toPlainText().isEmpty()) {
+ updatePosition(i);
+ } else {
+ /*
+ * Don't do anything if the string is empty. If the position
+ * would be updated here, a newly created text field would
+ * be set to the position of the last selected text field.
+ */
+ }
+ }
+}
+
+void TitleWidget::slotInsertUnicode()
+{
+ m_unicodeDialog->showLastUnicode();
+ m_unicodeDialog->exec();
+}
+
+void TitleWidget::slotInsertUnicodeString(QString text)
+{
+ QList<QGraphicsItem *> l = graphicsView->scene()->selectedItems();
+ if (l.size() > 0) {
+ if (l.at(0)->type() == TEXTITEM) {
+ QGraphicsTextItem *t = static_cast <QGraphicsTextItem *>(l.at(0));
+ t->textCursor().insertText(text);
+ }
+ }
}
void TitleWidget::slotUpdateText()
qtrans.rotate(x.rotate);
l[0]->setTransform(qtrans);
m_transformations[l.at(0)] = x;
+ updateDimension(l.at(0));
}
}
qtrans.rotate(x.rotate);
l[0]->setTransform(qtrans);
m_transformations[l.at(0)] = x;
+ updateDimension(l.at(0));
}
}
if (l.size() == 1) {
QGraphicsItem *item = l.at(0);
QRectF br;
- if (item->type() == RECTITEM) {
- br = ((QGraphicsRectItem*)item)->rect();
- } else br = item->sceneBoundingRect();
- int width = (int) br.width();
+ br = item->sceneBoundingRect();
+ int width = (int)br.width();
int newPos = (int)((m_frameWidth - width) / 2);
+ newPos += item->pos().x() - br.left(); // Check item transformation
item->setPos(newPos, item->pos().y());
+ updateCoordinates(item);
}
}
if (l.size() == 1) {
QGraphicsItem *item = l.at(0);
QRectF br;
- if (item->type() == RECTITEM) {
- br = ((QGraphicsRectItem*)item)->rect();
- } else br = item->sceneBoundingRect();
- int height = (int) br.height();
+ br = item->sceneBoundingRect();
+ int height = (int)br.height();
int newPos = (int)((m_frameHeight - height) / 2);
+ newPos += item->pos().y() - br.top(); // Check item transformation
item->setPos(item->pos().x(), newPos);
+ updateCoordinates(item);
}
}
slotSelectTool();
}
-QImage TitleWidget::renderedPixmap()
+const QRect TitleWidget::renderedRect()
{
int minX = 0;
int minY = 0;
maxY = maxY - minY;
}
}
+ QRect rect(minX, minY, maxX, maxY);
+ return rect;
+}
- QImage pix(maxX, maxY, QImage::Format_ARGB32);
+QImage TitleWidget::renderedPixmap()
+{
+ QRect rect = renderedRect();
+ QImage pix(rect.width(), rect.height(), 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(minX, minY, maxX - minX, maxY - minY));
+ m_scene->render(&painter, QRectF(), rect); //QRectF(minX, minY, maxX - minX, maxY - minY));
painter.end();
m_frameBorder->setPen(framepen);
m_startViewport->setVisible(true);