hsqml-demo-samples 0.3.2.0 → 0.3.3.0
raw patch · 5 files changed
+282/−4 lines, 5 filesdep ~hsqmlnew-component:exe:hsqml-opengl2
Dependency ranges changed: hsqml
Files
- CHANGELOG +4/−0
- LICENSE +1/−1
- hsqml-demo-samples.cabal +17/−3
- qml/opengl2.qml +214/−0
- src/OpenGL2.hs +46/−0
CHANGELOG view
@@ -1,5 +1,9 @@ HsQML Samples - Release History +release-0.3.3.0 - 2015.01.20++ * Add OpenGLControlContext sample.+ release-0.3.2.0 - 2014.11.13 * Added OpenGL sample.
LICENSE view
@@ -1,4 +1,4 @@-Copyright (c)2014, Robin KAY+Copyright (c)2014-2015, Robin KAY All rights reserved.
hsqml-demo-samples.cabal view
@@ -1,15 +1,15 @@ Name: hsqml-demo-samples-Version: 0.3.2.0+Version: 0.3.3.0 Cabal-version: >= 1.10 Build-type: Simple License: BSD3 License-file: LICENSE-Copyright: (c) 2014 Robin KAY+Copyright: (c) 2014-2015 Robin KAY Author: Robin KAY Maintainer: komadori@gekkou.co.uk Stability: experimental Homepage: http://www.gekkou.co.uk/software/hsqml/-Category: Graphics+Category: Graphics, GUI Synopsis: HsQML sample programs Data-dir: qml Data-files: *.qml@@ -53,6 +53,20 @@ OpenGL == 2.9.*, OpenGLRaw == 1.5.*, hsqml >= 0.3.2 && < 0.4+ GHC-options: -threaded+ if !flag(OpenGL)+ Buildable: False++Executable hsqml-opengl2+ Default-language: Haskell2010+ Hs-source-dirs: src+ Main-is: OpenGL2.hs+ Build-depends:+ base == 4.*,+ text >= 0.11 && < 1.3,+ OpenGL == 2.9.*,+ OpenGLRaw == 1.5.*,+ hsqml >= 0.3.3 && < 0.4 GHC-options: -threaded if !flag(OpenGL) Buildable: False
+ qml/opengl2.qml view
@@ -0,0 +1,214 @@+import QtQuick 2.0+import QtQuick.Controls 1.0+import QtQuick.Window 2.0+import HsQML.Canvas 1.0++Window {+ title: 'Context Controls';+ width: col.width; height: col.height;+ visible: true;++ Column {+ id: col;++ GroupBox {+ title: 'Control';++ Grid {+ columns: 2; width: col.width;+ columnSpacing: 5;++ Label {+ text: 'Major Version';+ font.bold: true;+ }+ TextField {+ id: majorVersionField;+ }+ Label {+ text: 'Minor Version';+ font.bold: true;+ }+ TextField {+ id: minorVersionField;+ }+ Label {+ text: 'Context Type';+ font.bold: true;+ }+ ComboBox {+ id: contextTypeField;+ model: ListModel {+ ListElement { text: 'Type Unset'; }+ ListElement { text: 'OpenGL';+ type: OpenGLContextControl.OpenGL; }+ ListElement { text: 'OpenGL ES';+ type: OpenGLContextControl.OpenGLES; }+ }+ }+ Label {+ text: 'Context Profile';+ font.bold: true;+ }+ ComboBox {+ id: contextProfileField;+ model: ListModel {+ ListElement { text: 'Profile Unset'; }+ ListElement { text: 'No Profile';+ profile: OpenGLContextControl.NoProfile;}+ ListElement { text: 'Core Profile';+ profile: OpenGLContextControl.CoreProfile;}+ ListElement { text: 'Compatibility Profile';+ profile: OpenGLContextControl.CompatibilityProfile;}+ }+ }+ Label {+ text: 'Deprecated Functions';+ font.bold: true;+ }+ ComboBox {+ id: deprecatedFunctionsField;+ model: ListModel {+ ListElement { text: 'Unset'; }+ ListElement { text: 'Enabled'; value: true; }+ ListElement { text: 'Disabled'; value: false; }+ }+ }+ Label {+ text: 'Depth Buffer Size';+ font.bold: true;+ }+ TextField {+ id: depthBufferSizeField;+ }+ Label {+ text: 'Stencil Buffer Size';+ font.bold: true;+ }+ TextField {+ id: stencilBufferSizeField;+ }+ Button {+ text: 'Control Context';+ onClicked: {+ victimCtrl.when = false;+ victimCtrl.majorVersion =+ parseInt(majorVersionField.text);+ victimCtrl.minorVersion =+ parseInt(minorVersionField.text);+ victimCtrl.contextType = contextTypeField.model.get(+ contextTypeField.currentIndex).type;+ victimCtrl.contextProfile =+ contextProfileField.model.get(+ contextProfileField.currentIndex).profile;+ victimCtrl.deprecatedFunctions =+ deprecatedFunctionsField.model.get(+ deprecatedFunctionsField.currentIndex).value;+ victimCtrl.depthBufferSize =+ parseInt(depthBufferSizeField.text);+ victimCtrl.stencilBufferSize =+ parseInt(stencilBufferSizeField.text);+ victimCtrl.when = true;+ victim.visible = true;+ }+ }+ }+ }+ GroupBox {+ title: 'Status';++ Grid {+ columns: 2; width: col.width;+ columnSpacing: 5;++ Label {+ text: 'Vendor String';+ font.bold: true;+ }+ Label {+ text: vendor;+ }+ Label {+ text: 'Renderer String';+ font.bold: true;+ }+ Label {+ text: renderer;+ }+ Label {+ text: 'Version String';+ font.bold: true;+ }+ Label {+ text: version;+ }+ Label {+ text: 'Major Version';+ font.bold: true;+ }+ Label {+ text: victimCtrl.majorVersion;+ }+ Label {+ text: 'Minor Version';+ font.bold: true;+ }+ Label {+ text: victimCtrl.minorVersion;+ }+ Label {+ text: 'Context Type';+ font.bold: true;+ }+ Label {+ text: ['Unknown','OpenGL','OpenGL ES'][+ victimCtrl.contextType];+ }+ Label {+ text: 'Context Profile';+ font.bold: true;+ }+ Label {+ text: ['None','Core','Compatability'][+ victimCtrl.contextProfile];+ }+ Label {+ text: 'Deprecated Functions';+ font.bold: true;+ }+ Label {+ text: victimCtrl.deprecatedFunctions;+ }+ Label {+ text: 'Depth Buffer Size';+ font.bold: true;+ }+ Label {+ text: victimCtrl.depthBufferSize;+ }+ Label {+ text: 'Stencil Buffer Size';+ font.bold: true;+ }+ Label {+ text: victimCtrl.stencilBufferSize;+ }+ }+ }+ }++ Window {+ id: victim;+ title: 'Victim Window';+ visible: true;++ HaskellCanvas {+ id: victimCanvas;+ anchors.fill: parent;+ delegate: glDelegate;+ }+ OpenGLContextControl {+ id: victimCtrl;+ }+ }+}
+ src/OpenGL2.hs view
@@ -0,0 +1,46 @@+{-# LANGUAGE+ ScopedTypeVariables+ #-}++module Main where++import Data.Text (Text)+import qualified Data.Text as T+import Data.IORef+import Graphics.QML+import Graphics.QML.Canvas+import Graphics.Rendering.OpenGL.GL++import Paths_hsqml_demo_samples++data GLInfo = GLInfo {+ vendorText :: Text,+ rendererText :: Text,+ versionText :: Text+}++main :: IO ()+main = do+ info <- newIORef $ GLInfo (T.pack "-") (T.pack "-") (T.pack "-")+ skey <- newSignalKey+ let defInfoProp name field = defPropertySigRO' name skey (\_ ->+ fmap field $ readIORef info)+ clazz <- newClass [+ defPropertyConst' "glDelegate" (\this -> newOpenGLDelegate+ (\paint -> do+ vend <- get vendor+ rend <- get renderer+ ver <- get glVersion+ writeIORef info $+ GLInfo (T.pack vend) (T.pack rend) (T.pack ver)+ fireSignal skey this)+ (\(_ :: OpenGLPaint' ()) -> return ())+ (\_ -> return ())),+ defInfoProp "vendor" vendorText,+ defInfoProp "renderer" rendererText,+ defInfoProp "version" versionText]+ ctx <- newObject clazz ()+ doc <- getDataFileName "opengl2.qml"+ runEngineLoop defaultEngineConfig {+ initialDocument = fileDocument doc,+ contextObject = Just $ anyObjRef ctx}