module Fontina::Windows

Constants

VERSION

Public Instance Methods

add_font_resource(path, times: 1) click to toggle source
# File lib/fontina/windows.rb, line 71
def add_font_resource(path, times: 1)
  (1..times).reduce(nil) { Gdi32.AddFontResourceW(path) }
end
font_registered?(name) click to toggle source
# File lib/fontina/windows.rb, line 48
def font_registered?(name)
  key = Advapi32.RegOpenKeyExW(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts', KEY_READ)
  begin
    Advapi32.RegGetValueW(key, name, flags: RRF_RT_REG_SZ).tap do |value|
      value = Advapi32.RegGetValueW(key, name, data_len: value.data_len)
      break wstr!(value.data).rstrip.encode('filesystem')
    end
  rescue Error => e
    raise if e.code != ERROR_FILE_NOT_FOUND
  ensure
    Advapi32.RegCloseKey(key)
  end
end
fonts_directory() click to toggle source
# File lib/fontina/windows.rb, line 27
def fonts_directory
  @fonts_directory ||= Shell32.SHGetFolderPathW(CSIDL_FONTS).encode('filesystem').freeze
end
notify_fonts_changed() click to toggle source
# File lib/fontina/windows.rb, line 79
def notify_fonts_changed
  User32.PostMessageW(HWND_BROADCAST, WM_FONTCHANGE, 0, 0)
end
register_font(name, path) click to toggle source
# File lib/fontina/windows.rb, line 62
def register_font(name, path)
  key = Advapi32.RegOpenKeyExW(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts', KEY_WRITE)
  begin
    Advapi32.RegSetValueExW(key, name, REG_SZ, wstr(path) + wchar(0))
  ensure
    Advapi32.RegCloseKey(key)
  end
end
registered_fonts() click to toggle source
# File lib/fontina/windows.rb, line 31
def registered_fonts
  key = Advapi32.RegOpenKeyExW(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts', KEY_READ)
  begin
    Advapi32.RegQueryInfoKeyW(key)
      .tap do |info|
        break info.value_count.times.map do |i|
          Advapi32.RegEnumValueW(key, i, name_len: info.max_name_len + 1, data_len: info.max_data_len)
        end
      end
      .reject { |value| value.type != REG_SZ }
      .map { |value| [value.name, wstr!(value.data).rstrip.encode('filesystem')] }
      .to_h
  ensure
    Advapi32.RegCloseKey(key)
  end
end
remove_font_resource(path) click to toggle source
# File lib/fontina/windows.rb, line 75
def remove_font_resource(path)
  (0..Float::INFINITY).find { !Gdi32.RemoveFontResourceW(path) }
end
system_language() click to toggle source
# File lib/fontina/windows.rb, line 23
def system_language
  @system_language ||= LANGUAGE_CODES.fetch Kernel32.GetSystemDefaultUILanguage()
end