Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Q
qtquickcontrols-nemo
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
NemoMobile
qtquickcontrols-nemo
Commits
7a03018b
Commit
7a03018b
authored
Aug 03, 2017
by
Aleksi Suomalainen
Committed by
GitHub
Aug 03, 2017
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' into inversemousearea
parents
ea3e9c68
d5b5ecee
Changes
18
Show whitespace changes
Inline
Side-by-side
Showing
18 changed files
with
599 additions
and
294 deletions
+599
-294
IconPage.qml
examples/touch/content/IconPage.qml
+68
-0
main.qml
examples/touch/main.qml
+4
-0
touch.pro
examples/touch/touch.pro
+3
-17
ApplicationWindow.qml
src/controls/ApplicationWindow.qml
+345
-262
HeaderToolsLayout.qml
src/controls/HeaderToolsLayout.qml
+3
-3
IconButton.qml
src/controls/IconButton.qml
+71
-0
controls.pro
src/controls/controls.pro
+2
-1
nemoimageprovider.cpp
src/controls/nemoimageprovider.cpp
+5
-0
nemoimageprovider.h
src/controls/nemoimageprovider.h
+1
-0
qmldir
src/controls/qmldir
+1
-0
sizing.cpp
src/controls/sizing.cpp
+23
-0
sizing.h
src/controls/sizing.h
+3
-0
mlocalthemedaemonclient.cpp
src/controls/themedaemon/mlocalthemedaemonclient.cpp
+22
-10
mlocalthemedaemonclient.h
src/controls/themedaemon/mlocalthemedaemonclient.h
+2
-0
ButtonStyle.qml
src/styles/ButtonStyle.qml
+1
-1
IconButtonStyle.qml
src/styles/IconButtonStyle.qml
+43
-0
qmldir
src/styles/qmldir
+1
-0
styles.pro
src/styles/styles.pro
+1
-0
No files found.
examples/touch/content/IconPage.qml
0 → 100644
View file @
7a03018b
/****************************************************************************************
**
** Copyright (C) 2017 Eetu Kahelin
** All rights reserved.
**
** You may use this file under the terms of BSD license as follows:
**
** Redistribution and use in source and binary forms, with or without
** modification, are permitted provided that the following conditions are met:
** * Redistributions of source code must retain the above copyright
** notice, this list of conditions and the following disclaimer.
** * Redistributions in binary form must reproduce the above copyright
** notice, this list of conditions and the following disclaimer in the
** documentation and/or other materials provided with the distribution.
** * Neither the name of the author nor the
** names of its contributors may be used to endorse or promote products
** derived from this software without specific prior written permission.
**
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
** ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
** WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
** DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR
** ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
** (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
** LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
** ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
** SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
**
****************************************************************************************/
import
QtQuick
2.6
import
QtQuick
.
Controls
1.0
//needed for the Stack attached property
import
QtQuick
.
Controls
.
Nemo
1.0
import
QtQuick
.
Controls
.
Styles
.
Nemo
1.0
Page
{
id
:
root
headerTools
:
HeaderToolsLayout
{
showBackButton
:
true
;
title
:
"
Icon example
"
}
allowedOrientations
:
Qt
.
PortraitOrientation
|
Qt
.
LandscapeOrientation
|
Qt
.
InvertedLandscapeOrientation
|
Qt
.
InvertedPortraitOrientation
Column
{
spacing
:
Theme
.
itemSpacingMedium
anchors.centerIn
:
parent
//fontawesome
IconButton
{
source
:
"
image://theme/compass
"
}
//fontawesome
IconButton
{
width
:
height
height
:
Theme
.
itemHeightExtraLarge
source
:
"
image://theme/bell
"
enabled
:
false
}
//fontawesome
IconButton
{
source
:
"
image://theme/address-book?
"
+
Theme
.
fillColor
}
//glacier
IconButton
{
width
:
height
height
:
Theme
.
itemHeightExtraLarge
source
:
"
image://theme/icon-m-framework-close-thumbnail
"
}
}
}
examples/touch/main.qml
View file @
7a03018b
...
@@ -116,6 +116,10 @@ ApplicationWindow {
...
@@ -116,6 +116,10 @@ ApplicationWindow {
title
:
"
Query Dialog
"
title
:
"
Query Dialog
"
page
:
"
content/QueryDialogPage.qml
"
page
:
"
content/QueryDialogPage.qml
"
}
}
ListElement
{
title
:
"
Icons
"
page
:
"
content/IconPage.qml
"
}
}
}
...
...
examples/touch/touch.pro
View file @
7a03018b
...
@@ -24,29 +24,15 @@ qml.files += \
...
@@ -24,29 +24,15 @@ qml.files += \
content
/
ButtonRowPage
.
qml
\
content
/
ButtonRowPage
.
qml
\
content
/
QueryDialogPage
.
qml
\
content
/
QueryDialogPage
.
qml
\
content
/
ListViewPage
.
qml
\
content
/
ListViewPage
.
qml
\
content
/
SelectRollerPage
.
qml
content
/
SelectRollerPage
.
qml
\
content
/
IconPage
.
qml
qml
.
path
=
/
usr
/
share
/
glacier
-
components
/
content
qml
.
path
=
/
usr
/
share
/
glacier
-
components
/
content
images
.
files
=
images
/*
.png
images
.
files
=
images
/*
.png
images.path = /usr/share/glacier-components/images
images.path = /usr/share/glacier-components/images
OTHER_FILES += \
OTHER_FILES += $$qml.files
main.qml \
content/AndroidDelegate.qml \
content/ButtonPage.qml \
content/ProgressBarPage.qml \
content/SliderPage.qml \
content/TabBarPage.qml \
content/TextInputPage.qml \
content/LiveCoding.qml \
content/SpinnerPage.qml \
content/LabelPage.qml \
content/CheckboxPage.qml \
content/ButtonRowPage.qml \
content/QueryDialogPage.qml \
content/ListViewPage.qml \
content/SelectRollerPage.qml
desktop.path = /usr/share/applications
desktop.path = /usr/share/applications
...
...
src/controls/ApplicationWindow.qml
View file @
7a03018b
/*
/*
* Copyright (C) 2013 Andrea Bernabei <and.bernabei@gmail.com>
* Copyright (C) 2013 Andrea Bernabei <and.bernabei@gmail.com>
* Copyright (C) 2013 Jolla Ltd.
* Copyright (C) 2017 Eetu Kahelin
*
*
* This library is free software; you can redistribute it and/or
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* modify it under the terms of the GNU Library General Public
...
@@ -28,15 +30,14 @@ import QtQuick.Controls.Styles.Nemo 1.0
...
@@ -28,15 +30,14 @@ import QtQuick.Controls.Styles.Nemo 1.0
NemoWindow
{
NemoWindow
{
id
:
root
id
:
root
width
:
320
height
:
640
property
alias
header
:
toolBar
property
alias
header
:
toolBar
/*! \internal */
/*! \internal */
default
property
alias
data
:
contentArea
.
data
default
property
alias
data
:
contentArea
.
data
property
alias
pageStack
:
stackView
property
alias
pageStack
:
stackView
property
alias
initialPage
:
stackView
.
initialItem
property
alias
initialPage
:
stackView
.
initialItem
property
bool
applicationActive
:
Qt
.
application
.
active
property
alias
orientation
:
contentArea
.
uiOrientation
property
alias
orientation
:
contentArea
.
uiOrientation
readonly
property
int
isUiPortrait
:
orientation
==
Qt
.
PortraitOrientation
||
orientation
==
Qt
.
InvertedPortraitOrientation
readonly
property
int
isUiPortrait
:
orientation
==
Qt
.
PortraitOrientation
||
orientation
==
Qt
.
InvertedPortraitOrientation
...
@@ -140,21 +141,29 @@ NemoWindow {
...
@@ -140,21 +141,29 @@ NemoWindow {
Item
{
Item
{
id
:
backgroundItem
id
:
backgroundItem
anchors.fill
:
parent
anchors.centerIn
:
parent
// NOTE: Using Screen.height/width will cause issues when the app is not fullscreen (e.g. when testing using Qt desktop)
// because in that case the app window will be smaller but the content will still be for fullscreen size
width
:
__transpose
?
Screen
.
height
:
Screen
.
width
height
:
__transpose
?
Screen
.
width
:
Screen
.
height
rotation
:
rotationToTransposeToPortrait
()
rotation
:
rotationToTransposeToPortrait
()
Item
{
id
:
clipping
z
:
1
width
:
parent
.
width
-
(
isUiLandscape
?
stackView
.
panelSize
:
0
)
height
:
parent
.
height
-
(
isUiPortrait
?
stackView
.
panelSize
:
0
)
clip
:
stackView
.
panelSize
>
0
//This is the rotating item
//This is the rotating item
Item
{
Item
{
id
:
contentArea
id
:
contentArea
width
:
parent
.
width
height
:
parent
.
height
anchors.centerIn
:
parent
anchors.centerIn
:
parent
transform
:
Scale
{
id
:
contentScale
property
bool
animationRunning
:
xAnim
.
running
||
yAnim
.
running
Behavior
on
xScale
{
NumberAnimation
{
id
:
xAnim
;
duration
:
100
}
}
Behavior
on
yScale
{
NumberAnimation
{
id
:
yAnim
;
duration
:
100
}
}
}
property
int
_horizontalDimension
:
parent
?
parent
.
width
:
0
property
int
_horizontalDimension
:
parent
?
parent
.
width
:
0
property
int
_verticalDimension
:
parent
?
parent
.
height
:
0
property
int
_verticalDimension
:
parent
?
parent
.
height
:
0
...
@@ -175,8 +184,31 @@ NemoWindow {
...
@@ -175,8 +184,31 @@ NemoWindow {
anchors.left
:
root
.
isUiPortrait
?
parent
.
left
:
toolBar
.
right
anchors.left
:
root
.
isUiPortrait
?
parent
.
left
:
toolBar
.
right
anchors.bottom
:
parent
.
bottom
anchors.bottom
:
parent
.
bottom
property
real
panelSize
:
0
property
real
previousImSize
:
0
property
real
imSize
:
!
root
.
applicationActive
?
0
:
(
isUiPortrait
?
(
root
.
_transpose
?
Qt
.
inputMethod
.
keyboardRectangle
.
width
:
Qt
.
inputMethod
.
keyboardRectangle
.
height
)
:
(
root
.
_transpose
?
Qt
.
inputMethod
.
keyboardRectangle
.
height
:
Qt
.
inputMethod
.
keyboardRectangle
.
width
))
onImSizeChanged
:
{
if
(
imSize
<=
0
&&
previousImSize
>
0
)
{
imShowAnimation
.
stop
()
imHideAnimation
.
start
()
}
else
if
(
imSize
>
0
&&
previousImSize
<=
0
)
{
imHideAnimation
.
stop
()
imShowAnimation
.
to
=
imSize
imShowAnimation
.
start
()
}
else
{
panelSize
=
imSize
}
previousImSize
=
imSize
}
clip
:
true
clip
:
true
Component.onCompleted
:
stackInitialized
=
true
Component.onCompleted
:
{
stackInitialized
=
true
}
//IMPORTANT: this property makes it so that at app startup we wait for the initial page to be pushed
//IMPORTANT: this property makes it so that at app startup we wait for the initial page to be pushed
//before determining the initial ui orientation (see the states logic below)
//before determining the initial ui orientation (see the states logic below)
//If we don't use this, the orientation will change first time based on NemoWindow's allowedOrientation,
//If we don't use this, the orientation will change first time based on NemoWindow's allowedOrientation,
...
@@ -261,6 +293,28 @@ NemoWindow {
...
@@ -261,6 +293,28 @@ NemoWindow {
}
}
}
}
SequentialAnimation
{
id
:
imHideAnimation
PauseAnimation
{
duration
:
200
}
NumberAnimation
{
target
:
stackView
property
:
'
panelSize
'
to
:
0
duration
:
200
easing.type
:
Easing
.
InOutQuad
}
}
NumberAnimation
{
id
:
imShowAnimation
target
:
stackView
property
:
'
panelSize
'
duration
:
200
easing.type
:
Easing
.
InOutQuad
}
}
}
Header
{
Header
{
...
@@ -328,6 +382,13 @@ NemoWindow {
...
@@ -328,6 +382,13 @@ NemoWindow {
width
:
parent
.
width
width
:
parent
.
width
rotation
:
0
rotation
:
0
}
}
AnchorChanges
{
target
:
clipping
anchors.top
:
parent
.
top
anchors.left
:
parent
.
left
anchors.right
:
undefined
anchors.bottom
:
undefined
}
},
},
State
{
State
{
name
:
'
Landscape
'
name
:
'
Landscape
'
...
@@ -346,6 +407,13 @@ NemoWindow {
...
@@ -346,6 +407,13 @@ NemoWindow {
width
:
parent
.
height
width
:
parent
.
height
rotation
:
-
90
rotation
:
-
90
}
}
AnchorChanges
{
target
:
clipping
anchors.top
:
undefined
anchors.left
:
undefined
anchors.right
:
parent
.
right
anchors.bottom
:
parent
.
bottom
}
},
},
State
{
State
{
name
:
'
PortraitInverted
'
name
:
'
PortraitInverted
'
...
@@ -364,6 +432,13 @@ NemoWindow {
...
@@ -364,6 +432,13 @@ NemoWindow {
width
:
parent
.
width
width
:
parent
.
width
rotation
:
0
rotation
:
0
}
}
AnchorChanges
{
target
:
clipping
anchors.top
:
undefined
anchors.left
:
undefined
anchors.right
:
parent
.
right
anchors.bottom
:
parent
.
bottom
}
},
},
State
{
State
{
name
:
'
LandscapeInverted
'
name
:
'
LandscapeInverted
'
...
@@ -382,6 +457,13 @@ NemoWindow {
...
@@ -382,6 +457,13 @@ NemoWindow {
width
:
parent
.
height
width
:
parent
.
height
rotation
:
-
90
rotation
:
-
90
}
}
AnchorChanges
{
target
:
clipping
anchors.top
:
undefined
anchors.left
:
parent
.
left
anchors.right
:
undefined
anchors.bottom
:
parent
.
bottom
}
}
}
]
]
...
@@ -433,5 +515,6 @@ NemoWindow {
...
@@ -433,5 +515,6 @@ NemoWindow {
}
}
}
}
}
}
}
}
}
src/controls/HeaderToolsLayout.qml
View file @
7a03018b
...
@@ -22,7 +22,8 @@ Item {
...
@@ -22,7 +22,8 @@ Item {
property
bool
isUiPortrait
:
header
&&
header
.
appWindow
.
isUiPortrait
property
bool
isUiPortrait
:
header
&&
header
.
appWindow
.
isUiPortrait
property
bool
showBackButton
:
false
property
bool
showBackButton
:
false
property
int
toolMeasure
:
parent
.
width
/
10
height
:
toolMeasure
Rectangle
{
Rectangle
{
id
:
backButton
id
:
backButton
width
:
opacity
?
size
.
dp
(
60
)
:
0
width
:
opacity
?
size
.
dp
(
60
)
:
0
...
@@ -84,13 +85,12 @@ Item {
...
@@ -84,13 +85,12 @@ Item {
anchors.rightMargin
:
size
.
dp
(
20
)
anchors.rightMargin
:
size
.
dp
(
20
)
anchors.verticalCenter
:
parent
.
verticalCenter
anchors.verticalCenter
:
parent
.
verticalCenter
width
:
tools
?
(
size
.
dp
(
50
)
*
Math
.
min
(
maxNumberOfToolButtons
,
tools
.
length
))
:
0
width
:
tools
?
(
size
.
dp
(
50
)
*
Math
.
min
(
maxNumberOfToolButtons
,
tools
.
length
))
:
0
property
int
maxNumberOfToolButtons
:
3
property
int
maxNumberOfToolButtons
:
3
RowLayout
{
RowLayout
{
id
:
toolsRow
id
:
toolsRow
anchors.centerIn
:
parent
anchors.centerIn
:
parent
height
:
toolMeasure
function
assignRotationBindings
()
{
function
assignRotationBindings
()
{
for
(
var
i
=
0
;
i
<
children
.
length
;
++
i
)
{
for
(
var
i
=
0
;
i
<
children
.
length
;
++
i
)
{
children
[
i
].
rotation
=
Qt
.
binding
(
function
()
{
return
isUiPortrait
?
0
:
90
})
children
[
i
].
rotation
=
Qt
.
binding
(
function
()
{
return
isUiPortrait
?
0
:
90
})
...
...
src/controls/IconButton.qml
0 → 100644
View file @
7a03018b
/****************************************************************************************
**
** Copyright (C) 2017 Eetu Kahelin
** All rights reserved.
**
** You may use this file under the terms of BSD license as follows:
**
** Redistribution and use in source and binary forms, with or without
** modification, are permitted provided that the following conditions are met:
** * Redistributions of source code must retain the above copyright
** notice, this list of conditions and the following disclaimer.
** * Redistributions in binary form must reproduce the above copyright
** notice, this list of conditions and the following disclaimer in the
** documentation and/or other materials provided with the distribution.
** * Neither the name of the author nor the
** names of its contributors may be used to endorse or promote products
** derived from this software without specific prior written permission.
**
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
** ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
** WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
** DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR
** ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
** (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
** LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
** ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
** SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
**
****************************************************************************************/
import
QtQuick
2.6
import
QtQuick
.
Controls
1.0
import
QtQuick
.
Controls
.
Nemo
1.0
import
QtQuick
.
Controls
.
Styles
.
Nemo
1.0
Button
{
property
color
highlightColor
:
Theme
.
accentColor
property
bool
highlighted
:
pressed
property
bool
_showPress
:
highlighted
||
pressTimer
.
running
property
string
source
property
string
highlightSource
:
{
if
(
source
!=
""
)
{
var
tmpSrc
=
source
.
toString
()
var
i
=
tmpSrc
.
lastIndexOf
(
"
?
"
)
if
(
i
!==
-
1
)
{
tmpSrc
=
tmpSrc
.
substring
(
0
,
i
)
}
return
tmpSrc
+
"
?
"
+
highlightColor
}
else
{
return
""
}
}
onPressedChanged
:
{
if
(
pressed
)
{
pressTimer
.
start
()
}
}
width
:
Theme
.
itemHeightLarge
height
:
width
style
:
IconButtonStyle
{
}
Timer
{
id
:
pressTimer
interval
:
20
}
}
src/controls/controls.pro
View file @
7a03018b
...
@@ -22,7 +22,8 @@ QML_FILES += \
...
@@ -22,7 +22,8 @@ QML_FILES += \
ListViewItemWithActions
.
qml
\
ListViewItemWithActions
.
qml
\
GlacierRoller
.
qml
\
GlacierRoller
.
qml
\
GlacierRollerItem
.
qml
\
GlacierRollerItem
.
qml
\
InverseMouseArea
.
qml
InverseMouseArea
.
qml
\
IconButton
.
qml
OTHER_FILES
+=
qmldir
\
OTHER_FILES
+=
qmldir
\
$$
QML_FILES
$$
QML_FILES
...
...
src/controls/nemoimageprovider.cpp
View file @
7a03018b
...
@@ -30,3 +30,8 @@ QImage NemoImageProvider::requestImage(const QString &id, QSize *size, const QSi
...
@@ -30,3 +30,8 @@ QImage NemoImageProvider::requestImage(const QString &id, QSize *size, const QSi
Q_UNUSED
(
requestedSize
);
Q_UNUSED
(
requestedSize
);
return
m_client
->
readImage
(
id
);
return
m_client
->
readImage
(
id
);
}
}
QPixmap
NemoImageProvider
::
requestPixmap
(
const
QString
&
id
,
QSize
*
size
,
const
QSize
&
requestedSize
)
{
Q_UNUSED
(
size
);
return
m_client
->
requestPixmap
(
id
,
requestedSize
);
}
src/controls/nemoimageprovider.h
View file @
7a03018b
...
@@ -27,6 +27,7 @@ class NemoImageProvider : public QQuickImageProvider
...
@@ -27,6 +27,7 @@ class NemoImageProvider : public QQuickImageProvider
public:
public:
explicit
NemoImageProvider
();
explicit
NemoImageProvider
();
QImage
requestImage
(
const
QString
&
id
,
QSize
*
size
,
const
QSize
&
requestedSize
);
QImage
requestImage
(
const
QString
&
id
,
QSize
*
size
,
const
QSize
&
requestedSize
);
QPixmap
requestPixmap
(
const
QString
&
id
,
QSize
*
size
,
const
QSize
&
requestedSize
);
private:
private:
MLocalThemeDaemonClient
*
m_client
;
MLocalThemeDaemonClient
*
m_client
;
};
};
...
...
src/controls/qmldir
View file @
7a03018b
...
@@ -24,6 +24,7 @@ ListViewItemWithActions 1.0 ListViewItemWithActions.qml
...
@@ -24,6 +24,7 @@ ListViewItemWithActions 1.0 ListViewItemWithActions.qml
GlacierRoller 1.0 GlacierRoller.qml
GlacierRoller 1.0 GlacierRoller.qml
GlacierRollerItem 1.0 GlacierRollerItem.qml
GlacierRollerItem 1.0 GlacierRollerItem.qml
InverseMouseArea 1.0 InverseMouseArea.qml
InverseMouseArea 1.0 InverseMouseArea.qml
IconButton 1.0 IconButton.qml
# MIRRORED CONTROLS:
# MIRRORED CONTROLS:
# These are the controls that we take directly from official QQC.
# These are the controls that we take directly from official QQC.
...
...
src/controls/sizing.cpp
View file @
7a03018b
...
@@ -105,3 +105,26 @@ float Sizing::dp(float value)
...
@@ -105,3 +105,26 @@ float Sizing::dp(float value)
{
{
return
value
*
m_dp_factor
;
return
value
*
m_dp_factor
;
}
}
void
Sizing
::
setMmScaleFactor
(
float
value
)
{
if
(
value
!=
0
)
{
qDebug
()
<<
"Set custom mm scale factor"
;
m_p_width
=
value
;
setMmScaleFactor
();
}
}
void
Sizing
::
setDpScaleFactor
(
float
value
)
{
if
(
value
!=
0
)
{
qDebug
()
<<
"Set custom dp scale factor"
;
m_dp_factor
=
value
;
}
}
src/controls/sizing.h
View file @
7a03018b
...
@@ -37,6 +37,9 @@ public:
...
@@ -37,6 +37,9 @@ public:
Q_INVOKABLE
float
mm
(
float
value
);
Q_INVOKABLE
float
mm
(
float
value
);
Q_INVOKABLE
float
dp
(
float
value
);
Q_INVOKABLE
float
dp
(
float
value
);
Q_INVOKABLE
void
setMmScaleFactor
(
float
value
);
Q_INVOKABLE
void
setDpScaleFactor
(
float
value
);
private:
private:
bool
m_valid
;
bool
m_valid
;
...
...
src/controls/themedaemon/mlocalthemedaemonclient.cpp
View file @
7a03018b
...
@@ -48,9 +48,9 @@ MLocalThemeDaemonClient::MLocalThemeDaemonClient(const QString &testPath, QObjec
...
@@ -48,9 +48,9 @@ MLocalThemeDaemonClient::MLocalThemeDaemonClient(const QString &testPath, QObjec
MAbstractThemeDaemonClient
(
parent
),
MAbstractThemeDaemonClient
(
parent
),
m_pixmapCache
(),
m_pixmapCache
(),
m_imageDirNodes
()
m_imageDirNodes
()
#ifdef HAVE_MLITE
#ifdef HAVE_MLITE
,
themeItem
(
"/meegotouch/theme/name"
)
,
themeItem
(
"/meegotouch/theme/name"
)
#endif
#endif
{
{
QStringList
themeRoots
;
QStringList
themeRoots
;
QString
themeRoot
=
testPath
;
QString
themeRoot
=
testPath
;
...
@@ -111,6 +111,7 @@ MLocalThemeDaemonClient::MLocalThemeDaemonClient(const QString &testPath, QObjec
...
@@ -111,6 +111,7 @@ MLocalThemeDaemonClient::MLocalThemeDaemonClient(const QString &testPath, QObjec
inheritanceChain
.
insert
(
nextTheme
);
inheritanceChain
.
insert
(
nextTheme
);
// the paths should be stored in reverse order than in the inheritance chain
// the paths should be stored in reverse order than in the inheritance chain
themeRoots
.
prepend
(
themeRoot
+
QDir
::
separator
()
+
nextTheme
+
QDir
::
separator
()
+
QLatin1String
(
"meegotouch"
));
themeRoots
.
prepend
(
themeRoot
+
QDir
::
separator
()
+
nextTheme
+
QDir
::
separator
()
+
QLatin1String
(
"meegotouch"
));
themeRoots
.
prepend
(
themeRoot
+
QDir
::
separator
()
+
nextTheme
+
QDir
::
separator
()
+
QLatin1String
(
"fontawesome"
));
QString
parentTheme
=
themeIndexFile
.
value
(
"X-MeeGoTouch-Metatheme/X-Inherits"
,
""
).
toString
();
QString
parentTheme
=
themeIndexFile
.
value
(
"X-MeeGoTouch-Metatheme/X-Inherits"
,
""
).
toString
();
...
@@ -148,7 +149,8 @@ MLocalThemeDaemonClient::~MLocalThemeDaemonClient()
...
@@ -148,7 +149,8 @@ MLocalThemeDaemonClient::~MLocalThemeDaemonClient()
QPixmap
MLocalThemeDaemonClient
::
requestPixmap
(
const
QString
&
id
,
const
QSize
&
requestedSize
)
QPixmap
MLocalThemeDaemonClient
::
requestPixmap
(
const
QString
&
id
,
const
QSize
&
requestedSize
)
{
{
QPixmap
pixmap
;
QPixmap
pixmap
;
qDebug
()
<<
"ID requested: "
<<
id
;
QStringList
parts
=
id
.
split
(
'?'
);
QSize
size
=
requestedSize
;
QSize
size
=
requestedSize
;
if
(
size
.
width
()
<
1
)
{
if
(
size
.
width
()
<
1
)
{
...
@@ -158,21 +160,31 @@ QPixmap MLocalThemeDaemonClient::requestPixmap(const QString &id, const QSize &r
...
@@ -158,21 +160,31 @@ QPixmap MLocalThemeDaemonClient::requestPixmap(const QString &id, const QSize &r
size
.
rheight
()
=
0
;
size
.
rheight
()
=
0
;
}
}
const
PixmapIdentifier
pixmapId
(
id
,
size
);
const
PixmapIdentifier
pixmapId
(
parts
.
at
(
0
)
,
size
);
pixmap
=
m_pixmapCache
.
value
(
pixmapId
);
pixmap
=
m_pixmapCache
.
value
(
pixmapId
);
if
(
pixmap
.
isNull
())
{
if
(
pixmap
.
isNull
())
{
// The pixmap is not cached yet. Decode the image and
// The pixmap is not cached yet. Decode the image and
// store it into the cache as pixmap.
// store it into the cache as pixmap.
const
QImage
image
=
readImage
(
id
);
const
QImage
image
=
readImage
(
parts
.
at
(
0
)
);
if
(
!
image
.
isNull
())
{
if
(
!
image
.
isNull
())
{
pixmap
=
QPixmap
::
fromImage
(
image
);
pixmap
=
QPixmap
::
fromImage
(
image
);
if
(
requestedSize
.
isValid
()
&&
(
pixmap
.
size
()
!=
requestedSize
))
{
}
pixmap
=
pixmap
.
scaled
(
requestedSize
);
if
(
parts
.
length
()
>
1
)
if
(
parts
.
length
()
>
1
&&
QColor
::
isValidColor
(
parts
.
at
(
1
)))
{
QPainter
painter
(
&
pixmap
);
painter
.
setCompositionMode
(
QPainter
::
CompositionMode_SourceIn
);
painter
.
fillRect
(
pixmap
.
rect
(),
parts
.
at
(
1
));
painter
.
end
();
}
}
if
(
requestedSize
.
width
()
>
0
&&
requestedSize
.
height
()
>
0
)
pixmap
=
pixmap
.
scaled
(
requestedSize
.
width
(),
requestedSize
.
height
(),
Qt
::
IgnoreAspectRatio
);
else
pixmap
=
pixmap
;
m_pixmapCache
.
insert
(
pixmapId
,
pixmap
);
m_pixmapCache
.
insert
(
pixmapId
,
pixmap
);
}
}
}
return
pixmap
;
return
pixmap
;
}
}
...
...
src/controls/themedaemon/mlocalthemedaemonclient.h
View file @
7a03018b
...
@@ -45,6 +45,8 @@
...
@@ -45,6 +45,8 @@
#include <QHash>
#include <QHash>
#include <QPixmap>
#include <QPixmap>
#include <QString>
#include <QString>
#include <QPainter>
#include <QColor>
#ifdef HAVE_MLITE
#ifdef HAVE_MLITE
#include <mgconfitem.h>
#include <mgconfitem.h>
...
...
src/styles/ButtonStyle.qml
View file @
7a03018b
...
@@ -46,7 +46,7 @@ ButtonStyle {
...
@@ -46,7 +46,7 @@ ButtonStyle {
RadialGradient
{
RadialGradient
{
x
:
control
.
pressX
-
width
/
2
x
:
control
.
pressX
-
width
/
2
y
:
control
.
pressY
-
height
/
2
y
:
control
.
pressY
-
height
/
2
width
:
Theme
.
itemWidth
Medium
width
:
Theme
.
itemWidth
Small
height
:
width
height
:
width
visible
:
control
.
pressed
visible
:
control
.
pressed
...
...
src/styles/IconButtonStyle.qml
0 → 100644
View file @
7a03018b
/****************************************************************************************
**
** Copyright (C) 2017 Eetu Kahelin
** All rights reserved.
**
** You may use this file under the terms of BSD license as follows:
**
** Redistribution and use in source and binary forms, with or without
** modification, are permitted provided that the following conditions are met:
** * Redistributions of source code must retain the above copyright
** notice, this list of conditions and the following disclaimer.
** * Redistributions in binary form must reproduce the above copyright
** notice, this list of conditions and the following disclaimer in the
** documentation and/or other materials provided with the distribution.
** * Neither the name of the author nor the
** names of its contributors may be used to endorse or promote products
** derived from this software without specific prior written permission.
**
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
** ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
** WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
** DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR
** ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
** (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
** LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
** ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
** SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
**
****************************************************************************************/
import
QtQuick
2.6
import
QtQuick
.
Controls
1.0
import
QtQuick
.
Controls
.
Styles
1.4
import
QtGraphicalEffects
1.0
ButtonStyle
{
background
:
Image
{
fillMode
:
Image
.
PreserveAspectFit
opacity
:
control
.
enabled
?
1.0
:
0.5
source
:
control
.
_showPress
?
control
.
highlightSource
:
control
.
source
}
}
src/styles/qmldir
View file @
7a03018b
...
@@ -20,3 +20,4 @@ SpinBoxStyle 1.0 SpinBoxStyle.qml
...
@@ -20,3 +20,4 @@ SpinBoxStyle 1.0 SpinBoxStyle.qml
TabViewStyle 1.0 TabViewStyle.qml
TabViewStyle 1.0 TabViewStyle.qml
TableViewStyle 1.0 TableViewStyle.qml
TableViewStyle 1.0 TableViewStyle.qml
TextFieldStyle 1.0 TextFieldStyle.qml
TextFieldStyle 1.0 TextFieldStyle.qml
IconButtonStyle 1.0 IconButtonStyle.qml
src/styles/styles.pro
View file @
7a03018b
...
@@ -27,6 +27,7 @@ QML_FILES = \
...
@@ -27,6 +27,7 @@ QML_FILES = \
TextFieldStyle
.
qml
\
TextFieldStyle
.
qml
\
ToolBarStyle
.
qml
\
ToolBarStyle
.
qml
\
ToolButtonStyle
.
qml
\
ToolButtonStyle
.
qml
\
IconButtonStyle
.
qml
#
Images
#
Images
QML_FILES
+=
\
QML_FILES
+=
\
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment