Ref #104280 The scaling of area light / spot light blend was wrong because it is calculated for pivot at the edges. The new implementation in theory works for all `abs(pivot) <= 0.5f`, although we only have -0.5, 0, and 0.5. - Axis constraint for box cage was only applied when there is translate flag, now the same logic is applied regardless of the translate flag, this means when dragging the edge, the scaling in the other axis stays the same; when dragging the corners, it applies free-form scaling. - Due to the existence of margin, `data->orig_mouse` does not lie exactly on the boundary. Using that value to compute the scaling causes the error to accumulate over distance. The new implementation uses the original dimension of the object instead, and only uses `data->orig_mouse` to determine the side of the original cursor relative to the pivot. - For circular gizmo with unsigned scaling, the gizmo only follow the cursor exactly when the cursor stays in the original quadrant, otherwise it's hard to handle the logic when we should clamp the scaling.