@ Xavier: the ToolButton Image still is black, but perhaps I did something wrong. It's the first time I used a ShaderEffect Do you really think it could cause problems on Android / iOS apps ? Images are small images
@ J-P: ColorOverlay works well and also looks easier to understand for mobile devs coming new to Qt because of labs.controls So using a 'tinting' color I have to customize qt.labs.controls containing images used in ToolBar, BottomNavigation, Drawer, ... - correct ? here's the code - images attached import QtQuick 2.6 import QtQuick.Layouts 1.3 import Qt.labs.controls 1.0 import Qt.labs.controls.material 1.0 import QtGraphicalEffects 1.0 ToolBar { id: titleToolBar property alias text: titleLabel.text property color textOnPrimary: "White" property color toolButtonTintColor: "White" RowLayout { focus: false spacing: 6 anchors.fill: parent Label { id: titleLabel text: "Sample One Page APP" leftPadding: 16 font.pixelSize: 20 elide: Label.ElideRight horizontalAlignment: Qt.AlignHCenter verticalAlignment: Qt.AlignVCenter Layout.fillWidth: true color: textOnPrimary } ToolButton { // always black: Image { anchors.centerIn: parent source: "qrc:/images/menu.png" } // onClicked: doSomething() } ToolButton { Image { id: buttonImage1 anchors.centerIn: parent source: "qrc:/images/menu.png" } // still black: ShaderEffect { visible: true anchors.fill: buttonImage1 supportsAtlasTextures: true property variant src: buttonImage1 property color color: toolButtonTintColor vertexShader: " uniform highp mat4 qt_Matrix; attribute highp vec4 qt_Vertex; attribute highp vec2 qt_MultiTexCoord0; varying highp vec2 coord; void main() { coord = qt_MultiTexCoord0; gl_Position = qt_Matrix * qt_Vertex; }" fragmentShader: " varying highp vec2 coord; uniform sampler2D src; uniform highp vec4 color; uniform lowp float qt_Opacity; void main() { lowp vec4 tex = texture2D(src, coord); gl_FragColor = tex * color * qt_Opacity; }" } // onClicked: doSomething() } ToolButton { Image { id: buttonImage2 anchors.centerIn: parent source: "qrc:/images/menu.png" } // YEP: now it's white:) ColorOverlay { anchors.fill: buttonImage2 source: buttonImage2 color: toolButtonTintColor } // onClicked: doSomething() } } } Am 07.05.16 um 01:25 schrieb Xavier Bigand: > I think that is better to used a ShaderEffect instead > of QtGraphicalEffects that comes with an FBO. > > An FBO can take a lot a GPU resources and doesn't works well with some > Android phone due to bad drivers. > > I personally use this : > ShaderEffect { > visible: Qt.colorEqual(parent.color, "white") === false > anchors.fill: parent > supportsAtlasTextures: true > property variant src: image > // your Image item > property color color: parent.color > // put your color here > vertexShader: " > uniform highp mat4 qt_Matrix; > attribute highp vec4 qt_Vertex; > attribute highp vec2 qt_MultiTexCoord0; > varying highp vec2 coord; > void main() { > coord = qt_MultiTexCoord0; > gl_Position = qt_Matrix * qt_Vertex; > }" > fragmentShader: " > varying highp vec2 coord; > uniform sampler2D src; > uniform highp vec4 color; > uniform lowp float qt_Opacity; > void main() { > lowp vec4 tex = texture2D(src, coord); > gl_FragColor = tex * color * qt_Opacity; > }" > } > > > 2016-05-06 23:07 GMT+02:00 ekke <e...@ekkes-corner.org > <mailto:e...@ekkes-corner.org>>: > > Thanks, J-P, > > I'll try it out > > ekke > > Am 06.05.16 um 21:19 schrieb J-P Nurmi: >> Hi ekke, >> >> One possibility for tinting images could be to use ColorOverlay >> from >> QtGraphicalEffects: >> http://doc.qt.io/qt-5/qml-qtgraphicaleffects-coloroverlay.html >> >> -- >> J-P Nurmi >> >> >> >>> On 06 May 2016, at 19:49, ekke <e...@ekkes-corner.org >>> <mailto:e...@ekkes-corner.org>> wrote: >>> >>> just noticed that in Qt 5.7 there's a new property >>> Material.foreground: >>> >>> http://doc-snapshots.qt.io/qt5-5.7/qtquickcontrols2-material.html#foreground-attached-prop >>> >>> seems this didn't make it into the 5.7 Beta >>> from docs: >>> The default value is theme-specific (light or dark). >>> So there's no dependency between primary and foreground and I >>> have to calculate it by myself for text inside ToolBar >>> >>> still my question about tinting images for Material >>> >>> Am 06.05.16 um 17:59 schrieb ekke: >>>> >>>> it's really easy to create a Toolbar with Title and Menu using >>>> qt.labs.controls and Material style: >>>> >>>> import QtQuick 2.6 >>>> import QtQuick.Layouts 1.3 >>>> import Qt.labs.controls 1.0 >>>> import Qt.labs.controls.material 1.0 >>>> >>>> ToolBar { >>>> id: titleToolBar >>>> property alias text: titleLabel.text >>>> RowLayout { >>>> focus: false >>>> spacing: 20 >>>> anchors.fill: parent >>>> Label { >>>> id: titleLabel >>>> text: "ekke" >>>> font.pixelSize: 20 >>>> elide: Label.ElideRight >>>> horizontalAlignment: Qt.AlignHCenter >>>> verticalAlignment: Qt.AlignVCenter >>>> Layout.fillWidth: true >>>> } >>>> ToolButton { >>>> Image { >>>> anchors.centerIn: parent >>>> source: "qrc:/images/menu.png" >>>> } >>>> // onClicked: doSomething() >>>> } >>>> } >>>> } >>>> >>>> I'm getting the primaryColor as background of ToolBar as expected. >>>> >>>> Problem is when primaryColor is a dark color and needs white as >>>> text color. >>>> >>>> Here's the overview of Material Color Palette where you can see >>>> when text should be black or white: >>>> >>>> http://www.google.com/design/spec/style/color.html#color-color-palette >>>> >>>> >>>> I'm always getting black as color - is there something like >>>> *color: Material.textOnPrimary* ? >>>> >>>> Or do I have to handle this by my own logic or mappings ? >>>> >>>> Using a dark primary color not only needs white text color, but >>>> also white Images as used in ToolButton -> Image above. >>>> >>>> Do I need two different image sets for black or white ? >>>> >>>> Or is there something like 'tinting' an Image as for other OS ? >>>> >>>> (BlackBerry Cascades: setFilterColor(), Android: >>>> setColorFilter, iOS: tintColor = UIColor.redColor()) >>>> >>>> Inside the Toolbar depending from Material primary color, I >>>> need black or white, also for BottomNavigation (Android) >>>> >>>> There are other situations where I have to 'tint' Images with >>>> the primary color as for selected buttons in iOS bottom >>>> navigation bar >>>> >>>> Would be great to get some hints or if there's something inside >>>> qt.labs.controls / QtQuickControls2 I could use - even with the >>>> risk of API changes in future. >>>> >>>> THANKS >>>> -- >>>> >>>> ekke (ekkehard gentz) >>>> >>>> independent software architect >>>> international development native mobile business apps >>>> BlackBerry 10 | Qt Mobile (Android, iOS) >>>> >>>> >>>> >>>> _______________________________________________ >>>> Interest mailing list >>>> Interest@qt-project.org <mailto:Interest@qt-project.org> >>>> http://lists.qt-project.org/mailman/listinfo/interest >>> >>> _______________________________________________ >>> Interest mailing list >>> Interest@qt-project.org <mailto:Interest@qt-project.org> >>> http://lists.qt-project.org/mailman/listinfo/interest >> >> >> >> _______________________________________________ >> Interest mailing list >> Interest@qt-project.org <mailto:Interest@qt-project.org> >> http://lists.qt-project.org/mailman/listinfo/interest > > > _______________________________________________ > Interest mailing list > Interest@qt-project.org <mailto:Interest@qt-project.org> > http://lists.qt-project.org/mailman/listinfo/interest > > > > > -- > Xavier ekke
_______________________________________________ Interest mailing list Interest@qt-project.org http://lists.qt-project.org/mailman/listinfo/interest