Hello community,

here is the log from the commit of package shotcut for openSUSE:Factory checked 
in at 2018-04-25 10:02:33
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/shotcut (Old)
 and      /work/SRC/openSUSE:Factory/.shotcut.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "shotcut"

Wed Apr 25 10:02:33 2018 rev:12 rq:600678 version:18.03.06

Changes:
--------
--- /work/SRC/openSUSE:Factory/shotcut/shotcut.changes  2018-03-06 
10:49:23.111738467 +0100
+++ /work/SRC/openSUSE:Factory/.shotcut.new/shotcut.changes     2018-04-25 
10:02:37.428042057 +0200
@@ -1,0 +2,14 @@
+Tue Apr 24 10:58:20 UTC 2018 - davejpla...@gmail.com
+
+- Update to bug fix release 18.03.06
+- Upstream changes:
+  *Fix multiply handled KeyEvent regression in Fix #344 shortcut
+   not working with undocked Timeline.Fix multiply handled KeyEvent
+   regression in Fix #344 shortcut not working with undocked
+   Timeline.
+  *Fix added Fade Out Volume shows incorrect on Timeline.
+  *Fix track name not editable regression in Fix #344 shortcut not
+   working with undocked Timeline.
+  *Add Mosaic filter.
+
+-------------------------------------------------------------------

Old:
----
  shotcut-18.03.tar.gz

New:
----
  shotcut-18.03.06.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ shotcut.spec ++++++
--- /var/tmp/diff_new_pack.uem5AY/_old  2018-04-25 10:02:38.440004926 +0200
+++ /var/tmp/diff_new_pack.uem5AY/_new  2018-04-25 10:02:38.456004339 +0200
@@ -22,7 +22,7 @@
 %bcond_with    x264
 
 Name:           shotcut
-Version:        18.03
+Version:        18.03.06
 Release:        0
 # This package creates a build time version from the current date and uses it 
to check
 # for updates. See patch1 and prep/build section. For reproducible builds.

++++++ shotcut-18.03.tar.gz -> shotcut-18.03.06.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/shotcut-18.03/mvcp/mvcp_response.c 
new/shotcut-18.03.06/mvcp/mvcp_response.c
--- old/shotcut-18.03/mvcp/mvcp_response.c      2018-03-02 18:42:10.000000000 
+0100
+++ new/shotcut-18.03.06/mvcp/mvcp_response.c   2018-03-06 06:16:11.000000000 
+0100
@@ -154,7 +154,7 @@
        return length;
 }
 
-/** Write text to the reponse.
+/** Write text to the response.
 */
 
 int mvcp_response_write( mvcp_response response, const char *text, int size )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/shotcut-18.03/scripts/build-shotcut.sh 
new/shotcut-18.03.06/scripts/build-shotcut.sh
--- old/shotcut-18.03/scripts/build-shotcut.sh  2018-03-02 18:42:10.000000000 
+0100
+++ new/shotcut-18.03.06/scripts/build-shotcut.sh       2018-03-06 
06:16:11.000000000 +0100
@@ -73,7 +73,7 @@
 MLT_DISABLE_SOX=0
 
 
################################################################################
-# Location of config file - if not overriden on command line
+# Location of config file - if not overridden on command line
 CONFIGFILE=build-shotcut.conf
 
 # If defined to 1, outputs trace log lines
@@ -285,7 +285,7 @@
   else
     echo "ERROR: $@"
   fi
-  feedback_result FAILURE "Some kind of error occured: $@"
+  feedback_result FAILURE "Some kind of error occurred: $@"
   exit -1
 }
 
@@ -931,7 +931,7 @@
 #################################################################
 # check_abort
 # Function that checks if the user wanted to cancel what we are doing.
-# returns "stop" or "cont" as appropiate
+# returns "stop" or "cont" as appropriate
 function check_abort {
   # log "$ARG"
   echo
@@ -1209,7 +1209,7 @@
           REPOLOCURL=`svn --non-interactive info | grep URL | awk '{print $2}'`
           # Now, we have to be a bit clever here, because if the user 
originally checked it out using
           # https, we can not change to http. So, we check for https in the 
current URL
-          # Note, that beeing clever almost always fails at some point. But, 
at least we give it a try...
+          # Note, that being clever almost always fails at some point. But, at 
least we give it a try...
           if test "${REPOLOCURL:0:5}" = "https" ; then
               REPOLOC=${REPOLOC/http/https}
           fi
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/shotcut-18.03/snap/snapcraft.yaml 
new/shotcut-18.03.06/snap/snapcraft.yaml
--- old/shotcut-18.03/snap/snapcraft.yaml       2018-03-02 18:42:10.000000000 
+0100
+++ new/shotcut-18.03.06/snap/snapcraft.yaml    2018-03-06 06:16:11.000000000 
+0100
@@ -1,5 +1,5 @@
 name: shotcut
-version: '18.01'
+version: '18.03'
 summary: Free, cross-platform, open source video editor
 description: >
   Shotcut is a free, open source, cross-platform video editor for Windows,
@@ -13,22 +13,12 @@
 apps:
   shotcut:
     command: bin/desktop-launch $SNAP/Shotcut.app/shotcut
-  ffmpeg:
-    command: $SNAP/Shotcut.app/ffmpeg
-  ffplay:
-    command: $SNAP/Shotcut.app/ffplay
-  ffprobe:
-    command: $SNAP/Shotcut.app/ffprobe
-  melt:
-    command: $SNAP/Shotcut.app/melt
-  qmelt:
-    command: $SNAP/Shotcut.app/qmelt
 
 parts:
   shotcut:
     after: [desktop-qt5]
     plugin: dump
-    source: 
'https://github.com/mltframework/shotcut/releases/download/v18.01/shotcut-linux-x86_64-180102.tar.bz2'
+    source: 
'https://github.com/mltframework/shotcut/releases/download/v18.03/shotcut-linux-x86_64-180302.tar.bz2'
     organize:
       'Shotcut': './'
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/shotcut-18.03/src/database.cpp 
new/shotcut-18.03.06/src/database.cpp
--- old/shotcut-18.03/src/database.cpp  2018-03-02 18:42:10.000000000 +0100
+++ new/shotcut-18.03.06/src/database.cpp       2018-03-06 06:16:11.000000000 
+0100
@@ -164,7 +164,7 @@
 void Database::deleteOldThumbnails()
 {
     QSqlQuery query;
-    // OFFSET is the numner of thumbnails to cache.
+    // OFFSET is the number of thumbnails to cache.
     if (!query.exec("DELETE FROM thumbnails WHERE hash IN (SELECT hash FROM 
thumbnails ORDER BY accessed DESC LIMIT -1 OFFSET 10000);"))
         LOG_ERROR() << query.lastError();
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/shotcut-18.03/src/docks/timelinedock.cpp 
new/shotcut-18.03.06/src/docks/timelinedock.cpp
--- old/shotcut-18.03/src/docks/timelinedock.cpp        2018-03-02 
18:42:10.000000000 +0100
+++ new/shotcut-18.03.06/src/docks/timelinedock.cpp     2018-03-06 
06:16:11.000000000 +0100
@@ -64,16 +64,12 @@
 
     connect(&m_model, SIGNAL(modified()), this, 
SLOT(clearSelectionIfInvalid()));
 
-    m_quickView.setFocusPolicy(Qt::NoFocus);
     setWidget(&m_quickView);
 
     connect(this, SIGNAL(clipMoved(int,int,int,int)), 
SLOT(onClipMoved(int,int,int,int)), Qt::QueuedConnection);
     connect(MLT.videoWidget(), SIGNAL(frameDisplayed(const SharedFrame&)), 
this, SLOT(onShowFrame(const SharedFrame&)));
-#ifdef Q_OS_WIN
-    onVisibilityChanged(true);
-#else
-    connect(this, &QDockWidget::visibilityChanged, this, &TimelineDock::load);
-#endif
+    connect(this, SIGNAL(visibilityChanged(bool)), this, SLOT(load(bool)));
+    connect(this, SIGNAL(topLevelChanged(bool)), this, 
SLOT(onTopLevelChanged(bool)));
     LOG_DEBUG() << "end";
 }
 
@@ -990,6 +986,7 @@
     if (m_quickView.source().isEmpty() || force) {
         QDir sourcePath = QmlUtilities::qmlDir();
         sourcePath.cd("timeline");
+        m_quickView.setFocusPolicy(isFloating()? Qt::NoFocus : 
Qt::StrongFocus);
         
m_quickView.setSource(QUrl::fromLocalFile(sourcePath.filePath("timeline.qml")));
         disconnect(this, SIGNAL(visibilityChanged(bool)), this, 
SLOT(onVisibilityChanged(bool)));
         connect(m_quickView.rootObject(), SIGNAL(currentTrackChanged()),
@@ -1003,8 +1000,7 @@
     }
 }
 
-void TimelineDock::onVisibilityChanged(bool visible)
+void TimelineDock::onTopLevelChanged(bool floating)
 {
-    if (visible)
-        load();
+    m_quickView.setFocusPolicy(floating? Qt::NoFocus : Qt::StrongFocus);
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/shotcut-18.03/src/docks/timelinedock.h 
new/shotcut-18.03.06/src/docks/timelinedock.h
--- old/shotcut-18.03/src/docks/timelinedock.h  2018-03-02 18:42:10.000000000 
+0100
+++ new/shotcut-18.03.06/src/docks/timelinedock.h       2018-03-06 
06:16:11.000000000 +0100
@@ -150,7 +150,6 @@
 private:
     bool isBlank(int trackIndex, int clipIndex);
     void pulseLockButtonOnTrack(int trackIndex);
-    void load(bool force = false);
 
     Ui::TimelineDock *ui;
     QQuickWidget m_quickView;
@@ -170,7 +169,8 @@
     int m_trimDelta;
 
 private slots:
-    void onVisibilityChanged(bool visible);
+    void load(bool force = false);
+    void onTopLevelChanged(bool floating);
 };
 
 #endif // TIMELINEDOCK_H
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/shotcut-18.03/src/mainwindow.cpp 
new/shotcut-18.03.06/src/mainwindow.cpp
--- old/shotcut-18.03/src/mainwindow.cpp        2018-03-02 18:42:10.000000000 
+0100
+++ new/shotcut-18.03.06/src/mainwindow.cpp     2018-03-06 06:16:11.000000000 
+0100
@@ -1424,7 +1424,6 @@
 {
     bool handled = true;
 
-
     switch (event->key()) {
     case Qt::Key_Home:
         m_player->seek(0);
@@ -1773,19 +1772,24 @@
         LOG_DEBUG() << "Current focusWindow:" << QApplication::focusWindow();
         break;
     default:
+        handled = false;
         break;
     }
 
-    if (!handled)
+    if (handled)
+        event->setAccepted(handled);
+    else
         QMainWindow::keyPressEvent(event);
 }
 
 void MainWindow::keyReleaseEvent(QKeyEvent* event)
 {
-    if (event->key() == Qt::Key_K)
+    if (event->key() == Qt::Key_K) {
         m_isKKeyPressed = false;
-    else
+        event->setAccepted(true);
+    } else {
         QMainWindow::keyReleaseEvent(event);
+    }
 }
 
 void MainWindow::hideSetDataDirectory()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/shotcut-18.03/src/models/multitrackmodel.cpp 
new/shotcut-18.03.06/src/models/multitrackmodel.cpp
--- old/shotcut-18.03/src/models/multitrackmodel.cpp    2018-03-02 
18:42:10.000000000 +0100
+++ new/shotcut-18.03.06/src/models/multitrackmodel.cpp 2018-03-06 
06:16:11.000000000 +0100
@@ -1852,7 +1852,7 @@
     if (track) {
         Mlt::Playlist playlist(*track);
         if (clipIndex > 0) {
-            // Check if preceeding clip is not blank, not already a transition,
+            // Check if preceding clip is not blank, not already a transition,
             // and there is enough frames before in point of current clip.
             if (!m_isMakingTransition && delta < 0 && 
!playlist.is_blank(clipIndex - 1) && !isTransition(playlist, clipIndex - 1)) {
                 Mlt::ClipInfo info;
@@ -2061,7 +2061,7 @@
                     roles << FadeInRole;
                 if (!qstrcmp("fadeOutMovit", name) ||
                     !qstrcmp("fadeOutBrightness", name) ||
-                    !qstrcmp("fadOutVolume", name))
+                    !qstrcmp("fadeOutVolume", name))
                     roles << FadeOutRole;
                 if (roles.length())
                     emit dataChanged(modelIndex, modelIndex, roles);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/shotcut-18.03/src/mvcp/qconsole.cpp 
new/shotcut-18.03.06/src/mvcp/qconsole.cpp
--- old/shotcut-18.03/src/mvcp/qconsole.cpp     2018-03-02 18:42:10.000000000 
+0100
+++ new/shotcut-18.03.06/src/mvcp/qconsole.cpp  2018-03-06 06:16:11.000000000 
+0100
@@ -513,7 +513,7 @@
                        else 
                        { //no selection
                                //when typing normal characters,
-                               //make sure the cursor is positionned in the
+                               //make sure the cursor is positioned in the
                                //edition zone
                                if ( !isInEditionZone() )
                                {
@@ -798,7 +798,7 @@
 void QConsole::cut()
 {
                //Cut only in the editing zone,
-               //perfom a copy otherwise
+               //perform a copy otherwise
                if(isInEditionZone())
                {
                                QTextEdit::cut();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/shotcut-18.03/src/qml/filters/color/ui.qml 
new/shotcut-18.03.06/src/qml/filters/color/ui.qml
--- old/shotcut-18.03/src/qml/filters/color/ui.qml      2018-03-02 
18:42:10.000000000 +0100
+++ new/shotcut-18.03.06/src/qml/filters/color/ui.qml   2018-03-06 
06:16:11.000000000 +0100
@@ -80,6 +80,8 @@
         UndoButton {
             Layout.alignment: Qt.AlignRight
             onClicked: {
+                // Force a color change to make sure the color wheel is 
updated.
+                liftRedSpinner.value = 1.0
                 liftRedSpinner.value = 0.0
                 liftGreenSpinner.value = 0.0
                 liftBlueSpinner.value = 0.0
@@ -89,6 +91,8 @@
         UndoButton {
             Layout.alignment: Qt.AlignRight
             onClicked: {
+                // Force a color change to make sure the color wheel is 
updated.
+                gammaRedSpinner.value = 1.0 / gammaFactor
                 gammaRedSpinner.value = 100.0 / gammaFactor
                 gammaGreenSpinner.value = 100.0 / gammaFactor
                 gammaBlueSpinner.value = 100.0 / gammaFactor
@@ -98,6 +102,8 @@
         UndoButton {
             Layout.alignment: Qt.AlignRight
             onClicked: {
+                // Force a color change to make sure the color wheel is 
updated.
+                gainRedSpinner.value = 1.0 / gainFactor
                 gainRedSpinner.value = 100.0 / gainFactor
                 gainGreenSpinner.value = 100.0 / gainFactor
                 gainBlueSpinner.value = 100.0 / gainFactor
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/shotcut-18.03/src/qml/filters/mosaic/meta.qml 
new/shotcut-18.03.06/src/qml/filters/mosaic/meta.qml
--- old/shotcut-18.03/src/qml/filters/mosaic/meta.qml   1970-01-01 
01:00:00.000000000 +0100
+++ new/shotcut-18.03.06/src/qml/filters/mosaic/meta.qml        2018-03-06 
06:16:11.000000000 +0100
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2018 Meltytech, LLC
+ * Author: Brian Matherly <c...@brianmatherly.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+ 
+import QtQuick 2.0
+import org.shotcut.qml 1.0
+
+Metadata {
+    type: Metadata.Filter
+    name: qsTr("Mosaic")
+    mlt_service: "frei0r.pixeliz0r"
+    qml: "ui.qml"
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/shotcut-18.03/src/qml/filters/mosaic/ui.qml 
new/shotcut-18.03.06/src/qml/filters/mosaic/ui.qml
--- old/shotcut-18.03/src/qml/filters/mosaic/ui.qml     1970-01-01 
01:00:00.000000000 +0100
+++ new/shotcut-18.03.06/src/qml/filters/mosaic/ui.qml  2018-03-06 
06:16:11.000000000 +0100
@@ -0,0 +1,104 @@
+/*
+ * Copyright (c) 2018 Meltytech, LLC
+ * Author: Brian Matherly <c...@brianmatherly.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+import QtQuick 2.1
+import QtQuick.Controls 1.1
+import QtQuick.Layouts 1.0
+import Shotcut.Controls 1.0
+
+Item {
+    property string xSize: '0'
+    property string ySize: '1'
+    property real maxFilterPercent: 50.0
+    property real maxUserPercent: 20.0
+    property real defaultValue: 2.5 / maxFilterPercent
+    property var defaultParameters: [xSize, ySize]
+
+    width: 200
+    height: 50
+    Component.onCompleted: {
+        if (filter.isNew) {
+            // Set default parameter values
+            filter.set(xSize, defaultValue)
+            filter.set(ySize, defaultValue)
+            filter.savePreset(defaultParameters)
+        }
+        wslider.value = filter.getDouble(xSize) * maxFilterPercent
+        hslider.value = filter.getDouble(ySize) * maxFilterPercent
+    }
+
+    function setControls() {
+        wslider.value = filter.getDouble(xSize) * maxFilterPercent
+        hslider.value = filter.getDouble(ySize) * maxFilterPercent
+    }
+
+    GridLayout {
+        columns: 3
+        anchors.fill: parent
+        anchors.margins: 8
+
+        Label {
+            text: qsTr('Preset')
+            Layout.alignment: Qt.AlignRight
+        }
+        Preset {
+            id: preset
+            parameters: defaultParameters
+            Layout.columnSpan: 2
+            onPresetSelected: setControls()
+        }
+
+        Label {
+            text: qsTr('Width')
+            Layout.alignment: Qt.AlignRight
+        }
+        SliderSpinner {
+            id: wslider
+            minimumValue: 0.1
+            maximumValue: maxUserPercent
+            stepSize: 0.1
+            decimals: 1
+            suffix: ' %'
+            onValueChanged: filter.set(xSize, value / maxFilterPercent)
+        }
+        UndoButton {
+            onClicked: wslider.value = defaultValue * maxFilterPercent
+        }
+
+        Label {
+            text: qsTr('Height')
+            Layout.alignment: Qt.AlignRight
+        }
+        SliderSpinner {
+            id: hslider
+            minimumValue: 0.1
+            maximumValue: maxUserPercent
+            stepSize: 0.1
+            decimals: 1
+            suffix: ' %'
+            onValueChanged: filter.set(ySize, value / maxFilterPercent)
+        }
+        UndoButton {
+            onClicked: hslider.value = defaultValue * maxFilterPercent
+        }
+        
+        Item {
+            Layout.fillHeight: true
+        }
+    }
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/shotcut-18.03/src/qml/timeline/TrackHead.qml 
new/shotcut-18.03.06/src/qml/timeline/TrackHead.qml
--- old/shotcut-18.03/src/qml/timeline/TrackHead.qml    2018-03-02 
18:42:10.000000000 +0100
+++ new/shotcut-18.03.06/src/qml/timeline/TrackHead.qml 2018-03-06 
06:16:11.000000000 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013-2017 Meltytech, LLC
+ * Copyright (c) 2013-2018 Meltytech, LLC
  * Author: Dan Dennedy <d...@dennedy.org>
  *
  * This program is free software: you can redistribute it and/or modify
@@ -100,15 +100,15 @@
             color: 'transparent'
             width: trackHeadRoot.width - trackHeadColumn.anchors.margins * 2
             radius: 2
-            border.color: trackNameMouseArea.containsMouse? 
activePalette.shadow : 'transparent'
+            border.color: (!timeline.floating && 
trackNameMouseArea.containsMouse)? activePalette.shadow : 'transparent'
             height: nameEdit.height
             MouseArea {
                 id: trackNameMouseArea
                 height: parent.height
                 width: nameEdit.width
                 hoverEnabled: true
-                onClicked: {
-                    nameEdit.visible = true
+                onClicked: if (!timeline.floating) {
+                    nameEdit.focus = true
                     nameEdit.selectAll()
                 }
             }
@@ -122,14 +122,13 @@
             }
             TextField {
                 id: nameEdit
-                visible: false
+                visible: focus
                 width: trackHeadRoot.width - trackHeadColumn.anchors.margins * 
2
                 text: trackName
                 onAccepted: {
                     timeline.setTrackName(index, text)
-                    visible = false
+                    focus = false
                 }
-                onFocusChanged: visible = focus
             }
         }
         RowLayout {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/shotcut-18.03/src/qmltypes/colorwheelitem.cpp 
new/shotcut-18.03.06/src/qmltypes/colorwheelitem.cpp
--- old/shotcut-18.03/src/qmltypes/colorwheelitem.cpp   2018-03-02 
18:42:10.000000000 +0100
+++ new/shotcut-18.03.06/src/qmltypes/colorwheelitem.cpp        2018-03-06 
06:16:11.000000000 +0100
@@ -151,9 +151,9 @@
 {
     if (! m_image.valid(point)) return QColor();
     if (m_isInWheel) {
-        qreal w = wheelSize();
-        qreal xf = qreal(point.x()) / w;
-        qreal yf = 1.0 - qreal(point.y()) / w;
+        qreal w = wheelSize() - m_margin * 2;
+        qreal xf = qreal(point.x() - m_margin) / w;
+        qreal yf = 1.0 - qreal(point.y() - m_margin) / w;
         qreal xp = 2.0 * xf - 1.0;
         qreal yp = 2.0 * yf - 1.0;
         qreal rad = qMin(hypot(xp, yp), 1.0);
@@ -283,7 +283,7 @@
     painter.translate(r, r);
     painter.rotate(360.0 - m_color.hue());
     painter.rotate(-105);
-    painter.drawEllipse(QPointF(m_color.saturationF() * r, 0.0), 4, 4);
+    painter.drawEllipse(QPointF(m_color.saturationF() * r - m_margin, 0.0), 4, 
4);
     painter.resetTransform();
 }
 


Reply via email to