%DIPFIG_SETPOINTER(FIG,POINTER)
%    Sets the custom pointers used throughout.

% (C) Copyright 1999-2002               Pattern Recognition Group
%     All rights reserved               Faculty of Applied Physics
%                                       Delft University of Technology
%                                       Lorentzweg 1
%                                       2628 CJ Delft
%                                       The Netherlands
%
% Cris Luengo, August 2001.
% 14 March 2002: Added hand shapes (copied from Adobe Acrobat)
% 18 May 2011:   Moved fix to pre-6.0 bug in cursor positioning here.

function dipfig_setpointer(fig,pointer)

if matlabver_ge([6,0])
   offset = [0,0];
else
   % The offset for the Y axis is a fix for the fact that the position
   % reported by MATLAB trough 'CurrentPoint' is one pixel off in the Y-axis.
   % This is screen pixels, not axes coordinates.
   % This bug has been corrected in MATLAB 6.
   offset = [-1,0];
end

switch pointer
   case 'cross'
      pointershape = [...
         NaN NaN NaN NaN NaN NaN   2   1   2 NaN NaN NaN NaN NaN NaN NaN
         NaN NaN NaN NaN NaN NaN   2   1   2 NaN NaN NaN NaN NaN NaN NaN
         NaN NaN NaN NaN NaN NaN   2   1   2 NaN NaN NaN NaN NaN NaN NaN
         NaN NaN NaN NaN NaN NaN   2   1   2 NaN NaN NaN NaN NaN NaN NaN
         NaN NaN NaN NaN NaN NaN   2   1   2 NaN NaN NaN NaN NaN NaN NaN
         NaN NaN NaN NaN NaN NaN   2 NaN   2 NaN NaN NaN NaN NaN NaN NaN
           2   2   2   2   2   2 NaN NaN NaN   2   2   2   2   2   2 NaN
           1   1   1   1   1 NaN NaN NaN NaN NaN   1   1   1   1   1 NaN
           2   2   2   2   2   2 NaN NaN NaN   2   2   2   2   2   2 NaN
         NaN NaN NaN NaN NaN NaN   2 NaN   2 NaN NaN NaN NaN NaN NaN NaN
         NaN NaN NaN NaN NaN NaN   2   1   2 NaN NaN NaN NaN NaN NaN NaN
         NaN NaN NaN NaN NaN NaN   2   1   2 NaN NaN NaN NaN NaN NaN NaN
         NaN NaN NaN NaN NaN NaN   2   1   2 NaN NaN NaN NaN NaN NaN NaN
         NaN NaN NaN NaN NaN NaN   2   1   2 NaN NaN NaN NaN NaN NaN NaN
         NaN NaN NaN NaN NaN NaN   2   1   2 NaN NaN NaN NaN NaN NaN NaN
         NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
      ];
      set(fig,'PointerShapeCData',pointershape,'PointerShapeHotSpot',[8,8]+offset,'pointer','custom');
   case 'loupe'
      pointershape = [...
         NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
         NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
         NaN NaN NaN NaN NaN NaN   2   2   2 NaN NaN NaN NaN NaN NaN NaN
         NaN NaN NaN NaN   2   2   1   1   1   2   2 NaN NaN NaN NaN NaN
         NaN NaN NaN   2   1   1   2   2   2   1   1   2 NaN NaN NaN NaN
         NaN NaN NaN   2   1   2 NaN NaN NaN   2   1   2 NaN NaN NaN NaN
         NaN NaN   2   1   2 NaN NaN NaN NaN NaN   2   1   2 NaN NaN NaN
         NaN NaN   2   1   2 NaN NaN NaN NaN NaN   2   1   2 NaN NaN NaN
         NaN NaN   2   1   2 NaN NaN NaN NaN NaN   2   1   2 NaN NaN NaN
         NaN NaN NaN   2   1   2 NaN NaN NaN   2   1   2 NaN NaN NaN NaN
         NaN NaN NaN   2   1   1   2   2   2   1   1   2 NaN NaN NaN NaN
         NaN NaN NaN NaN   2   2   1   1   1   2   2   1   2 NaN NaN NaN
         NaN NaN NaN NaN NaN NaN   2   2   2 NaN NaN   2   1   2 NaN NaN
         NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN   2   1   2 NaN
         NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN   2   1   2
         NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN   2   2 ...
      ];
      set(fig,'PointerShapeCData',pointershape,'PointerShapeHotSpot',[8,8]+offset,'pointer','custom');
   case 'hand_open'
      pointershape = [...
         NaN NaN NaN NaN NaN NaN NaN   1   1 NaN NaN NaN NaN NaN NaN NaN
         NaN NaN NaN   1   1 NaN   1   2   2   1   1   1 NaN NaN NaN NaN
         NaN NaN   1   2   2   1   1   2   2   1   2   2   1 NaN NaN NaN
         NaN NaN   1   2   2   1   1   2   2   1   2   2   1 NaN   1 NaN
         NaN NaN NaN   1   2   2   1   2   2   1   2   2   1   1   2   1
         NaN NaN NaN   1   2   2   1   2   2   1   2   2   1   2   2   1
         NaN   1   1 NaN   1   2   2   2   2   2   2   2   1   2   2   1
           1   2   2   1   1   2   2   2   2   2   2   2   2   2   2   1
           1   2   2   2   1   2   2   2   2   2   2   2   2   2   1 NaN
         NaN   1   2   2   2   2   2   2   2   2   2   2   2   2   1 NaN
         NaN NaN   1   2   2   2   2   2   2   2   2   2   2   2   1 NaN
         NaN NaN   1   2   2   2   2   2   2   2   2   2   2   1 NaN NaN
         NaN NaN NaN   1   2   2   2   2   2   2   2   2   2   1 NaN NaN
         NaN NaN NaN NaN   1   2   2   2   2   2   2   2   1 NaN NaN NaN
         NaN NaN NaN NaN NaN   1   2   2   2   2   2   2   1 NaN NaN NaN
         NaN NaN NaN NaN NaN   1   2   2   2   2   2   2   1 NaN NaN NaN ...
      ];
      set(fig,'PointerShapeCData',pointershape,'PointerShapeHotSpot',[8,8]+offset,'pointer','custom');
   case 'hand_closed'
      pointershape = [...
         NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
         NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
         NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
         NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
         NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
         NaN NaN NaN NaN NaN   1   1 NaN   1   1 NaN   1   1 NaN NaN NaN
         NaN NaN NaN NaN   1   2   2   1   2   2   1   2   2   1   1 NaN
         NaN NaN NaN NaN   1   2   2   2   2   2   2   2   2   1   2   1
         NaN NaN NaN NaN NaN   1   2   2   2   2   2   2   2   2   2   1
         NaN NaN NaN NaN   1   1   2   2   2   2   2   2   2   2   2   1
         NaN NaN NaN   1   2   2   2   2   2   2   2   2   2   2   2   1
         NaN NaN NaN   1   2   2   2   2   2   2   2   2   2   2   1 NaN
         NaN NaN NaN NaN   1   2   2   2   2   2   2   2   2   2   1 NaN
         NaN NaN NaN NaN NaN   1   2   2   2   2   2   2   2   1 NaN NaN
         NaN NaN NaN NaN NaN NaN   1   2   2   2   2   2   2   1 NaN NaN
         NaN NaN NaN NaN NaN NaN   1   2   2   2   2   2   2   1 NaN NaN ...
      ];
      set(fig,'PointerShapeCData',pointershape,'PointerShapeHotSpot',[8,8]+offset,'pointer','custom');
   case 'hand_finger'
      pointershape = [...
         NaN NaN NaN NaN NaN NaN   1   1 NaN NaN NaN NaN NaN NaN NaN NaN
         NaN NaN NaN NaN NaN   1   2   2   1 NaN NaN NaN NaN NaN NaN NaN
         NaN NaN NaN NaN NaN   1   2   2   1 NaN NaN NaN NaN NaN NaN NaN
         NaN NaN NaN NaN NaN   1   2   2   1 NaN NaN NaN NaN NaN NaN NaN
         NaN NaN NaN NaN NaN   1   2   2   1   1 NaN NaN NaN NaN NaN NaN
         NaN NaN NaN NaN NaN   1   2   2   1   2   1   1 NaN NaN NaN NaN
         NaN   1   1 NaN NaN   1   2   2   1   2   1   2   1   1 NaN NaN
           1   2   2   1 NaN   1   2   2   1   2   1   2   1   2   1 NaN
         NaN   1   2   2   1   1   2   2   2   2   2   2   1   2   1 NaN
         NaN NaN   1   2   2   1   2   2   2   2   2   2   2   2   1 NaN
         NaN NaN   1   2   2   1   2   2   2   2   2   2   2   2   1 NaN
         NaN NaN NaN   1   2   2   2   2   2   2   2   2   2   2   1 NaN
         NaN NaN NaN   1   2   2   2   2   2   2   2   2   2   1 NaN NaN
         NaN NaN NaN NaN   1   2   2   2   2   2   2   2   2   1 NaN NaN
         NaN NaN NaN NaN NaN   1   2   2   2   2   2   2   1 NaN NaN NaN
         NaN NaN NaN NaN NaN   1   2   2   2   2   2   2   1 NaN NaN NaN ...
      ];
      set(fig,'PointerShapeCData',pointershape,'PointerShapeHotSpot',[2,7]+offset,'pointer','custom');
   otherwise
      error('Unknown pointer shape.')
end
