Inks/Windows
The look and feel of a program can have a high impact on the end user, and depending on what your application is, can be an extremely important aspect of your piece of software. Livecode provides support for Inks, which provide a huge amount of flexibility when skinning applications. You can blend any object in Livecode, including the entire window, allowing the desktop of the host computer to show through. The results can be stunning when all these features are used together in the right measure.
Blending the entire window can however create unwanted effects including loss of clarity, especially where you are displaying text. This lesson will show you how you can use window shapes and inks to control the transparency of a particular area of your stack.
Our example is very simple. The stack is made up of a background image, a logo in a nice beveled frame, a close button and the controls to alter the transparency of our window. Clicking on the '+' and '-'buttons alters the blend level of the background image without affecting the transparency of the controls or the logo.
Step 1: Setting up your stack
Create the basic Livecode stack, add your blank controls and import your images. All components that make up the structure of your stack should be placed along with your background image into a single group. Once you have created your group, be sure to set the topleft of your group to 0,0 - the very top left corner of the stack. This is required as the window shape is applied from the top left corner of the stack. Remember this to prevent misalignment of objects to the window shape.
The effect is generated using the import snapshot function with the resultant image being set as the new window shape. We are going to set the blend level of the background image and then take a snapshot of the entire group. The image produced will contain alpha blended regions as well as solid areas where our controls have been placed.
Step 2: Writing code to control the User Interface
In this stack, we want to be able to change the transparency of the background by pressing the + and - buttons seen in the image above. In order to do this, we will need to write three separate handlers to carry out the required tasks, each of which will be placed in the script of the background group. The first, 'stackBlendLevel', will set the transparency (or blendLevel) of the background image. 'stackBlendLevel' has a single parameter, 'pChange', which is an integer corresponding to the amount that the blendLevel of the background image should be changed.
local sBlendLevel
on stackBlendLevel pChange
# pChange is an integer value + or -
# This function takes pChange and modifies the blendLevel of the background image
# in the windowShapeGroup
lock screen
lock messages
if sBlendLevel is empty then
put the blendlevel of this stack into sBlendLevel
end if
add pChange to sBlendLevel
# Ensure that the new blendlevel is valid
if sBlendLevel > 60 then
put 60 into sBlendLevel
else if sBlendLevel < 0 then
put 0 into sBlendLevel
end if
# Recreate the window shape based on the new blendlevel of the background image
recreateWindowShape sBlendLevel
# Update the User Interface so that the correct number of pips go red
updateUI sBlendLevel
lock messages
unlock screen
end stackBlendLevel
Notice that once the blend level of the background image has been changed we immediately call 'recreateWindowShape'. This handler takes a snapshot of our group and sets the windows shape of the stack to the image created.
on recreateWindowShape pBlendLevel
# This handler takes a snapshot of group "windowShape", which contains all our
# controls and most importantly the background image
# Delete the window shape image if there is one
if there is an image "WindowShape" then
delete image "WindowShape"
end if
# Set the blendlevel of the background image
set the blendLevel of image "background" to pBlendLevel
# Set the properties of the template image which will apply to our new window shape
# image when we use the command 'snapshot'
set the visible of the templateImage to false
set the alwaysBuffer of the templateImage to true
# Take a snapshot of the whole group, including all the controls
import snapshot from group 1
set the name of the last image to "WindowShape"
# Finally, set the window shape of the stack to the new image
set the windowShape of this stack to the id of image "WindowShape"
end recreateWindowShape
The last handler we need to put in the script is 'updateUI'. This is a simple handler that highlights the correct number of pips on our example stack.
on updateUI pBlendLevel
## This handler updates the UI accordingly
## Changes the number of pips highlighted based on parameter pBlendLevel
lock screen
if sBlendLevel < 10 then
set the icon of button "pip1" to 5007
else
set the icon of button "pip1" to 5006
end if
if sBlendLevel < 20 then
set the icon of button "pip2" to 5007
else
set the icon of button "pip2" to 5006
end if
if sBlendLevel < 30 then
set the icon of button "pip3" to 5007
else
set the icon of button "pip3" to 5006
end if
if sBlendLevel < 40 then
set the icon of button "pip4" to 5007
else
set the icon of button "pip4" to 5006
end if
if sBlendLevel < 50 then
set the icon of button "pip5" to 5007
else
set the icon of button "pip5" to 5006
end if
if sBlendLevel < 60 then
set the icon of button "pip6" to 5007
else
set the icon of button "pip6" to 5006
end if
lock messages
end updateUI
Step 3: Changing the transparency with buttons
In order to use the above code to change the transparency of our background image, we need to call the 'stackBlendLevel' handler from the + and - buttons on our stack. The + button has 'stackBlendLevel 10', while the - button has 'stackBlendLevel -10'.
So now, when we press the buttons, the transparency of the background will change, along with the number of highlighted pips. We don't have to use buttons - for a more dramatic effect, something like a scrollbar could be used. With the concepts detailed above, you can create a wide range of effects.
0 Comments
Add your comment