Module: Fontina::Windows
- Defined in:
- lib/fontina/windows/version.rb,
lib/fontina/windows/meta_package.rb,
lib/fontina/windows/win32/dlload.rb,
lib/fontina/windows/marshal.rb,
lib/fontina/windows/win32.rb,
lib/fontina/windows.rb
Defined Under Namespace
Modules: Install, MetaPackage, PreferredName, QualifiedName
Constant Summary
collapse
- VERSION =
'0.2.1'
Constants included
from Marshal
Marshal::BYTE, Marshal::WCHAR
Constants included
from Win32
Win32::CSIDL_FONTS, Win32::ERROR_FILE_NOT_FOUND, Win32::ERROR_MORE_DATA, Win32::ERROR_NO_MORE_ITEMS, Win32::ERROR_SUCCESS, Win32::FORMAT_MESSAGE_FROM_SYSTEM, Win32::FORMAT_MESSAGE_IGNORE_INSERTS, Win32::HKEY_LOCAL_MACHINE, Win32::HWND_BROADCAST, Win32::KEY_READ, Win32::KEY_WRITE, Win32::MAX_PATH, Win32::NULL, Win32::REG_SZ, Win32::RRF_RT_ANY, Win32::RRF_RT_REG_SZ, Win32::SHGFP_TYPE_CURRENT, Win32::SHGFP_TYPE_DEFAULT, Win32::WM_FONTCHANGE
Class Method Summary
collapse
Class Method Details
.add_font_resource(path, times: 1) ⇒ Object
71
72
73
|
# 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) ⇒ Boolean
48
49
50
51
52
53
54
55
56
57
58
59
60
|
# 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 ⇒ Object
27
28
29
|
# File 'lib/fontina/windows.rb', line 27
def fonts_directory
@fonts_directory ||= Shell32.SHGetFolderPathW(CSIDL_FONTS).encode('filesystem').freeze
end
|
.notify_fonts_changed ⇒ Object
79
80
81
|
# File 'lib/fontina/windows.rb', line 79
def notify_fonts_changed
User32.PostMessageW(HWND_BROADCAST, WM_FONTCHANGE, 0, 0)
end
|
.register_font(name, path) ⇒ Object
62
63
64
65
66
67
68
69
|
# 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 ⇒ Object
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
# 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) ⇒ Object
75
76
77
|
# File 'lib/fontina/windows.rb', line 75
def remove_font_resource(path)
(0..Float::INFINITY).find { !Gdi32.RemoveFontResourceW(path) }
end
|
.system_language ⇒ Object
23
24
25
|
# File 'lib/fontina/windows.rb', line 23
def system_language
@system_language ||= LANGUAGE_CODES.fetch Kernel32.GetSystemDefaultUILanguage()
end
|