diff --git a/3rdparty/ext_jpeg/CMakeLists.txt b/3rdparty/ext_jpeg/CMakeLists.txt
index a00a1405a9..672e2fa372 100644
--- a/3rdparty/ext_jpeg/CMakeLists.txt
+++ b/3rdparty/ext_jpeg/CMakeLists.txt
@@ -1,35 +1,35 @@
SET(PREFIX_ext_jpeg "${EXTPREFIX}" )
if (MINGW)
ExternalProject_Add( ext_jpeg
DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR}
URL https://files.kde.org/krita/build/dependencies/libjpeg-turbo-2.0.3.tar.gz
URL_MD5 4c93ba3f9a5d9a50dcdc5c8c995060252f8a5b84
INSTALL_DIR ${PREFIX_ext_jpeg}
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${PREFIX_ext_jpeg} -DWITH_SIMD=OFF -DCMAKE_BUILD_TYPE=${GLOBAL_BUILD_TYPE} ${GLOBAL_PROFILE}
UPDATE_COMMAND ""
)
elseif (ANDROID)
ExternalProject_Add( ext_jpeg
DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR}
URL https://files.kde.org/krita/build/dependencies/libjpeg-turbo-2.0.3.tar.gz
- URL_MD5 4c93ba3f9a5d9a50dcdc5c8c995060252f8a5b84
+ URL_MD5 295e61ffad804251471393c3de80d76e
CMAKE_ARGS -DANDROID_ARM_MODE=arm -DCMAKE_INSTALL_PREFIX=${PREFIX_ext_jpeg} -DENABLE_SHARED=ON -DWITH_SIMD=OFF -DENABLE_STATIC=OFF _DCMAKE_BUILD_TYPE=${GLOBAL_BUILD_TYPE} ${GLOBAL_PROFILE}
UPDATE_COMMAND ""
)
else()
ExternalProject_Add( ext_jpeg
DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR}
URL https://files.kde.org/krita/build/dependencies/libjpeg-turbo-2.0.3.tar.gz
URL_MD5 4c93ba3f9a5d9a50dcdc5c8c995060252f8a5b84
INSTALL_DIR ${PREFIX_ext_jpeg}
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${PREFIX_ext_jpeg} -DWITH_SIMD=OFF _DCMAKE_BUILD_TYPE=${GLOBAL_BUILD_TYPE} ${GLOBAL_PROFILE}
UPDATE_COMMAND ""
)
endif()
diff --git a/krita/data/kritarc b/krita/data/kritarc
index e7a30c1b95..09406cf566 100644
--- a/krita/data/kritarc
+++ b/krita/data/kritarc
@@ -1,368 +1,378 @@
[advancedColorSelector]
allowHorizontalLayout=true
colorSelectorConfiguration=3|0|5|0
commonColorsAlignment=false
commonColorsAutoUpdate=false
commonColorsCount=12
commonColorsHeight=16
commonColorsNumCols=1
commonColorsNumRows=1
commonColorsScrolling=true
commonColorsShow=true
commonColorsWidth=16
customColorSpaceDepthID=U8
customColorSpaceModel=RGBA
customColorSpaceProfile=sRGB built-in
lastUsedColorsAlignment=true
lastUsedColorsCount=20
lastUsedColorsHeight=16
lastUsedColorsNumCols=1
lastUsedColorsNumRows=1
lastUsedColorsScrolling=true
lastUsedColorsShow=true
lastUsedColorsWidth=16
minimalShadeSelectorAsGradient=true
minimalShadeSelectorLineConfig=0|0.2|0|0|0|0|0;1|0|1|1|0|0|0;2|0|-1|1|0|0|0;
minimalShadeSelectorLineHeight=10
minimalShadeSelectorPatchCount=10
popupOnMouseClick=true
popupOnMouseOver=false
shadeSelectorHideable=false
shadeSelectorType=Minimal
shadeSelectorUpdateOnBackground=true
shadeSelectorUpdateOnForeground=true
shadeSelectorUpdateOnLeftClick=false
shadeSelectorUpdateOnRightClick=false
useCustomColorSpace=false
zoomSize=280
[DockWidget sharedtooldocker]
TabbedMode=false
[KisToolTransform]
filterId=Bicubic
[MainWindow]
State=AAAA/wAAAAD9AAAABAAAAAAAAABJAAADzfwCAAAAA/sAAAAOAFQAbwBvAGwAQgBvAHgBAAAAPwAAA80AAAAxAP////sAAAAkAEYAbABvAHcAUwBoAGEAcABlAEIAbwB4AEQAbwBjAGsAZQByAAAAA2oAAADHAAAAAAAAAAD7AAAAKABGAGwAbwB3AFMAdABlAG4AYwBpAGwAQgBvAHgARABvAGMAawBlAHIAAAADfQAAAMcAAAAAAAAAAAAAAAEAAAEGAAADzfwCAAAAQPsAAAAaAEsAaQBzAEIAaQByAGQAZQB5AGUAQgBvAHgAAAAAAP////8AAAAAAAAAAPsAAAAgAEsAaQBzAFAAYQBsAGUAdAB0AGUARABvAGMAawBlAHIAAAAAAP////8AAAAAAAAAAPsAAAAaAEsAbwBDAG8AbABvAHIARABvAGMAawBlAHIAAAAAAP////8AAAAAAAAAAPsAAAAwAEsAaQBzAFQAcgBpAGEAbgBnAGwAZQBDAG8AbABvAHIAUwBlAGwAZQBjAHQAbwByAAAAAAD/////AAAAAAAAAAD7AAAAIgBTAGgAYQBkAG8AdwAgAFAAcgBvAHAAZQByAHQAaQBlAHMAAAAAAP////8AAAAAAAAAAPsAAAAgAFMAaABhAHAAZQAgAFAAcgBvAHAAZQByAHQAaQBlAHMAAAAAAP////8AAAAAAAAAAPsAAAAaAFMAaABhAHAAZQBTAGUAbABlAGMAdABvAHIAAAAASAAAAEQAAAAAAAAAAPsAAAAkAFMAaQBtAHAAbABlACAAVABlAHgAdAAgAEUAZABpAHQAbwByAAAAAAD/////AAAAAAAAAAD8AAAAPwAAAOIAAACEAQAAHfoAAAAAAQAAAAf7AAAAHgBDAG8AbABvAHIAUwBlAGwAZQBjAHQAbwByAE4AZwEAAAAA/////wAAADoA////+wAAACAAcwBoAGEAcgBlAGQAdABvAG8AbABkAG8AYwBrAGUAcgEAAAAA/////wAAAFMA////+wAAABwATwB2AGUAcgB2AGkAZQB3AEQAbwBjAGsAZQByAQAAAAD/////AAAA2gD////7AAAAKgBTAHAAZQBjAGkAZgBpAGMAQwBvAGwAbwByAFMAZQBsAGUAYwB0AG8AcgAAAAAA/////wAAAL4A////+wAAABYAQwBvAGwAbwByAFMAbABpAGQAZQByAAAAAAD/////AAAAkQD////7AAAAFgBJAG0AYQBnAGUARABvAGMAawBlAHIAAAAAAP////8AAAAAAAAAAPsAAAAqAFMAaABhAHAAZQBDAG8AbABsAGUAYwB0AGkAbwBuAEQAbwBjAGsAZQByAAAABkgAAAEoAAAAAAAAAAD7AAAARgBLAHIAaQB0AGEAUwBoAGEAcABlAC8ASwBpAHMAVABvAG8AbABEAHkAbgBhAG8AcAB0AGkAbwBuACAAdwBpAGQAZwBlAHQBAAAAUgAAABIAAAAAAAAAAPsAAAAsAEsAcgBpAHQAYQBTAGgAYQBwAGUALwBLAGkAcwBUAG8AbwBsAEwAaQBuAGUBAAAAPAAAAGkAAAAAAAAAAPsAAAAyAEsAcgBpAHQAYQBTAGgAYQBwAGUALwBLAGkAcwBUAG8AbwBsAEUAbABsAGkAcABzAGUBAAAAkQAAABIAAAAAAAAAAPsAAAAcAEsAaQBzAFQAbwBvAGwAUABvAGwAeQBnAG8AbgEAAACmAAAAEgAAAAAAAAAA+wAAAB4ASwBpAHMAVABvAG8AbABQAG8AbAB5AGwAaQBuAGUBAAAAuwAAABIAAAAAAAAAAPsAAAAWAEsAaQBzAFQAbwBvAGwAUwB0AGEAcgEAAADQAAAAEwAAAAAAAAAA+wAAACoAUwBuAGEAcABHAHUAaQBkAGUAQwBvAG4AZgBpAGcAVwBpAGQAZwBlAHQAAAAA7wAAAHEAAAAAAAAAAPsAAAAyAEsAaQBzAFQAbwBvAGwAQwByAG8AcAAgAG8AcAB0AGkAbwBuACAAdwBpAGQAZwBlAHQBAAAA+wAAABIAAAAAAAAAAPsAAABQAEsAcgBpAHQAYQBUAHIAYQBuAHMAZgBvAHIAbQAvAEsAaQBzAFQAbwBvAGwATQBvAHYAZQAgAE8AcAB0AGkAbwBuACAAVwBpAGQAZwBlAHQBAAABEAAAABIAAAAAAAAAAPsAAAA8AEsAaQBzAFQAbwBvAGwAVAByAGEAbgBzAGYAbwByAG0AIABvAHAAdABpAG8AbgAgAHcAaQBkAGcAZQB0AQAAADwAAAAvAAAAAAAAAAD7AAAATgBLAHIAaQB0AGEAUwBoAGEAcABlAC8ASwBpAHMAVABvAG8AbABNAGUAYQBzAHUAcgBlACAAbwBwAHQAaQBvAG4AIAB3AGkAZABnAGUAdAEAAAA8AAAAQgAAAAAAAAAA+wAAAFwASwByAGkAdABhAFMAZQBsAGUAYwB0AGUAZAAvAEsAaQBzAFQAbwBvAGwAQwBvAGwAbwByAFAAaQBjAGsAZQByACAAbwBwAHQAaQBvAG4AIAB3AGkAZABnAGUAdAEAAAA8AAAA/wAAAAAAAAAA+wAAAEYASwBpAHMAUgB1AGwAZQByAEEAcwBzAGkAcwB0AGEAbgB0AFQAbwBvAGwAIABPAHAAdABpAG8AbgAgAFcAaQBkAGcAZQB0AQAAADwAAAASAAAAAAAAAAD7AAAASABLAGkAcwBUAG8AbwBsAFAAZQByAHMAcABlAGMAdABpAHYAZQBHAHIAaQBkACAATwBwAHQAaQBvAG4AIABXAGkAZABnAGUAdAEAAAGjAAAAEgAAAAAAAAAA+wAAADIASwBpAHMAVABvAG8AbABHAHIAaQBkACAATwBwAHQAaQBvAG4AIABXAGkAZABnAGUAdAEAAAG4AAAAEwAAAAAAAAAA+wAAAEwASwBpAHMAVABvAG8AbABTAGUAbABlAGMAdABSAGUAYwB0AGEAbgBnAHUAbABhAHIAIABvAHAAdABpAG8AbgAgAHcAaQBkAGcAZQB0AQAAAc4AAAASAAAAAAAAAAD7AAAASgBLAGkAcwBUAG8AbwBsAFMAZQBsAGUAYwB0AEUAbABsAGkAcAB0AGkAYwBhAGwAIABvAHAAdABpAG8AbgAgAHcAaQBkAGcAZQB0AQAAAeMAAAASAAAAAAAAAAD7AAAASABLAGkAcwBUAG8AbwBsAFMAZQBsAGUAYwB0AFAAbwBsAHkAZwBvAG4AYQBsACAAbwBwAHQAaQBvAG4AIAB3AGkAZABnAGUAdAEAAAH4AAAAEgAAAAAAAAAA+wAAAEQASwBpAHMAVABvAG8AbABTAGUAbABlAGMAdABPAHUAdABsAGkAbgBlACAAbwBwAHQAaQBvAG4AIAB3AGkAZABnAGUAdAEAAAINAAAAEgAAAAAAAAAA+wAAAEoASwBpAHMAVABvAG8AbABTAGUAbABlAGMAdABDAG8AbgB0AGkAZwB1AG8AdQBzACAAbwBwAHQAaQBvAG4AIAB3AGkAZABnAGUAdAEAAAIiAAAAEgAAAAAAAAAA+wAAAEQASwBpAHMAVABvAG8AbABTAGUAbABlAGMAdABTAGkAbQBpAGwAYQByACAAbwBwAHQAaQBvAG4AIAB3AGkAZABnAGUAdAEAAAI3AAAAEgAAAAAAAAAA/AAAAbYAAABaAAAAAAD////6AAAAAAEAAAAC+wAAAC4ASwBvAFMAaABhAHAAZQBDAG8AbABsAGUAYwB0AGkAbwBuAEQAbwBjAGsAZQByAQAAAAD/////AAAAAAAAAAD7AAAAJABTAG0AYQBsAGwAQwBvAGwAbwByAFMAZQBsAGUAYwB0AG8AcgAAAANuAAABBAAAADoA/////AAAASgAAAEwAAAA1QEAAB36AAAAAAEAAAAD+wAAABYASwBpAHMATABhAHkAZQByAEIAbwB4AQAAAAD/////AAABAgD////7AAAAGgBDAGgAYQBuAG4AZQBsAEQAbwBjAGsAZQByAQAAAAD/////AAAAVQD////7AAAALgBLAGkAcwBQAGEAaQBuAHQAZQByAGwAeQBNAGkAeABlAHIARABvAGMAawBlAHIAAAAAAP////8AAAAAAAAAAPwAAAJfAAABrQAAAJcBAAAd+gAAAAABAAAAAvsAAAAYAFAAcgBlAHMAZQB0AEQAbwBjAGsAZQByAQAAAAD/////AAAAZgD////7AAAAGgBQAHIAZQBzAGUAdABIAGkAcwB0AG8AcgB5AQAACPoAAAEGAAAAVQD////7AAAASABLAHIAaQB0AGEAUwBoAGEAcABlAC8ASwBpAHMAVABvAG8AbABCAHIAdQBzAGgAbwBwAHQAaQBvAG4AIAB3AGkAZABnAGUAdAEAAAPcAAAAaAAAAAAAAAAA+wAAACIAUwB0AHIAbwBrAGUAIABQAHIAbwBwAGUAcgB0AGkAZQBzAAAAAAD/////AAAAAAAAAAD7AAAAFgBTAHQAeQBsAGUARABvAGMAawBlAHIAAAAAAP////8AAAAAAAAAAPsAAAAgAEsAaQBzAEgAaQBzAHQAbwBnAHIAYQBtAEQAbwBjAGsAAAAAAP////8AAAAAAAAAAPsAAAASAFMAYwByAGkAcAB0AGkAbgBnAAAAAAD/////AAAAAAAAAAD7AAAAMABEAGUAZgBhAHUAbAB0AFQAbwBvAGwAQQByAHIAYQBuAGcAZQBXAGkAZABnAGUAdAAAAAK8AAAAUgAAAAAAAAAA+wAAACIARABlAGYAYQB1AGwAdABUAG8AbwBsAFcAaQBkAGcAZQB0AAAAAxEAAABbAAAAAAAAAAD7AAAAJABLAGkAcwBIAGkAcwB0AG8AZwByAGEAbQBEAG8AYwBrAGUAcgAAAAJCAAAAewAAAAAAAAAA+wAAABgARABpAGcAaQB0AGEAbABNAGkAeABlAHIAAAAAAP////8AAACTAP////sAAAAOAEgAaQBzAHQAbwByAHkAAAADkAAAALQAAACuAP////sAAABOAEsAcgBpAHQAYQBGAGkAbABsAC8ASwBpAHMAVABvAG8AbABHAHIAYQBkAGkAZQBuAHQAIABvAHAAdABpAG8AbgAgAHcAaQBkAGcAZQB0AAAABCgAAAAcAAAAAAAAAAD7AAAARgBLAHIAaQB0AGEARgBpAGwAbAAvAEsAaQBzAFQAbwBvAGwARgBpAGwAbAAgAG8AcAB0AGkAbwBuACAAdwBpAGQAZwBlAHQAAAADUAAAABwAAAAAAAAAAPsAAAA2AEsAcgBpAHQAYQBTAGgAYQBwAGUALwBLAGkAcwBUAG8AbwBsAFIAZQBjAHQAYQBuAGcAbABlAAAAAwUAAABnAAAAAAAAAAD7AAAAIgBDAG8AbQBwAG8AcwBpAHQAaQBvAG4ARABvAGMAawBlAHIAAAAAAP////8AAACMAP////sAAAAqAEEAcgB0AGkAcwB0AGkAYwBDAG8AbABvAHIAUwBlAGwAZQBjAHQAbwByAAAAAAD/////AAAAdwD////7AAAAGgBQAGEAdAB0AGUAcgBuAEQAbwBjAGsAZQByAAAAAtkAAAFJAAAAswD////7AAAAGgBUAGEAcwBrAHMAZQB0AEQAbwBjAGsAZQByAAAAAAD/////AAAAjAD////7AAAAKABTAG4AYQBwAEcAdQBpAGQAZQAgAFAAcgBvAHAAZQByAHQAaQBlAHMAAAAAAP////8AAAAAAAAAAPsAAAA4AFQAZQB4AHQARABvAGMAdQBtAGUAbgB0AEkAbgBzAHAAZQBjAHQAaQBvAG4ARABvAGMAawBlAHICAAAEmgAAAhUAAAEqAAAArvsAAAASAEwAdQB0AEQAbwBjAGsAZQByAAAAAAD/////AAABXQD////7AAAAGgBQAGEAbABlAHQAdABlAEQAbwBjAGsAZQByAAAAAAD/////AAAAQgD////7AAAAFABHAHIAaQBkAEQAbwBjAGsAZQByAAAAAAD/////AAABLQD////7AAAAHgBIAGkAcwB0AG8AZwByAGEAbQBEAG8AYwBrAGUAcgAAAAAA/////wAAAEcA////+wAAACoAQQBuAGkAbQBhAHQAaQBvAG4AQwB1AHIAdgBlAHMARABvAGMAawBlAHIAAAAAAP////8AAACMAP////sAAAAyAFMAdgBnAFMAeQBtAGIAbwBsAEMAbwBsAGwAZQBjAHQAaQBvAG4ARABvAGMAawBlAHIAAAAAAP////8AAACMAP////sAAAAWAFQAbwB1AGMAaABEAG8AYwBrAGUAcgAAAAJMAAABMQAAABMA////+wAAABoAQQByAHIAYQBuAGcAZQBEAG8AYwBrAGUAcgAAAAAA/////wAAAHoA////+wAAADoAYwBvAG0AaQBjAHMAXwBwAHIAbwBqAGUAYwB0AF8AbQBhAG4AYQBnAGUAcgBfAGQAbwBjAGsAZQByAAAAAAD/////AAAAuQD////7AAAAKgBxAHUAaQBjAGsAXwBzAGUAdAB0AGkAbgBnAHMAXwBkAG8AYwBrAGUAcgAAAAAA/////wAAAIwA////+wAAABYAUABhAGcAZQByAEQAbwBjAGsAZQByAAAAAAD/////AAAALQD////7AAAAJgBsAGEAcwB0AGQAbwBjAHUAbQBlAG4AdABzAGQAbwBjAGsAZQByAAAAAAD/////AAAAiQD///8AAAACAAAKAAAAALz8AQAAAAH7AAAAGgBUAG8AbwBsAEIAYQByAEQAbwBjAGsAZQByAAAAAAD/////AAAAAAAAAAAAAAADAAAAAAAAAAD8AQAAAAT7AAAAHABGAGwAaQBwAGIAbwBvAGsARABvAGMAawBlAHIAAAAAAP////8AAAAAAAAAAPsAAAAeAEEAbgBpAG0AYQB0AGkAbwBuAEQAbwBjAGsAZQByAAAAAAD/////AAABBQD////7AAAAIABPAG4AaQBvAG4AUwBrAGkAbgBzAEQAbwBjAGsAZQByAAAAAAD/////AAABNgD////7AAAAHABUAGkAbQBlAGwAaQBuAGUARABvAGMAawBlAHIAAAAAAP////8AAABVAP///wAABU0AAAPNAAAABAAAAAQAAAAIAAAACPwAAAABAAAAAgAAAAIAAAAWAG0AYQBpAG4AVABvAG8AbABCAGEAcgEAAAAA/////wAAAAAAAAAAAAAAHgBCAHIAdQBzAGgAZQBzAEEAbgBkAFMAdAB1AGYAZgEAAAC5/////wAAAAAAAAAA
[advancedColorSelector]
gamma=2.2000000000000002
hidePopupOnClickCheck=false
hsxSettingType=0
lumaB=0.0722
lumaG=0.71519999999999995
lumaR=0.21260000000000001
onDockerResize=0
shadeMyPaintType=HSV
zoomSelectorOptions=0
[calligra]
ColorSpaceExtensionsPlugins=\\0
ColorSpaceExtensionsPluginsDisabled=
ColorSpacePlugins=\\0
ColorSpacePluginsDisabled=
DockerPlugins=\\0
DockerPluginsDisabled=textdocumentinspection
FlakePlugins=,
ShapePlugins=,
ToolsBlacklist=CreatePathTool,KoPencilTool,ConnectionTool,KarbonFilterEffectsTool,KritaShape/KisToolText,ArtisticTextTool,TextTool
ToolPlugins=,,
ToolPluginsDisabled=
[colorhotkeys]
steps_blueyellow=10
steps_hue=36
steps_lightness=10
steps_redgreen=10
steps_saturation=10
[crashprevention]
CreatingCanvas=false
[hsxColorSlider]
hsiH=false
hsiI=false
hsiS=false
hslH=true
hslL=true
hslS=true
hsvH=false
hsvS=false
hsvV=false
hsyH=false
hsyS=false
hsyY=false
[krita]
State=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
ToolBarsMovable=Enabled
[krita][DockWidget AnimationCurvesDocker]
Collapsed=false
DockArea=2
Locked=false
height=421
width=448
xPosition=0
yPosition=0
[krita][DockWidget AnimationDocker]
Collapsed=false
DockArea=8
Locked=false
height=160
width=280
xPosition=0
yPosition=0
[krita][DockWidget ArtisticColorSelector]
Collapsed=false
DockArea=2
Locked=false
height=294
width=337
xPosition=0
yPosition=0
[krita][DockWidget ChannelDocker]
Collapsed=false
DockArea=2
Locked=false
height=30
width=100
xPosition=0
yPosition=0
[krita][DockWidget ColorSelectorNg]
Collapsed=false
DockArea=2
Locked=false
height=176
width=281
xPosition=0
yPosition=20
[krita][DockWidget ColorSlider]
Collapsed=false
DockArea=2
Locked=false
height=460
width=640
xPosition=0
yPosition=20
[krita][DockWidget CompositionDocker]
Collapsed=false
DockArea=2
Locked=false
height=300
width=400
xPosition=0
yPosition=0
[krita][DockWidget DigitalMixer]
Collapsed=false
DockArea=2
Locked=false
height=30
width=100
xPosition=0
yPosition=0
[krita][DockWidget GridDocker]
Collapsed=false
DockArea=2
Locked=false
height=342
width=441
xPosition=0
yPosition=0
[krita][DockWidget HistogramDocker]
Collapsed=false
DockArea=2
Locked=false
height=91
width=281
xPosition=0
yPosition=20
[krita][DockWidget History]
Collapsed=false
DockArea=2
Locked=false
height=460
width=640
xPosition=0
yPosition=20
[krita][DockWidget ImageDocker]
Collapsed=false
DockArea=2
Locked=false
height=300
width=399
xPosition=0
yPosition=0
[krita][DockWidget KisLayerBox]
DockArea=2
Locked=false
height=358
width=281
xPosition=0
yPosition=20
[krita][DockWidget LutDocker]
Collapsed=false
DockArea=2
Locked=false
height=286
width=357
xPosition=0
yPosition=0
[krita][DockWidget OnionSkinsDocker]
Collapsed=false
DockArea=8
Locked=false
height=210
width=356
xPosition=0
yPosition=0
[krita][DockWidget OverviewDocker]
Collapsed=false
DockArea=2
Locked=false
height=30
width=100
xPosition=0
yPosition=0
[krita][DockWidget PaletteDocker]
Collapsed=false
DockArea=2
Locked=false
height=219
width=256
xPosition=0
yPosition=0
[krita][DockWidget PatternDocker]
Collapsed=false
DockArea=2
Locked=false
height=30
width=100
xPosition=0
yPosition=0
[krita][DockWidget PresetDocker]
Collapsed=false
DockArea=2
Locked=false
height=460
width=640
xPosition=0
yPosition=20
[krita][DockWidget PresetHistory]
Collapsed=false
DockArea=2
Locked=false
height=30
width=100
xPosition=0
yPosition=0
[krita][DockWidget Shape Properties]
DockArea=2
Locked=false
height=480
width=640
xPosition=0
yPosition=0
[krita][DockWidget ShapeCollectionDocker]
Collapsed=false
DockArea=2
Locked=false
height=0
width=0
xPosition=0
yPosition=20
[krita][DockWidget SmallColorSelector]
DockArea=2
Locked=false
height=460
width=640
xPosition=0
yPosition=20
[krita][DockWidget SpecificColorSelector]
DockArea=2
Locked=false
height=460
width=640
xPosition=0
yPosition=20
[krita][DockWidget TasksetDocker]
Collapsed=false
DockArea=2
Locked=false
height=300
width=400
xPosition=0
yPosition=0
[krita][DockWidget TimelineDocker]
Collapsed=false
DockArea=8
Locked=false
height=30
width=100
xPosition=0
yPosition=0
[krita][DockWidget ToolBox]
DockArea=1
Locked=false
height=610
width=63
xPosition=0
yPosition=20
[krita][DockWidget sharedtooldocker]
Collapsed=false
DockArea=2
Locked=false
height=460
width=640
xPosition=0
yPosition=20
[krita][Toolbar mainToolBar]
ToolButtonStyle=IconOnly
[TemplateChooserDialog]
ShowCustomDocumentWidgetByDefault=true
LastReturnType=Custom Document
[theme]
Theme=Krita dark
[python]
enable_colorspace=true
enable_comics_project_management_tools=true
enable_documenttools=true
enable_exportlayers=true
enable_filtermanager=true
enable_lastdocumentsdocker=true
enable_quick_settings_docker=true
enable_scripter=true
enable_tenbrushes=true
enable_tenscripts=true
enable_plugin_importer=true
+
+[SPenSettings]
+actionButtonClick=show_color_selector
+actionButtonDoubleClick=erase_action
+actionGestureCircleCCW=shift_brush_color_counter_clockwise
+actionGestureCircleCW=shift_brush_color_clockwise
+actionGestureSwipeDown=make_brush_color_darker
+actionGestureSwipeLeft=KritaSelected/KisToolColorPicker
+actionGestureSwipeRight=KritaShape/KisToolBrush
+actionGestureSwipeUp=make_brush_color_lighter
diff --git a/krita/krita4.xmlgui b/krita/krita4.xmlgui
index 531eee5e33..bfe22cce54 100644
--- a/krita/krita4.xmlgui
+++ b/krita/krita4.xmlgui
@@ -1,409 +1,410 @@
&View
&Canvas
&Snap To
&Image
&Rotate
&Layer
New
&Import/Export
Import
&Convert
&Select
&Group
&Transform
&Rotate
Transform &All Layers
&Rotate
S&plit
S&plit Alpha
&Select
Select &Opaque
Filte&r
&Tools
Scripts
Setti&ngs
-
+
+
-
+
&Help
File
Brushes and Stuff
diff --git a/packaging/android/androidbuild.sh b/packaging/android/androidbuild.sh
index 395217e301..3e3c6710aa 100755
--- a/packaging/android/androidbuild.sh
+++ b/packaging/android/androidbuild.sh
@@ -1,335 +1,335 @@
#!/bin/bash -e
# Example: androidbuild.sh -p=all --src=/home/sh_zam/workspace/krita --build-type=Release --build-root=/home/sh_zam/workspace/test-kreeta --ndk-path=/home/sh_zam/Android/Sdk/ndk-bundle --sdk-path=/home/sh_zam/Android/Sdk --api-level=21 --android-abi=armeabi-v7a --qt-path=/home/sh_zam/Qt/5.12.1/android_armv7
echoerr() { printf "ERROR: %s\n" "$*" >&2; }
print_usage() {
printf "\nUsage: "$0" [-p=PACKAGE] [ARGUMENTS..]\n"
printf "Packages: [all|krita-bin|apk|qt|3rdparty|boost|kf5]\n"
printf "Arguments: \n"
printf "\t--src=PATH Source files\n"
printf "\t--build-type=TYPE TYPE=[Debug|RelWithDebInfo|Release]\n"
printf "\t--build-root=PATH Path to build folder\n"
printf "\t--qt-path=PATH Path to qt libs(optional)\n"
printf "\t--ndk-path=PATH Android NDK root path\n"
printf "\t--sdk-path=PATH Android SDK root path\n"
printf "\t--api-level=NUMBER API level >= 21\n"
printf "\t--android-abi=ABI ABI=[armeabi-v7a|arm64-v8a|x86|x86_64]\n"
}
# check if the argument is passed
check_exists() {
if [[ ! -d ${!1} ]]; then
echoerr "$1 not specified or does not exist"
print_usage
exit
fi
}
setup_directories() {
export DOWNLOADS_DIR=$BUILD_ROOT/d
export DEPS_BUILD=$BUILD_ROOT/b
export THIRDPARTY_INSTALL=$BUILD_ROOT/i
if [[ ! -d $DOWNLOADS_DIR ]]; then
mkdir $DOWNLOADS_DIR -p
fi
if [[ ! -d $DEPS_BUILD ]]; then
mkdir $DEPS_BUILD -p
fi
if [[ ! -d $THIRDPARTY_INSTALL ]]; then
mkdir $THIRDPARTY_INSTALL -p
fi
}
configure_ext() {
cd $DEPS_BUILD
cmake $KRITA_ROOT/3rdparty \
-DINSTALL_ROOT=$THIRDPARTY_INSTALL \
-DEXTERNALS_DOWNLOAD_DIR=$DOWNLOADS_DIR \
-DCMAKE_INSTALL_PREFIX=$THIRDPARTY_INSTALL \
-DCMAKE_TOOLCHAIN_FILE=$CMAKE_ANDROID_NDK/build/cmake/android.toolchain.cmake \
-DANDROID_ABI=$ANDROID_ABI \
-DANDROID_PLATFORM=$ANDROID_NATIVE_API_LEVEL \
-DANDROID_SDK_ROOT=$ANDROID_SDK_ROOT
cd $BUILD_ROOT
}
PROC_COUNT=`grep processor /proc/cpuinfo | wc -l`
build_qt() {
- if [[ ! -z $QT_ANDROID && -e $QT_ANDROID/lib/libQt5AndroidExtras.so ]]; then
- echo "Qt path provided; Skipping Qt build"
- return 0
- fi
+# if [[ ! -z $QT_ANDROID && -e $QT_ANDROID/lib/libQt5AndroidExtras.so ]]; then
+# echo "Qt path provided; Skipping Qt build"
+# return 0
+# fi
configure_ext
cd $DEPS_BUILD
cmake --build . --config $BUILD_TYPE --target ext_qt -- -j$PROC_COUNT
cd $BUILD_ROOT
}
build_ext() {
if [[ ! -d $QT_ANDROID ]]; then
echoerr "qt libs not found"
echo "Please run -p=qt prior to this"
exit
fi
configure_ext
cd $DEPS_BUILD
# Please do not change the order
cmake --build . --config $BUILD_TYPE --target ext_png -- -j$PROC_COUNT
cmake --build . --config $BUILD_TYPE --target ext_zlib -- -j$PROC_COUNT
cmake --build . --config $BUILD_TYPE --target ext_quazip -- -j$PROC_COUNT
cmake --build . --config $BUILD_TYPE --target ext_lcms2 -- -j$PROC_COUNT
cmake --build . --config $BUILD_TYPE --target ext_expat -- -j$PROC_COUNT
- cmake --build . --config $BUILD_TYPE --target ext_exiv2 -- -j$PROC_COUNT
+ #cmake --build . --config $BUILD_TYPE --target ext_exiv2 -- -j$PROC_COUNT
cmake --build . --config $BUILD_TYPE --target ext_gsl -- -j$PROC_COUNT
cmake --build . --config $BUILD_TYPE --target ext_tiff -- -j$PROC_COUNT
cmake --build . --config $BUILD_TYPE --target ext_fftw3 -- -j$PROC_COUNT
cmake --build . --config $BUILD_TYPE --target ext_jpeg -- -j$PROC_COUNT
cmake --build . --config $BUILD_TYPE --target ext_giflib -- -j$PROC_COUNT
cmake --build . --config $BUILD_TYPE --target ext_eigen3 -- -j$PROC_COUNT
cd $BUILD_ROOT
}
build_boost() {
VERSION="1_69"
if [[ ! -d $DOWNLOADS_DIR/boost ]]; then
git clone https://github.com/moritz-wundke/Boost-for-Android $DOWNLOADS_DIR/boost
fi
cd $DOWNLOADS_DIR/boost
./build-android.sh --prefix=$THIRDPARTY_INSTALL --with-libraries=system \
--boost=1.69.0 --arch=$ANDROID_ABI $CMAKE_ANDROID_NDK
cd $THIRDPARTY_INSTALL/$ANDROID_ABI/lib
# possible because just one library is being used
mv libboost_system-*-$VERSION.a libboost_system.a
cd $BUILD_ROOT
}
build_kf5() {
if [[ ! -d $QT_ANDROID ]]; then
echoerr "qt libs not found"
echo "Please run -p=qt prior to this"
exit
fi
cd $BUILD_ROOT
if [[ $ANDROID_ABI == "armeabi-v7a" ]]; then
ANDROID_ARCHITECTURE=arm
elif [[ $ANDROID_ABI == "arm64-v8a" ]]; then
ANDROID_ARCHITECTURE=arm64
elif [[ $ANDROID_ABI == "x86" || $ANDROID_ABI == "x86_64" ]]; then
ANDROID_ARCHITECTURE=$ANDROID_ABI
fi
if [[ ! -d $BUILD_ROOT/kf5 ]]; then
mkdir $BUILD_ROOT/kf5 -p
fi
cd $BUILD_ROOT/kf5
if [[ ! -d kdesrc-conf-android ]]; then
git clone git://anongit.kde.org/scratch/cordlandwehr/kdesrc-conf-android.git
fi
if [[ ! -d extragear/kdesrc-build ]]; then
mkdir -p extragear/kdesrc-build
git clone git://anongit.kde.org/kdesrc-build extragear/kdesrc-build
fi
if [[ ! -e $BUILD_ROOT/kf5/kdesrc-build ]]; then
ln -s extragear/kdesrc-build/kdesrc-build kdesrc-build
fi
if [[ ! -e $BUILD_ROOT/kf5/kdesrc-buildrc ]]; then
ln -s kdesrc-conf-android/kdesrc-buildrc kdesrc-buildrc
fi
# Change the build configuration
sed -E -i "s|build-dir.*|build-dir $BUILD_ROOT/kf5/kde/build |g" $BUILD_ROOT/kf5/kdesrc-conf-android/kdesrc-buildrc
sed -E -i "s|source-dir.*|source-dir $BUILD_ROOT/kf5/kde/src |g" $BUILD_ROOT/kf5/kdesrc-conf-android/kdesrc-buildrc
sed -E -i "s|kdedir.*|kdedir $BUILD_ROOT/kf5/kde/install |g" $BUILD_ROOT/kf5/kdesrc-conf-android/kdesrc-buildrc
# build first, so toolchain could be used
$BUILD_ROOT/kf5/kdesrc-build extra-cmake-modules
if [[ -e $QT_ANDROID ]]; then
sed -E -i "s|-DCMAKE_PREFIX_PATH=.*?\\ |-DCMAKE_PREFIX_PATH=$QT_ANDROID- -DCMAKE_ANDROID_NDK=$CMAKE_ANDROID_NDK -DECM_ADDITIONAL_FIND_ROOT_PATH=$QT_ANDROID\;$BUILD_ROOT/kf5/kde/install -DANDROID_STL=c++_static -DCMAKE_TOOLCHAIN_FILE=$BUILD_ROOT/kf5/kde/install/share/ECM/toolchain/Android.cmake -DKCONFIG_USE_DBUS=OFF -DANDROID_PLATFORM=$ANDROID_NATIVE_API_LEVEL -DANDROID_API_LEVEL=$ANDROID_API_LEVEL -DANDROID_ABI=$ANDROID_ABI -DANDROID_ARCHITECTURE=$ANDROID_ARCHITECTURE |g" $BUILD_ROOT/kf5/kdesrc-conf-android/kdesrc-buildrc
# add __ANDROID_API__ to cxxflags
sed -i -- "s/cxxflags.*/& -D__ANDROID_API__=$ANDROID_API_LEVEL/" $BUILD_ROOT/kf5/kdesrc-conf-android/kdesrc-buildrc
else
echoerr "Qt Android libraries path doesn't exist. Exiting."
exit
fi
sed -E -i "s|use-modules.+|use-modules kconfig ki18n |g" $BUILD_ROOT/kf5/kdesrc-conf-android/kdesrc-buildrc
rm -rf $BUILD_ROOT/kf5/kde/build/* # clean build folders
# Please do not change the order
- ./kdesrc-build libintl-lite
- ./kdesrc-build ki18n kcoreaddons \
- frameworks-android \
- kwidgetsaddons kcompletion \
- kguiaddons kitemmodels \
- kitemviews kwindowsystem \
- karchive
+ # ./kdesrc-build libintl-lite
+ # ./kdesrc-build ki18n kcoreaddons \
+ # frameworks-android \
+ # kwidgetsaddons kcompletion \
+ # kguiaddons kitemmodels \
+ # kitemviews kwindowsystem \
+ # karchive
cd $BUILD_ROOT
}
build_krita() {
cd $BUILD_ROOT
# Configure files using cmake
cmake $KRITA_ROOT -DCMAKE_INSTALL_PREFIX=$INSTALL_PREFIX \
-DDEFINE_NO_DEPRECATED=1 \
-DCMAKE_BUILD_TYPE=$BUILD_TYPE \
-DCMAKE_TOOLCHAIN_FILE=$CMAKE_ANDROID_NDK/build/cmake/android.toolchain.cmake \
-DANDROID_PLATFORM=$ANDROID_NATIVE_API_LEVEL \
-DBUILD_TESTING=OFF -DKDE4_BUILD_TESTS=OFF \
-DBoost_NO_BOOST_CMAKE=TRUE \
-DBoost_NO_SYSTEM_PATHS=TRUE \
-DQTANDROID_EXPORTED_TARGET=krita \
-DANDROID_APK_DIR=$KRITA_ROOT/packaging/android/apk \
-DANDROID_STL=c++_shared \
-DANDROID_ABI=$ANDROID_ABI \
-DCMAKE_FIND_ROOT_PATH="$QT_ANDROID;$BUILD_ROOT/kf5/kde/install/;$BUILD_ROOT/i"
make -j$PROC_COUNT install
}
build_apk() {
cd $BUILD_ROOT
if [[ $BUILD_TYPE == "Release" ]]; then
make create-apk ARGS="--release"
else
make create-apk
fi
}
# if no arguments are passed
if [[ "$#" == 0 ]]; then
print_usage
exit
fi
for i in "$@"
do
case $i in
-p=*)
PACKAGE="${i#*=}"
shift
;;
--src=*)
export KRITA_ROOT="${i#*=}"
shift
;;
--build-type=*)
export BUILD_TYPE="${i#*=}"
;;
--build-root=*)
export BUILD_ROOT="${i#*=}"
shift
;;
--qt-path=*)
export QT_ANDROID="${i#*=}"
shift
;;
--ndk-path=*)
export CMAKE_ANDROID_NDK="${i#*=}"
shift
;;
--sdk-path=*)
export ANDROID_SDK_ROOT="${i#*=}"
shift
;;
--api-level=*)
export ANDROID_API_LEVEL="${i#*=}"
shift
;;
--android-abi=*)
export ANDROID_ABI="${i#*=}"
shift
;;
--help)
print_usage
exit
;;
esac
done
if [[ -z $ANDROID_ABI ]]; then
echo "Warning: ANDROID_ABI not specified, using the default one: armeabi-v7a"
export ANDROID_ABI=armeabi-v7a
fi
if [[ $ANDROID_ABI != "armeabi-v7a" && $ANDROID_ABI != "arm64-v8a" && \
$ANDROID_ABI != "x86" && $ANDROID_ABI != "x86_64" ]]; then
echoerr "Invalid ABI, please choose among: armeabi-v7a, arm64-v8a, x86, x86_64"
echo "Exiting Now."
exit
fi
if [[ -z $ANDROID_API_LEVEL ]]; then
echo "Warning: ANDROID_API_LEVEL not set, using the default one: 21"
export ANDROID_API_LEVEL=21
fi
if [[ -z $BUILD_ROOT ]]; then
echoerr "Build root not specified"
print_usage
elif [[ ! -d $BUILD_ROOT ]]; then
mkdir $BUILD_ROOT -p
fi
check_exists CMAKE_ANDROID_NDK
check_exists ANDROID_SDK_ROOT
check_exists KRITA_ROOT
export ANDROID_NATIVE_API_LEVEL=android-$ANDROID_API_LEVEL
export INSTALL_PREFIX=$BUILD_ROOT/krita-android-build
if [[ -z $QT_ANDROID ]]; then
export QT_ANDROID=$BUILD_ROOT/i
fi
setup_directories
case $PACKAGE in
all)
build_qt
build_kf5
build_ext
build_boost
build_krita
build_apk
;;
krita-bin)
build_krita
;;
apk)
build_apk
;;
qt)
build_qt
;;
3rdparty)
build_ext
;;
boost)
build_boost
;;
kf5)
build_qt
build_kf5
;;
*)
echoerr "Invalid package"
print_usage
;;
esac
diff --git a/packaging/android/apk/res/values/strings.xml b/packaging/android/apk/res/values/strings.xml
index c2eee880e8..c3545fe5f3 100644
--- a/packaging/android/apk/res/values/strings.xml
+++ b/packaging/android/apk/res/values/strings.xml
@@ -1,27 +1,12 @@
Click
Double Click
Swipe Up
Swipe Down
Swipe Left
Swipe Right
Circle Clockwise
Circle Counter-Clockwise
-Show color selector
diff --git a/packaging/android/apk/res/xml/remote_action.xml b/packaging/android/apk/res/xml/remote_action.xml
index f251c7989c..f6debc8cb4 100644
--- a/packaging/android/apk/res/xml/remote_action.xml
+++ b/packaging/android/apk/res/xml/remote_action.xml
@@ -1,220 +1,83 @@
+ repeatable_interval="short"
+ trigger_key="CTRL_LEFT+F1">
+ repeatable_interval="short"
+ trigger_key="CTRL_LEFT+F2">
+ repeatable_interval="short"
+ trigger_key="CTRL_LEFT+F3">
+ repeatable_interval="short"
+ trigger_key="CTRL_LEFT+F4">
+ repeatable_interval="short"
+ trigger_key="CTRL_LEFT+F5">
+ repeatable_interval="short"
+ trigger_key="CTRL_LEFT+F6">
+ repeatable_interval="short"
+ trigger_key="CTRL_LEFT+F7">
-
-
-
-
-
+ trigger_key="CTRL_LEFT+F8">
+
diff --git a/plugins/extensions/spensettings/DlgSPenSettings.cpp b/plugins/extensions/spensettings/DlgSPenSettings.cpp
index 17ad4e2daa..7e981174bd 100644
--- a/plugins/extensions/spensettings/DlgSPenSettings.cpp
+++ b/plugins/extensions/spensettings/DlgSPenSettings.cpp
@@ -1,16 +1,114 @@
#include "DlgSPenSettings.h"
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+
DlgSPenSettings::DlgSPenSettings(QWidget *parent)
: KoDialog(parent)
+ , m_model(new QStandardItemModel())
{
- setButtons(Cancel | Ok);
- setDefaultButton(Ok);
+ setButtons(Cancel | Apply);
+ setDefaultButton(Apply);
+
+ connect(this, SIGNAL(applyClicked()), this, SLOT(slotApplyClicked()));
mUi = new WdgSPenSettings(this);
+
+ m_model->setColumnCount(2);
+
+ KActionCollection* actionCollection = KisPart::instance()->currentMainwindow()->actionCollection();
+
+ // TODO - some actions are missing when no document is opened, then it shows no action selected
+ // TODO - popup palette is different action mechanism, thus is missing in this list
+ QStandardItem* defaultItem = new QStandardItem("No action selected");
+ m_model->appendRow(defaultItem);
+
+ for (QAction* action: actionCollection->actions()) {
+ QStandardItem* item = new QStandardItem(action->icon(), action->text());
+ QStandardItem* actionNameItem = new QStandardItem(action->objectName());
+ m_model->appendRow(QList() << item << actionNameItem);
+ }
+
+ mUi->cmbClickAction->setModel(m_model);
+ mUi->cmbDoubleClickAction->setModel(m_model);
+ mUi->cmbGestureSwipeUp->setModel(m_model);
+ mUi->cmbGestureSwipeDown->setModel(m_model);
+ mUi->cmbGestureSwipeLeft->setModel(m_model);
+ mUi->cmbGestureSwipeRight->setModel(m_model);
+ mUi->cmbGestureCircleCW->setModel(m_model);
+ mUi->cmbGestureCircleCCW->setModel(m_model);
+
+ loadSettings();
+
setMainWidget(mUi);
}
DlgSPenSettings::~DlgSPenSettings()
{
delete mUi;
+ delete m_model;
+}
+
+void DlgSPenSettings::slotApplyClicked()
+{
+ saveSettings();
+ accept();
+}
+
+void DlgSPenSettings::saveSettings()
+{
+ KConfigGroup cfg = KSharedConfig::openConfig()->group("SPenSettings");
+
+ cfg.writeEntry("actionButtonClick", actionNameForIndex(mUi->cmbClickAction->currentIndex()));
+ cfg.writeEntry("actionButtonDoubleClick", actionNameForIndex(mUi->cmbDoubleClickAction->currentIndex()));
+ cfg.writeEntry("actionGestureSwipeUp", actionNameForIndex(mUi->cmbGestureSwipeUp->currentIndex()));
+ cfg.writeEntry("actionGestureSwipeDown", actionNameForIndex(mUi->cmbGestureSwipeDown->currentIndex()));
+ cfg.writeEntry("actionGestureSwipeLeft", actionNameForIndex(mUi->cmbGestureSwipeLeft->currentIndex()));
+ cfg.writeEntry("actionGestureSwipeRight", actionNameForIndex(mUi->cmbGestureSwipeRight->currentIndex()));
+ cfg.writeEntry("actionGestureCircleCW", actionNameForIndex(mUi->cmbGestureCircleCW->currentIndex()));
+ cfg.writeEntry("actionGestureCircleCCW", actionNameForIndex(mUi->cmbGestureCircleCCW->currentIndex()));
+}
+
+void DlgSPenSettings::loadSettings()
+{
+ KConfigGroup cfg = KSharedConfig::openConfig()->group("SPenSettings");
+
+ mUi->cmbClickAction->setCurrentIndex(indexFromActionName(cfg.readEntry("actionButtonClick", QString())));
+ mUi->cmbDoubleClickAction->setCurrentIndex(indexFromActionName(cfg.readEntry("actionButtonDoubleClick", QString())));
+ mUi->cmbGestureSwipeUp->setCurrentIndex(indexFromActionName(cfg.readEntry("actionGestureSwipeUp", QString())));
+ mUi->cmbGestureSwipeDown->setCurrentIndex(indexFromActionName(cfg.readEntry("actionGestureSwipeDown", QString())));
+ mUi->cmbGestureSwipeLeft->setCurrentIndex(indexFromActionName(cfg.readEntry("actionGestureSwipeLeft", QString())));
+ mUi->cmbGestureSwipeRight->setCurrentIndex(indexFromActionName(cfg.readEntry("actionGestureSwipeRight", QString())));
+ mUi->cmbGestureCircleCW->setCurrentIndex(indexFromActionName(cfg.readEntry("actionGestureCircleCW", QString())));
+ mUi->cmbGestureCircleCCW->setCurrentIndex(indexFromActionName(cfg.readEntry("actionGestureCircleCCW", QString())));
+}
+
+QString DlgSPenSettings::actionNameForIndex(int currentIndex)
+{
+ QModelIndex index = m_model->index(currentIndex, m_ACTION_NAME_COLUMN);
+ QString actionName = m_model->itemFromIndex(index)->data(Qt::DisplayRole).toString();
+ return actionName;
+}
+
+int DlgSPenSettings::indexFromActionName(QString actionName)
+{
+ if (actionName.isEmpty()) {
+ return 0;
+ } else {
+ QList itemsFound = m_model->findItems(actionName, Qt::MatchExactly, m_ACTION_NAME_COLUMN);
+ if (itemsFound.size() == 0) {
+ return 0;
+ } else {
+ return itemsFound[0]->index().row();
+ }
+ }
}
diff --git a/plugins/extensions/spensettings/DlgSPenSettings.h b/plugins/extensions/spensettings/DlgSPenSettings.h
index 2c218f6272..4e497de119 100644
--- a/plugins/extensions/spensettings/DlgSPenSettings.h
+++ b/plugins/extensions/spensettings/DlgSPenSettings.h
@@ -1,31 +1,45 @@
#ifndef DLGSPENSETTINGS_H
#define DLGSPENSETTINGS_H
#include
+#include
#include
#include "ui_wdg_spensettings.h"
+class QModelIndex;
+
class WdgSPenSettings : public QWidget, public Ui::WdgSPenSettings
{
Q_OBJECT
public:
WdgSPenSettings(QWidget *parent) : QWidget(parent) {
setupUi(this);
}
};
class DlgSPenSettings : public KoDialog
{
Q_OBJECT
public:
DlgSPenSettings(QWidget* parent = 0);
~DlgSPenSettings();
+public Q_SLOTS:
+ void slotApplyClicked();
+
private:
+ static const int m_ACTION_NAME_COLUMN = 1;
+
+ void saveSettings();
+ void loadSettings();
+ QString actionNameForIndex(int currentIndex);
+ int indexFromActionName(QString actionName);
+
WdgSPenSettings* mUi;
+ QStandardItemModel* m_model;
};
#endif // DLGSPENSETTINGS_H
diff --git a/plugins/extensions/spensettings/SPenSettings.action b/plugins/extensions/spensettings/SPenSettings.action
index be2e8af81e..957c9c6c82 100644
--- a/plugins/extensions/spensettings/SPenSettings.action
+++ b/plugins/extensions/spensettings/SPenSettings.action
@@ -1,20 +1,110 @@
S-Pen Actions
S-Pen Button Click
10000
0
ctrl+f1
false
+
+
+ S-Pen Button Double Click
+
+
+
+ 10000
+ 0
+ ctrl+f2
+ false
+
+
+
+
+
+ S-Pen Gesture Swipe Up
+
+
+
+ 10000
+ 0
+ ctrl+f3
+ false
+
+
+
+
+
+ S-Pen Gesture Swipe Down
+
+
+
+ 10000
+ 0
+ ctrl+f4
+ false
+
+
+
+
+
+ S-Pen Gesture Swipe Left
+
+
+
+ 10000
+ 0
+ ctrl+f5
+ false
+
+
+
+
+
+ S-Pen Gesture Swipe Right
+
+
+
+ 10000
+ 0
+ ctrl+f6
+ false
+
+
+
+
+
+ S-Pen Gesture Circle Clockwise
+
+
+
+ 10000
+ 0
+ ctrl+f7
+ false
+
+
+
+
+
+ S-Pen Gesture Circle Counter-Clockwise
+
+
+
+ 10000
+ 0
+ ctrl+f8
+ false
+
+
diff --git a/plugins/extensions/spensettings/SPenSettings.cpp b/plugins/extensions/spensettings/SPenSettings.cpp
index 395c9c560e..65ff611d6c 100644
--- a/plugins/extensions/spensettings/SPenSettings.cpp
+++ b/plugins/extensions/spensettings/SPenSettings.cpp
@@ -1,38 +1,120 @@
/*
* Copyright (c) 2020 Anna Medonosová
*
* 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 2 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, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
#include "SPenSettings.h"
#include
+#include
+#include
+#include
+#include
+#include
#include
+#include
+#include
+#include
K_PLUGIN_FACTORY_WITH_JSON(SPenSettingsFactory, "kritaspensettings.json", registerPlugin();)
SPenSettings::SPenSettings(QObject* parent, const QVariantList&)
: KisActionPlugin(parent)
{
-// viewManager()->actionManager()
+ ENTER_FUNCTION();
+
+ KisAction* actionSPenSettings = createAction("spensettings");
+ actionSPenSettings->setText("Configure S-Pen Actions");
+ connect(actionSPenSettings, SIGNAL(triggered()), this, SLOT(slotOpenSettingsDialog()));
+
+ loadSettings();
+
+ KisAction* actionSPenClick = viewManager()->actionManager()->createAction("spen_click");
+ connect(actionSPenClick, &KisAction::triggered, this, [this](){ slotActivateAction(Action::Click); });
+
+ KisAction* actionSPenDoubleClick = viewManager()->actionManager()->createAction("spen_double_click");
+ connect(actionSPenDoubleClick, &KisAction::triggered, this, [this]() { slotActivateAction(Action::DoubleClick); });
+
+ KisAction* actionSPenSwipeUp = viewManager()->actionManager()->createAction("spen_swipe_up");
+ connect(actionSPenSwipeUp, &KisAction::triggered, this, [this]() { slotActivateAction(Action::SwipeUp); });
+
+ KisAction* actionSPenSwipeDown = viewManager()->actionManager()->createAction("spen_swipe_down");
+ connect(actionSPenSwipeDown, &KisAction::triggered, this, [this]() { slotActivateAction(Action::SwipeDown); });
+
+ KisAction* actionSPenSwipeLeft = viewManager()->actionManager()->createAction("spen_swipe_left");
+ connect(actionSPenSwipeLeft, &KisAction::triggered, this, [this]() { slotActivateAction(Action::SwipeLeft); });
+
+ KisAction* actionSPenSwipeRight = viewManager()->actionManager()->createAction("spen_swipe_right");
+ connect(actionSPenSwipeRight, &KisAction::triggered, this, [this]() { slotActivateAction(Action::SwipeRight); });
+
+ KisAction* actionSPenCircleCW = viewManager()->actionManager()->createAction("spen_circle_cw");
+ connect(actionSPenCircleCW, &KisAction::triggered, this, [this]() { slotActivateAction(Action::CircleCW); });
+
+ KisAction* actionSPenCircleCCW = viewManager()->actionManager()->createAction("spen_circle_ccw");
+ connect(actionSPenCircleCCW, &KisAction::triggered, this, [this]() { slotActivateAction(Action::CircleCCW); });
}
SPenSettings::~SPenSettings()
{
}
+void SPenSettings::slotOpenSettingsDialog()
+{
+ DlgSPenSettings dlgSettings(viewManager()->mainWindow());
+ int result = dlgSettings.exec();
+
+ if (result == QDialog::Accepted) {
+ loadSettings();
+ }
+}
+
+void SPenSettings::slotActivateAction(SPenSettings::Action gestureType)
+{
+ QString actionName = m_actionMap.value(gestureType);
+ qDebug() << "Gesture " << gestureType << " action " << actionName;
+
+ if (!actionName.isEmpty()) {
+ KActionCollection* actionCollection = KisPart::instance()->currentMainwindow()->actionCollection();
+ QAction* action = actionCollection->action(actionName);
+ if (action) {
+ qDebug() << "triggering action " << actionName;
+ action->trigger();
+ }
+ }
+}
+
+void SPenSettings::loadSettings()
+{
+ ENTER_FUNCTION();
+
+ qDebug() << "reloading settings";
+ m_actionMap.clear();
+
+ KConfigGroup cfg = KSharedConfig::openConfig()->group("SPenSettings");
+
+ m_actionMap.insert(Action::Click, cfg.readEntry("actionButtonClick", QString()));
+ m_actionMap.insert(Action::DoubleClick,cfg.readEntry("actionButtonDoubleClick", QString()));
+ m_actionMap.insert(Action::SwipeUp,cfg.readEntry("actionGestureSwipeUp", QString()));
+ m_actionMap.insert(Action::SwipeDown, cfg.readEntry("actionGestureSwipeDown", QString()));
+ m_actionMap.insert(Action::SwipeLeft, cfg.readEntry("actionGestureSwipeLeft", QString()));
+ m_actionMap.insert(Action::SwipeRight, cfg.readEntry("actionGestureSwipeRight", QString()));
+ m_actionMap.insert(Action::CircleCW, cfg.readEntry("actionGestureCircleCW", QString()));
+ m_actionMap.insert(Action::CircleCCW, cfg.readEntry("actionGestureCircleCCW", QString()));
+}
+
#include "SPenSettings.moc"
diff --git a/plugins/extensions/spensettings/SPenSettings.h b/plugins/extensions/spensettings/SPenSettings.h
index 6bdcf867f0..a819840b31 100644
--- a/plugins/extensions/spensettings/SPenSettings.h
+++ b/plugins/extensions/spensettings/SPenSettings.h
@@ -1,15 +1,38 @@
#ifndef SPENSETTINGS_H
#define SPENSETTINGS_H
#include
+#include
#include
class SPenSettings : public KisActionPlugin
{
Q_OBJECT
public:
SPenSettings(QObject* parent, const QVariantList&);
~SPenSettings();
+
+ enum Action {
+ Click,
+ DoubleClick,
+ SwipeUp,
+ SwipeDown,
+ SwipeLeft,
+ SwipeRight,
+ CircleCW,
+ CircleCCW
+ };
+
+
+public Q_SLOTS:
+ void slotOpenSettingsDialog();
+ void slotActivateAction(SPenSettings::Action gestureType);
+
+
+private:
+ QMap m_actionMap;
+
+ void loadSettings();
};
#endif // SPENSETTINGS_H
diff --git a/plugins/extensions/spensettings/spensettings.xmlgui b/plugins/extensions/spensettings/spensettings.xmlgui
index 6c36524044..a8d108ecd2 100644
--- a/plugins/extensions/spensettings/spensettings.xmlgui
+++ b/plugins/extensions/spensettings/spensettings.xmlgui
@@ -1,8 +1,8 @@
-
+
-
-
+
+
diff --git a/plugins/extensions/spensettings/wdg_spensettings.ui b/plugins/extensions/spensettings/wdg_spensettings.ui
index af3c590378..489a4df897 100644
--- a/plugins/extensions/spensettings/wdg_spensettings.ui
+++ b/plugins/extensions/spensettings/wdg_spensettings.ui
@@ -1,54 +1,116 @@
WdgSPenSettings
0
0
640
- 439
+ 398
-
Button Actions
-
-
-
-
-
- Double Click
-
-
-
+
-
Click
-
+ -
+
+
+ Double Click
+
+
+
-
-
Gestures
+
+
-
+
+
+ Swipe Up
+
+
+
+ -
+
+
+ -
+
+
+ Swipe Down
+
+
+
+ -
+
+
+ Swipe Right
+
+
+
+ -
+
+
+ Swipe Left
+
+
+
+ -
+
+
+ Circle Clockwise
+
+
+
+ -
+
+
+ Circle Counterclockwise
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+