mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
135 lines
2.8 KiB
V
135 lines
2.8 KiB
V
module main
|
|
|
|
import os
|
|
import gg
|
|
import gx
|
|
import math
|
|
|
|
[heap]
|
|
pub struct Window {
|
|
pub mut:
|
|
ctx &gg.Context = unsafe { 0 }
|
|
image gg.Image
|
|
}
|
|
|
|
pub fn (mut window Window) init() {
|
|
logo_path := os.resource_abs_path(os.join_path('..', 'assets', 'logo.png'))
|
|
window.image = window.ctx.create_image(logo_path) or { panic(err) }
|
|
}
|
|
|
|
pub fn (mut window Window) draw(_ voidptr) {
|
|
window.ctx.begin()
|
|
|
|
window.ctx.draw_image_with_config(
|
|
img: &window.image
|
|
img_id: window.image.id
|
|
img_rect: gg.Rect{
|
|
x: 400 - window.image.width / 2
|
|
y: 300 - window.image.height / 2
|
|
width: window.image.width
|
|
height: window.image.height
|
|
}
|
|
// effect: .alpha <-- this can be omitted completely as it is alpha by default.
|
|
)
|
|
|
|
// Red
|
|
window.ctx.draw_image_with_config(
|
|
img: &window.image
|
|
img_id: window.image.id
|
|
img_rect: gg.Rect{
|
|
x: (400 - window.image.width / 2) + f32(math.sin(f32(window.ctx.frame) / 10.0) * 60)
|
|
y: (300 - window.image.height / 2) + f32(math.cos(f32(window.ctx.frame) / 10.0) * 60)
|
|
width: window.image.width
|
|
height: window.image.height
|
|
}
|
|
color: gx.Color{255, 0, 0, 255}
|
|
effect: .add
|
|
)
|
|
|
|
// Green
|
|
window.ctx.draw_image_with_config(
|
|
img: &window.image
|
|
img_id: window.image.id
|
|
img_rect: gg.Rect{
|
|
x: (400 - window.image.width / 2) + f32(math.sin(f32(window.ctx.frame) / 10.0) * 80)
|
|
y: (300 - window.image.height / 2) + f32(math.cos(f32(window.ctx.frame) / 10.0) * 80)
|
|
width: window.image.width
|
|
height: window.image.height
|
|
}
|
|
color: gx.Color{0, 255, 0, 255}
|
|
effect: .add
|
|
)
|
|
|
|
// Blue
|
|
window.ctx.draw_image_with_config(
|
|
img: &window.image
|
|
img_id: window.image.id
|
|
img_rect: gg.Rect{
|
|
x: (400 - window.image.width / 2) + f32(math.sin(f32(window.ctx.frame) / 10.0) * 100)
|
|
y: (300 - window.image.height / 2) + f32(math.cos(f32(window.ctx.frame) / 10.0) * 100)
|
|
width: window.image.width
|
|
height: window.image.height
|
|
}
|
|
color: gx.Color{0, 0, 255, 255}
|
|
effect: .add
|
|
)
|
|
|
|
// More examples
|
|
window.ctx.draw_image_with_config(
|
|
img: &window.image
|
|
img_id: window.image.id
|
|
img_rect: gg.Rect{
|
|
x: 50
|
|
y: 0
|
|
width: window.image.width
|
|
height: window.image.height
|
|
}
|
|
color: gx.Color{255, 0, 0, 255}
|
|
effect: .add
|
|
)
|
|
|
|
window.ctx.draw_image_with_config(
|
|
img: &window.image
|
|
img_id: window.image.id
|
|
img_rect: gg.Rect{
|
|
x: 50
|
|
y: 50
|
|
width: window.image.width
|
|
height: window.image.height
|
|
}
|
|
color: gx.Color{0, 255, 0, 255}
|
|
effect: .add
|
|
)
|
|
|
|
window.ctx.draw_image_with_config(
|
|
img: &window.image
|
|
img_id: window.image.id
|
|
img_rect: gg.Rect{
|
|
x: 50
|
|
y: 100
|
|
width: window.image.width
|
|
height: window.image.height
|
|
}
|
|
color: gx.Color{0, 0, 255, 255}
|
|
effect: .add
|
|
)
|
|
|
|
window.ctx.end()
|
|
}
|
|
|
|
fn main() {
|
|
mut window := &Window{}
|
|
|
|
window.ctx = gg.new_context(
|
|
width: 800
|
|
height: 600
|
|
user_data: window
|
|
bg_color: gx.gray
|
|
// FNs
|
|
init_fn: window.init
|
|
frame_fn: window.draw
|
|
)
|
|
|
|
window.ctx.run()
|
|
}
|