% imager - Unit for displaying images
%
% imager :: options {
%    xdom    :: [[_]->real] / [] ~'x-vals for pixel centres';
%    ydom    :: [[_]->real] / [] ~'y-vals for pixel centres';
%    xlim    :: [[1,2]]     / [] ~'passed to xlim if not empty';
%    ylim    :: [[1,2]]     / [] ~'passed to ylim if not empty';
%    clim    :: [[_]->real] / [] ~'passed to caxis if not empty';
%    xlabel  :: string      / [] ~'passed to xlabel if not empty';
%    ylabel  :: string      / [] ~'passed to ylabel if not empty';
%    imagefn :: imagefn     / @imagexy ~'function to create image';
%    colormap  :: [[N,3]]   /[]  ~'if not empty, colormap to install';
%    clickthru :: bool      / 0  ~'if 1, button clicks passed to parent';
%    args    :: {[_]}       / {}        ~'extra arguments for imagefn'
% } -> arrow({[[M,N]]}, {}, empty) ~'arrow from 2D arrays'.
%
% imager is an arrow which displays each input array as an image
% using imagexy by default. The essential thing about imager is that
% the graphics must be updated by setting the 'CData' property of
% the handle graphics object returned by the imaging function.

function o=imager(varargin)
	s.opts=prefs('dlim',[],'xlim',[],'ylim',[],'clim',[],'colormap',[],'imagefn',@imagexy,'args',{},varargin{:});
	if isempty(s.opts.clim), s.opts.clim=s.opts.dlim; end
	o=class(s,'imager',agraph(1,s.opts));
end

