====== Text Background ====== It can be helpful to highlight or otherwise mark text with a background. Thankfully we can do this entirely with config. We'll work though some examples. To start, make a project. {{page>snippets:init_new_project&nofooter&noeditbutton}} We're going to follow a similar approach to [[en:tutorials:text-fonts:text_boundaries|text boundaries tutorial]] in this tutorial. ===== Setting up some demo text ===== Let's change the default logo object into a text object. [Object] Graphic = @ Text = @ String = The Old Gatekeeper is the guardian of Elvinwood. His eyes are becoming dim, and so the creatures come ever nearer. Smoothing = false Pivot = center Color = lightgray In this form, the text formats like this: {{ :tutorials:text:text-no-background.png?nolink |}} Let's add a background color to the text. First, add a reference to the background object we're about to create in the ''[Object]'' section: ChildList = ObjectBackground Now we can define ''[ObjectBackground]'': [ObjectBackground] Graphic = @ Texture = pixel Color = darkblue Alpha = 0.6 UseParentSpace = scale Scale = 1 Position = top left -> top left 0.1 If you run the game now it should look like this: {{ :tutorials:text:text-with-background.png?nolink |}} Let's add a fixed width to the text object with: Size = (200, 0) If you re-run the game, the background automatically reshapes to match the new dimensions of the text. {{ :tutorials:text:text-sized-with-background.png?nolink |}} For static text objects, which don't change their size or layout, this is all you need. If your text may change dimensions over its lifetime then we can handle that with a track. To create some dynamic text for this tutorial, we will add a track to the text object to change its content after a brief delay. Our text object config now looks like this: [Object] Graphic = @ Text = @ String = The Old Gatekeeper is the guardian of Elvinwood. His eyes are becoming dim, and so the creatures come ever nearer. Smoothing = false Pivot = center Color = lightgray ChildList = ObjectBackground Size = (200, 0) TrackList = ObjectChangeTextA [ObjectChangeTextA] 1 = Object.SetText ^ "This is much shorter now" # Object.AddTrack ^ ObjectChangeTextB [ObjectChangeTextB] 1 = > Get Object String, Object.SetText ^ < # Object.AddTrack ^ ObjectChangeTextA The two tracks here will cause the string of text to alternate regularly between two values. We can update our background object with a track to adapt to changes in the text object: [ObjectBackground] Graphic = @ Texture = pixel Color = darkblue Alpha = 0.6 UseParentSpace = position TrackList = ObjectBackgroundUpdate Position = center -> center 0.1 [ObjectBackgroundUpdate] 0 = > Object.GetParent ^, > Object.GetSize <, Object.SetSize ^ < # Object.SetPivot ^ "center" Loop = true Now if we run the game, the text will change regularly and the background will update to match the new text dimensions. It will start with the same text we saw above: {{ :tutorials:text:text-sized-with-background.png?nolink |}} and then change to a shorter message with a background updated for the new text: {{ :tutorials:text:text-sized-with-background-short.png?nolink |}}