Merge branch 'develop' of github.com:mapmapteam/mapmap into develop

This commit is contained in:
Tats
2016-11-09 15:18:58 -05:00
16 changed files with 1818 additions and 1319 deletions
+1
View File
@@ -40,6 +40,7 @@ const QColor MM::DARK_BLUE("#0C0927");
const QColor MM::LIGHT_RED("#69020B");
const QColor MM::DARK_RED("#380b19");
const QColor MM::CROSSHAIR_STROKE(QColor(0, 0, 0, 63));
const QColor MM::CONTROL_COLOR(WHITE);
const QColor MM::CONTROL_COLOR_NON_SELECTED(QColor(CONTROL_COLOR.red(), CONTROL_COLOR.green(), CONTROL_COLOR.blue(), 63));
const QColor MM::CONTROL_LOCKED_COLOR(LIGHT_RED);
+1
View File
@@ -93,6 +93,7 @@ public:
static const QColor LIGHT_RED;
static const QColor DARK_RED;
static const QColor CROSSHAIR_STROKE;
static const QColor CONTROL_COLOR;
static const QColor CONTROL_COLOR_NON_SELECTED;
static const QColor CONTROL_LOCKED_COLOR;
+13 -10
View File
@@ -1376,6 +1376,7 @@ void MainWindow::createLayout()
sourceCanvas->setMinimumSize(CANVAS_MINIMUM_WIDTH, CANVAS_MINIMUM_HEIGHT);
sourceCanvasToolbar = new MapperGLCanvasToolbar(sourceCanvas, this);
sourceCanvasToolbar->setToolbarTitle(tr("Source"));
QVBoxLayout* sourceLayout = new QVBoxLayout;
sourcePanel = new QWidget(this);
@@ -1390,6 +1391,7 @@ void MainWindow::createLayout()
destinationCanvas->setMinimumSize(CANVAS_MINIMUM_WIDTH, CANVAS_MINIMUM_HEIGHT);
destinationCanvasToolbar = new MapperGLCanvasToolbar(destinationCanvas, this);
destinationCanvasToolbar->setToolbarTitle(tr("Destination"));
QVBoxLayout* destinationLayout = new QVBoxLayout;
destinationPanel = new QWidget(this);
@@ -1778,7 +1780,7 @@ void MainWindow::createActions()
addAction(displayControlsAction);
// Manage show/hide of canvas controls.
connect(displayControlsAction, SIGNAL(toggled(bool)), this, SLOT(enableDisplayControls(bool)));
connect(displayControlsAction, SIGNAL(toggled(bool)), outputWindow, SLOT(setDisplayCrosshair(bool)));
connect(displayControlsAction, SIGNAL(toggled(bool)), outputWindow, SLOT(setCanvasDisplayCrosshair(bool)));
// Toggle display of canvas controls.
displayPaintControlsAction = new QAction(tr("&Display Controls of Mappings of a Paint"), this);
@@ -1860,25 +1862,25 @@ void MainWindow::createActions()
// Perspectives
// Main perspective (Source + destination)
mainViewAction = new QAction(tr("Main Perspective"), this);
mainViewAction = new QAction(tr("Main Layout"), this);
mainViewAction->setCheckable(true);
mainViewAction->setChecked(true);
mainViewAction->setShortcut(Qt::CTRL + Qt::ALT + Qt::Key_1);
mainViewAction->setToolTip(tr("Switch to the Main perspective."));
mainViewAction->setShortcut(Qt::CTRL + Qt::Key_1);
mainViewAction->setToolTip(tr("Switch to the Main layout."));
connect(mainViewAction, SIGNAL(triggered(bool)), canvasSplitter->widget(0), SLOT(setVisible(bool)));
connect(mainViewAction, SIGNAL(triggered(bool)), canvasSplitter->widget(1), SLOT(setVisible(bool)));
// Source Only
sourceViewAction = new QAction(tr("Source Perspective"), this);
sourceViewAction = new QAction(tr("Source Layout"), this);
sourceViewAction->setCheckable(true);
sourceViewAction->setShortcut(Qt::CTRL + Qt::ALT + Qt::Key_2);
sourceViewAction->setToolTip(tr("Switch to the Source perspective."));
sourceViewAction->setShortcut(Qt::CTRL + Qt::Key_2);
sourceViewAction->setToolTip(tr("Switch to the Source layout."));
connect(sourceViewAction, SIGNAL(triggered(bool)), canvasSplitter->widget(0), SLOT(setVisible(bool)));
connect(sourceViewAction, SIGNAL(triggered(bool)), canvasSplitter->widget(1), SLOT(setHidden(bool)));
// Destination Only
destViewAction = new QAction(tr("Destination Perspective"), this);
destViewAction = new QAction(tr("Destination Layout"), this);
destViewAction->setCheckable(true);
destViewAction->setShortcut(Qt::CTRL + Qt::ALT + Qt::Key_3);
destViewAction->setToolTip(tr("Switch to the Destination perspective."));
destViewAction->setShortcut(Qt::CTRL + Qt::Key_3);
destViewAction->setToolTip(tr("Switch to the Destination layout."));
connect(destViewAction, SIGNAL(triggered(bool)), canvasSplitter->widget(0), SLOT(setHidden(bool)));
connect(destViewAction, SIGNAL(triggered(bool)), canvasSplitter->widget(1), SLOT(setVisible(bool)));
// Groups all actions
@@ -2169,6 +2171,7 @@ void MainWindow::readSettings()
outputFullScreenAction->setChecked(settings.value("displayOutputWindow", MM::DISPLAY_OUTPUT_WINDOW).toBool());
displayTestSignalAction->setChecked(settings.value("displayTestSignal", MM::DISPLAY_TEST_SIGNAL).toBool());
displayControlsAction->setChecked(settings.value("displayControls", MM::DISPLAY_CONTROLS).toBool());
outputWindow->setCanvasDisplayCrosshair(settings.value("displayControls", MM::DISPLAY_CONTROLS).toBool());
oscListeningPort = settings.value("oscListeningPort", MM::DEFAULT_OSC_PORT).toInt();
// Update Recent files and video
+14 -10
View File
@@ -43,9 +43,12 @@ void MapperGLCanvasToolbar::createZoomToolsLayout()
// Create zoom tool bar
setObjectName("zoom-toolbox");
// Create vertical layout for widgets
QHBoxLayout* buttonsLayout = new QHBoxLayout;
buttonsLayout->setContentsMargins(0, 0, 5, 0);
// Create label for title
_titleLabel = new QLabel;
// Create horizontale layout for widgets
QHBoxLayout* toolbarLayout = new QHBoxLayout;
toolbarLayout->setContentsMargins(0, 0, 5, 0);
// Create buttons
// Zoom In button
_zoomInButton = new QPushButton;
@@ -96,15 +99,16 @@ void MapperGLCanvasToolbar::createZoomToolsLayout()
connect(_dropdownMenu, SIGNAL(activated(QString)), _canvas, SLOT(setZoomFromMenu(QString)));
// Add widgets into layout
buttonsLayout->addWidget(_zoomInButton);
buttonsLayout->addWidget(_zoomOutButton);
buttonsLayout->addWidget(_resetZoomButton);
buttonsLayout->addWidget(_fitToViewButton);
buttonsLayout->addWidget(separator);
buttonsLayout->addWidget(_dropdownMenu);
toolbarLayout->addWidget(_titleLabel);
toolbarLayout->addWidget(_zoomInButton);
toolbarLayout->addWidget(_zoomOutButton);
toolbarLayout->addWidget(_resetZoomButton);
toolbarLayout->addWidget(_fitToViewButton);
toolbarLayout->addWidget(separator);
toolbarLayout->addWidget(_dropdownMenu);
// Insert layout in widget
setLayout(buttonsLayout);
setLayout(toolbarLayout);
connect(_canvas, SIGNAL(zoomFactorChanged(qreal)), this, SLOT(updateDropdownMenu(qreal)));
}
+4 -1
View File
@@ -39,6 +39,8 @@ public:
// Return enable statut
bool buttonsAreEnable() { return _areEnable; }
void setToolbarTitle(const QString &title) { _titleLabel->setText(title); }
public slots:
// Update and feedback zoom level
void updateDropdownMenu(qreal factor = 1);
@@ -47,7 +49,8 @@ public slots:
protected:
MapperGLCanvas* _canvas;
// Labels
QLabel *_titleLabel;
// Buttons for toolbox layout
QPushButton* _zoomInButton;
QPushButton* _zoomOutButton;
+36 -33
View File
@@ -27,10 +27,7 @@ MM_BEGIN_NAMESPACE
OutputGLCanvas::OutputGLCanvas(MainWindow* mainWindow, QWidget* parent, const QGLWidget* shareWidget, QGraphicsScene* scene)
: MapperGLCanvas(mainWindow, true, parent, shareWidget, scene),
_displayCrosshair(false),
_displayTestSignal(false),
_svg_test_signal(":/test-signal"),
_brush_test_signal(_svg_test_signal),
_palTestCard(":/pal-test-card")
_displayTestSignal(false)
{
// Disable scrollbars.
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
@@ -53,10 +50,11 @@ void OutputGLCanvas::drawForeground(QPainter *painter , const QRectF &rect)
int testCard = settings.value("signalTestCard", MM::DEFAULT_TEST_CARD).toInt();
glPushMatrix();
painter->translate(rect.x(), rect.y());
painter->setRenderHint(QPainter::Antialiasing);
painter->save();
switch (testCard) {
case MM::Classic:
_drawTestSignal(painter);
_drawClassicTestSignal(painter);
break;
case MM::PAL:
_drawPALTestCard(painter);
@@ -91,16 +89,25 @@ void OutputGLCanvas::drawForeground(QPainter *painter , const QRectF &rect)
if (rect.contains(cursorPosition))
#endif
{
// painter->setPen(MM::CONTROL_COLOR);
// painter->drawLine(cursorPosition.x(), rect.y(), cursorPosition.x(), rect.height());
// painter->drawLine(rect.x(), cursorPosition.y(), rect.width(), cursorPosition.y());
// Draw crosshair line
painter->setPen(MM::CROSSHAIR_STROKE);
painter->setBrush(MM::CONTROL_COLOR);
painter->drawRect(cursorPosition.x() - 2, rect.y(), 4, rect.height());
painter->drawRect(rect.x(), cursorPosition.y() - 2, rect.width(), 4);
// Draw crosshair pointer
painter->setPen(MM::CONTROL_COLOR);
painter->drawLine(cursorPosition.x(), rect.y(), cursorPosition.x(), rect.height());
painter->drawLine(rect.x(), cursorPosition.y(), rect.width(), cursorPosition.y());
painter->setBrush(MM::CROSSHAIR_STROKE);
painter->drawRect(cursorPosition.x() - 10, cursorPosition.y() - 10, 20, 20);
}
}
}
}
void OutputGLCanvas::_drawTestSignal(QPainter* painter)
void OutputGLCanvas::_drawClassicTestSignal(QPainter* painter)
{
const QRect& geo = geometry();
int width = geo.width();
@@ -127,12 +134,12 @@ void OutputGLCanvas::_drawTestSignal(QPainter* painter)
}
// Create responsive image
QImage image = _svg_test_signal.scaled(height, height, Qt::KeepAspectRatio, Qt::SmoothTransformation);
int imageX = (width - image.width()) / 2;
int imageY = (height - image.height()) / 2;
_classicTestCard = QImage(":/test-signal").scaled(height, height, Qt::KeepAspectRatio, Qt::SmoothTransformation);
int imageX = (width - _classicTestCard.width()) / 2;
int imageY = (height - _classicTestCard.height()) / 2;
// Draw the image.
painter->drawImage(imageX, imageY, image);
painter->drawImage(imageX, imageY, _classicTestCard);
}
void OutputGLCanvas::_drawPALTestCard(QPainter* painter)
@@ -170,17 +177,17 @@ void OutputGLCanvas::_drawPALTestCard(QPainter* painter)
}
// Create responsive image
QImage image = _palTestCard.scaled(height - (rectSize * 2), height - (rectSize * 2),
_palTestCard = QImage(":/pal-test-card").scaled(height - (rectSize * 2), height - (rectSize * 2),
Qt::KeepAspectRatio, Qt::SmoothTransformation);
// Draw image
int imageX = (width - image.width()) / 2;
int imageY = (height - image.height()) / 2;
int imageWidth = image.width();
int imageHeight = image.height();
painter->drawImage(imageX, imageY, image);
int imageX = (width - _palTestCard.width()) / 2;
int imageY = (height - _palTestCard.height()) / 2;
int imageHeight = _palTestCard.height();
painter->drawImage(imageX, imageY, _palTestCard);
// Draw text for screen resolution
int fontSize = imageHeight / 20;
QRect textRect((width / 2) - (fontSize * 3), imageY + (imageHeight / 13), fontSize * 6, fontSize);
int fontSize = imageHeight / 18;
QRect textRect((width / 2) - (fontSize * 3), imageY + (imageHeight / 19), fontSize * 6, fontSize);
_drawResolutionText(painter, textRect, fontSize);
}
@@ -189,24 +196,19 @@ void OutputGLCanvas::_drawNTSCTestCard(QPainter* painter)
const QRect& geo = geometry();
int width = geo.width();
int height = geo.height();
QList<QColor> colors = {
Qt::white, Qt::yellow, Qt::cyan, Qt::green,
Qt::magenta, Qt::red, Qt::blue, Qt::black
};
const int bandWidth = width / colors.size();
// Create image
_ntscTestCard = QImage(":/ntsc-test-card").scaled(width, height);
painter->setPen(Qt::NoPen);
// Draw backgroung image
painter->drawImage(geo.x(), geo.y(), _ntscTestCard);
// Draw logo
QImage mapmapLogo = QImage(":/mapmap-logo-with-border").scaled(width, height / 15, Qt::KeepAspectRatio, Qt::SmoothTransformation);
painter->drawImage((width - mapmapLogo.width()) / 2, height / 4, mapmapLogo);
// Draw checkerboard pattern.
for (int x = 0; x < width / bandWidth; x++)
{
painter->setBrush(colors.at(x));
painter->drawRect(x * bandWidth, 0, bandWidth, height);
}
// Draw text for screen resolution
int fontSize = height / 30;
int fontSize = height / 21;
QRect textRect((width / 2) - (fontSize * 3), height / 3, fontSize * 6, fontSize);
_drawResolutionText(painter, textRect, fontSize);
}
@@ -220,6 +222,7 @@ void OutputGLCanvas::_drawResolutionText(QPainter *painter, const QRect &rect, i
painter->fillRect(rect, Qt::black);
QFont font = painter->font();
font.setPixelSize(fontSize);
font.setBold(true);
painter->setFont(font);
painter->setPen(Qt::white);
painter->drawText(rect, Qt::AlignCenter,
+3 -2
View File
@@ -50,7 +50,7 @@ public:
}
private:
void _drawTestSignal(QPainter* painter);
void _drawClassicTestSignal(QPainter* painter);
void _drawPALTestCard(QPainter *painter);
void _drawNTSCTestCard(QPainter *painter);
@@ -58,9 +58,10 @@ private:
bool _displayCrosshair;
bool _displayTestSignal;
QImage _svg_test_signal;
QImage _classicTestCard;
QBrush _brush_test_signal;
QImage _palTestCard;
QImage _ntscTestCard;
protected:
// overriden from QGlWidget:
+3 -2
View File
@@ -38,7 +38,7 @@ OutputGLWindow:: OutputGLWindow(QWidget* parent, const MapperGLCanvas* canvas_)
layout->addWidget(canvas);
setLayout(layout);
setDisplayCrosshair(false); // default
setCanvasDisplayCrosshair(false); // default
this->_is_fullscreen = false;
_preferredScreen = QApplication::screens().size() - 1;
}
@@ -93,10 +93,11 @@ void OutputGLWindow::_updateToPreferredScreen()
}
void OutputGLWindow::setDisplayCrosshair(bool crosshair)
void OutputGLWindow::setCanvasDisplayCrosshair(bool crosshair)
{
canvas->setDisplayCrosshair(crosshair);
setCursor(crosshair || this->_is_fullscreen ? Qt::BlankCursor : Qt::ArrowCursor);
qDebug() << "Crosshair " << crosshair;
}
void OutputGLWindow::setDisplayTestSignal(bool displayTestSignal)
+1 -1
View File
@@ -46,7 +46,7 @@ public:
public slots:
void setFullScreen(bool fullScreen);
void setDisplayCrosshair(bool crosshair);
void setCanvasDisplayCrosshair(bool crosshair);
void setDisplayTestSignal(bool displayTestSignal);
signals:
+2
View File
@@ -44,5 +44,7 @@
<file alias="pal-test">resources/images/test-signal/examples/pal-test-card.png</file>
<file alias="ntsc-test">resources/images/test-signal/examples/ntsc-test-card.png</file>
<file>resources/images/checkbox/checkbox-unchecked.png</file>
<file alias="ntsc-test-card">resources/images/test-signal/ntsc-test-signal.svg</file>
<file alias="mapmap-logo-with-border">resources/images/logo/mapmap-wide-with-border.svg</file>
</qresource>
</RCC>
+5 -4
View File
@@ -140,12 +140,13 @@ int main(int argc, char *argv[])
// IMPORTANT: Translator must be set *before* the MainWindow is created for it to work.
QSettings settings;
// Get language from command line or user settings
QString lang = parser.value("lang").isEmpty()
? settings.value("language").toString()
: parser.value("lang");
if (MM::SUPPORTED_LANGUAGES.contains(lang))
{
QLocale::setDefault(QLocale(lang));
//QLocale::setDefault(QLocale(lang));
QTranslator qtTranslator;
#ifdef Q_OS_WIN32
qtTranslator.load(QString("qt_%1").arg(lang),
@@ -156,9 +157,9 @@ int main(int argc, char *argv[])
#endif
app.installTranslator(&qtTranslator);
QTranslator localization;
localization.load(QString(":/mapmap_%1").arg(lang));
app.installTranslator(&localization);
QTranslator appTranslator;
appTranslator.load(QString("translations/mapmap_%1").arg(lang));
app.installTranslator(&appTranslator);
}
else {
qWarning() << "Unrecognized/unsupported language: " << lang;
@@ -0,0 +1,133 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="1024"
height="192"
viewBox="0 0 1024 192"
id="svg2"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="mapmap-wide-with-border.svg">
<defs
id="defs4" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:zoom="1.1689453"
inkscape:cx="512"
inkscape:cy="96"
inkscape:document-units="px"
inkscape:current-layer="g4313"
showgrid="false"
inkscape:window-width="1680"
inkscape:window-height="1022"
inkscape:window-x="1050"
inkscape:window-y="340"
inkscape:window-maximized="1"
units="px" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="mapmap-font-strock"
style="display:inline"
transform="translate(0,-552.09448)" />
<g
style="display:inline"
inkscape:label="mapmap-font"
id="g4313"
inkscape:groupmode="layer"
transform="translate(0,-552.09448)">
<g
id="g4152"
transform="translate(-16.70785,276.0476)">
<path
sodipodi:nodetypes="ccccccccccc"
inkscape:connector-curvature="0"
id="path16"
style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:30;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 213.13908,291.79626 0,160.50123 -26.47862,0 0,-123.5862 -117.561741,123.5862 -26.47872,0 0,-160.50123 26.47872,0 58.379741,61.59448 59.182,-61.59448 26.47862,0" />
<path
inkscape:connector-curvature="0"
id="path18"
style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:30;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 305.61895,317.47739 -12.83701,33.30653 26.68281,72.62217 -27.68551,0 -12.43472,-37.70948 -25.68214,66.60088 -28.48504,0 64.99778,-160.50123 30.88867,0 65.00285,160.50123 -28.68415,0 -51.76354,-134.8201" />
<path
sodipodi:nodetypes="cccccccsssc"
inkscape:connector-curvature="0"
id="path20"
style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:30;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 424.58761,377.66078 0,74.63468 -26.48269,0 0,-98.50547 27.68552,0 -27.68552,-38.11685 0,-23.87688 81.65359,0 c 23.66353,0 42.93022,19.26669 42.93022,42.9414 0,23.66354 -19.26669,42.92312 -42.93022,42.92312 l -55.1709,0" />
<path
sodipodi:nodetypes="ccccccccccc"
d="m 705.24607,291.79626 0,160.50123 -26.47862,0 0,-123.5862 -117.56174,123.5862 -26.47872,0 0,-160.50123 26.47872,0 58.37974,61.59448 59.182,-61.59448 26.47862,0"
style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:30;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path4307"
inkscape:connector-curvature="0" />
<path
d="m 797.72597,317.47739 -12.83701,33.30653 26.68281,72.62217 -27.68551,0 -12.43472,-37.70948 -25.68214,66.60088 -28.48504,0 64.99778,-160.50123 30.88867,0 65.00285,160.50123 -28.68415,0 -51.76354,-134.8201"
style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:30;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path4309"
inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cccccccsssc"
d="m 916.6946,377.66078 0,74.63468 -26.48269,0 0,-98.50547 27.68552,0 -27.68552,-38.11685 0,-23.87688 81.65359,0 c 23.66353,0 42.9302,19.26669 42.9302,42.9414 0,23.66354 -19.26667,42.92312 -42.9302,42.92312 l -55.1709,0"
style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:30;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path4311"
inkscape:connector-curvature="0" />
<path
d="m 69.098719,414.37467 40.525171,-42.32272 -40.525171,-43.53876 0,85.86148 z m 144.040361,-122.57841 0,160.50123 -26.47862,0 0,-123.5862 -117.561741,123.5862 -26.47872,0 0,-160.50123 26.47872,0 58.379741,61.59448 59.182,-61.59448 26.47862,0"
style="display:inline;fill:#2d2f3e;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path4315"
inkscape:connector-curvature="0" />
<path
d="m 305.61895,317.47739 -12.83701,33.30653 26.68281,72.62217 -27.68551,0 -12.43472,-37.70948 -25.68214,66.60088 -28.48504,0 64.99778,-160.50123 30.88867,0 65.00285,160.50123 -28.68415,0 -51.76354,-134.8201"
style="display:inline;fill:#2d2f3e;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path4317"
inkscape:connector-curvature="0" />
<path
d="m 426.39084,315.67314 29.09052,38.11685 24.27715,0 c 9.02837,0 16.44653,-8.62912 16.44653,-19.05233 0,-10.43947 -7.41816,-19.06452 -16.44653,-19.06452 l -53.36767,0 z m -1.80323,61.98764 0,74.63468 -26.48269,0 0,-98.50547 27.68552,0 -27.68552,-38.11685 0,-23.87688 81.65359,0 c 23.66353,0 42.93022,19.26669 42.93022,42.9414 0,23.66354 -19.26669,42.92312 -42.93022,42.92312 l -55.1709,0"
style="display:inline;fill:#2d2f3e;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path4319"
inkscape:connector-curvature="0" />
<path
inkscape:connector-curvature="0"
id="path4321"
style="display:inline;fill:#2d2f3e;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 561.20571,414.37467 40.52517,-42.32272 -40.52517,-43.53876 0,85.86148 z m 144.04036,-122.57841 0,160.50123 -26.47862,0 0,-123.5862 -117.56174,123.5862 -26.47872,0 0,-160.50123 26.47872,0 58.37974,61.59448 59.182,-61.59448 26.47862,0" />
<path
inkscape:connector-curvature="0"
id="path4323"
style="display:inline;fill:#2d2f3e;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 797.72597,317.47739 -12.83701,33.30653 26.68281,72.62217 -27.68551,0 -12.43472,-37.70948 -25.68214,66.60088 -28.48504,0 64.99778,-160.50123 30.88867,0 65.00285,160.50123 -28.68415,0 -51.76354,-134.8201" />
<path
inkscape:connector-curvature="0"
id="path4325"
style="display:inline;fill:#2d2f3e;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 918.49783,315.67314 29.09052,38.11685 24.27715,0 c 9.02837,0 16.44653,-8.62912 16.44653,-19.05233 0,-10.43947 -7.41816,-19.06452 -16.44653,-19.06452 l -53.36767,0 z m -1.80323,61.98764 0,74.63468 -26.48269,0 0,-98.50547 27.68552,0 -27.68552,-38.11685 0,-23.87688 81.65359,0 c 23.66353,0 42.9302,19.26669 42.9302,42.9414 0,23.66354 -19.26667,42.92312 -42.9302,42.92312 l -55.1709,0" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 7.5 KiB

@@ -0,0 +1,183 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.0"
width="672"
height="504"
id="svg2"
inkscape:version="0.91 r13725"
sodipodi:docname="ntsc-test-signal.svg">
<metadata
id="metadata24">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1680"
inkscape:window-height="1022"
id="namedview22"
showgrid="false"
inkscape:zoom="1.8557524"
inkscape:cx="301.89736"
inkscape:cy="252"
inkscape:window-x="1050"
inkscape:window-y="340"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs4" />
<g
id="layer1">
<rect
width="672"
height="504"
x="0"
y="0"
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-opacity:1"
id="rect2762" />
<rect
width="96"
height="336"
x="0"
y="0"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-opacity:1"
id="rect2768" />
<rect
width="96"
height="336"
x="96"
y="0"
transform="translate(-6.4e-5,0)"
style="fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-opacity:1"
id="rect2770" />
<rect
width="128"
height="336"
x="192"
y="0"
transform="matrix(0.75,0,0,1,48,0)"
style="fill:#00ffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-opacity:1"
id="rect2772" />
<rect
width="128"
height="336"
x="288"
y="0"
transform="matrix(0.75,0,0,1,72,0)"
style="fill:#00ff00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-opacity:1"
id="rect2774" />
<rect
width="128"
height="336"
x="384"
y="0"
transform="matrix(0.75,0,0,1,96,0)"
style="fill:#ff00ff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-opacity:1"
id="rect2776" />
<rect
width="128"
height="336"
x="480"
y="0"
transform="matrix(0.75,0,0,1,120,0)"
style="fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-opacity:1"
id="rect2778" />
<rect
width="128"
height="336"
x="576"
y="0"
transform="matrix(0.75,0,0,1,144,0)"
style="fill:#0000ff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-opacity:1"
id="rect2780" />
<rect
width="96"
height="42"
x="0"
y="336"
style="fill:#0000ff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-opacity:1"
id="rect2782" />
<rect
width="96"
height="42"
x="192"
y="336"
style="fill:#ff00ff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-opacity:1"
id="rect2784" />
<rect
width="96"
height="42"
x="384"
y="336"
style="fill:#00ffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-opacity:1"
id="rect2786" />
<rect
width="96"
height="42"
x="576"
y="336"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-opacity:1"
id="rect2788" />
<rect
width="128"
height="126"
x="0"
y="378"
transform="scale(0.9375,1)"
style="fill:#000080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-opacity:1"
id="rect2790" />
<rect
width="128"
height="126"
x="0"
y="378"
transform="matrix(0.9375,0,0,1,120,0)"
style="fill:white;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-opacity:1"
id="rect2796" />
<rect
width="128"
height="126"
x="0"
y="378"
transform="matrix(0.9375,0,0,1,240,0)"
style="fill:#800080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-opacity:1"
id="rect2798" />
<rect
width="32"
height="126"
x="512"
y="378"
style="fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-opacity:1"
id="rect2800" />
<rect
width="32"
height="126"
x="544"
y="378"
style="fill:#333333;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-opacity:1"
id="rect2802" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.0 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 80 KiB

After

Width:  |  Height:  |  Size: 55 KiB

+250 -175
View File
File diff suppressed because it is too large Load Diff
+72 -17
View File
@@ -1,6 +1,49 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="fr">
<context>
<name>AboutDialog</name>
<message>
<source>About %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>MapMap is a free/open source video mapping software.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Copyright &amp;copy; 2013 %1.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>See the </source>
<translation type="unfinished"></translation>
</message>
<message>
<source>%1 website</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>About</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Changelog</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Librairies</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Contributors</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>License</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ConsoleWindow</name>
<message>
@@ -46,7 +89,7 @@
<name>MainWindow</name>
<message>
<source>About MapMap</source>
<translation>À propos de MapMap</translation>
<translation type="vanished">À propos de MapMap</translation>
</message>
<message>
<source>&amp;New</source>
@@ -319,10 +362,6 @@ No camera available in your system</source>
<source>Select Color</source>
<translation type="unfinished">Choisir une couleur</translation>
</message>
<message>
<source>&lt;h2&gt;&lt;img src=&quot;:mapmap-title&quot;/&gt; %1&lt;/h2&gt;&lt;p&gt;Copyright &amp;copy; 2013 %2.&lt;/p&gt;&lt;p&gt;MapMap is a free software for video mapping.&lt;/p&gt;&lt;p&gt;Projection mapping, also known as video mapping and spatial augmented reality, is a projection technology used to turn objects, often irregularly shaped, into a display surface for video projection. These objects may be complex industrial landscapes, such as buildings. By using specialized software, a two or three dimensional object is spatially mapped on the virtual program which mimics the real environment it is to be projected on. The software can interact with a projector to fit any desired image onto the surface of that object. This technique is used by artists and advertisers alike who can add extra dimensions, optical illusions, and notions of movement onto previously static objects. The video is commonly combined with, or triggered by, audio to create an audio-visual narrative.This project was made possible by the support of the International Organization of La Francophonie.&lt;/p&gt;&lt;p&gt;http://mapmap.info&lt;br /&gt;http://www.francophonie.org&lt;/p&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Paints</source>
<translation>Sources</translation>
@@ -481,7 +520,7 @@ No camera available in your system</source>
</message>
<message>
<source>Display &amp;Undo Stack</source>
<translation>Afficher la liste des &amp;Undo</translation>
<translation type="vanished">Afficher la liste des &amp;Undo</translation>
</message>
<message>
<source>Open Conso&amp;le</source>
@@ -613,7 +652,15 @@ The original file is not found. Will you locate?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Undo stack</source>
<source>Display &amp;Undo History</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Submit Feedback...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Undo history</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -644,15 +691,15 @@ The original file is not found. Will you locate?</source>
</message>
<message>
<source>Lock mapping</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Verrouiller le mapping</translation>
</message>
<message>
<source>Duplicate mapping</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Dupliquer un mapping</translation>
</message>
<message>
<source>Delete mapping</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Supprimer le mapping</translation>
</message>
</context>
<context>
@@ -745,10 +792,6 @@ The original file is not found. Will you locate?</source>
<source>OSC Setup</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Apparence</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Mapping &amp; Shape</source>
<translation type="unfinished"></translation>
@@ -765,6 +808,14 @@ The original file is not found. Will you locate?</source>
<source>Advanced</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Language (requires restart)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Interface</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QObject</name>
@@ -876,7 +927,7 @@ Ligne %2, colonne %3</translation>
</message>
<message>
<source>Delete mapping</source>
<translation type="unfinished"></translation>
<translation type="unfinished">Supprimer le mapping</translation>
</message>
<message>
<source>Problem at creation of shape.</source>
@@ -911,7 +962,11 @@ Ligne %2, colonne %3</translation>
<translation>Problème à la création de la source</translation>
</message>
<message>
<translation>Problème à la création du mapping</translation>
<source></source>
<translation></translation>
</message>
<message>
<source>Problem at creation of mapping.</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -1053,7 +1108,7 @@ Ligne %2, colonne %3</translation>
<name>QtFontEditWidget</name>
<message>
<source>...</source>
<translation type="unfinished"></translation>
<translation type="unfinished">...</translation>
</message>
<message>
<source>Select Font</source>