#include <kio/netaccess.h>
#include <KApplication>
#include <KStandardDirs>
-#include <KLocale>
+#include <KLocalizedString>
#include <KMessageBox>
#include <QGraphicsScene>
#include <QFile>
#include <QTextCursor>
+#include <locale.h>
+
#if QT_VERSION >= 0x040600
#include <QGraphicsEffect>
#include <QGraphicsBlurEffect>
TitleDocument::TitleDocument()
{
m_scene = NULL;
+ m_width = 0;
+ m_height = 0;
}
void TitleDocument::setScene(QGraphicsScene* _scene, int width, int height)
QDomElement main = doc.createElement("kdenlivetitle");
main.setAttribute("width", m_width);
main.setAttribute("height", m_height);
+ // Save locale
+ const char *locale = setlocale(LC_NUMERIC, NULL);
+ main.setAttribute("LC_NUMERIC", locale);
doc.appendChild(main);
foreach(QGraphicsItem * item, m_scene->items()) {
QColor fontcolor = cursor.charFormat().foreground().color();
content.setAttribute("font-color", colorToString(fontcolor));
if (!t->data(101).isNull()) content.setAttribute("font-outline", t->data(101).toDouble());
- if (!t->data(102).isNull()) content.setAttribute("font-outline-color", colorToString(QColor(t->data(102).toString())));
+ if (!t->data(102).isNull()) {
+ QVariant variant = t->data(102);
+ QColor outlineColor = variant.value<QColor>();
+ content.setAttribute("font-outline-color", colorToString(outlineColor));
+ }
}
if (!t->data(100).isNull()) {
QStringList effectParams = t->data(100).toStringList();
QString effectName = effectParams.takeFirst();
+ content.setAttribute("textwidth", t->sceneBoundingRect().width());
content.setAttribute(effectName, effectParams.join(";"));
}
if (blur) {
effect.setAttribute("type", "blur");
effect.setAttribute("blurradius", blur->blurRadius());
- } else {
+ } /*else {
+ //WARNING:those effects are anyways broken because they use QPixmaps which are not safe for MLT's threaded workflow
QGraphicsDropShadowEffect *shadow = static_cast <QGraphicsDropShadowEffect *>(eff);
if (shadow) {
effect.setAttribute("type", "shadow");
effect.setAttribute("xoffset", shadow->xOffset());
effect.setAttribute("yoffset", shadow->yOffset());
}
- }
+ }*/
e.appendChild(effect);
}
#endif
/** \brief Get the background color (incl. alpha) from the document, if possibly
* \returns The background color of the document, inclusive alpha. If none found, returns (0,0,0,0) */
-QColor TitleDocument::getBackgroundColor()
+QColor TitleDocument::getBackgroundColor() const
{
QColor color(0, 0, 0, 0);
if (m_scene) {
QList<QGraphicsItem *> items = m_scene->items();
- for (int i = 0; i < items.size(); i++) {
+ for (int i = 0; i < items.size(); ++i) {
if (items.at(i)->zValue() == -1100) {
color = ((QGraphicsRectItem *)items.at(i))->brush().color();
return color;
}
-bool TitleDocument::saveDocument(const KUrl& url, QGraphicsRectItem* startv, QGraphicsRectItem* endv, int out, bool embed)
+bool TitleDocument::saveDocument(const KUrl& url, QGraphicsRectItem* startv, QGraphicsRectItem* endv, int duration, bool embed)
{
if (!m_scene)
return false;
QDomDocument doc = xml(startv, endv, embed);
- doc.documentElement().setAttribute("out", out);
+ doc.documentElement().setAttribute("duration", duration);
+ // keep some time for backwards compatibility (opening projects with older versions) - 26/12/12
+ doc.documentElement().setAttribute("out", duration);
KTemporaryFile tmpfile;
if (!tmpfile.open()) {
kWarning() << "///// CANNOT CREATE TMP FILE in: " << tmpfile.fileName();
return false;
}
QFile xmlf(tmpfile.fileName());
- xmlf.open(QIODevice::WriteOnly);
+ if (!xmlf.open(QIODevice::WriteOnly))
+ return false;
xmlf.write(doc.toString().toUtf8());
if (xmlf.error() != QFile::NoError) {
xmlf.close();
return KIO::NetAccess::upload(tmpfile.fileName(), url, 0);
}
-int TitleDocument::loadFromXml(QDomDocument doc, QGraphicsRectItem* startv, QGraphicsRectItem* endv, int *out, const QString& projectpath)
+int TitleDocument::loadFromXml(const QDomDocument& doc, QGraphicsRectItem* startv, QGraphicsRectItem* endv, int *duration, const QString& projectpath)
{
m_projectPath = projectpath;
QDomNodeList titles = doc.elementsByTagName("kdenlivetitle");
}
}
//TODO: get default title duration instead of hardcoded one
- if (doc.documentElement().hasAttribute("out"))
- *out = doc.documentElement().attribute("out").toInt();
+ if (doc.documentElement().hasAttribute("duration"))
+ *duration = doc.documentElement().attribute("duration").toInt();
+ else if (doc.documentElement().hasAttribute("out"))
+ *duration = doc.documentElement().attribute("out").toInt();
else
- *out = 125;
+ *duration = 125;
int maxZValue = 0;
if (titles.size()) {
QDomNodeList items = titles.item(0).childNodes();
- for (int i = 0; i < items.count(); i++) {
+ for (int i = 0; i < items.count(); ++i) {
QGraphicsItem *gitem = NULL;
kDebug() << items.item(i).attributes().namedItem("type").nodeValue();
int zValue = items.item(i).attributes().namedItem("z-index").nodeValue().toInt();
pix.loadFromData(QByteArray::fromBase64(base64.toAscii()));
}
QGraphicsPixmapItem *rec = m_scene->addPixmap(pix);
+ rec->setShapeMode(QGraphicsPixmapItem::BoundingRectShape);
rec->setData(Qt::UserRole, url);
if (!base64.isEmpty()) {
rec->setData(Qt::UserRole + 1, base64);
QColor color = QColor(stringToColor(items.item(i).attributes().namedItem("color").nodeValue()));
//color.setAlpha(items.item(i).attributes().namedItem("alpha").nodeValue().toInt());
QList<QGraphicsItem *> items = m_scene->items();
- for (int i = 0; i < items.size(); i++) {
+ for (int i = 0; i < items.size(); ++i) {
if (items.at(i)->zValue() == -1100) {
((QGraphicsRectItem *)items.at(i))->setBrush(QBrush(color));
break;
QTransform TitleDocument::stringToTransform(const QString& s)
{
- QStringList l = s.split(',');
+ QStringList l = s.split(QLatin1Char(','));
if (l.size() < 9)
return QTransform();
return QTransform(