--[[ FlexLove Example 09: Styling and Visual Effects This example demonstrates styling and visual effects: - Corner radius (uniform and individual corners) - Borders (different sides) - Opacity levels - Background colors - Blur effects (contentBlur and backdropBlur) Run with: love /path/to/libs/examples/09_styling_visual_effects.lua ]] local Lv = love local FlexLove = require("../FlexLove") local Gui = FlexLove.Gui local Color = FlexLove.Color local enums = FlexLove.enums function Lv.load() Gui.init({ baseScale = { width = 1920, height = 1080 } }) -- Title Gui.new({ x = "2vw", y = "2vh", width = "96vw", height = "5vh", text = "FlexLove Example 09: Styling and Visual Effects", textSize = "3.5vh", textColor = Color.new(1, 1, 1, 1), textAlign = enums.TextAlign.CENTER, }) -- ======================================== -- Section 1: Corner Radius -- ======================================== Gui.new({ x = "2vw", y = "9vh", width = "46vw", height = "3vh", text = "Corner Radius", textSize = "2.5vh", textColor = Color.new(0.9, 0.9, 0.9, 1), }) -- Uniform corner radius Gui.new({ x = "2vw", y = "13vh", width = "14vw", height = "12vh", backgroundColor = Color.new(0.6, 0.3, 0.7, 1), cornerRadius = 5, text = "radius: 5", textSize = "1.8vh", textColor = Color.new(1, 1, 1, 1), textAlign = enums.TextAlign.CENTER, }) Gui.new({ x = "17vw", y = "13vh", width = "14vw", height = "12vh", backgroundColor = Color.new(0.3, 0.6, 0.7, 1), cornerRadius = 15, text = "radius: 15", textSize = "1.8vh", textColor = Color.new(1, 1, 1, 1), textAlign = enums.TextAlign.CENTER, }) -- Individual corner radius Gui.new({ x = "32vw", y = "13vh", width = "16vw", height = "12vh", backgroundColor = Color.new(0.7, 0.6, 0.3, 1), cornerRadius = { topLeft = 0, topRight = 20, bottomLeft = 20, bottomRight = 0, }, text = "Individual\ncorners", textSize = "1.8vh", textColor = Color.new(1, 1, 1, 1), textAlign = enums.TextAlign.CENTER, }) -- ======================================== -- Section 2: Borders -- ======================================== Gui.new({ x = "50vw", y = "9vh", width = "48vw", height = "3vh", text = "Borders", textSize = "2.5vh", textColor = Color.new(0.9, 0.9, 0.9, 1), }) -- All borders Gui.new({ x = "50vw", y = "13vh", width = "14vw", height = "12vh", backgroundColor = Color.new(0.2, 0.2, 0.3, 1), border = { top = true, right = true, bottom = true, left = true }, borderColor = Color.new(0.8, 0.4, 0.4, 1), text = "All sides", textSize = "1.8vh", textColor = Color.new(1, 1, 1, 1), textAlign = enums.TextAlign.CENTER, }) -- Top and bottom borders Gui.new({ x = "65vw", y = "13vh", width = "14vw", height = "12vh", backgroundColor = Color.new(0.2, 0.3, 0.2, 1), border = { top = true, bottom = true }, borderColor = Color.new(0.4, 0.8, 0.4, 1), text = "Top & Bottom", textSize = "1.8vh", textColor = Color.new(1, 1, 1, 1), textAlign = enums.TextAlign.CENTER, }) -- Left border only Gui.new({ x = "80vw", y = "13vh", width = "16vw", height = "12vh", backgroundColor = Color.new(0.2, 0.2, 0.3, 1), border = { left = true }, borderColor = Color.new(0.4, 0.4, 0.8, 1), text = "Left only", textSize = "1.8vh", textColor = Color.new(1, 1, 1, 1), textAlign = enums.TextAlign.CENTER, }) -- ======================================== -- Section 3: Opacity -- ======================================== Gui.new({ x = "2vw", y = "27vh", width = "96vw", height = "3vh", text = "Opacity Levels", textSize = "2.5vh", textColor = Color.new(0.9, 0.9, 0.9, 1), }) local opacityLevels = { 1.0, 0.75, 0.5, 0.25 } for i, opacity in ipairs(opacityLevels) do Gui.new({ x = (2 + (i - 1) * 24) .. "vw", y = "31vh", width = "22vw", height = "12vh", backgroundColor = Color.new(0.8, 0.3, 0.5, 1), opacity = opacity, text = "Opacity: " .. opacity, textSize = "2vh", textColor = Color.new(1, 1, 1, 1), textAlign = enums.TextAlign.CENTER, cornerRadius = 8, }) end -- ======================================== -- Section 4: Background Colors -- ======================================== Gui.new({ x = "2vw", y = "45vh", width = "96vw", height = "3vh", text = "Background Colors", textSize = "2.5vh", textColor = Color.new(0.9, 0.9, 0.9, 1), }) -- Gradient-like colors for i = 1, 8 do local hue = (i - 1) / 7 Gui.new({ x = (2 + (i - 1) * 12) .. "vw", y = "49vh", width = "11vw", height = "18vh", backgroundColor = Color.new( 0.3 + hue * 0.5, 0.5 + math.sin(hue * 3.14) * 0.3, 0.8 - hue * 0.5, 1 ), text = tostring(i), textSize = "3vh", textColor = Color.new(1, 1, 1, 1), textAlign = enums.TextAlign.CENTER, cornerRadius = 5, }) end -- ======================================== -- Section 5: Blur Effects (if supported) -- ======================================== Gui.new({ x = "2vw", y = "69vh", width = "96vw", height = "3vh", text = "Blur Effects (contentBlur & backdropBlur)", textSize = "2.5vh", textColor = Color.new(0.9, 0.9, 0.9, 1), }) -- Content blur example Gui.new({ x = "2vw", y = "73vh", width = "46vw", height = "22vh", backgroundColor = Color.new(0.3, 0.4, 0.6, 0.8), contentBlur = { intensity = 5, quality = 3 }, text = "Content Blur\n(blurs this element)", textSize = "2vh", textColor = Color.new(1, 1, 1, 1), textAlign = enums.TextAlign.CENTER, cornerRadius = 10, }) -- Backdrop blur example Gui.new({ x = "50vw", y = "73vh", width = "46vw", height = "22vh", backgroundColor = Color.new(0.6, 0.4, 0.3, 0.6), backdropBlur = { intensity = 10, quality = 5 }, text = "Backdrop Blur\n(blurs background)", textSize = "2vh", textColor = Color.new(1, 1, 1, 1), textAlign = enums.TextAlign.CENTER, cornerRadius = 10, }) end function Lv.update(dt) Gui.update(dt) end function Lv.draw() Lv.graphics.clear(0.05, 0.05, 0.08, 1) Gui.draw() end function Lv.resize(w, h) Gui.resize(w, h) end