Post by Danilo on Sept 16, 2019 2:27:20 GMT
Example for drawing gradients on a canvas:
#import "<std>"
#import "<mojo>"
Using std..
Using mojo..
Class Canvas Extension
Method DrawRectWithColors( x:Float, y:Float, width:Float, height:Float, col1:Color, col2:Color, col3:Color, col4:Color )
Local v := New Float[]( x, y,
x+width, y,
x+width, y+height,
x, y+height )
Local c := New UInt[]( col1.ToABGR(), col2.ToABGR(),
col3.ToABGR(), col4.ToABGR() )
Self.DrawPrimitives( 4, 1, Varptr v[0], 8, Null, 0, Varptr c[0], 4, Null, Null)
End
Method DrawGradientHorizontal( x:Float, y:Float, width:Float, height:Float, col1:Color, col2:Color )
DrawRectWithColors( x, y, width, height, col1, col2, col2, col1 )
End
Method DrawGradientVertical( x:Float, y:Float, width:Float, height:Float, col1:Color, col2:Color )
DrawRectWithColors( x, y, width, height, col1, col1, col2, col2 )
End
End
Class MyWindow Extends Window
Field s:Float
Method New()
Super.New( "Colorful Gradient Demo",900,600,WindowFlags.Resizable )
Style.BackgroundColor = Color.White
End
Method OnRender( canvas:Canvas ) Override
canvas.DrawGradientHorizontal( 0 ,0,Width*0.5,Height*0.25,Color.FromRGBA($ff0000ff),Color.FromRGBA($ffff00ff))
canvas.DrawGradientHorizontal(Width*0.5,0,Width*0.5,Height*0.25,Color.FromRGBA($ffff00ff),Color.FromRGBA($00ff00ff))
canvas.DrawRectWithColors(Width*0.5,Height*0.25,Width*0.5,Height*0.25,Color.FromRGBA($000000ff),
Color.FromRGBA($00ffffff),
Color.FromRGBA($0000ffff),
Color.FromRGBA($ff00ffff))
canvas.DrawRectWithColors( 0 ,Height*0.25,Width*0.5,Height*0.25,Color.FromRGBA($800000ff),
Color.FromRGBA($000000ff),
Color.FromRGBA($ff00ffff),
Color.FromRGBA($ff0000ff))
Local col := New Color[]( Color.Red , Color.Yellow, Color.Green, Color.Cyan,
Color.Blue, Color.Violet, Color.Red )
Local w := Width/6
For Local i := 0 To w
canvas.DrawRectWithColors(i*w,Height*0.5,w,Height*0.5,col[i],col[i+1],col[i+1]*0.6,col[i]*0.6)
Next
For Local i := 0 Until 10
canvas.DrawGradientVertical(0,Height*0.45+Sin(s+i*0.2)*(Height*0.35) ,Width,Height*0.02,Color.Black ,Color.Yellow)
canvas.DrawGradientVertical(0,Height*0.45+Sin(s+i*0.2)*(Height*0.35)+Height*0.02,Width,Height*0.02,Color.Yellow,Color.Black )
Next
s += 0.03
App.RequestRender()
End
End
Function Main()
New AppInstance
New MyWindow
App.Run()
End