class EL_WEL_FONT

(source code)

description

WEL_FONT with fast is_proportional function

note
	description: "${WEL_FONT} with fast **is_proportional** function"

	author: "Finnian Reilly"
	copyright: "Copyright (c) 2001-2022 Finnian Reilly"
	contact: "finnian at eiffel hyphen loop dot com"

	license: "MIT license (See: en.wikipedia.org/wiki/MIT_License)"
	date: "2024-01-20 19:18:25 GMT (Saturday 20th January 2024)"
	revision: "2"

class
	EL_WEL_FONT

inherit
	WEL_FONT

create
	make_indirect

feature -- Status query

	is_proportional: BOOLEAN
			-- Can characters in the font have different sizes?
		local
			previous_width, format, drawn_height: INTEGER; string: WEL_STRING
		do
			if attached reusable_screen_dc as screen_dc and then attached wel_rect as rect then
				screen_dc.get
				screen_dc.select_font (Current)
				format := Dt_calcrect | Dt_expandtabs | Dt_noprefix

				across Wide_narrow_character_strings as array loop
					string := array.item
					rect.set_rect (0, 0, 32767, 32767)
					drawn_height := screen_dc.cwin_draw_text (screen_dc.item, string.item, 1, rect.item, format)
					if array.is_first then
						previous_width := rect.width
					else
						Result := previous_width /= rect.width
					end
				end
				screen_dc.unselect_font
				screen_dc.quick_release
			end
		end

feature {NONE} -- Constants

	Wide_narrow_character_strings: ARRAY [WEL_STRING]
		once
			Result := << create {WEL_STRING}.make ("w"), create {WEL_STRING}.make ("i") >>
		end

end