pixelflow_canvas 0.5.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module PixelflowCanvas
4
- VERSION = "0.5.0"
4
+ VERSION = "0.7.0"
5
5
  end
@@ -3,6 +3,7 @@
3
3
  require_relative "pixelflow_canvas/version"
4
4
  require_relative "pixelflow_canvas/vga_palette.rb"
5
5
  require 'chunky_png'
6
+ require 'json'
6
7
  require 'socket'
7
8
  require 'time'
8
9
 
@@ -168,6 +169,30 @@ module Pixelflow
168
169
  @socket.flush
169
170
  end
170
171
 
172
+ def set_predefined_palette(key)
173
+ if key == :vga
174
+ @palette = VGA_PALETTE.dup
175
+ (0..255).each do |i|
176
+ @socket.write([3, i, @palette[i * 3 + 0], @palette[i * 3 + 1], @palette[i * 3 + 2]].pack('CCCCC'))
177
+ end
178
+ @socket.flush
179
+ else
180
+ @@palettes ||= YAML.load(File.read(File.join(File.dirname(__FILE__), 'pixelflow_canvas', 'palettes.yaml')))
181
+ if @@palettes[key]
182
+ @palette = [0] * 768
183
+ @@palettes[key].each_with_index do |color, i|
184
+ @palette[i * 3 + 0] = color[1, 2].to_i(16)
185
+ @palette[i * 3 + 1] = color[3, 2].to_i(16)
186
+ @palette[i * 3 + 2] = color[5, 2].to_i(16)
187
+ @socket.write([3, i, @palette[i * 3 + 0], @palette[i * 3 + 1], @palette[i * 3 + 2]].pack('CCCCC'))
188
+ end
189
+ @socket.flush
190
+ else
191
+ raise "Invalid predefined palette: #{key}"
192
+ end
193
+ end
194
+ end
195
+
171
196
  def move_to(x, y)
172
197
  x = x.to_i
173
198
  y = y.to_i
@@ -486,6 +511,7 @@ module Pixelflow
486
511
  end
487
512
 
488
513
  # FONT RENDERING
514
+
489
515
  def self.load_font(font)
490
516
  @@cypher_fonts ||= {}
491
517
  return if @@cypher_fonts[font]
@@ -551,6 +577,44 @@ module Pixelflow
551
577
  end
552
578
  width
553
579
  end
580
+
581
+ # EVENT POLLING
582
+
583
+ class Event
584
+ def initialize(data)
585
+ @data = data
586
+ end
587
+
588
+ attr_reader :data
589
+
590
+ def on(type, &block)
591
+ if type == :mouse_move && @data[0] == 3
592
+ yield(@data[1], @data[2])
593
+ end
594
+ end
595
+ end
596
+
597
+ def fetch_events(&block)
598
+ @socket.write([9].pack('C'))
599
+ @socket.flush
600
+ json = ''
601
+ loop do
602
+ begin
603
+ buffer = @socket.recv_nonblock(1024)
604
+ json += buffer
605
+ rescue IO::WaitReadable
606
+ break
607
+ end
608
+ end
609
+ return if json.empty?
610
+ json.split("\r\n").each do |line|
611
+ line.strip!
612
+ next if line.empty?
613
+ JSON.parse(line).each do |event|
614
+ yield Event.new(event)
615
+ end
616
+ end
617
+ end
554
618
  end
555
619
 
556
620
  class Turtle
data/test-sirds.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require './lib/pixelflow_canvas.rb'
2
+ require 'json'
2
3
 
3
4
  def depth(x, y)
4
5
  r = (x - 128) ** 2 + (y - 128) ** 2
@@ -34,4 +35,12 @@ end
34
35
  # end
35
36
  # end
36
37
 
37
- canvas.save_as_png('sirds.png')
38
+ i = 0
39
+ loop do
40
+ canvas.fetch_events do |event|
41
+ STDERR.puts event.to_json
42
+ end
43
+ canvas.ensure_max_fps(30)
44
+ i += 1
45
+ # STDERR.puts "\r #{i}"
46
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pixelflow_canvas
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Specht
@@ -44,6 +44,7 @@ files:
44
44
  - lib/pixelflow_canvas/fonts/8x13B.bdf
45
45
  - lib/pixelflow_canvas/fonts/9x15.bdf
46
46
  - lib/pixelflow_canvas/fonts/9x15B.bdf
47
+ - lib/pixelflow_canvas/palettes.yaml
47
48
  - lib/pixelflow_canvas/version.rb
48
49
  - lib/pixelflow_canvas/vga_palette.rb
49
50
  - sig/pixelflow_canvas.rbs