qtdeclarative/examples/quick/canvas/smile/smile.qml

130 lines
3.8 KiB
QML
Raw Normal View History

// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
import QtQuick
import QtQuick.Controls
import "../"
canvas item refactors 1.Supports tiled canvas with canvasSize, tileSize and canvasWindow 2.Supports different rendering targets: Canvas.Image and Canvas.FrameBufferObject by renderTarget property 3.Supports thread rendering when possible by threadRendering property. 4.Refactors QSGContext2D code, move some logic to QSGContext2DCommandBuffer,QSGContext2DTexture,QSGContext2DTile, etc 5.Updates/adds some canvas examples 6.Some improvements for context2d API 6.1 drawImage() now loads image asynchoronously and draw images automatically when they are ready 6.2 adds fillRule supports 6.3 add svg path supports 6.4 Pixel operations (getImageData/putImageData/createImageData) now have better performance by using V8 indexed array accessors 6.5 Uses QTransform instead of QMatrix 6.6 Gradients/patterns now are V8 values, not QObjects 6.7 Supports measureText and TextMetrics interface 6.8 Gives not support warnings for unimplemented functions (drawFocusRing,setCaretSelectionRect,caretBlinkRate) 6.9 Better error handling, throw standard DOM exceptions according to the HTML5 context2d spec. 6.10 Adds shear, resetTransform to matrix operations 6.11 Adds roundedRect, ellipse, text to path operations 6.12 Adds new features to CanvasImageData interface 1) adds mirror() function 2) adds filter() function, include the following filters: Threshold GrayScale Brightness Invert Blur Blend Opaque Convolute 7. Adds documentations Change-Id: Id19224260d6a3fdc589d1f9681c34a88a7e7b3e5 Reviewed-on: http://codereview.qt-project.org/3621 Reviewed-by: Charles Yin <charles.yin@nokia.com>
2011-08-09 06:44:38 +00:00
Item {
id: root
width: 320
height: 480
canvas item refactors 1.Supports tiled canvas with canvasSize, tileSize and canvasWindow 2.Supports different rendering targets: Canvas.Image and Canvas.FrameBufferObject by renderTarget property 3.Supports thread rendering when possible by threadRendering property. 4.Refactors QSGContext2D code, move some logic to QSGContext2DCommandBuffer,QSGContext2DTexture,QSGContext2DTile, etc 5.Updates/adds some canvas examples 6.Some improvements for context2d API 6.1 drawImage() now loads image asynchoronously and draw images automatically when they are ready 6.2 adds fillRule supports 6.3 add svg path supports 6.4 Pixel operations (getImageData/putImageData/createImageData) now have better performance by using V8 indexed array accessors 6.5 Uses QTransform instead of QMatrix 6.6 Gradients/patterns now are V8 values, not QObjects 6.7 Supports measureText and TextMetrics interface 6.8 Gives not support warnings for unimplemented functions (drawFocusRing,setCaretSelectionRect,caretBlinkRate) 6.9 Better error handling, throw standard DOM exceptions according to the HTML5 context2d spec. 6.10 Adds shear, resetTransform to matrix operations 6.11 Adds roundedRect, ellipse, text to path operations 6.12 Adds new features to CanvasImageData interface 1) adds mirror() function 2) adds filter() function, include the following filters: Threshold GrayScale Brightness Invert Blur Blend Opaque Convolute 7. Adds documentations Change-Id: Id19224260d6a3fdc589d1f9681c34a88a7e7b3e5 Reviewed-on: http://codereview.qt-project.org/3621 Reviewed-by: Charles Yin <charles.yin@nokia.com>
2011-08-09 06:44:38 +00:00
Column {
spacing: 6
anchors {
fill: parent
topMargin: 12
}
canvas item refactors 1.Supports tiled canvas with canvasSize, tileSize and canvasWindow 2.Supports different rendering targets: Canvas.Image and Canvas.FrameBufferObject by renderTarget property 3.Supports thread rendering when possible by threadRendering property. 4.Refactors QSGContext2D code, move some logic to QSGContext2DCommandBuffer,QSGContext2DTexture,QSGContext2DTile, etc 5.Updates/adds some canvas examples 6.Some improvements for context2d API 6.1 drawImage() now loads image asynchoronously and draw images automatically when they are ready 6.2 adds fillRule supports 6.3 add svg path supports 6.4 Pixel operations (getImageData/putImageData/createImageData) now have better performance by using V8 indexed array accessors 6.5 Uses QTransform instead of QMatrix 6.6 Gradients/patterns now are V8 values, not QObjects 6.7 Supports measureText and TextMetrics interface 6.8 Gives not support warnings for unimplemented functions (drawFocusRing,setCaretSelectionRect,caretBlinkRate) 6.9 Better error handling, throw standard DOM exceptions according to the HTML5 context2d spec. 6.10 Adds shear, resetTransform to matrix operations 6.11 Adds roundedRect, ellipse, text to path operations 6.12 Adds new features to CanvasImageData interface 1) adds mirror() function 2) adds filter() function, include the following filters: Threshold GrayScale Brightness Invert Blur Blend Opaque Convolute 7. Adds documentations Change-Id: Id19224260d6a3fdc589d1f9681c34a88a7e7b3e5 Reviewed-on: http://codereview.qt-project.org/3621 Reviewed-by: Charles Yin <charles.yin@nokia.com>
2011-08-09 06:44:38 +00:00
Label {
anchors.horizontalCenter: parent.horizontalCenter
text: qsTr("Smile with arcs")
font {
pointSize: 24
bold: true
}
color: Qt.lighter(palette.text)
}
canvas item refactors 1.Supports tiled canvas with canvasSize, tileSize and canvasWindow 2.Supports different rendering targets: Canvas.Image and Canvas.FrameBufferObject by renderTarget property 3.Supports thread rendering when possible by threadRendering property. 4.Refactors QSGContext2D code, move some logic to QSGContext2DCommandBuffer,QSGContext2DTexture,QSGContext2DTile, etc 5.Updates/adds some canvas examples 6.Some improvements for context2d API 6.1 drawImage() now loads image asynchoronously and draw images automatically when they are ready 6.2 adds fillRule supports 6.3 add svg path supports 6.4 Pixel operations (getImageData/putImageData/createImageData) now have better performance by using V8 indexed array accessors 6.5 Uses QTransform instead of QMatrix 6.6 Gradients/patterns now are V8 values, not QObjects 6.7 Supports measureText and TextMetrics interface 6.8 Gives not support warnings for unimplemented functions (drawFocusRing,setCaretSelectionRect,caretBlinkRate) 6.9 Better error handling, throw standard DOM exceptions according to the HTML5 context2d spec. 6.10 Adds shear, resetTransform to matrix operations 6.11 Adds roundedRect, ellipse, text to path operations 6.12 Adds new features to CanvasImageData interface 1) adds mirror() function 2) adds filter() function, include the following filters: Threshold GrayScale Brightness Invert Blur Blend Opaque Convolute 7. Adds documentations Change-Id: Id19224260d6a3fdc589d1f9681c34a88a7e7b3e5 Reviewed-on: http://codereview.qt-project.org/3621 Reviewed-by: Charles Yin <charles.yin@nokia.com>
2011-08-09 06:44:38 +00:00
Canvas {
id: canvas
readonly property color strokeStyle: Qt.darker(fillStyle, 1.6)
readonly property color fillStyle: "#e0c31e" // yellow
readonly property alias lineWidth: lineWidthCtrl.value
readonly property alias fill: toggleFillCheckBox.checked
readonly property alias stroke: toggleStrokeCheckBox.checked
readonly property alias scale: scaleCtrl.value
readonly property alias rotate: rotateCtrl.value
width: root.width
height: parent.height - controls.height
antialiasing: true
canvas item refactors 1.Supports tiled canvas with canvasSize, tileSize and canvasWindow 2.Supports different rendering targets: Canvas.Image and Canvas.FrameBufferObject by renderTarget property 3.Supports thread rendering when possible by threadRendering property. 4.Refactors QSGContext2D code, move some logic to QSGContext2DCommandBuffer,QSGContext2DTexture,QSGContext2DTile, etc 5.Updates/adds some canvas examples 6.Some improvements for context2d API 6.1 drawImage() now loads image asynchoronously and draw images automatically when they are ready 6.2 adds fillRule supports 6.3 add svg path supports 6.4 Pixel operations (getImageData/putImageData/createImageData) now have better performance by using V8 indexed array accessors 6.5 Uses QTransform instead of QMatrix 6.6 Gradients/patterns now are V8 values, not QObjects 6.7 Supports measureText and TextMetrics interface 6.8 Gives not support warnings for unimplemented functions (drawFocusRing,setCaretSelectionRect,caretBlinkRate) 6.9 Better error handling, throw standard DOM exceptions according to the HTML5 context2d spec. 6.10 Adds shear, resetTransform to matrix operations 6.11 Adds roundedRect, ellipse, text to path operations 6.12 Adds new features to CanvasImageData interface 1) adds mirror() function 2) adds filter() function, include the following filters: Threshold GrayScale Brightness Invert Blur Blend Opaque Convolute 7. Adds documentations Change-Id: Id19224260d6a3fdc589d1f9681c34a88a7e7b3e5 Reviewed-on: http://codereview.qt-project.org/3621 Reviewed-by: Charles Yin <charles.yin@nokia.com>
2011-08-09 06:44:38 +00:00
onLineWidthChanged: requestPaint()
onFillChanged: requestPaint()
onStrokeChanged: requestPaint()
onScaleChanged: requestPaint()
onRotateChanged: requestPaint()
canvas item refactors 1.Supports tiled canvas with canvasSize, tileSize and canvasWindow 2.Supports different rendering targets: Canvas.Image and Canvas.FrameBufferObject by renderTarget property 3.Supports thread rendering when possible by threadRendering property. 4.Refactors QSGContext2D code, move some logic to QSGContext2DCommandBuffer,QSGContext2DTexture,QSGContext2DTile, etc 5.Updates/adds some canvas examples 6.Some improvements for context2d API 6.1 drawImage() now loads image asynchoronously and draw images automatically when they are ready 6.2 adds fillRule supports 6.3 add svg path supports 6.4 Pixel operations (getImageData/putImageData/createImageData) now have better performance by using V8 indexed array accessors 6.5 Uses QTransform instead of QMatrix 6.6 Gradients/patterns now are V8 values, not QObjects 6.7 Supports measureText and TextMetrics interface 6.8 Gives not support warnings for unimplemented functions (drawFocusRing,setCaretSelectionRect,caretBlinkRate) 6.9 Better error handling, throw standard DOM exceptions according to the HTML5 context2d spec. 6.10 Adds shear, resetTransform to matrix operations 6.11 Adds roundedRect, ellipse, text to path operations 6.12 Adds new features to CanvasImageData interface 1) adds mirror() function 2) adds filter() function, include the following filters: Threshold GrayScale Brightness Invert Blur Blend Opaque Convolute 7. Adds documentations Change-Id: Id19224260d6a3fdc589d1f9681c34a88a7e7b3e5 Reviewed-on: http://codereview.qt-project.org/3621 Reviewed-by: Charles Yin <charles.yin@nokia.com>
2011-08-09 06:44:38 +00:00
onPaint: {
let ctx = canvas.getContext('2d')
const originX = 85
const originY = 75
ctx.save()
ctx.clearRect(0, 0, canvas.width, canvas.height)
ctx.translate(originX, originX)
ctx.strokeStyle = canvas.strokeStyle
ctx.fillStyle = canvas.fillStyle
ctx.lineWidth = canvas.lineWidth
ctx.translate(originX, originY)
ctx.scale(canvas.scale, canvas.scale)
ctx.rotate(canvas.rotate)
ctx.translate(-originX, -originY)
canvas item refactors 1.Supports tiled canvas with canvasSize, tileSize and canvasWindow 2.Supports different rendering targets: Canvas.Image and Canvas.FrameBufferObject by renderTarget property 3.Supports thread rendering when possible by threadRendering property. 4.Refactors QSGContext2D code, move some logic to QSGContext2DCommandBuffer,QSGContext2DTexture,QSGContext2DTile, etc 5.Updates/adds some canvas examples 6.Some improvements for context2d API 6.1 drawImage() now loads image asynchoronously and draw images automatically when they are ready 6.2 adds fillRule supports 6.3 add svg path supports 6.4 Pixel operations (getImageData/putImageData/createImageData) now have better performance by using V8 indexed array accessors 6.5 Uses QTransform instead of QMatrix 6.6 Gradients/patterns now are V8 values, not QObjects 6.7 Supports measureText and TextMetrics interface 6.8 Gives not support warnings for unimplemented functions (drawFocusRing,setCaretSelectionRect,caretBlinkRate) 6.9 Better error handling, throw standard DOM exceptions according to the HTML5 context2d spec. 6.10 Adds shear, resetTransform to matrix operations 6.11 Adds roundedRect, ellipse, text to path operations 6.12 Adds new features to CanvasImageData interface 1) adds mirror() function 2) adds filter() function, include the following filters: Threshold GrayScale Brightness Invert Blur Blend Opaque Convolute 7. Adds documentations Change-Id: Id19224260d6a3fdc589d1f9681c34a88a7e7b3e5 Reviewed-on: http://codereview.qt-project.org/3621 Reviewed-by: Charles Yin <charles.yin@nokia.com>
2011-08-09 06:44:38 +00:00
ctx.beginPath()
ctx.moveTo(75 + 50 * Math.cos(0), 75 - 50 * Math.sin(Math.PI * 2))
ctx.arc(75, 75, 50, 0, Math.PI * 2, true) // Outer circle
ctx.moveTo(60, 60)
ctx.arc(60, 60, 5, 0, Math.PI * 2, true) // Left eye
ctx.moveTo(90 + 5 * Math.cos(0), 65 - 5 * Math.sin(Math.PI * 2))
ctx.moveTo(90, 60)
ctx.arc(90, 60, 5, -Math.PI, Math.PI * 3, false) // Right eye
ctx.moveTo(75, 70)
ctx.arc(75, 70, 35, 0, Math.PI, false) // Mouth (clockwise)
ctx.closePath()
if (canvas.fill)
ctx.fill()
if (canvas.stroke)
ctx.stroke()
ctx.restore()
}
canvas item refactors 1.Supports tiled canvas with canvasSize, tileSize and canvasWindow 2.Supports different rendering targets: Canvas.Image and Canvas.FrameBufferObject by renderTarget property 3.Supports thread rendering when possible by threadRendering property. 4.Refactors QSGContext2D code, move some logic to QSGContext2DCommandBuffer,QSGContext2DTexture,QSGContext2DTile, etc 5.Updates/adds some canvas examples 6.Some improvements for context2d API 6.1 drawImage() now loads image asynchoronously and draw images automatically when they are ready 6.2 adds fillRule supports 6.3 add svg path supports 6.4 Pixel operations (getImageData/putImageData/createImageData) now have better performance by using V8 indexed array accessors 6.5 Uses QTransform instead of QMatrix 6.6 Gradients/patterns now are V8 values, not QObjects 6.7 Supports measureText and TextMetrics interface 6.8 Gives not support warnings for unimplemented functions (drawFocusRing,setCaretSelectionRect,caretBlinkRate) 6.9 Better error handling, throw standard DOM exceptions according to the HTML5 context2d spec. 6.10 Adds shear, resetTransform to matrix operations 6.11 Adds roundedRect, ellipse, text to path operations 6.12 Adds new features to CanvasImageData interface 1) adds mirror() function 2) adds filter() function, include the following filters: Threshold GrayScale Brightness Invert Blur Blend Opaque Convolute 7. Adds documentations Change-Id: Id19224260d6a3fdc589d1f9681c34a88a7e7b3e5 Reviewed-on: http://codereview.qt-project.org/3621 Reviewed-by: Charles Yin <charles.yin@nokia.com>
2011-08-09 06:44:38 +00:00
}
}
Column {
id: controls
anchors {
bottom: parent.bottom
bottomMargin: 12
}
LabeledSlider {
id: lineWidthCtrl
name: qsTr("Outline")
width: root.width
min: 1
max: 10
value: 2
}
LabeledSlider {
id: scaleCtrl
name: qsTr("Scale")
width: root.width
min: 0.1
max: 10
value: 1
}
LabeledSlider {
id: rotateCtrl
name: qsTr("Rotate")
width: root.width
min: 0
max: Math.PI * 2
value: 0
}
Row {
CheckBox {
id: toggleFillCheckBox
text: qsTr("Toggle fill")
}
CheckBox {
id: toggleStrokeCheckBox
checked: true
text: qsTr("Toggle stroke")
}
}
}
}