add a preview image to the qml form
This commit is contained in:
parent
970bbfe143
commit
2cb1ac06e7
21
imgprovider.go
Normal file
21
imgprovider.go
Normal file
@ -0,0 +1,21 @@
|
||||
// imgprovider.go
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"image"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
/*var imgproviderstr = `import QtQuick 2.4
|
||||
|
||||
Image {
|
||||
source: "image://images/`*/
|
||||
|
||||
func imgProvider(id string, width, height int) image.Image {
|
||||
var i int
|
||||
fmt.Println("id: ", id)
|
||||
i, _ = strconv.Atoi(id)
|
||||
fmt.Println("haha: ", i)
|
||||
return slides[i].getImage(width, height)
|
||||
}
|
81
main.go
81
main.go
@ -18,14 +18,16 @@ import (
|
||||
type cell struct {
|
||||
text string
|
||||
img imagick.Image
|
||||
qmlimg qml.Object
|
||||
qmlcell qml.Object
|
||||
index int
|
||||
}
|
||||
type slide []*cell
|
||||
|
||||
var (
|
||||
x, y int
|
||||
x0, y0 int
|
||||
path string
|
||||
qimg qml.Object
|
||||
textEdit qml.Object
|
||||
cellQml qml.Object
|
||||
window *qml.Window
|
||||
@ -62,6 +64,8 @@ func run() error {
|
||||
}
|
||||
|
||||
engine := qml.NewEngine()
|
||||
engine.AddImageProvider("images", imgProvider)
|
||||
|
||||
path, err = osext.ExecutableFolder()
|
||||
path = filepath.Clean(path + "/../src/github.com/lordwelch/PresentationApp/")
|
||||
|
||||
@ -75,6 +79,11 @@ func run() error {
|
||||
return err
|
||||
}
|
||||
|
||||
qimg, err = engine.LoadFile(path + "/qml/img.qml")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
window = mainQml.CreateWindow(nil)
|
||||
|
||||
textEdit = window.ObjectByName("textEdit")
|
||||
@ -94,9 +103,9 @@ func run() error {
|
||||
func setupScene() {
|
||||
|
||||
gl.ClearColor(0.1, 0.5, 0.9, 0.0)
|
||||
mw1 = resizeImage(mw1, x, y, true, true)
|
||||
mw1 = resizeImage(mw1, x0, y0, true, true)
|
||||
|
||||
tex1 = newTexture(*mw1)
|
||||
tex1 = newTexture(*slides[0].getImage(x0, y0))
|
||||
|
||||
gl.MatrixMode(gl.PROJECTION)
|
||||
gl.LoadIdentity()
|
||||
@ -130,16 +139,7 @@ func drawSlide() {
|
||||
|
||||
}
|
||||
|
||||
func newTexture(mw imagick.MagickWand) uint32 {
|
||||
x1 := mw.GetImageWidth()
|
||||
y1 := mw.GetImageHeight()
|
||||
rgba := image.NewRGBA(image.Rect(0, 0, int(x1), int(y1)))
|
||||
if rgba.Stride != rgba.Rect.Size().X*4 {
|
||||
panic("unsupported stride")
|
||||
}
|
||||
TPix, _ := mw.ExportImagePixels(0, 0, x1, y1, "RGBA", imagick.PIXEL_CHAR)
|
||||
rgba.Pix = TPix.([]uint8)
|
||||
|
||||
func newTexture(rgba image.RGBA) uint32 {
|
||||
var texture1 uint32
|
||||
gl.Enable(gl.TEXTURE_2D)
|
||||
gl.GenTextures(1, &texture1)
|
||||
@ -164,27 +164,30 @@ func checkMon() {
|
||||
glfw.WindowHint(glfw.ContextVersionMinor, 1)
|
||||
glfw.WindowHint(glfw.AutoIconify, glfw.False)
|
||||
glfw.WindowHint(glfw.Decorated, glfw.False)
|
||||
|
||||
if i := len(monitors); i < 2 {
|
||||
fmt.Println("You only have 1 monitor!!!!!!!!!!! :-P")
|
||||
x = 800
|
||||
y = 600
|
||||
win, err = glfw.CreateWindow(x, y, "Cube", nil, nil)
|
||||
x0 = 800
|
||||
y0 = 600
|
||||
|
||||
win, err = glfw.CreateWindow(x0, y0, "Cube", nil, nil)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
projMonitor = monitors[0]
|
||||
} else {
|
||||
fmt.Printf("You have %d monitors\n", i)
|
||||
x = monitors[1].GetVideoMode().Width
|
||||
y = monitors[1].GetVideoMode().Height
|
||||
win, err = glfw.CreateWindow(x, y, "Cube", nil, nil)
|
||||
x0 = monitors[1].GetVideoMode().Width
|
||||
y0 = monitors[1].GetVideoMode().Height
|
||||
win, err = glfw.CreateWindow(x0, y0, "Cube", nil, nil)
|
||||
fmt.Println(win.GetPos())
|
||||
win.SetPos(monitors[1].GetPos())
|
||||
fmt.Println(x, y)
|
||||
fmt.Println(x0, y0)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
projMonitor = monitors[1]
|
||||
|
||||
}
|
||||
monitorInfo()
|
||||
|
||||
@ -259,6 +262,25 @@ func setSignals() {
|
||||
|
||||
}
|
||||
|
||||
func (cl cell) getImage(x, y int) (img *image.RGBA) {
|
||||
mw := imagick.NewMagickWandFromImage(&cl.img)
|
||||
if (x == 0) || (y == 0) {
|
||||
x = int(mw.GetImageWidth())
|
||||
y = int(mw.GetImageHeight())
|
||||
}
|
||||
|
||||
mw = resizeImage(mw, x, y, true, true)
|
||||
img = image.NewRGBA(image.Rect(0, 0, int(x), int(y)))
|
||||
if img.Stride != img.Rect.Size().X*4 {
|
||||
panic("unsupported stride")
|
||||
}
|
||||
// TPix, _ :=
|
||||
Tpix, _ := mw.ExportImagePixels(0, 0, uint(x), uint(y), "RGBA", imagick.PIXEL_CHAR)
|
||||
img.Pix = Tpix.([]uint8)
|
||||
defer mw.Destroy()
|
||||
return
|
||||
}
|
||||
|
||||
func (cl *cell) setSignal() {
|
||||
cl.qmlcell.ObjectByName("cellMouse").On("doubleClicked", func() {
|
||||
|
||||
@ -280,17 +302,28 @@ func (cl *cell) setSignal() {
|
||||
func (sl *slide) addCell( /*cl *cell*/ ) {
|
||||
var cl cell
|
||||
|
||||
cl.qmlcell = cellQml.Create(nil)
|
||||
cl.qmlcell.Set("objectName", fmt.Sprintf("cellRect%d", cl.index))
|
||||
cl.qmlcell.Set("parent", window.ObjectByName("data1"))
|
||||
|
||||
cl.index = len(*sl)
|
||||
|
||||
cl.qmlcell = cellQml.Create(nil)
|
||||
cl.qmlcell.Set("objectName", fmt.Sprintf("cellRect%d", len(*sl)))
|
||||
cl.qmlcell.Set("parent", window.ObjectByName("data1"))
|
||||
cl.qmlcell.Set("index", cl.index)
|
||||
|
||||
mw := imagick.NewMagickWand()
|
||||
mw.ReadImage("logo:")
|
||||
cl.img = *mw.GetImageFromMagickWand()
|
||||
|
||||
cl.text = "testing 1... 2... 3..."
|
||||
cl.qmlcell.ObjectByName("cellText").Set("text", cl.text)
|
||||
*sl = append(*sl, &cl)
|
||||
cl.setSignal()
|
||||
|
||||
cl.qmlimg = qimg.Create(nil)
|
||||
cl.qmlimg.Set("objectName", fmt.Sprintf("cellImg%d", cl.index))
|
||||
cl.qmlimg.Set("source", fmt.Sprintf("image://images/%d", cl.index))
|
||||
cl.qmlimg.Set("parent", window.ObjectByName("data2"))
|
||||
cl.qmlimg.Set("index", cl.index)
|
||||
|
||||
}
|
||||
|
||||
func (cl cell) String() string {
|
||||
|
6
main.qml
6
main.qml
@ -3,6 +3,7 @@ import QtQuick.Dialogs 1.2
|
||||
import QtQuick.Controls 1.3
|
||||
import QtQuick.Window 2.0
|
||||
import "qml"
|
||||
import QtQuick.Layouts 1.2
|
||||
|
||||
ApplicationWindow {
|
||||
id: applicationWindow1
|
||||
@ -91,7 +92,7 @@ ApplicationWindow {
|
||||
transformOrigin: Item.TopLeft
|
||||
border.width: 0
|
||||
|
||||
Column {
|
||||
ColumnLayout {
|
||||
id: data1
|
||||
objectName: "data1"
|
||||
spacing: 1
|
||||
@ -108,11 +109,12 @@ ApplicationWindow {
|
||||
color: "#4f90e2"
|
||||
border.width: 0
|
||||
|
||||
Column {
|
||||
ColumnLayout {
|
||||
id: data2
|
||||
spacing: 1
|
||||
objectName: "data2"
|
||||
anchors.fill: parent
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
import QtQuick 2.2
|
||||
import QtQuick 2.4
|
||||
import QtQuick.Dialogs 1.1
|
||||
|
||||
MessageDialog {
|
||||
|
@ -1,10 +1,8 @@
|
||||
import QtQuick 2.0
|
||||
import QtQuick 2.4
|
||||
|
||||
Rectangle {
|
||||
enabled: true
|
||||
objectName: "cellRect"
|
||||
property int index: 0
|
||||
width: 100
|
||||
height: 100
|
||||
border.width: 2
|
||||
border.color: "black"
|
||||
|
16
qml/img.qml
Normal file
16
qml/img.qml
Normal file
@ -0,0 +1,16 @@
|
||||
import QtQuick 2.4
|
||||
|
||||
Image {
|
||||
id: img
|
||||
antialiasing: true
|
||||
source: "image://images/"
|
||||
objectName: "cellImg"
|
||||
property int index: 0
|
||||
height: 150
|
||||
transformOrigin: Item.TopLeft
|
||||
fillMode: Image.PreserveAspectFit
|
||||
anchors.right: parent.right
|
||||
anchors.left: parent.left
|
||||
Layout.minimumHeight: 100
|
||||
Layout.maximumHeight: 200
|
||||
}
|
Loading…
Reference in New Issue
Block a user