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