How to draw a text with unicode character on the main window using Gosu Ruby?

518 Views Asked by At

I'm trying to output text to the main window with unicode character like that

def initialize                                  
  super 800, 800                         
  self.caption = 'Chess'    
  @font = Gosu::Font.new(self, Gosu.default_font_name, 100)
end

def draw                                   
  text = "Chess \u2658".encode('utf-8')
  @font.draw(text, 100, 100, 10, 1, 1, Gosu::Color::BLACK)
end       

but the window displays only the 'Сhess' string without unicode symbol '♘' as supposed.

What I have tried so far:

  • to change font name itself, 'Gosu.default_font_name' to 'Serif', 'Arial', 'Hack' - same result only 'Chess' string changes font but not displaying glyph
  • use symbol '♘' instead of unicode code
  • use .draw_markup, .draw_text, Gosu::Image.from_text.
  • use different unicode code, for example with cyrillic letter '\u0416' it worked as supposed.
  • use different encoding arguments.
  • use different colors.

I looked for similar problems on the Gosu forum, but I could not find anything.

1

There are 1 best solutions below

0
cyberarm On BEST ANSWER

You need to use a font that includes those Unicode characters or Gosu's internal font rendering code will return a 0 width image for drawing that character.

A font like: https://fontlibrary.org/en/font/chess

require "gosu"

class Window < Gosu::Window
  def initialize(*args)
    super

    @font = Gosu::Font.new(28, name: "Chess.odf")
  end

  def draw
    @font.draw_text("♘\u2658", 10, 10, 10)
  end
end

Window.new(100, 100, false).show