Class {
	#name : #DiyaExampleApp,
	#superclass : #DiyaBaseApplication,
	#instVars : [
		'loader'
	],
	#category : #'Diya-Applications'
}

{ #category : #accessing }
DiyaExampleApp >> cleanup [ 

]

{ #category : #accessing }
DiyaExampleApp >> defineNodes [
	|node2 node1 img ell label icon button texture loading|
	node := DiyaCompositeNode new.
	texture := DiyaImageTex new.
	label := node addNode: (DiyaLabel new) at: 10@40.
	label extent: 250@24.
	label styleName:#text_icon_1.
	label icon: 16rF254.
	
	node1 := node addNode: (DiyaRectangle size:100@150 shader: DiyaExampleShader uniqueInstance) at: 300 @ 40.
	node1 rotation: 45.
	node1 scale: 2.0@2.0.
	node1 on: #(mousebuttondown fingerdown) do:[:e|
		label txt: 'RECT ', (node1 local: e mapped worldPosition) asIntegerPoint asString].
	
	img := node addNode: (DiyaImageView from:'mrsang.png') at: 10 @ 400.
	img styleName: #image_view.
	img extent:200@200.
	node on: #(mousebuttondown fingerdown) do:[:e|
		"change texture"
		|p|
		p := e mapped worldPosition.
		label txt: 'Mouse ', p asIntegerPoint asString.
		DiyaRenderer assets
			addAsset:(texture fromDisplay: (Rectangle origin: ((p x - 100) @ (p y - 100)) extent: 200@200 ) as: 'capture').
		img textureNamed: 'capture'.
		
	].
	
	node2 := node addNode: (DiyaRectangle new) at: 10@80.
	node2 styleName: #rect_view.
	node2 extent: 240@320.
	
	node2 := node addNode: (DiyaText data: String loremIpsum) at: 10@80.
	node2 extent: 240@320.
	node2 wordWrap: true.
	node2 styleName: #text_view.
	
	node2 := node addNode: (DiyaLine from: 10@10 to: 200@200).
	node2 styleName: #line_view.
		
	ell := node addNode: (DiyaEllipse rx:100  ry: 70) at: 120@300.
	ell scale: 1.2 @ 1.2.
	ell styleName: #ell_view.
	"ell rotation: 30."
	ell textureNamed:'mrsang.png'.
	ell addNode: (DiyaTimerNode timeout: 1000 / 6 do:[:n |
		n parent rotation: n parent rotation + 10.	
	] ).
	ell on: #(mousebuttondown fingerdown) do:[:e|
		label txt: 'Ellipse clicked', (ell local:e mapped worldPosition) asIntegerPoint asString].

	node2 := node addNode: (DiyaConvexPolygon points:{0@40. 150@190. 200@20. 100@0}) at: 250@60.
	node2 textureNamed: 'mrsang.png'.
	node2 styleName: #poly_view.
	
	icon := node addNode: (DiyaFontIcon data: #(16rF101 16rF155 16rF185 16rF21B 16rF298 16rF254)) at: 240@500.
	icon styleName: #text_icon_2.
	
	button := node addNode: (DiyaButton text: 'Click me !') at: 240@460.
	icon := DiyaFontIcon data: 16rF130.
	"icon := DiyaImageIcon from:  'mrsang.png'."
	icon addNode:(DiyaTimerNode timeout: 1000 / 12 do:[:n |
		n parent rotation: n parent rotation + 10 pivot: n parent extent / 2.	
	] ).
	button extent: 200@40.
	button icon: icon "'mrsang.png'".
	"button rotation: Float pi / 2.0."
	button styleName: #button_view.
	
	loading := node addNode: (DiyaLoadingBar new) at: 240@550.
	loading extent: 200 @ 20.
	 
	loading addNode: (DiyaTimerNode timeout: 2000 do:[:n |
		|p|
		p := (n parent percent + 10).
		p > 100 ifTrue:[ p := 0].
		n parent percent: p.
	] ).


	loading := node addNode: (DiyaLoadingBar new) at: 240@580.
	loading extent: 200 @ 20.
	 
	loading addNode: (DiyaTimerNode timeout: 1000 do:[:n |
		|p|
		p := (n parent percent + 10).
		p > 100 ifTrue:[ p := 0].
		n parent percent: p.
	] ).
]

{ #category : #accessing }
DiyaExampleApp >> defineStyleSheet [
	|fmgr style|
	fmgr := DiyaFontManager uniqueInstance.
	#(16 18 24) do:[:fontSize|
		self stdlog: 'Init font size ', fontSize asString, ' of ', fmgr defaultFamily.
		style := fmgr style: fmgr defaultStyle   from: fmgr defaultFamily.
		(style textureOf: fontSize)" genPrintableASCII" .
	].
	DiyaUIThemesManager uniqueInstance currentTheme
		define: #text_icon_1 styles: { 
			#color -> Color orange.
			#fontSize -> 24.
			#bgColor -> Color transparent.
		};
		define: #text_icon_2 extend:#text_icon_1  styles: {
			#fontSize -> 16.
		 };
		define: #image_view styles: { 
			#color -> Color white.
			#border -> 1.
			#bgColor -> Color cyan.
			#borderColor -> Color red
		};
		define: #rect_view extend: #image_view styles: { 
			#bgColor -> Color transparent.
		};
		define: #text_view styles: { 
			#color -> Color orange.
			#fontSize -> 16.
			#bgColor -> Color transparent.
			#xAlign -> #center
		};
		define: #line_view styles: { 
			#color -> Color red.
			#border -> 4
		};
		define: #ell_view styles: { 
			#borderColor -> Color red.
			#color -> Color white.
			#border -> 2.
		};
		define: #poly_view styles: { 
			#borderColor -> Color red.
			#color -> Color green.
			#border -> 1.
			#bgColor -> Color transparent.
		};
		define: #button_view styles: { 
			#borderColor -> (Color r: 0.051 g: 0.051  b: 0.051).
			#color -> Color white.
			#bgColor -> (Color r: 0.1529 g: 0.1529  b: 0.1529).
			#border -> 1.
			#yAlign -> #middle.
			#xAlign -> #center
		}
]

{ #category : #accessing }
DiyaExampleApp >> initialize [
	super initialize.
	loader := nil

]

{ #category : #accessing }
DiyaExampleApp >> onloaded: aBlock [
	loader ifNil: [ loader := DiyaDefaultAppLoader on: target ].
	loader job: [ self defineStyleSheet  ] name: 'Initializing themes...'.
	loader job: [
		self defineNodes.
		self loadNode.
	] name: 'Initializing UI elements...'.
	
	loader onloaded: [
		node children do:[:e|
			target addNode: e at: e position.
			node := target.
		].
		aBlock value
	].
]