[-]
[+]
|
Changed |
_service:tar_git:harbour-stopmotion.spec
|
|
[-]
[+]
|
Changed |
_service
^
|
@@ -2,7 +2,7 @@
<service name="tar_git">
<param name="url">https://github.com/poetaster/harbour-stopmotion.git</param>
<param name="branch">imageprovider</param>
- <param name="revision">0.3.0</param>
+ <param name="revision">0.4.0</param>
<param name="debian">N</param>
<param name="dumb">N</param>
</service>
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-stopmotion-0.4.0.tar.bz2/harbour-stopmotion.pro
^
|
@@ -28,6 +28,7 @@
qml/cover/CoverPage.qml \
qml/cover/harbour-stopmotion.png \
qml/pages/CanvasSlideshowPage.qml \
+ qml/pages/PythonHandler.qml \
qml/pages/ShootScreen.qml \
qml/pages/CameraButton.qml \
qml/pages/ImagePage.qml \
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-stopmotion-0.4.0.tar.bz2/qml/components/Banner.qml
^
|
@@ -64,7 +64,7 @@
Label {
id: message
anchors.verticalCenter: popup.verticalCenter
- font.pixelSize: 32
+ font.pixelSize: Theme.fontSizeMedium
anchors.left: parent.left
anchors.leftMargin: Theme.paddingLarge
anchors.right: parent.right
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-stopmotion-0.4.0.tar.bz2/qml/harbour-stopmotion.qml
^
|
@@ -1,6 +1,7 @@
import QtQuick 2.5
import Sailfish.Silica 1.0
import QtMultimedia 5.0
+import "components"
import "pages"
// Icon
@@ -9,7 +10,10 @@
ApplicationWindow
{
property bool debug:false
-
+ // global banner used for feedback, for instance from ffmpeg python file save.
+ Banner {
+ id: banner
+ }
initialPage: Component
{
id : sscr
@@ -45,6 +49,11 @@
}
}
+ PythonHandler {
+ id: py
+ }
+
+
QtObject
{
id: cameraState
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-stopmotion-0.4.0.tar.bz2/qml/pages/CanvasSlideshowPage.qml
^
|
@@ -160,6 +160,15 @@
}
}
}
+ BusyIndicator
+ {
+ id:busyIndicator
+ size: BusyIndicatorSize.Large
+ anchors {
+ centerIn: parent
+ }
+ running: true
+ }
Canvas
{
id: drawingCanvas
@@ -172,6 +181,10 @@
height:1920
renderTarget: Canvas.Image
+ onImageLoaded: {
+ slideshowRunning = true
+ busyIndicator.running = false
+ }
Component.onCompleted: {
// preload images.
@@ -185,21 +198,9 @@
var insertImagePath = "image://paintImage/" + img
loadImage(insertImagePath);
}
- slideshowRunning = true
- busyIndicator.running = false
-
}
}
- BusyIndicator
- {
- id:busyIndicator
- size: BusyIndicatorSize.Large
- anchors {
- bottom: parent.bottom
- right: parent.left
- }
- running: false
- }
+
/* Pause indicators. */
IconButton
{
|
[-]
[+]
|
Added |
_service:tar_git:harbour-stopmotion-0.4.0.tar.bz2/qml/pages/PythonHandler.qml
^
|
@@ -0,0 +1,927 @@
+import QtQuick 2.5
+import io.thp.pyotherside 1.5
+import QtQuick.LocalStorage 2.0
+import Sailfish.Silica 1.0
+
+import "../utils/localdb.js" as Database
+
+Python
+{
+
+ id: py
+ // MUCH of this is cribbed from Videoworks. Much of that will not work here. It's largely for reference.
+ property bool debug: false
+ property string tempMediaFolderPath: StandardPaths.home + '/.cache/de.poetaster/stopmotion'
+ property string tempMediaType : "mkv"
+ property string ffmpeg_staticPath : "/usr/bin/ffmpeg"
+ property string outputPathPy
+ property string homeDirectory: StandardPaths.home
+ //property string inputPathPy : decodeURIComponent( "/" + idMediaPlayer.source.toString().replace(/^(file:\/{3})|(qrc:\/{2})|(http:\/{2})/,"") )
+ //property string saveMediaFolderPath : StandardPaths.home + '/Videos'
+ property bool finishedLoading: true
+ property int processedPercent: 0
+ property int undoNr: 0
+ property string portrait: "1080"
+ property int saveFps:5
+ property int fpsMode: 0
+ property int loop: 1
+
+ Component.onCompleted: {
+ addImportPath(Qt.resolvedUrl('../py'));
+ importModule('videox', function () {});
+
+ // Handlers do something to QML with received infos from Pythonfile (=pyotherside.send)
+ setHandler('homePathFolder', function( homeDir ) {
+ tempMediaFolderPath = homeDir + "/.cache/de.poetaster/stopmotion/"
+ //tempMediaFolderPath = StandardPaths.temporary
+ saveMediaFolderPath = homeDir + "/Videos"
+ homeDirectory = homeDir
+ py.createTmpAndSaveFolder()
+ py.deleteAllTMPFunction()
+ });
+ setHandler('loadTempMedia', function( newFilePath ) {
+ idMediaPlayer.source = ""
+ idMediaPlayer.source = encodeURI( newFilePath )
+ py.getVideoInfo( newFilePath, "false" )
+ brandNewFile = false
+ });
+ setHandler('extractedAudio', function( targetPath ) {
+ finishedLoading = true
+ banner.notify( qsTr("Audio extracted to") + "\n" + " " + targetPath + " ", Theme.highlightDimmerColor, 10000 )
+ });
+ setHandler('finishedSavingRenaming', function( newFilePath, newFileName, newFileType ) {
+ idMediaPlayer.source = ""
+ idMediaPlayer.source = newFilePath
+ origMediaFilePath = newFilePath
+ origMediaFileName = newFileName + "." + newFileType
+ origMediaFolderPath = origMediaFilePath.replace(origMediaFileName, "")
+ var origMediaFileNameArray = origMediaFileName.split(".")
+ origMediaName = (origMediaFileNameArray.slice(0, origMediaFileNameArray.length-1)).join(".")
+ origMediaType = origMediaFileNameArray[origMediaFileNameArray.length - 1]
+ py.getVideoInfo( inputPathPy, "true" )
+ undoNr = 0
+ noFile = false
+ idTimerDelaySetCropmarkers.start()
+ });
+ setHandler('deletedFile', function() {
+ origMediaFilePath = ""
+ origMediaFileName = ""
+ origMediaFolderPath = ""
+ origMediaName = ""
+ origMediaType = "none"
+ origVideoWidth = 0
+ origVideoHeight = 0
+ origCodecVideo = "none"
+ origCodecAudio = "none"
+ origFrameRate = 0
+ origFileSize = 0
+ idMediaPlayer.source = ""
+ undoNr = 0
+ noFile = true
+ });
+ setHandler('deletedLastTmp', function() {
+ finishedLoading = true
+ });
+ setHandler('sourceVideoInfo', function( videoResolution, videoCodec, audioCodec, frameRate, pixelFormat, audioSamplerate, audioLayout, isOriginal, estimatedSize, videoRotation, playbackDuration, sampleAspectRatio, displayAspectRatio ) {
+ videoResolution = videoResolution.toString()
+ var videoResolutionArray= videoResolution.split("x")
+ sourceVideoWidth = parseInt(videoResolutionArray[0])
+ sourceVideoHeight = parseInt(videoResolutionArray[1])
+ sourceSampleAspectRatio = sampleAspectRatio.toString()
+ sourceDisplayAspectRatio = displayAspectRatio.toString()
+ origVideoRotation = parseInt(videoRotation)
+ if (origVideoRotation !== 90 && origVideoRotation !== -90 ) { origVideoRotation = 0 } // Patch: if no EXIF tag = 0
+ if (isOriginal === "true") {
+ origFileSize = ( parseInt(estimatedSize) / 1024 / 1024 ).toFixed(2)
+ origVideoWidth = sourceVideoWidth
+ origVideoHeight = sourceVideoHeight
+ origCodecVideo = videoCodec.toString()
+ origFrameRate = frameRate.toString()
+ origPixelFormat = pixelFormat.toString()
+ origCodecAudio = audioCodec.toString()
+ origSAR = sourceSampleAspectRatio
+ origDAR = sourceDisplayAspectRatio
+ if (origCodecAudio === "vorbis") { origCodecAudio = "libvorbis" } // Patch: vorbis is experimental, use libvorbis instead
+ origAudioLayout = audioLayout.toString()
+ origAudioSamplerate = audioSamplerate.toString()
+ origVideoDuration = new Date( (parseFloat(playbackDuration)*1000) ).toISOString().substr(11,8)
+ if ( (origVideoWidth >= warningLargeSize || origVideoHeight >= warningLargeSize) && brandNewFile === true ) {
+ banner.notify( qsTr("This seems to be a large file.") + "\n" + qsTr("For speed convenience you may scale it down first." ), Theme.highlightDimmerColor, 5000 )
+ }
+ }
+ tmpVideoFileSize = ( parseInt(estimatedSize) / 1024 / 1024 ).toFixed(2)
+ });
+ setHandler('overlayVideoInfo', function( videoResolution ) {
+ videoResolution = videoResolution.toString()
+ var videoResolutionArray= videoResolution.split("x")
+ previewVideoWidth = parseInt(videoResolutionArray[0])
+ previewVideoHeight = parseInt(videoResolutionArray[1])
+ croppingRatio = previewRatioFileVideo
+ setCropmarkersRatio()
+ idPreviewOverlayImage.source = ""
+ idPreviewOverlayImage.source = overlayThumbnailPath
+ });
+ setHandler('errorOccured', function( messageWarning ) {
+ finishedLoading = true
+ undoNr = undoNr - 1
+ banner.notify( qsTr("ERROR!") + "\n" + messageWarning, Theme.errorColor, 10000 )
+ });
+ setHandler('clearOverlayFilename', function() {
+ clearOverlayFunction()
+ });
+
+ setHandler('progressPercentage', function( percentDone ) {
+ processedPercent = percentDone
+ });
+ setHandler('previewImageCreated', function() {
+ idThumbnailOverlay.source = ""
+ idThumbnailOverlay.source = thumbnailPath
+ thumbnailVisible = true // show thumbnail preview
+ });
+ setHandler('switchToAlphaFullScreen', function() {
+ idComboBoxImageOverlayAlphaStretch.currentIndex = 0
+ });
+
+ setHandler('exportClipCreated', function( newFilePath ) {
+ py.deleteAllTMPFunction(tempMediaFolderPath)
+ finishedLoading = true
+ banner.notify( qsTr("Exported to") + "\n" + " " + newFilePath + " ", Theme.highlightDimmerColor, 10000 )
+ });
+
+
+ setHandler('newClipCreated', function( newFilePath, newFileName ) {
+ idMediaPlayer.stop()
+ brandNewFile = true
+ origMediaFilePath = newFilePath.toString()
+ origMediaFileName = newFileName.toString()
+ origMediaFolderPath = origMediaFilePath.replace(origMediaFileName.fileName, "")
+ var origMediaFileNameArray = origMediaFileName.split(".")
+ origMediaName = (origMediaFileNameArray.slice(0, origMediaFileNameArray.length-1)).join(".")
+ origMediaType = origMediaFileNameArray[origMediaFileNameArray.length - 1]
+ idMediaPlayer.source = ""
+ idMediaPlayer.source = encodeURI( newFilePath )
+ py.deleteAllTMPFunction()
+ py.getVideoInfo( newFilePath, "true" )
+ undoNr = 0
+ noFile = false
+ brandNewFile = true
+ finishedLoading = true
+ subtitleModel.clear()
+ });
+ setHandler('playbackDurationParsed', function( playbackDuration, targetName ) {
+ if ( targetName === "previewAudioFile" ) {
+ filePreviewDuration = parseFloat(playbackDuration) * 1000 // needs milliseconds
+ }
+ else if ( targetName === "addStorylineModel" ) {
+ storylineAddFileDuration = (parseFloat(playbackDuration)).toFixed(1) // needs seconds
+ }
+ });
+ setHandler('subtitleFileParsed', function( subtitleText ) {
+ //console.log(subtitleText)
+ });
+ setHandler('imagesExtracted', function() {
+ finishedLoading = true
+ banner.notify( qsTr("Extracted to") + "\n" + " " + origMediaFolderPath + " ", Theme.highlightDimmerColor, 10000 )
+ });
+ }
+
+
+
+ // file operations
+ function getHomePath() {
+ call("videox.getHomePath", [])
+ }
+ function createTmpAndSaveFolder() {
+ call("videox.createTmpAndSaveFolder", [ tempMediaFolderPath, saveMediaFolderPath ])
+ }
+ function deleteAllTMPFunction() {
+ undoNr = 0
+ call("videox.deleteAllTMPFunction", [ tempMediaFolderPath ])
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-stopmotion-0.4.0.tar.bz2/qml/pages/ShootScreen.qml
^
|
@@ -21,7 +21,8 @@
property bool debug: false
- QtObject {
+ QtObject
+ {
id:d
property real cDOCK_PANEL_SIZE: 800
}
@@ -29,14 +30,16 @@
property var slideshowPage
// function to pad image/series names with leading 0s
- function pad(n, width) {
+ function pad(n, width)
+ {
n = n + '';
return n.length >= width ? n :
new Array(width - n.length + 1).join('0') + n;
}
- onStatusChanged: {
+ onStatusChanged:
+ {
if(status === PageStatus.Active)
{
// not quite! but sometimes
@@ -47,21 +50,6 @@
}
}
- Camera {
- id: camera
- imageProcessing.whiteBalanceMode: CameraImageProcessing.WhiteBalanceAuto
- exposure {
- exposureMode: Camera.ExposureAuto
- }
- captureMode: Camera.CaptureStillImage
- flash.mode: Camera.FlashOff
- focus.focusMode: Camera.FocusContinuous
- imageCapture {
- resolution: "1920x1080"
- }
-
- }
-
onOrientationChanged: {
if (orientation===Orientation.Landscape){
@@ -82,10 +70,25 @@
}
}
+ Camera
+ {
+ id: camera
+ imageProcessing.whiteBalanceMode: CameraImageProcessing.WhiteBalanceAuto
+ exposure {
+ exposureMode: Camera.ExposureAuto
+ }
+ captureMode: Camera.CaptureStillImage
+ flash.mode: Camera.FlashOff
+ focus.focusMode: Camera.FocusContinuous
+ imageCapture {
+ resolution: "1920x1080"
+ }
+
+ }
- Component {
+ Component
+ {
id: internalPicker
-
FolderPickerDialog {
id: folderiDialog
title: "Save to:"
@@ -93,7 +96,9 @@
onRejected: savePath = StandardPaths.standardLocations(StandardPaths.PicturesLocation)[0]
}
}
- Component {
+
+ Component
+ {
id: externalPicker
FolderPickerDialog {
id: foldereDialog
@@ -104,13 +109,16 @@
}
}
- PropertyAnimation { id: closeDockAnimation;
+ PropertyAnimation
+ {
+ id: closeDockAnimation;
target: panel;
property: "x";
to: -panel.width;
duration: 300
}
- PropertyAnimation {
+ PropertyAnimation
+ {
id: openDockAnimation;
target: panel;
property: "x";
@@ -118,7 +126,8 @@
duration: 300
}
- MouseArea {
+ MouseArea
+ {
id : mA
anchors.fill: parent
property real downX : 0
@@ -281,7 +290,8 @@
]
}
- Rectangle {
+ Rectangle
+ {
id: panel
height: parent.height
anchors {
@@ -334,11 +344,13 @@
// Drag.active:
}
}
+
Column {
id:leftPanelCol
anchors.fill: panel
// visible: false
- ComboBox {
+ ComboBox
+ {
id:delaySelector
anchors {
left: parent.left
@@ -359,8 +371,13 @@
}
onCurrentIndexChanged: Database.setProp('delay',String(currentIndex))
+
+ Component.onCompleted: {
+ currentIndex = Database.getProp('delay')
+ }
}
- ComboBox {
+ ComboBox
+ {
id: pathSelector
anchors {
left: parent.left
@@ -391,7 +408,8 @@
onCurrentIndexChanged: Database.setProp('path_type',String(currentIndex));
}
- TextField {
+ TextField
+ {
id:selectPath
anchors {
left: parent.left
@@ -407,7 +425,8 @@
Database.setProp('path',text);
}
}
- TextField {
+ TextField
+ {
id:sName
anchors {
left: parent.left
@@ -423,7 +442,8 @@
//Database.setProp('path',text);
}
}
- ComboBox {
+ ComboBox
+ {
id:flashModeSelector
anchors {
left: parent.left
@@ -444,10 +464,16 @@
onClicked: camera.flash.mode = Camera.FlashSlowSyncFrontCurtain}
}
+
onCurrentIndexChanged: Database.setProp('flash_type',String(currentIndex));
+
+ Component.onCompleted: {
+ currentIndex = Database.getProp('flash_type')
+ }
}
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-stopmotion-0.4.0.tar.bz2/qml/pages/SlideshowPage.qml
^
|
@@ -5,11 +5,11 @@
import "../components"
import "../utils/localdb.js" as Database
-//import "../utils/constants.js" as Constants
-import io.thp.pyotherside 1.5
-Page {
+Page
+{
id: slideshowDialog
+
QtObject {
id:slides
property real cDOCK_PANEL_SIZE: 800
@@ -27,12 +27,8 @@
property string slideshowName: ""
property int imageWidth: Math.floor(slideshowDialog.width / 5)
property var slideshow
-
property var playSlideshowPage
- // NOTE: used to translate context menu items.
- property bool translationToggle: false
-
property Item remorse
property bool debug: false
@@ -40,12 +36,11 @@
// python / export specific vars
property string tempMediaFolderPath: StandardPaths.home + '/.cache/de.poetaster/stopmotion'
- property string tempMediaType : "mkv"
- property string ffmpeg_staticPath : "/usr/bin/ffmpeg"
property string outputPathPy
property string homeDirectory: StandardPaths.home
+
//property string inputPathPy : decodeURIComponent( "/" + idMediaPlayer.source.toString().replace(/^(file:\/{3})|(qrc:\/{2})|(http:\/{2})/,"") )
- //property string saveMediaFolderPath : StandardPaths.home + '/Videos'
+
property bool finishedLoading: true
property int processedPercent: 0
property int undoNr: 0
@@ -119,10 +114,6 @@
*/
- Banner {
- id: banner
- }
-
/*
ListModel {
id: backgroundMusicModel
@@ -139,6 +130,7 @@
anchors.fill: parent
PullDownMenu {
+
/* MenuItem {
id: menuSettings
text: qsTrId("menu-settings")
@@ -233,7 +225,7 @@
}
Keys.onReturnPressed: {
focus = false
- py.createFilmstripFunction()
+ py.createFilmstripFunction(text,imageListModel,saveFps,fpsMode)
}
width: parent.width - Theme.paddingMedium
}
@@ -377,7 +369,8 @@
}
}
- SilicaGridView {
+ SilicaGridView
+ {
id: imageGrid
property Item expandedItem
@@ -465,7 +458,8 @@
}
}
}
- Rectangle {
+ Rectangle
+ {
id: progressDisplay
visible: (finishedLoading === false)
anchors.right: parent.right
@@ -490,7 +484,9 @@
}
}
*/
- Component {
+ // File pickers
+ Component
+ {
id: multiImagePickerDialog
MultiImagePickerDialog {
onAccepted: {
@@ -507,7 +503,8 @@
}
}
- Component {
+ Component
+ {
id: filesystemImagePickerDialog
MultiFilePickerDialog {
nameFilters: imageFileFilters
@@ -537,26 +534,6 @@
}
}
*/
- /*
- function translateUi() {
- menuSettings.text = qsTrId("menu-settings")
- menuMusic.text = qsTrId("menu-add-music")
- menuFolderPictures.text = qsTrId("quick-folderpicker-title")
- menuFilesystemPictures.text = qsTrId("menu-add-files-filesystem")
- menuPictures.text = qsTrId("menu-add-files")
- menuStartSlideshow.text = qsTrId("menu-start-slideshow")
- slideshowNameField.label = qsTrId("slideshow-name-label")
- slideshowNameField.placeholderText = qsTrId("slideshow-name-placeholder")
-
- // Use Qt.binding to maintain translation binding with item count changes.
- slideshowImagesCollapsingHeader.text = Qt.binding(function() {return qsTrId("slideshow-images") + "(" + imageListModel.count + ")"})
- clearImages.text = qsTrId("menu-clear")
-
- // Use Qt.binding to maintain translation binding with item count changes.
- slideshowBackgroundMusicCollapsingHeader.text = Qt.binding(function() {return qsTrId("slideshow-background-music") + "(" + backgroundMusicModel.count + ")"})
- clearMusic.text = qsTrId("menu-clear")
- }
-*/
function getSlideshowOrder() {
var count = imageListModel.count
@@ -568,852 +545,6 @@
}
- // These are ALL the functions from clipper (Videoworks).
- Python {
- id: py
- Component.onCompleted: {
- addImportPath(Qt.resolvedUrl('../py'));
- importModule('videox', function () {});
-
- // Handlers do something to QML with received infos from Pythonfile (=pyotherside.send)
- setHandler('homePathFolder', function( homeDir ) {
- tempMediaFolderPath = homeDir + "/.cache/de.poetaster/stopmotion/"
- //tempMediaFolderPath = StandardPaths.temporary
- saveMediaFolderPath = homeDir + "/Videos"
- homeDirectory = homeDir
- py.createTmpAndSaveFolder()
- py.deleteAllTMPFunction()
- });
- setHandler('loadTempMedia', function( newFilePath ) {
- idMediaPlayer.source = ""
- idMediaPlayer.source = encodeURI( newFilePath )
- py.getVideoInfo( newFilePath, "false" )
- brandNewFile = false
- });
- setHandler('extractedAudio', function( targetPath ) {
- finishedLoading = true
- banner.notify( qsTr("Audio extracted to") + "\n" + " " + targetPath + " ", Theme.highlightDimmerColor, 10000 )
- });
- setHandler('finishedSavingRenaming', function( newFilePath, newFileName, newFileType ) {
- idMediaPlayer.source = ""
- idMediaPlayer.source = newFilePath
- origMediaFilePath = newFilePath
- origMediaFileName = newFileName + "." + newFileType
- origMediaFolderPath = origMediaFilePath.replace(origMediaFileName, "")
- var origMediaFileNameArray = origMediaFileName.split(".")
- origMediaName = (origMediaFileNameArray.slice(0, origMediaFileNameArray.length-1)).join(".")
- origMediaType = origMediaFileNameArray[origMediaFileNameArray.length - 1]
- py.getVideoInfo( inputPathPy, "true" )
- undoNr = 0
- noFile = false
- idTimerDelaySetCropmarkers.start()
- });
- setHandler('deletedFile', function() {
- origMediaFilePath = ""
- origMediaFileName = ""
- origMediaFolderPath = ""
- origMediaName = ""
- origMediaType = "none"
- origVideoWidth = 0
- origVideoHeight = 0
- origCodecVideo = "none"
- origCodecAudio = "none"
- origFrameRate = 0
- origFileSize = 0
- idMediaPlayer.source = ""
- undoNr = 0
- noFile = true
- });
- setHandler('deletedLastTmp', function() {
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-stopmotion-0.4.0.tar.bz2/qml/py/videox.py
^
|
@@ -609,6 +609,7 @@
+
# COLLAGE FUNCTIONS
# ########################################################################################################################
@@ -895,6 +896,7 @@
+
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-stopmotion-0.4.0.tar.bz2/src/ImageProvider.h
^
|
@@ -81,6 +81,8 @@
if (!ir.canRead())
return img;
+ ir.setAutoTransform(true);
+
originalSize = ir.size();
format = ir.format();
@@ -89,16 +91,18 @@
img = ir.read();
- qDebug() << Q_FUNC_INFO << "image format:" << format;
+ //qDebug() << Q_FUNC_INFO << "image format:" << format;
// @attah's concise solution to r<->b channel swap issues
+ // isn't strictly speaking needed with the scenegraph addition, but you know.
img = img.convertToFormat(QImage::Format_RGB888);
//img.convertToFormat()
- NemoImageMetadata meta(filename, format);
+ //NemoImageMetadata meta(filename, format);
+
+ //if (meta.orientation() != NemoImageMetadata::TopLeft)
+ // img = rotate(img, meta.orientation());
- if (meta.orientation() != NemoImageMetadata::TopLeft)
- img = rotate(img, meta.orientation());
if (requestedSize.isValid())
return img.scaled(requestedSize.width(), requestedSize.height(), Qt::KeepAspectRatio);
else
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-stopmotion-0.4.0.tar.bz2/translations/harbour-stopmotion-de.ts
^
|
@@ -68,116 +68,115 @@
</message>
</context>
<context>
- <name>ShootScreen</name>
+ <name>PythonHandler</name>
<message>
- <source>Slideshow</source>
+ <source>Audio extracted to</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Flash mode</source>
+ <source>This seems to be a large file.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Off</source>
+ <source>For speed convenience you may scale it down first.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>On</source>
+ <source>ERROR!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Auto</source>
+ <source>Exported to</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Red eye reduction</source>
+ <source>Extracted to</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Slow sync front</source>
+ <source>Use 'delete' in file menu.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Select Camera</source>
+ <source>WARNING!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>One</source>
+ <source>Large output resolution detected:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Two</source>
+ <source>Please reduce to max 1920x1920 pixels.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>SlideshowPage</name>
- <message>
- <source>About</source>
- <translation type="unfinished"></translation>
- </message>
+ <name>ShootScreen</name>
<message>
- <source>Add files</source>
+ <source>Slideshow</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Start slideshow</source>
+ <source>Flash mode</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Slideshow filename</source>
+ <source>Off</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>File to save</source>
+ <source>On</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Remove image</source>
+ <source>Auto</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Audio extracted to</source>
+ <source>Red eye reduction</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>This seems to be a large file.</source>
+ <source>Slow sync front</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>For speed convenience you may scale it down first.</source>
+ <source>Select Camera</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>ERROR!</source>
+ <source>One</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Exported to</source>
+ <source>Two</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>SlideshowPage</name>
<message>
- <source>Extracted to</source>
+ <source>About</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Use 'delete' in file menu.</source>
+ <source>Add files</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>WARNING!</source>
+ <source>Start slideshow</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Large output resolution detected:</source>
+ <source>Slideshow filename</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Please reduce to max 1920x1920 pixels.</source>
+ <source>File to save</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Pthon Error</source>
+ <source>Remove image</source>
<translation type="unfinished"></translation>
</message>
<message>
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-stopmotion-0.4.0.tar.bz2/translations/harbour-stopmotion.ts
^
|
@@ -68,116 +68,115 @@
</message>
</context>
<context>
- <name>ShootScreen</name>
+ <name>PythonHandler</name>
<message>
- <source>Slideshow</source>
+ <source>Audio extracted to</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Flash mode</source>
+ <source>This seems to be a large file.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Off</source>
+ <source>For speed convenience you may scale it down first.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>On</source>
+ <source>ERROR!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Auto</source>
+ <source>Exported to</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Red eye reduction</source>
+ <source>Extracted to</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Slow sync front</source>
+ <source>Use 'delete' in file menu.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Select Camera</source>
+ <source>WARNING!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>One</source>
+ <source>Large output resolution detected:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Two</source>
+ <source>Please reduce to max 1920x1920 pixels.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>SlideshowPage</name>
- <message>
- <source>About</source>
- <translation type="unfinished"></translation>
- </message>
+ <name>ShootScreen</name>
<message>
- <source>Add files</source>
+ <source>Slideshow</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Start slideshow</source>
+ <source>Flash mode</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Slideshow filename</source>
+ <source>Off</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>File to save</source>
+ <source>On</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Remove image</source>
+ <source>Auto</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Audio extracted to</source>
+ <source>Red eye reduction</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>This seems to be a large file.</source>
+ <source>Slow sync front</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>For speed convenience you may scale it down first.</source>
+ <source>Select Camera</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>ERROR!</source>
+ <source>One</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Exported to</source>
+ <source>Two</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>SlideshowPage</name>
<message>
- <source>Extracted to</source>
+ <source>About</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Use 'delete' in file menu.</source>
+ <source>Add files</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>WARNING!</source>
+ <source>Start slideshow</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Large output resolution detected:</source>
+ <source>Slideshow filename</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Please reduce to max 1920x1920 pixels.</source>
+ <source>File to save</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Pthon Error</source>
+ <source>Remove image</source>
<translation type="unfinished"></translation>
</message>
<message>
|