• Ben Avison's avatar
    Fixed set active coord from mask in OS_SpriteOp 36 (set pointer shape) · de25c04d
    Ben Avison authored
    Detail:
      Page 33 of the RiscOS 3 volume 3 Programmers manual states that the
      active point can be set from the sprite's mask. This was never
      implemented but it is very useful as it means that the active point
      is no longer hardwired into programs but dependant on the sprite
      used.
    
      The obvious problem is ptr_write. At present the active point is at
      the top left. If you run !ptr_test and run the pointer over the
      'standard active point position' writable icons from the bottom you
      will see that the pointer changes to an I with its top at the bottom
      of the writable icon. If you move the pointer until the top of the I
      is just inside the upper writable icon of the 2 and click, the focus
      goes into the upper writable - not what you'd expect.
    
      Similarly it's difficult to place the caret between the 2 lls in
      will. The bottom two icons shows the difference with the active
      point in the correct position in the I beam.
    
      You could change the wimp to put the caret in the correct position
      like I have in the bottom 2 writables of !Ptr_test however this
      would have the wrong active point position if the mode had
      rectangular y pixels and it wouldn't fix all instances where
      programmers had set ther own values.
    
      It also means that themes can change the pointer active point as
      well as the shape.
    
      The routine added copes with old and new type sprites of any bit depth though
      OS_SpriteOp 36 has a 8bit limit.
    Admin:
      Tested on Iyonix 5.17.
    Author:
      Colin Granville
    
    Version 1.42. Tagged as 'SprExtend-1_42'
    de25c04d
VersionASM 1 KB