function Action
global labels cursor
% p = round(get(handles.Image_Axes,'CurrentPoint'));
% % stat(sprintf('Labels_ButtonDown (%g,%g)',p(1),p(3)));
ind1 = max(-cursor.size+cursor.y,1):min(size(labels.data,1),cursor.size+cursor.y);
ind2 = max(-cursor.size+cursor.x,1):min(size(labels.data,2),cursor.size+cursor.x);
switch labels.operation,
case 1, % set
labels.data(ind1,ind2) = labels.values(labels.active);
labels.alphaData(ind1,ind2) = labels.alpha;
case 2, % clear
labels.data(ind1,ind2) = 0;
labels.alphaData(ind1,ind2) = 0;
case 3, % fill
mask = (labels.data ~= labels.data(cursor.y,cursor.x));
filled_mask = imfill(mask,[cursor.y, cursor.x]);
labels.data(find(xor(filled_mask,mask))) = labels.values(labels.active);
labels.alphaData(find(xor(filled_mask,mask))) = labels.alpha;
end
labels.changed = 1;
Update_Labels_Layer