From 5d91447d09493d073ae7b8cb1c45a4a00de9222d Mon Sep 17 00:00:00 2001 From: Alexander Medvednikov Date: Sun, 26 Apr 2026 17:56:31 +0300 Subject: [PATCH] examples: fix compilation with latest V --- cmd/tools/vbuild-examples.v | 8 +++++--- examples/breakout/breakout.v | 6 +++--- examples/js_dom_draw_benchmark_chart/chart/main.v | 6 +++--- examples/term.ui/pong.v | 8 ++++---- examples/veb/file_upload/file_uploading.v | 14 ++++++++++---- examples/viewer/view.v | 12 ++++++------ vlib/gg/gg.js.v | 8 ++++---- vlib/gg/recorder.c.v | 5 +++++ vlib/gg/recorder.v | 5 ----- 9 files changed, 40 insertions(+), 32 deletions(-) diff --git a/cmd/tools/vbuild-examples.v b/cmd/tools/vbuild-examples.v index a0e3a1054..60e8ea6b2 100644 --- a/cmd/tools/vbuild-examples.v +++ b/cmd/tools/vbuild-examples.v @@ -9,8 +9,8 @@ const vroot = os.dir(os.real_path(os.getenv_opt('VEXE') or { @VEXE })) const efolders = [ 'examples/viewer', 'examples/fasthttp', - 'examples/veb_orm_jwt/src', - 'examples/veb_fullstack/src', + 'examples/veb_orm_jwt', + 'examples/veb_fullstack', ] pub fn normalised_vroot_path(path string) string { @@ -24,7 +24,9 @@ fn main() { res := testing.v_build_failing_skipped(params, 'examples', skip_prefixes, fn (mut session testing.TestSession) { for x in efolders { pathsegments := x.split_any('/') - session.add(os.real_path(os.join_path(vroot, ...pathsegments))) + fpath := os.real_path(os.join_path(vroot, ...pathsegments)) + session.skip_files = session.skip_files.filter(it != fpath) + session.add(fpath) } }) if res { diff --git a/examples/breakout/breakout.v b/examples/breakout/breakout.v index 396c1997c..2637d1e6b 100644 --- a/examples/breakout/breakout.v +++ b/examples/breakout/breakout.v @@ -50,7 +50,7 @@ mut: fn Game.new() &Game { mut g := &Game{} - g.ball_x, g.ball_y = g.width / 2, g.height - g.paddle_h + g.ball_x, g.ball_y = f32(g.width) / 2, f32(g.height) - g.paddle_h g.init_bricks() return g } @@ -217,7 +217,7 @@ fn (mut g Game) update() { g.play(.wall) } if g.ball_y > g.height { - g.ball_x, g.ball_y = g.paddle_x + g.paddle_w / 2, g.height - g.paddle_h + g.ball_x, g.ball_y = g.paddle_x + g.paddle_w / 2, f32(g.height) - g.paddle_h g.ball_dy = -4 g.npaddles-- g.play(.lose_ball) @@ -239,7 +239,7 @@ fn (mut g Game) update() { } else if !(x_in_paddle > 40 && x_in_paddle < 60) { r := 10 * (-0.5 + rand.f32()) g.ball_dx += r - g.ball_dx = int_min(int_max(-80, int(g.ball_dx * 10)), 80) / 10 + g.ball_dx = f32(int_min(int_max(-80, int(g.ball_dx * 10)), 80)) / 10 } } // Brick collisions diff --git a/examples/js_dom_draw_benchmark_chart/chart/main.v b/examples/js_dom_draw_benchmark_chart/chart/main.v index 0fae6bb70..353eca82a 100644 --- a/examples/js_dom_draw_benchmark_chart/chart/main.v +++ b/examples/js_dom_draw_benchmark_chart/chart/main.v @@ -56,9 +56,9 @@ enum SqliteDbConnection { fn main() { mut app := &App{} - app.serve_static('/favicon.ico', 'favicon.ico') - app.serve_static('/draw.js', 'draw.js') - app.mount_static_folder_at(os.resource_abs_path('.'), '/') + app.serve_static('/favicon.ico', 'favicon.ico') or { panic(err) } + app.serve_static('/draw.js', 'draw.js') or { panic(err) } + app.mount_static_folder_at(os.resource_abs_path('.'), '/') or { panic(err) } veb.run[App, Context](mut app, http_port) } diff --git a/examples/term.ui/pong.v b/examples/term.ui/pong.v index 90827bf57..444aecafb 100644 --- a/examples/term.ui/pong.v +++ b/examples/term.ui/pong.v @@ -212,7 +212,7 @@ fn (mut p Player) update() { // dt := p.game.app.dt ball := unsafe { &p.game.ball } // Evil AI that eventually will take over the world - p.pos.y = ball.pos.y - int(f32(p.racket_size) * 0.5) + p.pos.y = ball.pos.y - f32(p.racket_size) * 0.5 } struct Vec { @@ -278,7 +278,7 @@ fn (mut g Game) reset() { fn (mut g Game) new_round() { mut i := 0 for mut p in g.players { - p.pos.x = if i == 0 { 3 } else { g.app.width - 2 } + p.pos.x = if i == 0 { f32(3) } else { f32(g.app.width - 2) } p.pos.y = f32(g.app.height) * 0.5 - f32(p.racket_size) * 0.5 i++ } @@ -294,10 +294,10 @@ fn (mut g Game) update() { p.update() // Keep rackets within the game area if p.pos.y <= 0 { - p.pos.y = 1 + p.pos.y = 1.0 } if p.pos.y + p.racket_size >= g.app.height { - p.pos.y = g.app.height - p.racket_size - 1 + p.pos.y = f32(g.app.height - p.racket_size - 1) } // Check ball collision // Player left side diff --git a/examples/veb/file_upload/file_uploading.v b/examples/veb/file_upload/file_uploading.v index 38d741fb2..7081dcae1 100644 --- a/examples/veb/file_upload/file_uploading.v +++ b/examples/veb/file_upload/file_uploading.v @@ -1,5 +1,6 @@ module main +import net.http import veb const port = 8082 @@ -11,6 +12,14 @@ struct Context { veb.Context } +fn uploaded_file_contents(fdata []http.FileData) []veb.RawHtml { + mut files := []veb.RawHtml{} + for data in fdata { + files << data.data.replace_each(['\n', '
', '\n\r', '
', '\t', ' ', ' ', ' ']) + } + return files +} + fn main() { mut app := &App{} veb.run[App, Context](mut app, port) @@ -25,10 +34,7 @@ pub fn (mut app App) upload() veb.Result { dump(ctx.form) dump(ctx.files) fdata := ctx.files['upfile'] - mut files := []veb.RawHtml{} - for d in fdata { - files << d.data.replace_each(['\n', '
', '\n\r', '
', '\t', ' ', ' ', ' ']) - } + files := uploaded_file_contents(fdata) return $veb.html() } diff --git a/examples/viewer/view.v b/examples/viewer/view.v index 8ac783638..52624de57 100644 --- a/examples/viewer/view.v +++ b/examples/viewer/view.v @@ -60,8 +60,8 @@ mut: texture gfx.Image sampler gfx.Sampler init_flag bool - mouse_x int = -1 - mouse_y int = -1 + mouse_x f32 = -1.0 + mouse_y f32 = -1.0 scroll_y int state Viewer_state = .scanning @@ -624,14 +624,14 @@ fn my_event_manager(mut ev gg.Event, mut app App) { } if ev.typ == .mouse_move { - app.mouse_x = int(ev.mouse_x) - app.mouse_y = int(ev.mouse_y) + app.mouse_x = ev.mouse_x + app.mouse_y = ev.mouse_y } if ev.typ == .touches_began || ev.typ == .touches_moved { if ev.num_touches > 0 { touch_point := ev.touches[0] - app.mouse_x = int(touch_point.pos_x) - app.mouse_y = int(touch_point.pos_y) + app.mouse_x = touch_point.pos_x + app.mouse_y = touch_point.pos_y } } diff --git a/vlib/gg/gg.js.v b/vlib/gg/gg.js.v index 2c1143ece..fd7ca52b6 100644 --- a/vlib/gg/gg.js.v +++ b/vlib/gg/gg.js.v @@ -522,10 +522,10 @@ fn (mut g Context) handle_mouse_event(event JS.MouseEvent, typ DOMEventType) Eve } } - e.mouse_x = int(event.offsetX) - e.mouse_y = int(event.offsetY) - e.mouse_dx = int(event.movementX) - e.mouse_dy = int(event.movementY) + e.mouse_x = f32(event.offsetX) + e.mouse_y = f32(event.offsetY) + e.mouse_dx = f32(event.movementX) + e.mouse_dy = f32(event.movementY) bitplace := int(event.button) g.mbtn_mask |= u8(1 << bitplace) // g.mouse_buttons = MouseButtons(g.mbtn_mask) diff --git a/vlib/gg/recorder.c.v b/vlib/gg/recorder.c.v index 0dbcbeeef..f441394b4 100644 --- a/vlib/gg/recorder.c.v +++ b/vlib/gg/recorder.c.v @@ -1,8 +1,13 @@ module gg +import encoding.base64 import sokol.sapp import os +fn screenshot_stdout_payload(frame u64, png []u8) string { + return '${gg_record_stdout_prefix} frame=${frame} format=png encoding=base64 data=${base64.encode(png)}' +} + fn emit_recorded_frame_to_stdout(frame u64) ! { screenshot_file_path := os.join_path(os.vtmp_dir(), 'vgg_record_stdout_${os.getpid()}_${frame}.png') diff --git a/vlib/gg/recorder.v b/vlib/gg/recorder.v index abed1c722..805c070c6 100644 --- a/vlib/gg/recorder.v +++ b/vlib/gg/recorder.v @@ -1,6 +1,5 @@ module gg -import encoding.base64 import os enum ScreenshotOutput { @@ -47,10 +46,6 @@ fn recorder_env_value(env map[string]string, key string, fallback string) string return value } -fn screenshot_stdout_payload(frame u64, png []u8) string { - return '${gg_record_stdout_prefix} frame=${frame} format=png encoding=base64 data=${base64.encode(png)}' -} - fn new_gg_recorder_settings_from_env(env map[string]string, executable string) &SSRecorderSettings { mut stop_frame := recorder_env_value(env, 'VGG_STOP_AT_FRAME', '-1').i64() mut frames := parse_screenshot_frames(env['VGG_SCREENSHOT_FRAMES']) -- 2.39.5