Source
...
Target
Commits (2)
  • Jeffrey Lee's avatar
    Avoid unnecessary remainder calculations · 117db38f
    Jeffrey Lee authored
    Detail:
      s/StartUp - Avoid unnecessary remainder calculations in DivRem macro
    Admin:
      Tested on Cortex-A15
    
    
    Version 0.20. Tagged as 'DragASprit-0_20'
    117db38f
  • Jeffrey Lee's avatar
    Fix redraw issue with alpha drop shadow · ac32c2a9
    Jeffrey Lee authored
    Detail:
      s/StartUp - When the alpha drop shadow is in use, the foreground sprite is one row+column larger than normal, to allow the shadow to be feathered. However the drag box calculations weren't taking this into account, resulting in slightly wonky coordinates that can result in redraw issues in some situations (specifically, the screen area under the sprite's current location is filled with a plain colour if the bounding box overlaps the graphics window in a certain manner). Introduce orig_x_size and orig_y_size variables so that the drag box calculations can be correct regardless of how much padding is added to the image (with the limitation that the padding must be on the right / bottom)
      Also, fix the AtPointer support so that the pointer is placed at the centre of the input sprite, not the padded sprite.
    Admin:
      Tested on Raspberry Pi
      Resolves ticket #402, and similar corruption with animated windows (e.g. start a drag of a sprite which overlaps !Alarm's icon)
    
    
    Version 0.21. Tagged as 'DragASprit-0_21'
    ac32c2a9
...@@ -11,13 +11,13 @@ ...@@ -11,13 +11,13 @@
GBLS Module_HelpVersion GBLS Module_HelpVersion
GBLS Module_ComponentName GBLS Module_ComponentName
GBLS Module_ComponentPath GBLS Module_ComponentPath
Module_MajorVersion SETS "0.19" Module_MajorVersion SETS "0.21"
Module_Version SETA 19 Module_Version SETA 21
Module_MinorVersion SETS "" Module_MinorVersion SETS ""
Module_Date SETS "05 Jul 2014" Module_Date SETS "30 Aug 2017"
Module_ApplicationDate SETS "05-Jul-14" Module_ApplicationDate SETS "30-Aug-17"
Module_ComponentName SETS "DragASprit" Module_ComponentName SETS "DragASprit"
Module_ComponentPath SETS "castle/RiscOS/Sources/Desktop/DragASprit" Module_ComponentPath SETS "castle/RiscOS/Sources/Desktop/DragASprit"
Module_FullVersion SETS "0.19" Module_FullVersion SETS "0.21"
Module_HelpVersion SETS "0.19 (05 Jul 2014)" Module_HelpVersion SETS "0.21 (30 Aug 2017)"
END END
/* (0.19) /* (0.21)
* *
* This file is automatically maintained by srccommit, do not edit manually. * This file is automatically maintained by srccommit, do not edit manually.
* Last processed by srccommit version: 1.1. * Last processed by srccommit version: 1.1.
* *
*/ */
#define Module_MajorVersion_CMHG 0.19 #define Module_MajorVersion_CMHG 0.21
#define Module_MinorVersion_CMHG #define Module_MinorVersion_CMHG
#define Module_Date_CMHG 05 Jul 2014 #define Module_Date_CMHG 30 Aug 2017
#define Module_MajorVersion "0.19" #define Module_MajorVersion "0.21"
#define Module_Version 19 #define Module_Version 21
#define Module_MinorVersion "" #define Module_MinorVersion ""
#define Module_Date "05 Jul 2014" #define Module_Date "30 Aug 2017"
#define Module_ApplicationDate "05-Jul-14" #define Module_ApplicationDate "30-Aug-17"
#define Module_ComponentName "DragASprit" #define Module_ComponentName "DragASprit"
#define Module_ComponentPath "castle/RiscOS/Sources/Desktop/DragASprit" #define Module_ComponentPath "castle/RiscOS/Sources/Desktop/DragASprit"
#define Module_FullVersion "0.19" #define Module_FullVersion "0.21"
#define Module_HelpVersion "0.19 (05 Jul 2014)" #define Module_HelpVersion "0.21 (30 Aug 2017)"
#define Module_LibraryVersionInfo "0:19" #define Module_LibraryVersionInfo "0:21"
...@@ -89,6 +89,8 @@ scale_block # 16 ...@@ -89,6 +89,8 @@ scale_block # 16
tx_block # 16 tx_block # 16
spr_dragbox # 16 ; Box to use for sprite dragging calculations spr_dragbox # 16 ; Box to use for sprite dragging calculations
local_flags # 4 local_flags # 4
orig_x_size # 4 ; Size in OS units of input sprite
orig_y_size # 4 ; Size in OS units of input sprite
StartUp_frame_size * :INDEX: @ StartUp_frame_size * :INDEX: @
StartUp Entry "r0-r8", StartUp_frame_size StartUp Entry "r0-r8", StartUp_frame_size
...@@ -208,6 +210,10 @@ StartUp Entry "r0-r8", StartUp_frame_size ...@@ -208,6 +210,10 @@ StartUp Entry "r0-r8", StartUp_frame_size
; Probably failed due to missing sprite, hence... ; Probably failed due to missing sprite, hence...
BVS ResortToNormalDrag BVS ResortToNormalDrag
; Remember original size so we can get drag box calculations correct
STR r0, orig_x_size
STR r1, orig_y_size
; If there's a drop-shadow grow the size by the required distance ; If there's a drop-shadow grow the size by the required distance
LDR r2, local_flags LDR r2, local_flags
TestAFlag r2, DropShadow, Present, r14 TestAFlag r2, DropShadow, Present, r14
...@@ -616,7 +622,7 @@ wibble2 ...@@ -616,7 +622,7 @@ wibble2
LDR r1, [r2] LDR r1, [r2]
LDR r14, [r3, #box_x0] LDR r14, [r3, #box_x0]
SUB r1, r1, r14 SUB r1, r1, r14
LDR r14, x_size LDR r14, orig_x_size
SUB r1, r1, r14, LSR #1 SUB r1, r1, r14, LSR #1
STR r1, bl_offset_x ; Store x offset STR r1, bl_offset_x ; Store x offset
...@@ -624,9 +630,7 @@ wibble2 ...@@ -624,9 +630,7 @@ wibble2
LDR r1, [r2, #4] LDR r1, [r2, #4]
LDR r14, [r3, #box_y0] LDR r14, [r3, #box_y0]
SUB r1, r1, r14 SUB r1, r1, r14
LDR r14, y_size B %FT61 ; Share centre justify code
SUB r1, r1, r14, LSR #1 ; This value will be stord after next branch
B %FT65
54 54
] ]
...@@ -644,19 +648,15 @@ wibble2 ...@@ -644,19 +648,15 @@ wibble2
LDR r2, [r3, #box_x0] LDR r2, [r3, #box_x0]
SUB r1, r1, r2 SUB r1, r1, r2
MOV r1, r1, ASR #1 MOV r1, r1, ASR #1
LDR r2, x_size LDR r2, orig_x_size
TestAFlag r0, DropShadow, Present, r14
SUBEQ r2, r2, #DS_DropShadowDistance
SUB r1, r1, r2, ASR #1 SUB r1, r1, r2, ASR #1
B %FT57 B %FT57
55 55
; Right justify ; Right justify
LDR r1, [r3, #box_x1] LDR r1, [r3, #box_x1]
LDR r2, x_size LDR r2, orig_x_size
SUB r1, r1, r2 SUB r1, r1, r2
TestAFlag r0, DropShadow, Present, r14
ADDEQ r1, r1, #DS_DropShadowDistance
LDR lr, [r3, #box_x0] LDR lr, [r3, #box_x0]
SUB r1, r1, lr SUB r1, r1, lr
...@@ -667,9 +667,9 @@ wibble2 ...@@ -667,9 +667,9 @@ wibble2
BNE %FT60 BNE %FT60
; Bottom justify ; Bottom justify
MOV r1, #0 LDR r14, orig_y_size
TestAFlag r0, DropShadow, Present, r14 LDR r1, y_size
SUBEQ r1, r1, #DS_DropShadowDistance SUB r1, r14, r1
B %FT65 B %FT65
...@@ -682,9 +682,10 @@ wibble2 ...@@ -682,9 +682,10 @@ wibble2
LDR r2, [r3, #box_y0] LDR r2, [r3, #box_y0]
SUB r1, r1, r2 SUB r1, r1, r2
MOV r1, r1, ASR #1 MOV r1, r1, ASR #1
61
LDR r14, orig_y_size
LDR r2, y_size LDR r2, y_size
TestAFlag r0, DropShadow, Present, r14 RSB r2, r14, r2, LSL #1 ; i.e. orig_y_size + 2*padding
ADDEQ r2, r2, #DS_DropShadowDistance
SUB r1, r1, r2, ASR #1 SUB r1, r1, r2, ASR #1
B %FT65 B %FT65
...@@ -700,23 +701,22 @@ wibble2 ...@@ -700,23 +701,22 @@ wibble2
STR r1, bl_offset_y STR r1, bl_offset_y
; Given the bl offsets and the original box, generate the sprite's drag box ; Given the bl offsets and the original box, generate the sprite's drag box
TestAFlag r0, DropShadow, Present, r14
LDR r1, [r3, #box_x0] LDR r1, [r3, #box_x0]
LDR r2, bl_offset_x LDR r2, bl_offset_x
ADD r1, r1, r2 ADD r1, r1, r2
STR r1, spr_dragbox + box_x0 STR r1, spr_dragbox + box_x0
LDR r2, x_size LDR r2, orig_x_size
ADD r1, r1, r2 ADD r1, r1, r2
SUBEQ r1, r1, #DS_DropShadowDistance
STR r1, spr_dragbox + box_x1 STR r1, spr_dragbox + box_x1
LDR r1, [r3, #box_y0] LDR r1, [r3, #box_y0]
LDR r2, bl_offset_y LDR r2, bl_offset_y
ADD r1, r1, r2 ADD r1, r1, r2
ADDEQ r1, r1, #DS_DropShadowDistance LDR r2, orig_y_size
LDR r14, y_size
SUB r14, r14, r2
ADD r1, r1, r14
STR r1, spr_dragbox + box_y0 STR r1, spr_dragbox + box_y0
LDR r2, y_size
ADD r1, r1, r2 ADD r1, r1, r2
SUBEQ r1, r1, #DS_DropShadowDistance
STR r1, spr_dragbox + box_y1 STR r1, spr_dragbox + box_y1
[ debugstart [ debugstart
...@@ -1177,7 +1177,7 @@ GTDS_frame_size * :INDEX: @ ...@@ -1177,7 +1177,7 @@ GTDS_frame_size * :INDEX: @
RSB r3, r3, #256 ; r3 = Ac RSB r3, r3, #256 ; r3 = Ac
; Calculate s ; Calculate s
MOV r4, r4, LSL #8 MOV r4, r4, LSL #8
DivRem r8, r4, r3, lr ; r8 = s DivRem r8, r4, r3, lr, norem ; r8 = s
; Calculate final RGB ; Calculate final RGB
; This is rather simple, since we want the drop shadow to be black ; This is rather simple, since we want the drop shadow to be black
MUL r5, r8, r5 MUL r5, r8, r5
......