| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221 |
- -- Text rendering example.
- -- Displays text at various sizes, with checkboxes to change the rendering parameters.
- require "LuaScripts/Utilities/Sample"
- -- Tag used to find all Text elements
- local TEXT_TAG = "Typography_text_tag"
- -- Top-level container for this sample's UI
- local uielement = nil
- function Start()
- -- Execute the common startup for samples
- SampleStart()
- -- Enable OS cursor
- input.mouseVisible = true
- -- Load XML file containing default UI style sheet
- local style = cache:GetResource("XMLFile", "UI/DefaultStyle.xml")
- -- Set the loaded style as default style
- ui.root.defaultStyle = style
- -- Create a UIElement to hold all our content
- -- (Don't modify the root directly, as the base Sample class uses it)
- uielement = UIElement:new()
- uielement:SetAlignment(HA_CENTER, VA_CENTER)
- uielement:SetLayout(LM_VERTICAL, 10, IntRect(20, 40, 20, 40))
- ui.root:AddChild(uielement)
- -- Add some sample text
- CreateText()
- -- Add a checkbox to toggle the background color.
- CreateCheckbox("White background", "HandleWhiteBackground")
- :SetChecked(false)
- -- Add a checkbox to toggle SRGB output conversion (if available).
- -- This will give more correct text output for FreeType fonts, as the FreeType rasterizer
- -- outputs linear coverage values rather than SRGB values. However, this feature isn't
- -- available on all platforms.
- CreateCheckbox("Graphics::SetSRGB", "HandleSRGB")
- :SetChecked(graphics:GetSRGB())
- -- Add a checkbox for the global ForceAutoHint setting. This affects character spacing.
- CreateCheckbox("UI::SetForceAutoHint", "HandleForceAutoHint")
- :SetChecked(ui:GetForceAutoHint())
- -- Add a drop-down menu to control the font hinting level.
- local levels = {
- "FONT_HINT_LEVEL_NONE",
- "FONT_HINT_LEVEL_LIGHT",
- "FONT_HINT_LEVEL_NORMAL"
- }
- CreateMenu("UI::SetFontHintLevel", levels, "HandleFontHintLevel")
- :SetSelection(ui:GetFontHintLevel())
-
- -- Add a drop-down menu to control the subpixel threshold.
- local thresholds = {
- "0",
- "3",
- "6",
- "9",
- "12",
- "15",
- "18",
- "21"
- }
- CreateMenu("UI::SetFontSubpixelThreshold", thresholds, "HandleFontSubpixel")
- :SetSelection(ui:GetFontSubpixelThreshold() / 3)
- -- Add a drop-down menu to control oversampling.
- local limits = {
- "1",
- "2",
- "3",
- "4",
- "5",
- "6",
- "7",
- "8"
- }
- CreateMenu("UI::SetFontOversampling", limits, "HandleFontOversampling")
- :SetSelection(ui:GetFontOversampling() - 1)
- -- Set the mouse mode to use in the sample
- SampleInitMouseMode(MM_FREE)
- end
- function CreateText()
- local container = UIElement:new()
- container:SetAlignment(HA_LEFT, VA_TOP)
- container:SetLayout(LM_VERTICAL)
- uielement:AddChild(container)
- local font = cache:GetResource("Font", "Fonts/BlueHighway.ttf")
- for size = 1, 18, 0.5 do
- local text = Text:new()
- text.text = "The quick brown fox jumps over the lazy dog (" .. size .. "pt)"
- text:SetFont(font, size)
- text:AddTag(TEXT_TAG)
- container:AddChild(text)
- end
- end
- function CreateCheckbox(label, handler)
- local container = UIElement:new()
- container:SetAlignment(HA_LEFT, VA_TOP)
- container:SetLayout(LM_HORIZONTAL, 8)
- uielement:AddChild(container)
-
- local box = CheckBox:new()
- container:AddChild(box)
- box:SetStyleAuto()
-
- local text = Text:new()
- container:AddChild(text)
- text.text = label
- text:SetStyleAuto()
- text:AddTag(TEXT_TAG)
- SubscribeToEvent(box, "Toggled", handler)
- return box
- end
- function CreateMenu(label, items, handler)
- local container = UIElement:new()
- container:SetAlignment(HA_LEFT, VA_TOP)
- container:SetLayout(LM_HORIZONTAL, 8)
- uielement:AddChild(container)
-
- local text = Text:new()
- container:AddChild(text)
- text.text = label
- text:SetStyleAuto()
- text:AddTag(TEXT_TAG)
- local list = DropDownList:new()
- container:AddChild(list)
- list:SetStyleAuto()
-
- for i, item in ipairs(items) do
- local t = Text:new()
- list:AddItem(t)
- t.text = item
- t:SetStyleAuto()
- t:SetMinWidth(t:GetRowWidth(0) + 10)
- t:AddTag(TEXT_TAG)
- end
- text:SetMaxWidth(text:GetRowWidth(0))
-
- SubscribeToEvent(list, "ItemSelected", handler)
- return list
- end
- function HandleWhiteBackground(eventType, eventData)
- local box = eventData["Element"]:GetPtr("CheckBox")
- local checked = box:IsChecked()
- local fg = checked and Color.BLACK or Color.WHITE
- local bg = checked and Color.WHITE or Color.BLACK
-
- renderer.defaultZone.fogColor = bg
- local elements = uielement:GetChildrenWithTag(TEXT_TAG, true)
- for i, element in ipairs(elements) do
- element.color = fg
- end
- end
- function HandleForceAutoHint(eventType, eventData)
- local box = eventData["Element"]:GetPtr("CheckBox")
- local checked = box:IsChecked()
- ui:SetForceAutoHint(checked)
- end
- function HandleSRGB(eventType, eventData)
- local box = eventData["Element"]:GetPtr("CheckBox")
- local checked = box:IsChecked()
- if graphics:GetSRGBWriteSupport() then
- graphics:SetSRGB(checked)
- else
- log:Write(LOG_WARNING, "graphics:GetSRGBWriteSupport returned false")
- end
- end
- function HandleFontHintLevel(eventType, eventData)
- local list = eventData["Element"]:GetPtr("DropDownList")
- local i = list:GetSelection()
- ui:SetFontHintLevel(i)
- end
- function HandleFontSubpixel(eventType, eventData)
- local list = eventData["Element"]:GetPtr("DropDownList")
- local i = list:GetSelection()
- ui:SetFontSubpixelThreshold(i * 3)
- end
- function HandleFontOversampling(eventType, eventData)
- local list = eventData["Element"]:GetPtr("DropDownList")
- local i = list:GetSelection()
- ui:SetFontOversampling(i + 1)
- end
- -- Create XML patch instructions for screen joystick layout specific to this sample app
- function GetScreenJoystickPatchString()
- return
- "<patch>" ..
- " <add sel=\"/element/element[./attribute[@name='Name' and @value='Hat0']]\">" ..
- " <attribute name=\"Is Visible\" value=\"false\" />" ..
- " </add>" ..
- "</patch>"
- end
|