• Lexical Binding

    From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.javascript on Fri Jul 24 06:43:10 2026
    From Newsgroup: comp.lang.javascript

    Common code for applying a transition effect where the image being
    transitioned to has some matrix transform applied:

    function def_transform_effect_common(transform, swap_parms)
    /* function factory for transform-related effect functions. */
    {
    return function(ctx, parms, t)
    {
    ctx.save()
    ctx.reset()
    ctx.resetTransform()
    ctx.drawImage(swap_parms ? parms.image_bitmap_2 : parms.image_bitmap_1, 0, 0)
    ctx.setTransform(transform(t))
    ctx.drawImage(swap_parms ? parms.image_bitmap_1 : parms.image_bitmap_2, 0, 0)
    ctx.restore()
    }
    } /*def_transform_effect_common*/

    A specific matrix transform: stretch/shrink the image vertically,
    from/to a specified y-coordinate:

    function def_transform_stretch_shrink(stretch, y0)
    {
    return function(t)
    {
    const mtx =
    {
    "a" : 1,
    "c" : 0,
    "e" : 0,
    "b" : 0,
    "d" : (stretch ? t : 1 - t),
    "f" : %(height)d * y0 * (stretch ? 1 - t : t),
    }
    return mtx
    }
    } /*def_transform_stretch_shrink*/

    Put them together, to define a rCLshrink to bottomrCY effect:

    window.effects = /* exported effects functions */
    {
    ...
    "shrink_to_bottom" :
    def_transform_effect_common(def_transform_stretch_shrink(false, 1), true),
    ...
    }
    --- Synchronet 3.22a-Linux NewsLink 1.2
  • From Lawrence =?iso-8859-13?q?D=FFOliveiro?=@ldo@nz.invalid to comp.lang.javascript on Sat Jul 25 22:56:50 2026
    From Newsgroup: comp.lang.javascript

    On Fri, 24 Jul 2026 06:43:10 -0000 (UTC), I wrote:

    Put them together, to define a rCLshrink to bottomrCY effect:

    window.effects = /* exported effects functions */
    {
    ...
    "shrink_to_bottom" :
    def_transform_effect_common(def_transform_stretch_shrink(false, 1), true),
    ...
    }

    Just to make the code-reuse factor clear, here are 6 different visual
    effects, each defined with just one line of code:

    window.effects = /* exported effects functions */
    {
    ...
    "stretch_from_bottom" :
    def_transform_effect_common(def_transform_stretch_shrink(true, 1), false),
    "stretch_from_middle" :
    def_transform_effect_common(def_transform_stretch_shrink(true, 0.5), false),
    "stretch_from_top" :
    def_transform_effect_common(def_transform_stretch_shrink(true, 0), false),
    "shrink_to_bottom" :
    def_transform_effect_common(def_transform_stretch_shrink(false, 1), true),
    "shrink_to_middle" :
    def_transform_effect_common(def_transform_stretch_shrink(false, 0.5), true),
    "shrink_to_top" :
    def_transform_effect_common(def_transform_stretch_shrink(false, 0), true),
    ...
    }
    --- Synchronet 3.22a-Linux NewsLink 1.2