|
| 1 | +require "../../src/uing" |
| 2 | +require "stumpy_png" |
| 3 | + |
| 4 | +fname = "#{__DIR__}/crys.png" |
| 5 | +canvas = StumpyPNG.read(fname) |
| 6 | +width = canvas.width.to_i32 |
| 7 | +height = canvas.height.to_i32 |
| 8 | + |
| 9 | +pixels = Bytes.new(width * height * 4) |
| 10 | +(0...height).each do |y| |
| 11 | + (0...width).each do |x| |
| 12 | + offset = (y * width + x) * 4 |
| 13 | + r, g, b, a = canvas[x, y].to_rgba |
| 14 | + pixels[offset] = r |
| 15 | + pixels[offset + 1] = g |
| 16 | + pixels[offset + 2] = b |
| 17 | + pixels[offset + 3] = a || 255_u8 |
| 18 | + end |
| 19 | +end |
| 20 | + |
| 21 | +UIng.init |
| 22 | + |
| 23 | +image = UIng::Image.new(width, height) |
| 24 | +image.append(pixels, width, height, width * 4) |
| 25 | + |
| 26 | +window = UIng::Window.new("Draw Image Example", 400, 400, margined: true) |
| 27 | +window.on_closing do |
| 28 | + UIng.quit |
| 29 | + true |
| 30 | +end |
| 31 | + |
| 32 | +area_handler = UIng::Area::Handler.new do |header| |
| 33 | + draw do |area, params| |
| 34 | + ctx = params.context |
| 35 | + white_brush = UIng::Area::Draw::Brush.new(:solid, 1.0, 1.0, 1.0, 1.0) |
| 36 | + ctx.fill_path(white_brush) do |path| |
| 37 | + path.add_rectangle(0, 0, params.area_width, params.area_height) |
| 38 | + end |
| 39 | + begin |
| 40 | + ctx.draw_image(image, 10, 10, 100, 100) |
| 41 | + ctx.draw_image(image, 160, 10, 200, 100) |
| 42 | + ctx.draw_image(image, 10, 160, 100, 200) |
| 43 | + ctx.draw_image(image, 160, 160, 200, 200) |
| 44 | + rescue ex |
| 45 | + UIng.handle_callback_error(ex, "draw_image") |
| 46 | + end |
| 47 | + end |
| 48 | +end |
| 49 | + |
| 50 | +area = UIng::Area.new(area_handler) |
| 51 | +box = UIng::Box.new(:horizontal) |
| 52 | +box.append(area, stretchy: true) |
| 53 | +window.set_child(box) |
| 54 | +window.show |
| 55 | + |
| 56 | +UIng.main |
| 57 | + |
| 58 | +image.free |
| 59 | +UIng.uninit |
0 commit comments