Merge remote-tracking branch 'origin/release' into stable

Change-Id: Ieb521fb1e9f297a167eea19c771cb5915c01df97
This commit is contained in:
Jani Heikkinen
2014-04-23 12:45:21 +03:00
62 changed files with 810 additions and 1121 deletions

View File

@@ -1,6 +1,6 @@
/**************************************************************************** /****************************************************************************
** **
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal ** Contact: http://www.qt-project.org/legal
** **
** This file is part of the documentation of the Qt Toolkit. ** This file is part of the documentation of the Qt Toolkit.
@@ -29,8 +29,8 @@
\example audiodevices \example audiodevices
\title Audio Devices Example \title Audio Devices Example
\ingroup multimedia_examples \ingroup multimedia_examples
\brief The Audio Devices example shows the application of the audio devices APIs \brief The Audio Devices example shows the application of the audio devices
APIs.
This example shows how to create a simple application to list and test This example shows how to create a simple application to list and test
the configuration for the various audio devices available on the device the configuration for the various audio devices available on the device
@@ -38,6 +38,5 @@
\image audiodevices.png \image audiodevices.png
\include examples-run.qdocinc
*/ */

View File

@@ -1,6 +1,6 @@
/**************************************************************************** /****************************************************************************
** **
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal ** Contact: http://www.qt-project.org/legal
** **
** This file is part of the documentation of the Qt Toolkit. ** This file is part of the documentation of the Qt Toolkit.
@@ -30,10 +30,10 @@
\title AudioEngine Example \title AudioEngine Example
\ingroup multimedia_examples \ingroup multimedia_examples
\brief The Audio Engine example demonstrates 3D sound control using \brief The Audio Engine example demonstrates 3D sound control using
the QtAudioEngine API. the Qt Audio Engine API.
\image audioengine.png The Audio Engine example demonstrates 3D sound control using the
\l{Qt Audio Engine QML Types}{Qt Audio Engine} API.
\include examples-run.qdocinc
*/ */

View File

@@ -1,6 +1,6 @@
/**************************************************************************** /****************************************************************************
** **
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal ** Contact: http://www.qt-project.org/legal
** **
** This file is part of the documentation of the Qt Toolkit. ** This file is part of the documentation of the Qt Toolkit.
@@ -37,7 +37,8 @@
Qt provides the QAudioInput class to enable audio functionality within Qt provides the QAudioInput class to enable audio functionality within
a standard application user interface. a standard application user interface.
This example calculates the maximum linear value of the input audio from the microphone and displays the output. This example calculates the maximum linear value of the input audio from the
microphone and displays the output.
\include examples-run.qdocinc
*/ */

View File

@@ -1,6 +1,6 @@
/**************************************************************************** /****************************************************************************
** **
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal ** Contact: http://www.qt-project.org/legal
** **
** This file is part of the documentation of the Qt Toolkit. ** This file is part of the documentation of the Qt Toolkit.
@@ -31,13 +31,14 @@
\ingroup multimedia_examples \ingroup multimedia_examples
\brief The Audio Output Example show the use of the QAudioOutput API. \brief The Audio Output Example show the use of the QAudioOutput API.
The example demonstrates the basic use cases of the QAudioOutput class. The example demonstrates the basic use cases of the QAudioOutput class from
\l{Qt Multimedia}.
\image audiooutput-example.png \image audiooutput-example.png
This example provides a tone generator to supply continuous audio playback. This example provides a tone generator to supply continuous audio playback.
The first button allows pause and resume of the playback, and the second The first button allows pause and resume of the playback, and the second
button allows toggling between push and pull modes of operation. button allows toggling between push and pull modes of operation.
\include examples-run.qdocinc
*/ */

View File

@@ -1,6 +1,6 @@
/**************************************************************************** /****************************************************************************
** **
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal ** Contact: http://www.qt-project.org/legal
** **
** This file is part of the documentation of the Qt Toolkit. ** This file is part of the documentation of the Qt Toolkit.
@@ -34,6 +34,12 @@
It demonstrates the discovery of the supported devices and codecs and the use It demonstrates the discovery of the supported devices and codecs and the use
of recording functions in the QAudioRecorder class. of recording functions in the QAudioRecorder class.
\image audiorecorder.png
\include examples-run.qdocinc
\section1 Displaying the Window and Audio Settings
We display a window for the user to select the appropriate audio input, We display a window for the user to select the appropriate audio input,
codec, container, and sample rate. Allow a setting of either quality or codec, container, and sample rate. Allow a setting of either quality or
bitrate. Finally, the output file can be selected and recording can be bitrate. Finally, the output file can be selected and recording can be
@@ -49,7 +55,7 @@
\l{QMultimedia::NormalQuality}, while the bitrates are hardcoded \l{QMultimedia::NormalQuality}, while the bitrates are hardcoded
into the list. into the list.
\image audiorecorder.png \section1 Recording Audio
To record audio we simply create a QAudioRecorder object. To record audio we simply create a QAudioRecorder object.
@@ -96,5 +102,3 @@
ui->statusbar->showMessage(tr("Recorded %1 sec").arg(duration / 1000)); ui->statusbar->showMessage(tr("Recorded %1 sec").arg(duration / 1000));
\endcode \endcode
*/ */

View File

@@ -1,6 +1,6 @@
/**************************************************************************** /****************************************************************************
** **
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal ** Contact: http://www.qt-project.org/legal
** **
** This file is part of the documentation of the Qt Toolkit. ** This file is part of the documentation of the Qt Toolkit.
@@ -34,35 +34,22 @@ or video.
\image qml-camera.png \image qml-camera.png
This example demonstrates how to use the Qt Multimedia QML API to access This example demonstrates how to use the
camera functions. It shows how to change settings and to capture images. \l{Qt Multimedia QML Types}{Qt Multimedia QML API} to access camera functions.
It shows how to change settings and to capture images.
\include examples-run.qdocinc
\section1 Application Structure
Most of the QML code supports the user interface for this application with the Most of the QML code supports the user interface for this application with the
camera types being mostly found in \e {declarative-camera.qml} and camera types being mostly found in \e {declarative-camera.qml} and
\e {CaptureControls.qml}. \e {CaptureControls.qml}.
In \e {declarative-camera.qml} the \l Camera is initialized with an id CaptureControls, which is implemented in \e {CaptureControls.qml},
of \e {camera}, a photo preview is setup, states are implemented for image
preview or capture and \l CaptureControls is initialized. The initial
\e state is \e PhotoCapture. \l CameraCapture includes a handler, \e onImageCaptured,
for the \l {imageCaptured} signal. The handler sets up the application to process
the preview including a change in the user interface state. The \l PhotoPreview
becomes visible with any key press being picked up by the handler
in PhotoPreview and returning the state to \e PhotoCapture.
\e CaptureControls, which is implemented in \e {CaptureControls.qml},
generates a column on the right hand side of the screen which includes control generates a column on the right hand side of the screen which includes control
buttons for \e focus (not initially visible), \e {capture}, \e {flash modes}, buttons for focus (not initially visible), capture, flash modes,
\e {white balance}, \e {exposure compensation}, and if a preview is white balance, exposure compensation, and if a preview is
available a \e {preview} button. The last button exits from the application. available, a preview button. The last button exits from the application.
When the Capture button is pressed the \e onClicked handler calls
\l {Camera::captureImage()}{captureImage()}
*/ */

View File

@@ -1,6 +1,6 @@
/**************************************************************************** /****************************************************************************
** **
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal ** Contact: http://www.qt-project.org/legal
** **
** This file is part of the documentation of the Qt Toolkit. ** This file is part of the documentation of the Qt Toolkit.
@@ -31,8 +31,8 @@
\brief Demonstrates the radio functionality \brief Demonstrates the radio functionality
\ingroup multimedia_examples \ingroup multimedia_examples
This examples uses the Qt Multimedia Radio QML type to list the available This examples uses the \l{Qt Multimedia} \l Radio QML type to list the
channels on the FM frequency. available channels on the FM frequency.
\include examples-run.qdocinc
*/ */

View File

@@ -1,6 +1,6 @@
/**************************************************************************** /****************************************************************************
** **
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal ** Contact: http://www.qt-project.org/legal
** **
** This file is part of the documentation of the Qt Toolkit. ** This file is part of the documentation of the Qt Toolkit.
@@ -59,6 +59,6 @@
(FFT) of a segment of audio data. An open-source library, (FFT) of a segment of audio data. An open-source library,
\l{http://ldesoras.free.fr/prod.html}{FFTReal}, against which the \l{http://ldesoras.free.fr/prod.html}{FFTReal}, against which the
application is dynamically linked, is used to compute the transform. application is dynamically linked, is used to compute the transform.
\include examples-run.qdocinc
*/ */

View File

@@ -1,6 +1,6 @@
/**************************************************************************** /****************************************************************************
** **
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal ** Contact: http://www.qt-project.org/legal
** **
** This file is part of the documentation of the Qt Toolkit. ** This file is part of the documentation of the Qt Toolkit.
@@ -34,8 +34,6 @@
resize; rotate; change aspect ratio) which can be applied to QML \l{VideoOutput} resize; rotate; change aspect ratio) which can be applied to QML \l{VideoOutput}
items. items.
\section1 Overview
This example demonstrates the various manipulations (move; resize; rotate; This example demonstrates the various manipulations (move; resize; rotate;
change aspect ratio) which can be applied to QML \l{VideoOutput} items. change aspect ratio) which can be applied to QML \l{VideoOutput} items.
@@ -50,7 +48,9 @@ which moves across the \l{VideoOutput} item.
\image qmlvideo-overlay.png \image qmlvideo-overlay.png
\section1 Application structure \include examples-run.qdocinc
\section1 Application Structure
The \l{video/qmlvideo/qml/qmlvideo/main.qml} file creates a UI which includes The \l{video/qmlvideo/qml/qmlvideo/main.qml} file creates a UI which includes
the following items: the following items:
@@ -127,7 +127,7 @@ instance, the embedded
\l{video/qmlvideo/qml/qmlvideo/Content.qml}{Content} item creates either a \l{video/qmlvideo/qml/qmlvideo/Content.qml}{Content} item creates either a
\l{MediaPlayer} or a \l{Camera} item. \l{MediaPlayer} or a \l{Camera} item.
\section1 Calculating and displaying QML painting rate \section1 Calculating and Displaying QML Painting Rate
\input multimedia/doc/src/examples/video-qml-paint-rate.qdocinc \input multimedia/doc/src/examples/video-qml-paint-rate.qdocinc
@@ -145,4 +145,3 @@ object to a JavaScript function, which will eventually call frequencyItem.notify
\printuntil SLOT(qmlFramePainted())); \printuntil SLOT(qmlFramePainted()));
*/ */

View File

@@ -1,6 +1,6 @@
/**************************************************************************** /****************************************************************************
** **
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal ** Contact: http://www.qt-project.org/legal
** **
** This file is part of the documentation of the Qt Toolkit. ** This file is part of the documentation of the Qt Toolkit.
@@ -34,9 +34,11 @@
can be used to apply postprocessing effects, expressed in \c GLSL, to video can be used to apply postprocessing effects, expressed in \c GLSL, to video
and camera viewfinder content. and camera viewfinder content.
\include examples-run.qdocinc
\section1 Overview \section1 Overview
This example shows how a \l {ShaderEffectItem} can be used to apply This example shows how a \l {ShaderEffect} can be used to apply
postprocessing effects, expressed in GLSL, to QML \l {VideoOutput} items. postprocessing effects, expressed in GLSL, to QML \l {VideoOutput} items.
It also shows how native code can be combined with QML to implement more It also shows how native code can be combined with QML to implement more
@@ -73,7 +75,7 @@ for Effect*.qml files in the list above to see the full range.
\section1 Application structure \section1 Application structure
Shader effects can be applied to video or viewfinder content using Shader effects can be applied to video or viewfinder content using
\l{ShaderEffectItem}, as shown in the following example, which applies \l{ShaderEffect}, as shown in the following example, which applies
a wiggly effect to the content: a wiggly effect to the content:
\code \code
@@ -171,7 +173,7 @@ is based on the \l{ShaderEffect}:
\skipto import \skipto import
\printuntil /^\}/ \printuntil /^\}/
The interface of the \l Effect allows for derived effects to specify the The interface of Effect allows for derived effects to specify the
number of parameters which they support (and therefore the number of sliders number of parameters which they support (and therefore the number of sliders
which should be displayed), and whether a vertical dividing line should be drawn which should be displayed), and whether a vertical dividing line should be drawn
between transformed and untransformed image regions. As an example, here is the between transformed and untransformed image regions. As an example, here is the
@@ -219,4 +221,3 @@ object to a JavaScript function, which will eventually call frequencyItem.notify
\printuntil SLOT(qmlFramePainted())); \printuntil SLOT(qmlFramePainted()));
*/ */

View File

@@ -0,0 +1,30 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UIInterfaceOrientation</key>
<string>UIInterfaceOrientationLandscapeRight</string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleExecutable</key>
<string>qmlvideofx</string>
<key>CFBundleIdentifier</key>
<string>com.digia.${PRODUCT_NAME:rfc1034identifier}</string>
<key>CFBundleDisplayName</key>
<string>${PRODUCT_NAME}</string>
<key>CFBundleName</key>
<string>${PRODUCT_NAME}</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleVersion</key>
<string>1.0</string>
</dict>
</plist>

View File

@@ -0,0 +1,48 @@
<?xml version="1.0"?>
<manifest package="org.qtproject.example.qmlvideofx" xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="1.0" android:versionCode="1" android:installLocation="auto">
<application android:hardwareAccelerated="true" android:name="org.qtproject.qt5.android.bindings.QtApplication" android:label="@string/app_name">
<activity android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|locale|fontScale|keyboard|keyboardHidden|navigation" android:name="org.qtproject.qt5.android.bindings.QtActivity" android:label="@string/app_name" android:screenOrientation="landscape" android:launchMode="singleTop">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
<meta-data android:name="android.app.lib_name" android:value="-- %%INSERT_APP_LIB_NAME%% --"/>
<meta-data android:name="android.app.qt_sources_resource_id" android:resource="@array/qt_sources"/>
<meta-data android:name="android.app.repository" android:value="default"/>
<meta-data android:name="android.app.qt_libs_resource_id" android:resource="@array/qt_libs"/>
<meta-data android:name="android.app.bundled_libs_resource_id" android:resource="@array/bundled_libs"/>
<!-- Deploy Qt libs as part of package -->
<meta-data android:name="android.app.bundle_local_qt_libs" android:value="-- %%BUNDLE_LOCAL_QT_LIBS%% --"/>
<meta-data android:name="android.app.bundled_in_lib_resource_id" android:resource="@array/bundled_in_lib"/>
<meta-data android:name="android.app.bundled_in_assets_resource_id" android:resource="@array/bundled_in_assets"/>
<!-- Run with local libs -->
<meta-data android:name="android.app.use_local_qt_libs" android:value="-- %%USE_LOCAL_QT_LIBS%% --"/>
<meta-data android:name="android.app.libs_prefix" android:value="/data/local/tmp/qt/"/>
<meta-data android:name="android.app.load_local_libs" android:value="-- %%INSERT_LOCAL_LIBS%% --"/>
<meta-data android:name="android.app.load_local_jars" android:value="-- %%INSERT_LOCAL_JARS%% --"/>
<meta-data android:name="android.app.static_init_classes" android:value="-- %%INSERT_INIT_CLASSES%% --"/>
<!-- Messages maps -->
<meta-data android:value="@string/ministro_not_found_msg" android:name="android.app.ministro_not_found_msg"/>
<meta-data android:value="@string/ministro_needed_msg" android:name="android.app.ministro_needed_msg"/>
<meta-data android:value="@string/fatal_error_msg" android:name="android.app.fatal_error_msg"/>
<!-- Messages maps -->
<!-- Splash screen -->
<!--
<meta-data android:name="android.app.splash_screen_drawable" android:resource="@drawable/logo"/>
-->
<!-- Splash screen -->
</activity>
</application>
<uses-sdk android:minSdkVersion="11" android:targetSdkVersion="14"/>
<supports-screens android:largeScreens="true" android:normalScreens="true" android:anyDensity="true" android:smallScreens="true"/>
<!-- The following comment will be replaced upon deployment with default permissions based on the dependencies of the application.
Remove the comment if you do not require these default permissions. -->
<!-- %%INSERT_PERMISSIONS -->
<!-- The following comment will be replaced upon deployment with default features based on the dependencies of the application.
Remove the comment if you do not require these default features. -->
<!-- %%INSERT_FEATURES -->
</manifest>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 990 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

View File

@@ -1,5 +0,0 @@
border.left: 10
border.top: 12
border.bottom: 12
border.right: 10
source: titlebar.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 662 B

View File

@@ -1,6 +1,6 @@
/**************************************************************************** /****************************************************************************
** **
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal ** Contact: http://www.qt-project.org/legal
** **
** This file is part of the Qt Mobility Components. ** This file is part of the Qt Mobility Components.
@@ -48,12 +48,6 @@
#include "filereader.h" #include "filereader.h"
#include "trace.h" #include "trace.h"
#ifdef SMALL_SCREEN_LAYOUT
static const QLatin1String MainQmlFile("main-smallscreen.qml");
#else
static const QLatin1String MainQmlFile("main-largescreen.qml");
#endif
#ifdef PERFORMANCEMONITOR_SUPPORT #ifdef PERFORMANCEMONITOR_SUPPORT
#include "performancemonitordeclarative.h" #include "performancemonitordeclarative.h"
#endif #endif
@@ -99,7 +93,7 @@ int main(int argc, char *argv[])
QQuickView viewer; QQuickView viewer;
viewer.setSource(QLatin1String("qrc:///qml/qmlvideofx/") + MainQmlFile); viewer.setSource(QUrl(QLatin1String("qrc:///qml/qmlvideofx/Main.qml")));
QQuickItem *rootObject = viewer.rootObject(); QQuickItem *rootObject = viewer.rootObject();
rootObject->setProperty("fileName", fileName); rootObject->setProperty("fileName", fileName);
viewer.rootObject()->setProperty("volume", volume); viewer.rootObject()->setProperty("volume", volume);
@@ -128,13 +122,9 @@ int main(int argc, char *argv[])
viewer.setTitle("qmlvideofx"); viewer.setTitle("qmlvideofx");
viewer.setFlags(Qt::Window | Qt::WindowSystemMenuHint | Qt::WindowTitleHint | viewer.setFlags(Qt::Window | Qt::WindowSystemMenuHint | Qt::WindowTitleHint |
Qt::WindowMinMaxButtonsHint | Qt::WindowCloseButtonHint); Qt::WindowMinMaxButtonsHint | Qt::WindowCloseButtonHint);
viewer.setMinimumSize(QSize(600, 400)); viewer.setMinimumSize(QSize(640, 360));
#ifdef SMALL_SCREEN_PHYSICAL
viewer.showFullScreen();
#else
viewer.show(); viewer.show();
#endif
// Delay invocation of init until the event loop has started, to work around // Delay invocation of init until the event loop has started, to work around
// a GL context issue on Harmattan: without this, we get the following error // a GL context issue on Harmattan: without this, we get the following error

View File

@@ -43,29 +43,33 @@ import QtQuick 2.0
Rectangle { Rectangle {
id: root id: root
color: textColor color: "transparent"
radius: 0.25 * height height: itemHeight
width: itemWidth
property string text property string text
property color bgColor: "white" property color bgColor: "transparent"
property color bgColorSelected: "red" property color bgColorSelected: "#14aaff"
property color textColor: "black" property color textColor: "white"
property alias enabled: mouseArea.enabled property alias enabled: mouseArea.enabled
property bool active: true
property alias horizontalAlign: text.horizontalAlignment
signal clicked signal clicked
Rectangle { Rectangle {
anchors { fill: parent; margins: 1 } anchors { fill: parent; margins: 1 }
color: mouseArea.pressed ? bgColorSelected : bgColor color: mouseArea.pressed ? bgColorSelected : bgColor
radius: 0.25 * height radius: 0.1 * height
Text { Text {
id: text id: text
anchors.centerIn: parent clip: true
text: root.text text: root.text
font.pixelSize: 0.5 * parent.height anchors { fill: parent; margins: scaledMargin }
font.pixelSize: fontSize
color: mouseArea.pressed ? bgColor : textColor color: mouseArea.pressed ? bgColor : textColor
horizontalAlignment: Text.AlignHCenter horizontalAlignment: Text.AlignLeft
verticalAlignment: Text.AlignVCenter verticalAlignment: Text.AlignVCenter
} }
@@ -75,6 +79,7 @@ Rectangle {
onClicked: { onClicked: {
root.clicked() root.clicked()
} }
enabled: active
} }
} }
} }

View File

@@ -39,11 +39,10 @@
** **
****************************************************************************/ ****************************************************************************/
import QtQuick 2.0 import QtQuick 2.1
Rectangle { Rectangle {
id: root id: root
color: "black"
property alias effect: effectLoader.item property alias effect: effectLoader.item
property alias gripSize: divider.gripSize property alias gripSize: divider.gripSize
property string effectSource property string effectSource

View File

@@ -39,7 +39,7 @@
** **
****************************************************************************/ ****************************************************************************/
import QtQuick 2.0 import QtQuick 2.1
Image { Image {
fillMode: Image.PreserveAspectFit fillMode: Image.PreserveAspectFit

View File

@@ -1,6 +1,6 @@
/**************************************************************************** /****************************************************************************
** **
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal ** Contact: http://www.qt-project.org/legal
** **
** This file is part of the Qt Mobility Components. ** This file is part of the Qt Mobility Components.
@@ -39,13 +39,14 @@
** **
****************************************************************************/ ****************************************************************************/
import QtQuick 2.0 import QtQuick 2.1
import QtMultimedia 5.0 import QtMultimedia 5.0
VideoOutput { VideoOutput {
source: mediaPlayer source: mediaPlayer
property alias mediaSource: mediaPlayer.source property alias mediaSource: mediaPlayer.source
property alias volume: mediaPlayer.volume property alias volume: mediaPlayer.volume
property bool isRunning: true
MediaPlayer { MediaPlayer {
id: mediaPlayer id: mediaPlayer
@@ -55,5 +56,21 @@ VideoOutput {
} }
function play() { mediaPlayer.play() } function play() { mediaPlayer.play() }
function pause() { mediaPlayer.pause() }
function stop() { mediaPlayer.stop() } function stop() { mediaPlayer.stop() }
function toggleplay() {
if (isRunning) {
pause()
isRunning = false
} else {
play()
isRunning = true
}
}
MouseArea {
anchors.fill: parent
onClicked: toggleplay()
}
} }

View File

@@ -1,6 +1,6 @@
/**************************************************************************** /****************************************************************************
** **
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal ** Contact: http://www.qt-project.org/legal
** **
** This file is part of the Qt Mobility Components. ** This file is part of the Qt Mobility Components.
@@ -39,39 +39,56 @@
** **
****************************************************************************/ ****************************************************************************/
// Based on http://rastergrid.com/blog/downloads/frei-chen-edge-detector/ import QtQuick 2.0
#version 130 Rectangle {
uniform sampler2D source; id: root
uniform float dividerValue; color: "transparent"
uniform float weight; radius: 5
mat3 G[2] = mat3[]( property alias value: grip.value
mat3( 1.0, 2.0, 1.0, 0.0, 0.0, 0.0, -1.0, -2.0, -1.0 ), property color gripColor: "transparent"
mat3( 1.0, 0.0, -1.0, 2.0, 0.0, -2.0, 1.0, 0.0, -1.0 ) property real gripSize: 20
); property real gripTolerance: 3.0
uniform lowp float qt_Opacity; property real increment: 0.1
in vec2 qt_TexCoord0; property bool enabled: true
out vec4 FragmentColor; property string imageSource: "qrc:/images/Triangle_Top.png"
void main() {
vec2 uv = qt_TexCoord0.xy; Rectangle {
vec4 c = vec4(0.0); id: grip
if (uv.x < dividerValue) { property real value: 0.5
mat3 intensity; x: (value * parent.width) - width/2
float conv[2]; anchors.verticalCenter: parent.verticalCenter
vec3 sample; width: root.gripTolerance * root.gripSize
for (int i=0; i<3; ++i) { height: width
for (int j=0; j<3; ++j) { radius: width/2
sample = texelFetch(source, ivec2(gl_FragCoord) + ivec2(i-1, j-1), 0).rgb; color: "transparent"
intensity[i][j] = length(sample) * weight;
Image {
id: sliderhandleimage
source: imageSource
anchors.centerIn: parent
}
MouseArea {
id: mouseArea
enabled: root.enabled
anchors.fill: parent
drag {
target: grip
axis: Drag.XAxis
minimumX: -parent.width/2
maximumX: root.width - parent.width/2
}
onPositionChanged: {
if (drag.active)
updatePosition()
}
onReleased: {
updatePosition()
}
function updatePosition() {
value = (grip.x + grip.width/2) / grip.parent.width
} }
} }
for (int i=0; i<2; ++i) {
float dp3 = dot(G[i][0], intensity[0]) + dot(G[i][1], intensity[1]) + dot(G[i][2], intensity[2]);
conv[i] = dp3 * dp3;
}
c = vec4(0.5 * sqrt(conv[0]*conv[0] + conv[1]*conv[1]));
} else {
c = texture2D(source, qt_TexCoord0);
} }
FragmentColor = qt_Opacity * c;
} }

View File

@@ -1,6 +1,6 @@
/**************************************************************************** /****************************************************************************
** **
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal ** Contact: http://www.qt-project.org/legal
** **
** This file is part of the Qt Mobility Components. ** This file is part of the Qt Mobility Components.
@@ -39,7 +39,7 @@
** **
****************************************************************************/ ****************************************************************************/
import QtQuick 2.0 import QtQuick 2.1
Rectangle { Rectangle {
id: root id: root
@@ -53,21 +53,34 @@ Rectangle {
id: line id: line
anchors { top: parent.top; bottom: parent.bottom } anchors { top: parent.top; bottom: parent.bottom }
x: parent.value * parent.width - (width / 2) x: parent.value * parent.width - (width / 2)
width: 2 width: 4
color: "red" color: "#14aaff"
} }
Slider { // topgrip
Curtain {
id: slider id: slider
increment: 0.0 increment: 0.0
lineColor: "transparent"
fillColor: "transparent"
gripColor: "red"
anchors { anchors {
top: parent.top top: parent.top
topMargin: gripSize / 2 topMargin: (gripSize / 2) + 5
left: parent.left left: parent.left
right: parent.right right: parent.right
} }
onValueChanged: slider2.value = slider.value
}
// bottomgrip
Curtain {
id: slider2
increment: 0.0
anchors {
bottom: parent.bottom
bottomMargin: (gripSize / 2) + 5
left: parent.left
right: parent.right
}
imageSource: "qrc:/images/Triangle_bottom.png"
onValueChanged: slider.value = slider2.value
} }
} }

View File

@@ -44,7 +44,7 @@ import QtQuick 2.0
Effect { Effect {
parameters: ListModel { parameters: ListModel {
ListElement { ListElement {
name: "grid spacing" name: "Grid Spacing"
value: 0.5 value: 0.5
} }
} }

View File

@@ -44,7 +44,7 @@ import QtQuick 2.0
Effect { Effect {
parameters: ListModel { parameters: ListModel {
ListElement { ListElement {
name: "threshold" name: "Threshold"
value: 0.5 value: 0.5
} }
} }

View File

@@ -49,7 +49,7 @@ Item {
property real dividerValue: 0.5 property real dividerValue: 0.5
property ListModel parameters: ListModel { property ListModel parameters: ListModel {
ListElement { ListElement {
name: "radius" name: "Radius"
value: 0.5 value: 0.5
} }
} }

View File

@@ -44,11 +44,11 @@ import QtQuick 2.0
Effect { Effect {
parameters: ListModel { parameters: ListModel {
ListElement { ListElement {
name: "hue" name: "Hue"
value: 0.5 value: 0.5
} }
ListElement { ListElement {
name: "width" name: "Width"
value: 0.5 value: 0.5
} }
} }

View File

@@ -46,11 +46,11 @@ Effect {
divider: false divider: false
parameters: ListModel { parameters: ListModel {
ListElement { ListElement {
name: "radius" name: "Radius"
value: 0.5 value: 0.5
} }
ListElement { ListElement {
name: "diffraction" name: "Diffraction"
value: 0.5 value: 0.5
} }
} }

View File

@@ -45,7 +45,7 @@ Effect {
divider: false divider: false
parameters: ListModel { parameters: ListModel {
ListElement { ListElement {
name: "extent" name: "Extent"
value: 0.5 value: 0.5
} }
} }

View File

@@ -44,7 +44,7 @@ import QtQuick 2.0
Effect { Effect {
parameters: ListModel { parameters: ListModel {
ListElement { ListElement {
name: "granularity" name: "Granularity"
value: 0.5 value: 0.5
} }
} }

View File

@@ -44,7 +44,7 @@ import QtQuick 2.0
Effect { Effect {
parameters: ListModel { parameters: ListModel {
ListElement { ListElement {
name: "gamma" name: "Gamma"
value: 0.5 value: 0.5
} }
} }

View File

@@ -44,11 +44,11 @@ import QtQuick 2.0
Effect { Effect {
parameters: ListModel { parameters: ListModel {
ListElement { ListElement {
name: "amplitude" name: "Amplitude"
value: 0.5 value: 0.5
} }
ListElement { ListElement {
name: "frequency" name: "Frequency"
value: 0.5 value: 0.5
} }
} }

View File

@@ -1,6 +1,6 @@
/**************************************************************************** /****************************************************************************
** **
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal ** Contact: http://www.qt-project.org/legal
** **
** This file is part of the Qt Mobility Components. ** This file is part of the Qt Mobility Components.
@@ -41,16 +41,27 @@
import QtQuick 2.0 import QtQuick 2.0
Effect { ListModel {
parameters: ListModel { id: sources
ListElement { ListElement { name: "No effect"; source: "EffectPassThrough.qml" }
name: "threshold" ListElement { name: "Billboard"; source: "EffectBillboard.qml" }
value: 0.5 ListElement { name: "Black & white"; source: "EffectBlackAndWhite.qml" }
} ListElement { name: "Blur"; source: "EffectGaussianBlur.qml" }
} ListElement { name: "Edge detection"; source: "EffectSobelEdgeDetection1.qml" }
ListElement { name: "Emboss"; source: "EffectEmboss.qml" }
// Transform slider values, and bind result to shader uniforms ListElement { name: "Glow"; source: "EffectGlow.qml" }
property real weight: parameters.get(0).value ListElement { name: "Isolate"; source: "EffectIsolate.qml" }
//ListElement { name: "Magnify"; source: "EffectMagnify.qml" }
fragmentShaderFilename: "sobeledgedetection2.fsh" ListElement { name: "Page curl"; source: "EffectPageCurl.qml" }
ListElement { name: "Pixelate"; source: "EffectPixelate.qml" }
ListElement { name: "Posterize"; source: "EffectPosterize.qml" }
ListElement { name: "Ripple"; source: "EffectRipple.qml" }
ListElement { name: "Sepia"; source: "EffectSepia.qml" }
ListElement { name: "Sharpen"; source: "EffectSharpen.qml" }
ListElement { name: "Shockwave"; source: "EffectShockwave.qml" }
ListElement { name: "Tilt shift"; source: "EffectTiltShift.qml" }
ListElement { name: "Toon"; source: "EffectToon.qml" }
ListElement { name: "Warhol"; source: "EffectWarhol.qml" }
ListElement { name: "Wobble"; source: "EffectWobble.qml" }
ListElement { name: "Vignette"; source: "EffectVignette.qml" }
} }

View File

@@ -1,154 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the Qt Mobility Components.
**
** $QT_BEGIN_LICENSE:LGPL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Digia. For licensing terms and
** conditions see http://qt.digia.com/licensing. For further information
** use the contact form at http://qt.digia.com/contact-us.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Digia gives you certain additional
** rights. These rights are described in the Digia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3.0 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU General Public License version 3.0 requirements will be
** met: http://www.gnu.org/copyleft/gpl.html.
**
**
** $QT_END_LICENSE$
**
****************************************************************************/
import QtQuick 2.0
Rectangle {
id: root
property int itemHeight: 25
property string effectSource: ""
signal clicked
QtObject {
id: d
property Item selectedItem
}
ListModel {
id: sources
ListElement { name: "No effect"; source: "EffectPassThrough.qml" }
ListElement { name: "Billboard"; source: "EffectBillboard.qml" }
ListElement { name: "Black & white"; source: "EffectBlackAndWhite.qml" }
ListElement { name: "Blur"; source: "EffectGaussianBlur.qml" }
ListElement { name: "Edge detection"; source: "EffectSobelEdgeDetection1.qml" }
//ListElement { name: "Edge detection (Sobel, #2)"; source: "EffectSobelEdgeDetection2.qml" }
ListElement { name: "Emboss"; source: "EffectEmboss.qml" }
ListElement { name: "Glow"; source: "EffectGlow.qml" }
ListElement { name: "Isolate"; source: "EffectIsolate.qml" }
ListElement { name: "Magnify"; source: "EffectMagnify.qml" }
ListElement { name: "Page curl"; source: "EffectPageCurl.qml" }
ListElement { name: "Pixelate"; source: "EffectPixelate.qml" }
ListElement { name: "Posterize"; source: "EffectPosterize.qml" }
ListElement { name: "Ripple"; source: "EffectRipple.qml" }
ListElement { name: "Sepia"; source: "EffectSepia.qml" }
ListElement { name: "Sharpen"; source: "EffectSharpen.qml" }
ListElement { name: "Shockwave"; source: "EffectShockwave.qml" }
ListElement { name: "Tilt shift"; source: "EffectTiltShift.qml" }
ListElement { name: "Toon"; source: "EffectToon.qml" }
ListElement { name: "Warhol"; source: "EffectWarhol.qml" }
ListElement { name: "Wobble"; source: "EffectWobble.qml" }
ListElement { name: "Vignette"; source: "EffectVignette.qml" }
}
Component {
id: sourceDelegate
Item {
id: sourceDelegateItem
width: root.width
height: itemHeight
Button {
id: sourceSelectorItem
anchors.centerIn: parent
width: 0.9 * parent.width
height: 0.8 * itemHeight
text: name
onClicked: {
if (d.selectedItem)
d.selectedItem.state = "baseState"
d.selectedItem = sourceDelegateItem
d.selectedItem.state = "selected"
effectSource = source
root.clicked()
}
}
states: [
State {
name: "selected"
PropertyChanges {
target: sourceSelectorItem
bgColor: "#ff8888"
}
}
]
Component.onCompleted: {
if (name == "No effect") {
state = "selected"
d.selectedItem = sourceDelegateItem
}
}
transitions: [
Transition {
from: "*"
to: "*"
ColorAnimation {
properties: "color"
easing.type: Easing.OutQuart
duration: 500
}
}
]
}
}
Flickable {
anchors.fill: parent
contentHeight: (itemHeight * sources.count) + layout.anchors.topMargin + layout.spacing
clip: true
Column {
id: layout
anchors {
fill: parent
topMargin: 10
}
Repeater {
model: sources
delegate: sourceDelegate
}
}
}
}

View File

@@ -44,7 +44,7 @@ import QtQuick 2.0
Effect { Effect {
parameters: ListModel { parameters: ListModel {
ListElement { ListElement {
name: "sharpness" name: "Sharpness"
value: 0.5 value: 0.5
} }
} }

View File

@@ -45,7 +45,7 @@ Effect {
id: root id: root
parameters: ListModel { parameters: ListModel {
ListElement { ListElement {
name: "amplitude" name: "Amplitude"
value: 0.5 value: 0.5
} }
} }

View File

@@ -44,7 +44,7 @@ import QtQuick 2.0
Effect { Effect {
parameters: ListModel { parameters: ListModel {
ListElement { ListElement {
name: "threshold" name: "Threshold"
value: 0.5 value: 0.5
} }
} }

View File

@@ -44,7 +44,7 @@ import QtQuick 2.0
Effect { Effect {
parameters: ListModel { parameters: ListModel {
ListElement { ListElement {
name: "threshold" name: "Threshold"
value: 0.5 value: 0.5
} }
} }

View File

@@ -44,7 +44,7 @@ import QtQuick 2.0
Effect { Effect {
parameters: ListModel { parameters: ListModel {
ListElement { ListElement {
name: "amplitude" name: "Amplitude"
value: 0.5 value: 0.5
} }
} }

View File

@@ -1,6 +1,6 @@
/**************************************************************************** /****************************************************************************
** **
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal ** Contact: http://www.qt-project.org/legal
** **
** This file is part of the Qt Mobility Components. ** This file is part of the Qt Mobility Components.
@@ -39,12 +39,13 @@
** **
****************************************************************************/ ****************************************************************************/
import QtQuick 2.0 import QtQuick 2.1
import Qt.labs.folderlistmodel 2.0 import Qt.labs.folderlistmodel 2.1
Rectangle { Rectangle {
id: fileBrowser id: fileBrowser
color: "transparent" color: "transparent"
z: 4
property string folder property string folder
property bool shown: loader.sourceComponent property bool shown: loader.sourceComponent
@@ -75,12 +76,12 @@ Rectangle {
Rectangle { Rectangle {
id: root id: root
color: "white" color: "black"
property bool showFocusHighlight: false property bool showFocusHighlight: false
property variant folders: folders1 property variant folders: folders1
property variant view: view1 property variant view: view1
property alias folder: folders1.folder property alias folder: folders1.folder
property color textColor: "black" property color textColor: "white"
FolderListModel { FolderListModel {
id: folders1 id: folders1
@@ -112,7 +113,7 @@ Rectangle {
fileBrowser.selectFile(path) fileBrowser.selectFile(path)
} }
width: root.width width: root.width
height: 52 height: itemHeight
color: "transparent" color: "transparent"
Rectangle { Rectangle {
@@ -126,10 +127,12 @@ Rectangle {
} }
Item { Item {
width: 48; height: 48 width: itemHeight; height: itemHeight
Image { Image {
source: "qrc:/images/folder.png" source: "qrc:/images/icon_Folder.png"
anchors.centerIn: parent fillMode: Image.PreserveAspectFit
anchors.fill: parent
anchors.margins: scaledMargin
visible: folders.isFolder(index) visible: folders.isFolder(index)
} }
} }
@@ -138,8 +141,8 @@ Rectangle {
id: nameText id: nameText
anchors.fill: parent; verticalAlignment: Text.AlignVCenter anchors.fill: parent; verticalAlignment: Text.AlignVCenter
text: fileName text: fileName
anchors.leftMargin: 54 anchors.leftMargin: itemHeight + scaledMargin
font.pixelSize: 32 font.pixelSize: fontSize
color: (wrapper.ListView.isCurrentItem && root.showFocusHighlight) ? palette.highlightedText : textColor color: (wrapper.ListView.isCurrentItem && root.showFocusHighlight) ? palette.highlightedText : textColor
elide: Text.ElideRight elide: Text.ElideRight
} }
@@ -262,56 +265,45 @@ Rectangle {
Keys.onPressed: root.keyPressed(event.key) Keys.onPressed: root.keyPressed(event.key)
} }
Rectangle { Button {
id: cancelButton id: cancelButton
width: 100 width: itemWidth
height: titleBar.height - 7 height: itemHeight
color: "black" color: "#353535"
anchors { bottom: parent.bottom; horizontalCenter: parent.horizontalCenter } anchors { bottom: parent.bottom; right: parent.right; margins: 5 * scaledMargin }
text: "Cancel"
Text { horizontalAlign: Text.AlignHCenter
anchors { fill: parent; margins: 4 } onClicked: fileBrowser.selectFile("")
text: "Cancel"
color: "white"
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
font.pixelSize: 20
}
MouseArea {
anchors.fill: parent
onClicked: fileBrowser.selectFile("")
}
} }
Keys.onPressed: { Keys.onPressed: {
root.keyPressed(event.key); root.keyPressed(event.key);
if (event.key == Qt.Key_Return || event.key == Qt.Key_Select || event.key == Qt.Key_Right) { if (event.key === Qt.Key_Return || event.key === Qt.Key_Select || event.key === Qt.Key_Right) {
view.currentItem.launch(); view.currentItem.launch();
event.accepted = true; event.accepted = true;
} else if (event.key == Qt.Key_Left) { } else if (event.key === Qt.Key_Left) {
up(); up();
} }
} }
BorderImage { // titlebar
source: "qrc:/images/titlebar.sci"; Rectangle {
color: "black"
width: parent.width; width: parent.width;
height: 52 height: itemHeight
y: -7
id: titleBar id: titleBar
Rectangle { Rectangle {
id: upButton id: upButton
width: 48 width: titleBar.height
height: titleBar.height - 7 height: titleBar.height
color: "transparent" color: "transparent"
Image { anchors.centerIn: parent; source: "qrc:/images/up.png" } anchors.left: parent.left
MouseArea { id: upRegion; anchors.centerIn: parent anchors.verticalCenter: parent.verticalCenter
width: 56 anchors.margins: scaledMargin
height: 56
onClicked: up() Image { anchors.fill: parent; anchors.margins: scaledMargin; source: "qrc:/images/icon_BackArrow.png" }
} MouseArea { id: upRegion; anchors.fill: parent; onClicked: up() }
states: [ states: [
State { State {
name: "pressed" name: "pressed"
@@ -321,23 +313,23 @@ Rectangle {
] ]
} }
Rectangle {
color: "gray"
x: 48
width: 1
height: 44
}
Text { Text {
anchors.left: upButton.right; anchors.right: parent.right; height: parent.height anchors.left: upButton.right; anchors.right: parent.right; height: parent.height
anchors.leftMargin: 4; anchors.rightMargin: 4 anchors.leftMargin: 10; anchors.rightMargin: 4
text: folders.folder text: folders.folder
color: "white" color: "white"
elide: Text.ElideLeft; horizontalAlignment: Text.AlignRight; verticalAlignment: Text.AlignVCenter elide: Text.ElideLeft; horizontalAlignment: Text.AlignLeft; verticalAlignment: Text.AlignVCenter
font.pixelSize: 32 font.pixelSize: fontSize
} }
} }
Rectangle {
color: "#353535"
width: parent.width
height: 1
anchors.top: titleBar.bottom
}
function down(path) { function down(path) {
if (folders == folders1) { if (folders == folders1) {
view = view2 view = view2

View File

@@ -1,6 +1,6 @@
/**************************************************************************** /****************************************************************************
** **
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal ** Contact: http://www.qt-project.org/legal
** **
** This file is part of the Qt Mobility Components. ** This file is part of the Qt Mobility Components.
@@ -39,56 +39,95 @@
** **
****************************************************************************/ ****************************************************************************/
import QtQuick 2.0 import QtQuick 2.1
Rectangle { Rectangle {
id: root id: root
color: "white" color: "#151515"
property int buttonHeight: 35 signal openCamera
property int topMargin: 0
signal openImage signal openImage
signal openVideo signal openVideo
signal openCamera
signal close signal close
Rectangle { Column {
anchors { anchors.fill: parent
top: parent.top; spacing: 10
topMargin: root.topMargin Rectangle {
bottom: parent.bottom; height: itemHeight
horizontalCenter: parent.horizontalCenter width: itemHeight
color: "transparent"
anchors.right: parent.right
Image {
id: menu
source: "qrc:///images/icon_Menu.png"
anchors {
right: parent.right
top: parent.top
margins: scaledMargin
}
}
MouseArea {
anchors.fill: parent
onClicked: fileOpen.state == "expanded" ? fileOpen.state = "collapsed" : fileOpen.state = "expanded"
}
} }
width: 0.9 * parent.width Rectangle {
color: "transparent" width: 0.9 * parent.width
height: 1
Column { color: "#353535"
anchors.fill: parent anchors.left: parent.left
spacing: 5 }
Button { Button {
text: "Open image" text: "Start camera"
height: buttonHeight height: itemHeight
width: parent.width width: parent.width
onClicked: root.openImage() onClicked: root.openCamera()
} active: fileOpen.state == "expanded"
Button { }
text: "Open video" Rectangle {
height: buttonHeight width: 0.9 * parent.width
width: parent.width height: 1
onClicked: root.openVideo() color: "#353535"
} anchors.left: parent.left
Button { }
text: "Start camera" Button {
height: buttonHeight text: "Open image"
width: parent.width height: itemHeight
onClicked: root.openCamera() width: parent.width
} onClicked: root.openImage()
Button { active: fileOpen.state == "expanded"
text: "Reset" }
height: buttonHeight Rectangle {
width: parent.width width: 0.9 * parent.width
onClicked: root.close() height: 1
} color: "#353535"
anchors.left: parent.left
}
Button {
text: "Open video"
height: itemHeight
width: parent.width
onClicked: root.openVideo()
active: fileOpen.state == "expanded"
}
Rectangle {
width: 0.9 * parent.width
height: 1
color: "#353535"
anchors.left: parent.left
}
Button {
text: "Reset"
height: itemHeight
width: parent.width
onClicked: root.close()
active: fileOpen.state == "expanded"
}
Rectangle {
width: 0.9 * parent.width
height: 1
color: "#353535"
anchors.left: parent.left
} }
} }
} }

View File

@@ -0,0 +1,287 @@
/****************************************************************************
**
** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the Qt Mobility Components.
**
** $QT_BEGIN_LICENSE:LGPL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Digia. For licensing terms and
** conditions see http://qt.digia.com/licensing. For further information
** use the contact form at http://qt.digia.com/contact-us.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Digia gives you certain additional
** rights. These rights are described in the Digia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3.0 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU General Public License version 3.0 requirements will be
** met: http://www.gnu.org/copyleft/gpl.html.
**
**
** $QT_END_LICENSE$
**
****************************************************************************/
import QtQuick 2.1
import QtQuick.Window 2.1
Rectangle {
id: root
color: "black"
property string fileName
property alias volume: content.volume
property bool perfMonitorsLogging: false
property bool perfMonitorsVisible: false
property int pixDens: Math.ceil(Screen.pixelDensity)
property int itemWidth: 25 * pixDens
property int itemHeight: 10 * pixDens
property int windowWidth: Screen.desktopAvailableWidth
property int windowHeight: Screen.desktopAvailableHeight
property int scaledMargin: 2 * pixDens
property int fontSize: 5 * pixDens
QtObject {
id: d
property real gripSize: 20
}
Content {
id: content
color: "transparent"
anchors {
top: parent.top
left: parent.left
right: parent.right
bottom: parameterPanel.top
margins: scaledMargin
leftMargin: scaledMargin + itemHeight
}
gripSize: d.gripSize
}
ParameterPanel {
id: parameterPanel
anchors {
left: parent.left
right: listview.left
bottom: parent.bottom
margins: scaledMargin
leftMargin: scaledMargin + itemHeight
}
gripSize: d.gripSize
height: root.itemHeight * 2.5
width: root.itemWidth * 3
}
Button {
id: effectName
anchors {
right: parent.right
bottom: perfHolder.top
top: content.bottom
margins: scaledMargin
}
text: "No effect"
width: itemWidth * 2
onClicked: {
effectName.visible = false
listview.visible = true
}
color: "#303030"
}
ListView {
id: listview
width: itemWidth * 2
anchors {
right: parent.right
bottom: perfHolder.top
top: parent.top
margins: scaledMargin
}
visible: false
model: EffectSelectionList {}
delegate: effectDelegate
highlight: Rectangle { color: "#14aaff"; radius: 5 }
highlightFollowsCurrentItem: true
highlightRangeMode: ListView.StrictlyEnforceRange
clip: true
focus: true
Component {
id: effectDelegate
Button {
text: name
width: itemWidth * 2
onClicked: {
content.effectSource = source
listview.visible = false
effectName.text = name
effectName.visible = true
parameterPanel.model = content.effect.parameters
}
}
}
}
Rectangle {
id: perfHolder
color: "transparent"
anchors {
right: parent.right
bottom: parent.bottom
margins: scaledMargin
}
height: root.itemHeight * 1.5
width: root.itemWidth
Loader {
id: performanceLoader
function init() {
console.log("[qmlvideofx] performanceLoader.init logging " + root.perfMonitorsLogging + " visible " + root.perfMonitorsVisible)
var enabled = root.perfMonitorsLogging || root.perfMonitorsVisible
source = enabled ? "../performancemonitor/PerformanceItem.qml" : ""
}
onLoaded: {
item.parent = perfHolder
item.anchors.top = perfHolder.top
item.anchors.bottom = perfHolder.bottom
item.anchors.left = perfHolder.left
item.anchors.right = perfHolder.right
item.logging = root.perfMonitorsLogging
item.displayed = root.perfMonitorsVisible
item.init()
}
}
}
FileOpen {
id: fileOpen
state: "collapsed"
anchors {
left: parent.left
top: parent.top
bottom: parent.bottom
margins: scaledMargin
}
width: itemHeight + scaledMargin
z: 2
opacity: 0.9
states: [
State {
name: "expanded"
PropertyChanges {
target: fileOpen
width: itemWidth * 1.5
opacity: 0.8
}
},
State {
name: "collapsed"
PropertyChanges {
target: fileOpen
width: itemHeight + scaledMargin
opacity: 0.9
}
}
]
transitions: [
Transition {
NumberAnimation { target: fileOpen; property: "width"; duration: 400 }
NumberAnimation { target: fileOpen; property: "opacity"; duration: 400 }
}
]
}
FileBrowser {
id: imageFileBrowser
anchors.fill: root
Component.onCompleted: fileSelected.connect(content.openImage)
}
FileBrowser {
id: videoFileBrowser
anchors.fill: root
Component.onCompleted: fileSelected.connect(content.openVideo)
}
Component.onCompleted: {
fileOpen.openImage.connect(openImage)
fileOpen.openVideo.connect(openVideo)
fileOpen.openCamera.connect(openCamera)
fileOpen.close.connect(close)
}
function init() {
if (Qt.platform.os === "linux" || Qt.platform.os === "windows" || Qt.platform.os === "osx" || Qt.platform.os === "unix") {
if (Screen.desktopAvailableWidth > 1280) {
windowWidth = 1280
}
if (Screen.desktopAvailableHeight > 720) {
windowHeight = 720
}
}
height = windowHeight
width = windowWidth
console.log("[qmlvideofx] root.init")
console.log("Height: ", Screen.desktopAvailableHeight)
console.log("Width: ", Screen.desktopAvailableWidth)
console.log("Pixels per mm: ", Math.ceil(Screen.pixelDensity))
console.log("Orientation: ", Screen.orientation)
imageFileBrowser.folder = imagePath
videoFileBrowser.folder = videoPath
content.init()
performanceLoader.init()
if (fileName != "")
content.openVideo(fileName)
}
function qmlFramePainted() {
if (performanceLoader.item)
performanceLoader.item.qmlFramePainted()
}
function openImage() {
imageFileBrowser.show()
}
function openVideo() {
videoFileBrowser.show()
}
function openCamera() {
content.openCamera()
}
function close() {
content.init()
}
}

View File

@@ -47,17 +47,12 @@ Rectangle {
height: view.model.count * sliderHeight height: view.model.count * sliderHeight
property color lineColor: "black" property color lineColor: "black"
property real gripSize: 25 property real gripSize: 25
property real spacing: 10 property real spacing: 20
property real sliderHeight: 40 property real sliderHeight: 60
property ListModel model: ListModel { } property ListModel model: ListModel { }
Rectangle { anchors.topMargin: 10
anchors.fill: parent
color: "black"
opacity: 0.5
radius: 10
}
Component { Component {
id: editDelegate id: editDelegate
@@ -77,10 +72,10 @@ Rectangle {
bottom: parent.bottom bottom: parent.bottom
left: parent.left left: parent.left
} }
font.pixelSize: 0.5 * parent.height font.pixelSize: fontSize
horizontalAlignment: Text.AlignRight horizontalAlignment: Text.AlignRight
verticalAlignment: Text.AlignVCenter verticalAlignment: Text.AlignVCenter
width: 150 width: 8 * fontSize
} }
Slider { Slider {

View File

@@ -1,6 +1,6 @@
/**************************************************************************** /****************************************************************************
** **
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal ** Contact: http://www.qt-project.org/legal
** **
** This file is part of the Qt Mobility Components. ** This file is part of the Qt Mobility Components.
@@ -39,91 +39,84 @@
** **
****************************************************************************/ ****************************************************************************/
import QtQuick 2.0 import QtQuick 2.1
Rectangle { Rectangle {
id: root id: root
color: "transparent" color: "transparent"
radius: 5 radius: 5
property alias value: grip.value property alias value: grip.value
property color fillColor: "white" property color fillColor: "#14aaff"
property color lineColor: "black" property real gripSize: 40
property color gripColor: "white"
property real gripSize: 20
property real gripTolerance: 3.0 property real gripTolerance: 3.0
property real increment: 0.1 property real increment: 0.1
property bool enabled: true property bool enabled: true
Rectangle { Rectangle {
anchors { left: parent.left; right: parent.right; verticalCenter: parent.verticalCenter } id: slider
height: 3 anchors {
color: displayedColor(root.lineColor) left: parent.left
right: parent.right
Rectangle { verticalCenter: parent.verticalCenter
anchors { fill: parent; margins: 1 }
color: root.fillColor
} }
} height: 10
color: "transparent"
MouseArea { BorderImage {
anchors.fill: parent id: sliderbarimage
enabled: root.enabled source: "qrc:/images/Slider_bar.png"
onClicked: { anchors { fill: parent; margins: 1 }
if (parent.width) { border.right: 5
var newValue = mouse.x / parent.width border.left: 5
if (Math.abs(newValue - parent.value) > parent.increment) { }
if (newValue > parent.value) Rectangle {
parent.value = Math.min(1.0, parent.value + parent.increment) height: parent.height -2
else anchors.left: parent.left
parent.value = Math.max(0.0, parent.value - parent.increment) anchors.right: grip.horizontalCenter
color: root.fillColor
radius: 3
border.width: 1
border.color: Qt.darker(color, 1.3)
opacity: 0.8
}
Rectangle {
id: grip
property real value: 0.5
x: (value * parent.width) - width/2
anchors.verticalCenter: parent.verticalCenter
width: root.gripTolerance * root.gripSize
height: width
radius: width/2
color: "transparent"
Image {
id: sliderhandleimage
source: "qrc:/images/Slider_handle.png"
anchors.centerIn: parent
}
MouseArea {
id: mouseArea
enabled: root.enabled
anchors.fill: parent
drag {
target: grip
axis: Drag.XAxis
minimumX: -parent.width/2
maximumX: root.width - parent.width/2
}
onPositionChanged: {
if (drag.active)
updatePosition()
}
onReleased: {
updatePosition()
}
function updatePosition() {
value = (grip.x + grip.width/2) / slider.width
} }
} }
} }
}
Rectangle {
id: grip
property real value: 0.5
x: (value * parent.width) - width/2
anchors.verticalCenter: parent.verticalCenter
width: root.gripTolerance * root.gripSize
height: width
radius: width/2
color: "transparent"
MouseArea {
id: mouseArea
enabled: root.enabled
anchors.fill: parent
drag {
target: grip
axis: Drag.XAxis
minimumX: -parent.width/2
maximumX: root.width - parent.width/2
}
onPositionChanged: {
if (drag.active)
updatePosition()
}
onReleased: {
updatePosition()
}
function updatePosition() {
value = (grip.x + grip.width/2) / grip.parent.width
}
}
Rectangle {
anchors.centerIn: parent
width: root.gripSize
height: width
radius: width/2
color: root.gripColor
}
}
function displayedColor(c) {
var tint = Qt.rgba(c.r, c.g, c.b, 0.25)
return enabled ? c : Qt.tint(c, tint)
} }
} }

View File

@@ -1,186 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the Qt Mobility Components.
**
** $QT_BEGIN_LICENSE:LGPL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Digia. For licensing terms and
** conditions see http://qt.digia.com/licensing. For further information
** use the contact form at http://qt.digia.com/contact-us.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Digia gives you certain additional
** rights. These rights are described in the Digia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3.0 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU General Public License version 3.0 requirements will be
** met: http://www.gnu.org/copyleft/gpl.html.
**
**
** $QT_END_LICENSE$
**
****************************************************************************/
import QtQuick 2.0
Rectangle {
id: root
width: 900
height: 600
color: "grey"
property string fileName
property alias volume: content.volume
property bool perfMonitorsLogging: false
property bool perfMonitorsVisible: false
QtObject {
id: d
property real gripSize: 20
}
Rectangle {
id: inner
anchors.fill: parent
color: "grey"
Content {
id: content
anchors {
top: parent.top
bottom: parent.bottom
left: parent.left
right: effectSelectionPanel.left
margins: 5
}
gripSize: d.gripSize
width: 600
height: 600
}
Loader {
id: performanceLoader
function init() {
console.log("[qmlvideofx] performanceLoader.init logging " + root.perfMonitorsLogging + " visible " + root.perfMonitorsVisible)
var enabled = root.perfMonitorsLogging || root.perfMonitorsVisible
source = enabled ? "../performancemonitor/PerformanceItem.qml" : ""
}
onLoaded: {
item.parent = content
item.anchors.top = content.top
item.anchors.left = content.left
item.anchors.right = content.right
item.logging = root.perfMonitorsLogging
item.displayed = root.perfMonitorsVisible
item.init()
}
}
ParameterPanel {
id: parameterPanel
anchors {
left: parent.left
bottom: parent.bottom
right: effectSelectionPanel.left
margins: 20
}
gripSize: d.gripSize
}
EffectSelectionPanel {
id: effectSelectionPanel
anchors {
top: parent.top
bottom: fileOpen.top
right: parent.right
margins: 5
}
width: 300
itemHeight: 40
onEffectSourceChanged: {
content.effectSource = effectSource
parameterPanel.model = content.effect.parameters
}
}
FileOpen {
id: fileOpen
anchors {
right: parent.right
bottom: parent.bottom
margins: 5
}
width: effectSelectionPanel.width
height: 165
buttonHeight: 32
topMargin: 10
}
}
FileBrowser {
id: imageFileBrowser
anchors.fill: root
Component.onCompleted: fileSelected.connect(content.openImage)
}
FileBrowser {
id: videoFileBrowser
anchors.fill: root
Component.onCompleted: fileSelected.connect(content.openVideo)
}
Component.onCompleted: {
fileOpen.openImage.connect(openImage)
fileOpen.openVideo.connect(openVideo)
fileOpen.openCamera.connect(openCamera)
fileOpen.close.connect(close)
}
function init() {
console.log("[qmlvideofx] main.init")
imageFileBrowser.folder = imagePath
videoFileBrowser.folder = videoPath
content.init()
performanceLoader.init()
if (fileName != "")
content.openVideo(fileName)
}
function qmlFramePainted() {
if (performanceLoader.item)
performanceLoader.item.qmlFramePainted()
}
function openImage() {
imageFileBrowser.show()
}
function openVideo() {
videoFileBrowser.show()
}
function openCamera() {
content.openCamera()
}
function close() {
content.openImage("qrc:/images/qt-logo.png")
}
}

View File

@@ -1,408 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the Qt Mobility Components.
**
** $QT_BEGIN_LICENSE:LGPL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Digia. For licensing terms and
** conditions see http://qt.digia.com/licensing. For further information
** use the contact form at http://qt.digia.com/contact-us.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Digia gives you certain additional
** rights. These rights are described in the Digia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3.0 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU General Public License version 3.0 requirements will be
** met: http://www.gnu.org/copyleft/gpl.html.
**
**
** $QT_END_LICENSE$
**
****************************************************************************/
import QtQuick 2.0
Rectangle {
id: root
width: 640
height: 360
color: "grey"
property string fileName
property alias volume: content.volume
property bool perfMonitorsLogging: false
property bool perfMonitorsVisible: false
QtObject {
id: d
property bool dialogShown: (fileOpenContainer.state == "shown" ||
effectSelectionPanel.state == "shown" ||
videoFileBrowser.shown ||
imageFileBrowser.shown)
property real gripSize: 40
}
// Create ScreenSaver element via Loader, so this app will still run if the
// SystemInfo module is not available
Loader {
source: "DisableScreenSaver.qml"
}
Loader {
id: performanceLoader
Connections {
target: d
onDialogShownChanged:
if (performanceLoader.item)
performanceLoader.item.enabled = !d.dialogShown
ignoreUnknownSignals: true
}
function init() {
console.log("[qmlvideofx] performanceLoader.init logging " + root.perfMonitorsLogging + " visible " + root.perfMonitorsVisible)
var enabled = root.perfMonitorsLogging || root.perfMonitorsVisible
source = enabled ? "../performancemonitor/PerformanceItem.qml" : ""
}
onLoaded: {
item.parent = root
item.anchors.top = root.top
item.anchors.left = root.left
item.logging = root.perfMonitorsLogging
item.displayed = root.perfMonitorsVisible
item.init()
}
}
Rectangle {
id: inner
anchors.fill: parent
color: "grey"
Content {
id: content
anchors.fill: parent
gripSize: d.gripSize
onVideoFramePainted: performanceLoader.item.videoFramePainted()
}
ParameterPanel {
id: parameterPanel
anchors {
left: parent.left;
right: parent.right;
margins: 10
}
y: parent.height
gripSize: d.gripSize
states: [
State {
name: "shown"
PropertyChanges {
target: parameterPanel
y: parent.height - (parameterPanel.height + 10)
}
}
]
transitions: [
Transition {
from: "*"
to: "*"
NumberAnimation {
properties: "y"
easing.type: Easing.OutQuart
duration: 500
}
}
]
state: (enabled && !d.dialogShown) ? "shown" : "baseState"
}
EffectSelectionPanel {
id: effectSelectionPanel
anchors {
top: parent.top;
bottom: parameterPanel.top;
margins: 10
}
x: parent.width
width: parent.width - 40
opacity: 0.75
radius: 20
itemHeight: 50
states: [
State {
name: "shown"
PropertyChanges {
target: effectSelectionPanel
x: 20
}
}
]
transitions: [
Transition {
from: "*"
to: "*"
NumberAnimation {
properties: "x"
easing.type: Easing.OutQuart
duration: 500
}
}
]
onEffectSourceChanged: {
content.effectSource = effectSource
if (content.effect.parameters.count) {
parameterPanel.model = content.effect.parameters
parameterPanel.enabled = true
} else {
parameterPanel.enabled = false
}
}
onClicked: state = "baseState"
}
Rectangle {
id: fileOpenContainer
anchors {
top: parent.top
bottom: parameterPanel.top
margins: 10
}
x: -width
width: parent.width - 40
color: "transparent"
Column {
anchors.fill: parent
FileOpen {
id: fileOpen
color: "transparent"
width: parent.width
height: 200
opacity: 0.75
radius: 20
buttonHeight: 40
}
MouseArea {
width: parent.width
height: 250
onClicked: fileOpenContainer.state = "baseState"
}
}
states: [
State {
name: "shown"
PropertyChanges {
target: fileOpenContainer
x: 20
}
}
]
transitions: [
Transition {
from: "*"
to: "*"
NumberAnimation {
properties: "x"
easing.type: Easing.OutQuart
duration: 500
}
}
]
}
Rectangle {
id: splashScreen
anchors {
horizontalCenter: parent.horizontalCenter
verticalCenter: parent.verticalCenter
}
width: 300
height: 200
radius: 0.1 * height
color: "white"
opacity: 0.9
border { color: "black"; width: 2 }
Text {
anchors {
fill: parent
margins: 5
}
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
font.pixelSize: 24
text: "Tap on left side to switch between sources.\n\nTap on right side to switch between effects."
wrapMode: Text.WordWrap
}
MouseArea {
anchors.fill: parent
onClicked: parent.state = "hidden"
}
states: [
State {
name: "hidden"
PropertyChanges {
target: splashScreen
opacity: 0.0
}
}
]
transitions: [
Transition {
from: "*"
to: "*"
NumberAnimation {
properties: "opacity"
easing.type: Easing.OutQuart
duration: 500
}
}
]
}
HintedMouseArea {
id: fileOpenMouseArea
anchors {
left: parent.left;
top: parent.top;
bottom: parameterPanel.top;
topMargin: 75
}
width: 100
onClicked: {
fileOpenMouseArea.hintEnabled = false
effectSelectionPanelMouseArea.hintEnabled = false
splashScreen.state = "hidden"
fileOpenContainer.state = "shown"
}
enabled: !d.dialogShown
}
HintedMouseArea {
id: effectSelectionPanelMouseArea
anchors {
right: parent.right;
top: parent.top;
bottom: parameterPanel.top;
topMargin: 75
}
width: 100
onClicked: {
fileOpenMouseArea.hintEnabled = false
effectSelectionPanelMouseArea.hintEnabled = false
splashScreen.state = "hidden"
effectSelectionPanel.state = "shown"
}
enabled: !d.dialogShown
}
Image {
source: "qrc:/images/close.png"
anchors {
top: parent.top
right: parent.right
margins: 5
}
MouseArea {
anchors.fill: parent
onClicked: Qt.quit()
}
}
}
Component.onCompleted: {
fileOpen.openImage.connect(openImage)
fileOpen.openVideo.connect(openVideo)
fileOpen.openCamera.connect(openCamera)
fileOpen.close.connect(close)
}
FileBrowser {
id: imageFileBrowser
anchors.fill: root
Component.onCompleted: fileSelected.connect(content.openImage)
}
FileBrowser {
id: videoFileBrowser
anchors.fill: root
Component.onCompleted: fileSelected.connect(content.openVideo)
}
// Called from main() once root properties have been set
function init() {
console.log("[qmlvideofx] main.init")
imageFileBrowser.folder = imagePath
videoFileBrowser.folder = videoPath
content.init()
performanceLoader.init()
if (fileName != "") {
fileOpenMouseArea.hintEnabled = false
effectSelectionPanelMouseArea.hintEnabled = false
splashScreen.state = "hidden"
content.openVideo(fileName)
}
}
function qmlFramePainted() {
if (performanceLoader.item)
performanceLoader.item.qmlFramePainted()
}
function openImage() {
fileOpenContainer.state = "baseState"
imageFileBrowser.show()
}
function openVideo() {
fileOpenContainer.state = "baseState"
videoFileBrowser.show()
}
function openCamera() {
fileOpenContainer.state = "baseState"
content.openCamera()
}
function close() {
fileOpenContainer.state = "baseState"
content.openImage("qrc:/images/qt-logo.png")
}
}

View File

@@ -10,10 +10,12 @@ RESOURCES += qmlvideofx.qrc
include($$PWD/../snippets/performancemonitor/performancemonitordeclarative.pri) include($$PWD/../snippets/performancemonitor/performancemonitordeclarative.pri)
maemo6: {
DEFINES += SMALL_SCREEN_LAYOUT
DEFINES += SMALL_SCREEN_PHYSICAL
}
target.path = $$[QT_INSTALL_EXAMPLES]/multimedia/video/qmlvideofx target.path = $$[QT_INSTALL_EXAMPLES]/multimedia/video/qmlvideofx
INSTALLS += target INSTALLS += target
ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android
OTHER_FILES += \
android/AndroidManifest.xml
QMAKE_INFO_PLIST = Info.plist

View File

@@ -1,10 +1,5 @@
<RCC> <RCC>
<qresource prefix="/"> <qresource prefix="/">
<file>images/close.png</file>
<file>images/folder.png</file>
<file>images/titlebar.png</file>
<file>images/titlebar.sci</file>
<file>images/up.png</file>
<file>images/qt-logo.png</file> <file>images/qt-logo.png</file>
<file>qml/qmlvideofx/Button.qml</file> <file>qml/qmlvideofx/Button.qml</file>
<file>qml/qmlvideofx/Content.qml</file> <file>qml/qmlvideofx/Content.qml</file>
@@ -26,12 +21,10 @@
<file>qml/qmlvideofx/EffectPixelate.qml</file> <file>qml/qmlvideofx/EffectPixelate.qml</file>
<file>qml/qmlvideofx/EffectPosterize.qml</file> <file>qml/qmlvideofx/EffectPosterize.qml</file>
<file>qml/qmlvideofx/EffectRipple.qml</file> <file>qml/qmlvideofx/EffectRipple.qml</file>
<file>qml/qmlvideofx/EffectSelectionPanel.qml</file>
<file>qml/qmlvideofx/EffectSepia.qml</file> <file>qml/qmlvideofx/EffectSepia.qml</file>
<file>qml/qmlvideofx/EffectSharpen.qml</file> <file>qml/qmlvideofx/EffectSharpen.qml</file>
<file>qml/qmlvideofx/EffectShockwave.qml</file> <file>qml/qmlvideofx/EffectShockwave.qml</file>
<file>qml/qmlvideofx/EffectSobelEdgeDetection1.qml</file> <file>qml/qmlvideofx/EffectSobelEdgeDetection1.qml</file>
<file>qml/qmlvideofx/EffectSobelEdgeDetection2.qml</file>
<file>qml/qmlvideofx/EffectTiltShift.qml</file> <file>qml/qmlvideofx/EffectTiltShift.qml</file>
<file>qml/qmlvideofx/EffectToon.qml</file> <file>qml/qmlvideofx/EffectToon.qml</file>
<file>qml/qmlvideofx/EffectVignette.qml</file> <file>qml/qmlvideofx/EffectVignette.qml</file>
@@ -40,8 +33,6 @@
<file>qml/qmlvideofx/FileBrowser.qml</file> <file>qml/qmlvideofx/FileBrowser.qml</file>
<file>qml/qmlvideofx/FileOpen.qml</file> <file>qml/qmlvideofx/FileOpen.qml</file>
<file>qml/qmlvideofx/HintedMouseArea.qml</file> <file>qml/qmlvideofx/HintedMouseArea.qml</file>
<file>qml/qmlvideofx/main-largescreen.qml</file>
<file>qml/qmlvideofx/main-smallscreen.qml</file>
<file>qml/qmlvideofx/ParameterPanel.qml</file> <file>qml/qmlvideofx/ParameterPanel.qml</file>
<file>qml/qmlvideofx/Slider.qml</file> <file>qml/qmlvideofx/Slider.qml</file>
<file>shaders/billboard.fsh</file> <file>shaders/billboard.fsh</file>
@@ -61,11 +52,21 @@
<file>shaders/sharpen.fsh</file> <file>shaders/sharpen.fsh</file>
<file>shaders/shockwave.fsh</file> <file>shaders/shockwave.fsh</file>
<file>shaders/sobeledgedetection1.fsh</file> <file>shaders/sobeledgedetection1.fsh</file>
<file>shaders/sobeledgedetection2.fsh</file>
<file>shaders/tiltshift.fsh</file> <file>shaders/tiltshift.fsh</file>
<file>shaders/toon.fsh</file> <file>shaders/toon.fsh</file>
<file>shaders/vignette.fsh</file> <file>shaders/vignette.fsh</file>
<file>shaders/warhol.fsh</file> <file>shaders/warhol.fsh</file>
<file>shaders/wobble.fsh</file> <file>shaders/wobble.fsh</file>
<file>images/Slider_handle.png</file>
<file>images/Slider_bar.png</file>
<file>qml/qmlvideofx/Curtain.qml</file>
<file>images/Triangle_bottom.png</file>
<file>images/Triangle_Top.png</file>
<file>images/Dropdown_arrows.png</file>
<file>images/icon_Folder.png</file>
<file>images/icon_BackArrow.png</file>
<file>qml/qmlvideofx/Main.qml</file>
<file>images/icon_Menu.png</file>
<file>qml/qmlvideofx/EffectSelectionList.qml</file>
</qresource> </qresource>
</RCC> </RCC>

View File

@@ -1,6 +1,6 @@
/**************************************************************************** /****************************************************************************
** **
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal ** Contact: http://www.qt-project.org/legal
** **
** This file is part of the documentation of the Qt Toolkit. ** This file is part of the documentation of the Qt Toolkit.
@@ -35,10 +35,12 @@
\brief The Camera Example shows how to use the API to capture a still image \brief The Camera Example shows how to use the API to capture a still image
or video. or video.
The Camera Example demonstrates how you can use Qt Multimedia to implement The Camera Example demonstrates how you can use \l{Qt Multimedia} to implement
some basic Camera functionality to take still images and record video clips some basic Camera functionality to take still images and record video clips
with audio. with audio.
\include examples-run.qdocinc
A Camera class is created that will act as our Camera. It has a user interface, A Camera class is created that will act as our Camera. It has a user interface,
control functions, setting values and a means of defining the location where control functions, setting values and a means of defining the location where
the image or video clip is to be saved. It will also store the image and video the image or video clip is to be saved. It will also store the image and video
@@ -74,5 +76,3 @@ is started with a call to \l {QMediaRecorder::record()}.
\image camera-example.png \image camera-example.png
*/ */

View File

@@ -1,6 +1,6 @@
/**************************************************************************** /****************************************************************************
** **
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal ** Contact: http://www.qt-project.org/legal
** **
** This file is part of the documentation of the Qt Toolkit. ** This file is part of the documentation of the Qt Toolkit.
@@ -34,6 +34,8 @@
This example creates a simple multimedia player. We can play audio and This example creates a simple multimedia player. We can play audio and
or video files using various codecs. or video files using various codecs.
\include examples-run.qdocinc
The example uses a QMediaPlayer object passed into a QVideoWidget to The example uses a QMediaPlayer object passed into a QVideoWidget to
control the video output. To give the application playlist capability control the video output. To give the application playlist capability
we also use a QPlayList object. we also use a QPlayList object.
@@ -93,4 +95,3 @@
\endcode \endcode
*/ */

View File

@@ -1,6 +1,6 @@
/**************************************************************************** /****************************************************************************
** **
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal ** Contact: http://www.qt-project.org/legal
** **
** This file is part of the documentation of the Qt Toolkit. ** This file is part of the documentation of the Qt Toolkit.
@@ -32,9 +32,11 @@
\brief This example demonstrates how to stream video on a graphics scene. \brief This example demonstrates how to stream video on a graphics scene.
The Video Graphics Item example shows how to implement a QGraphicsItem that displays video on a The Video Graphics Item example shows how to implement a QGraphicsItem that displays video on a
graphics scene using Qt Multimedia's QAbstractVideoSurface. graphics scene using \l{Qt Multimedia}'s QAbstractVideoSurface.
\image video-videographicsitem.png \image video-videographicsitem.png
\sa {Video Widget Example} \sa {Video Widget Example}
\include examples-run.qdocinc
*/ */

View File

@@ -1,6 +1,6 @@
/**************************************************************************** /****************************************************************************
** **
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal ** Contact: http://www.qt-project.org/legal
** **
** This file is part of the documentation of the Qt Toolkit. ** This file is part of the documentation of the Qt Toolkit.
@@ -32,7 +32,9 @@
\brief This example is a simple video player \brief This example is a simple video player
The Video Widget example denonstrates how to implement a video widget using The Video Widget example denonstrates how to implement a video widget using
Qt Multimedia's QAbstractVideoSurface. \l{Qt Multimedia}'s QAbstractVideoSurface.
\image video-videowidget.png \image video-videowidget.png
\include examples-run.qdocinc
*/ */

View File

@@ -286,8 +286,10 @@ void QAndroidCameraSession::close()
void QAndroidCameraSession::setVideoPreview(QObject *videoOutput) void QAndroidCameraSession::setVideoPreview(QObject *videoOutput)
{ {
if (m_videoOutput) if (m_videoOutput) {
m_videoOutput->stop(); m_videoOutput->stop();
m_videoOutput->reset();
}
if (videoOutput) { if (videoOutput) {
connect(videoOutput, SIGNAL(readyChanged(bool)), this, SLOT(onVideoOutputReady(bool))); connect(videoOutput, SIGNAL(readyChanged(bool)), this, SLOT(onVideoOutputReady(bool)));
@@ -368,8 +370,12 @@ void QAndroidCameraSession::stopPreview()
m_camera->stopPreview(); m_camera->stopPreview();
m_camera->setPreviewSize(QSize()); m_camera->setPreviewSize(QSize());
if (m_videoOutput) m_camera->setPreviewTexture(0);
if (m_videoOutput) {
m_videoOutput->stop(); m_videoOutput->stop();
m_videoOutput->reset();
}
m_previewStarted = false; m_previewStarted = false;
} }