Harry Potter's magic button - a solution to another tricky group bug
Wilhelm Sanke
sanke at hrz.uni-kassel.de
Tue Aug 3 15:55:23 EDT 2010
I was so intrigued by the various effects of the workaround that I
included "magic" in the subject line. Bringing Harry Potter into play
may also help to start the process of improvements for Revolution
announced by Kevin last week, namely - among them - better communication
with users and the total overhaul of the Revolution bug management
system along with quicker bug fixes (after all,. the "Hogwarts School of
Witchcraft and Wizardry" is located not far from Edinburgh, which will
facilitate the exchange of ideas).
Once the Revolution programmers responsible for bug fixes will have
analysed and understood what is going on behind the scenes - in the
engine - concerning this bug and the workaround, they will be much
better equipped to tackle the 9 remaining bugs associated with groups, too.
A sample stack that demonstrates bug and workaround can be downloaded
from here:
<http://www.sanke.org/Software/Magic Button.zip>
There are basically four aspects to this magic:
1. The magic button - as a workaround - resolves the group bug that
YOU CANNOT SET THE LOC OF AN IMAGE IN A GROUP IF THE IMAGE IS SMALLER
THAN THE GROUP.
In the case of a smaller image the scriptline "set the loc of image "x"
to the loc of group "y"" will place the image at the topleft corner of
the group instead (unless the loc of the image is already exactly
identical with the group loc).
Now, after you put Harry Potter's button into the upperleft corner of
the group, the above scriptline with "set the loc" will now work as it
should. It is essential here that the magic button is visible in the
sense that its visibility is set to true. But you could shove the button
under the topleft corner of the group so that it actually becomes
invisible and it will nevertheless continue to exert its spell.
The moment you hide the button, i.e. with "hide" or "set the vis to
false", the image will snap again to a topleft position in the group.
2. The magic button can be moved across the visible part of the group
area by script - diagonally, horizontally, vertically - without being
addressed with its name or any other identifier. One precondition for
this to happen is that the image is at least 1 pixel off the loc of the
group.
Place the button anywhere in the group, press button "center image
using "set the loc"" repeatedly, and the magic button will move in steps
until it reaches the upperleft corner of the group. The first time you
press the button the image will be also be placed at the topleft of the
group with only one step.
The distance the magic button will move vertically and horizontally with
a step is different with image size and dependent on the height and
width of the image, e.g. with a broader image the horizontal steps will
be much smaller, with a smaller height the steps will be bigger. You can
see this best with image "Steve and friend" (Steve Jobs, the iPhone, and
Medwedjew), but I recommend to try out the options of the sample stack
with image "Red Square" first.
3. An interesting variant of 2. is the "split button":
Place the magic button at the bottomleft corner of the group. Make sure
the image is at least 1 pixel off the loc of the group (Both the button
and the image have a "grab me" script, so you can do this manually with
mousedown).
Now, as above in "2." press button "center image using "set the loc"" .
The magic button will move upwards in steps. When it has reached the
area of the image the button will "split". The part of the button
intersecting with the image will continue to move upwards. The left part
of the button will remain in place until the right part of the button
has reached the top of the group. At that moment the two separate parts
of the magic button will re-unite.
If you place the button to the right of the group, the splitting of the
button will occur horizontally.--
There are three special buttons in the sample stack that demonstrate
these effects (2. and 3.) automated with repeat loops.
At the top of these scripts for the automated demonstrations I make use
of the move command (which is not broken) to make sure image and magic
button are placed at the appropriate places, but for creating the
effects the broken "set" command is used inside the repeat loops.
4. Button "reset image" will restore the original imagedata stored in a
custom property and center the image using the "move" command.
When you have placed the magic button somewhere on the group area like
above in points 2. and 3. and you then press the "reset image" button
repeatedly the magic button will also move in steps towards the topleft
of the group, but without producing the "split" effect.
================================
A few more particulars and peculiarities for those interested in getting
a broader picture:
If the magic button is absent or hidden and you have managed to center
the image (either by using the "move" command or by dragging the image
manually), there are now several additional conditions under which the
smaller image within the group again snaps to a topleft position -
although the lockloc of the image and that of the group are set to true.
- when you go to another card and then navigate back
- when you change the imagedata and set the image to the new imagedata
- when you import a new image
- when you close the stack (even after having saved it again) and then
reopen it.
Another peculiarity is that this snapping to the topleft may happen in
*two" steps - especially when you change the imagedata with button
"duplicate colors":
- at first only the overlapping parts between the image area at the
original position and the area of the image at the topleft position are
displayed
- then when you again change the imagedata - or click on the image -
the full image is shown at the topleft position of the group.
The easiest way to demonstrate this is to drag the smaller-than-group
image with mousedown nearer to the bottomright of the group and then
apply the "duplicate colors" filter twice.
If an image so small that there are no overlapping parts of the image
at the start position and its position at the topleft corner, then the
image will vanish completely. It is "virtually" there and you can revive
it by clicking near the topleft corner of the group.
When you use the alternate filter "duplicate colors + lock screen" the
image is set to the topleft of the group in only one step - and remains
fully visible..
By the way, when you apply filter "duplicate colors" 9 times then the
original colors of the image will be restored, but this is the normal
process when using this filter - without any magic.--
I will file a bug report soon and also add the sample stack.
Regards,
Wilhelm Sanke
<http://www.sanke.org/MetaMedia>
More information about the use-livecode
mailing list