diff options
Diffstat (limited to 'basicsuite/qt5-everywhere/engine.js')
-rw-r--r-- | basicsuite/qt5-everywhere/engine.js | 302 |
1 files changed, 302 insertions, 0 deletions
diff --git a/basicsuite/qt5-everywhere/engine.js b/basicsuite/qt5-everywhere/engine.js new file mode 100644 index 0000000..2618807 --- /dev/null +++ b/basicsuite/qt5-everywhere/engine.js @@ -0,0 +1,302 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the 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 Digia Plc and its Subsidiary(-ies) 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 +** OWNER 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." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +var positions = [ + {x:-1100, y:-1650, gid: 0, url: "demos/rssnews/rssnews.qml", device: 3, name: "Rss Reader"}, + {x:-2100, y:-1550, gid: 0, url: "demos/gridrssnews/main.qml", device: 7, name: "Rss Reader"}, + + {x:1300, y:-1600, gid: 1, url: "demos/canvasclock/canvasClock.qml", device: 4, name: "Canvas\n Clock"}, + {x:2020, y:-1520, gid: 1, url: "demos/heartmonitor/main.qml", device: 5, name: " Heart\nMonitor"}, + + {x:1000, y:-300, gid: 2, url: "demos/calqlatr/Calqlatr.qml", device: 0, name: "Calqlatr"}, + {x:-500, y:-250, gid: 2, url: "demos/touchgallery/main.qml", device: 2, name: "Widget\nGallery"}, + {x:200, y:-200, gid: 2, url: "demos/photosurface/photosurface.qml", device: 6, name: " Photo\nSurface"}, + + {x:-1800, y:0, gid: 3, url: "demos/maroon/Maroon.qml", device: 1, name: "Maroon in\n Trouble"}, + {x:-2500, y:100, gid: 3, url: "demos/samegame/samegame.qml", device: 1, name: "SameGame"}, + + {x:1200, y:1200, gid: 5, url: "demos/shaders/main.qml", device: 6, name: "Shaders"}, + {x:2200, y:1400, gid: 5, url: "demos/particledemo/particledemo.qml", device: 7, name: "Particle\n Paint"}, + + {x:-800, y:1180, gid: 4, url: "demos/video/main.qml", device: 8, name: "Video"}, + {x:-1600, y:1500, gid: 4, url: "demos/radio/radio.qml", device: 4, name: "Internet\n Radio"} + ] + +var groupPositions = [ + {x:-2880, y:-2100, width: 2400, height: 1200, textX: 50, textY: 50, name: "Feeds"}, + {x:700, y:-2100, width: 1700, height: 1200, textX: 50, textY: 50, name: "Canvas"}, + {x:-900, y:-800, width: 2650, height: 1300, textX: 50, textY: 50, name: "Applications"}, + {x:-3000, y:-500, width: 1750, height: 1150, textX: 50, textY: 50, name: "Games"}, + {x:-2200, y:850, width: 2050, height: 1150, textX: 50, textY: 150, name: "Multimedia"}, + {x:510, y:600, width: 2450, height: 1500, textX: 50, textY: 50, name: "Particles & Shaders"} + ] + +var imageSources = ["phone1.png","phone2.png", "phone3.png","tablet1.png", "car_device.png", "medical_device.png", "laptop1.png", "laptop2.png", "tv.png"] +var widths = [300, 360, 366, 758, 625, 600, 918, 923, 800] +var heights = [605, 706, 720, 564, 386, 488, 600, 600, 638] +var scales = [0.8, 0.8, 0.6, 0.9, 1.0, 1.0, 0.9, 1.0, 1.0] +var demoWidths = [269, 322, 322, 642, 480, 482, 688, 691, 726] +var demoHeights = [404, 482, 482, 402, 320, 322, 431, 432, 456] +var maskHorizontalOffsets = [1, 1, 1, 1, -52, 1, 1, 1, 1] +var maskVerticalOffsets = [20, 32, 15, 24, 15, 45, 59, 57, 56] +var navigationList = [1,0,2,3,4,6,5,7,8,12,11,9,10] +var groupNavigationList = [0,1,2,3,4,5] +var currentDemoIndex = -1 +var currentGroupIndex = -1 +var objects = [] +var groups = [] + +function initSlides(){ + positions.forEach(function(pos){ + createSlide(pos.x,pos.y, pos.gid, pos.url, pos.device, pos.name) + }) +} + +function createSlide(x,y,gid,url,device,name){ + var component = Qt.createComponent("Slide.qml") + if (component.status === Component.Ready){ + var object=component.createObject(canvas) + object.device = device + object.imageSource = "images/" + imageSources[device] + object.width = widths[device] + object.height = heights[device] + object.scale = scales[device] + object.demoWidth = demoWidths[device] + object.demoHeight = demoHeights[device] + object.maskVerticalOffset = maskVerticalOffsets[device] + object.maskHorizontalOffset = maskHorizontalOffsets[device] + object.uid = objects.length + object.gid = gid + object.name = name + object.x = x-object.width/2 + object.y = y-object.height/2 + object.createElements(); + + if (url){ + object.url = url; + } + objects.push(object) + } +} + +function initGroups(){ + groupPositions.forEach(function(pos){ + createGroup(pos.x, pos.y, pos.width, pos.height, pos.textX, pos.textY, pos.textSource, pos.name) + }) +} + +function createGroup(x,y,width,height,textX,textY,textSource,name){ + var component = Qt.createComponent("Group.qml") + if (component.status === Component.Ready){ + var object=component.createObject(canvas) + object.uid = groups.length + object.x = x + object.y = y + object.width = width + object.height = height + object.textX = textX + object.textY = textY + object.name = name + + groups.push(object) + } +} + +function loadCurrentDemo(){ + + // Load current demo and release all others possible running demos + if (currentDemoIndex != -1) { + for (var i=0; i < objects.length; i++){ + if (currentDemoIndex == i){ + objects[navigationList[currentDemoIndex]].loadDemo(); + } + } + } +} + +function releaseDemos() +{ + for (var i=0; i < objects.length; i++) + objects[i].releaseDemo(); +} + +function getCurrent() +{ + if (currentDemoIndex < 0 || currentDemoIndex >= objects.length) + return null; + + return selectTarget(navigationList[currentDemoIndex]); +} + +function getNext() +{ + currentDemoIndex++; + if (currentDemoIndex >= objects.length) + currentDemoIndex = 0; + + return selectTarget(navigationList[currentDemoIndex]); +} + +function getPrevious() +{ + currentDemoIndex--; + if (currentDemoIndex < 0) + currentDemoIndex = objects.length-1; + + return selectTarget(navigationList[currentDemoIndex]); +} + +function selectTarget(uid){ + + var idx = -1; + + for (var i=0; i < objects.length; i++){ + if (uid >= 0 && objects[i].uid === uid){ + idx = i; + } else { + objects[i].releaseDemo(); + } + } + if (idx !== -1){ + currentDemoIndex = navigationList.indexOf(idx) + currentGroupIndex = objects[idx].gid + return {"x": positions[idx].x, + "y": positions[idx].y, + "targetScale": objects[idx].targetScale, + "navState": 2} + } + + return null; +} + +function getPosition(idx){ + return {"x": positions[idx].x, "y": positions[idx].y} +} + +function getCurrentGroup() +{ + if (currentGroupIndex < 0 || currentGroupIndex >= groups.length) + return null; + + return selectGroup(groupNavigationList[currentGroupIndex]); +} + +function getNextGroup() +{ + currentGroupIndex++; + if (currentGroupIndex >= groups.length) + currentGroupIndex = 0; + + return selectGroup(groupNavigationList[currentGroupIndex]); +} + +function getPreviousGroup() +{ + currentGroupIndex--; + if (currentGroupIndex < 0) + currentGroupIndex = groups.length-1; + + return selectGroup(groupNavigationList[currentGroupIndex]); +} + +function selectGroup(id){ + + var idx = -1; + + for (var i=0; i < groups.length; i++){ + if (id >= 0 && groups[i].uid === id){ + idx = i; + break; + } + } + + if (idx !== -1){ + currentGroupIndex = groupNavigationList.indexOf(idx) + return {"x": groupPositions[idx].x + groupPositions[idx].width/2, + "y": groupPositions[idx].y + groupPositions[idx].height/2, + "targetScale": groups[idx].targetScale, + "navState": 1} + } + + return null; +} + +function boundingBox(){ + var minX = 0, maxX = 0, minY = 0, maxY = 0; + + for (var i=0; i<objects.length; i++){ + var scale = objects[i].scale; + var w2 = objects[i].width/2; + var h2 = objects[i].height/2; + var left = (objects[i].x - w2)*scale; + var right = (objects[i].x + w2)*scale; + var top = (objects[i].y - h2)*scale; + var bottom = (objects[i].y + h2)*scale; + + if (left < minX) + minX = left; + else if (right > maxX) + maxX = right; + + if (top < minY) + minY = top; + else if (bottom > maxY) + maxY = bottom; + } + + return {"x": minX, "y": minY, "width": maxX-minX, "height": maxY-minY, "centerX": (minX+maxX)/2, "centerY": (minY+maxY)/2}; +} + +function scaleToBox(destWidth, destHeight, sourceWidth, sourceHeight) +{ + return Math.min(destWidth / sourceWidth, destHeight / sourceHeight); +} + +function updateObjectScales(destWidth, destHeight) +{ + for (var i=0; i<objects.length; i++) + objects[i].targetScale = scaleToBox(destWidth, destHeight, objects[i].targetWidth(), objects[i].targetHeight()); +} + +function updateGroupScales(destWidth, destHeight) +{ + for (var i=0; i<groups.length; i++) + groups[i].targetScale = scaleToBox(destWidth, destHeight, groups[i].width, groups[i].height); +} |