_borderRadius = borderRadius;
}
@Override
protected Instance instantiate (final IDimension size) {
CanvasImage image = graphics().createImage(size.width(), size.height());
if (_borderWidth > 0) {
image.canvas().setFillColor(_borderColor);
image.canvas().fillRoundRect(0, 0, size.width(), size.height(), _radius);
// scale the inner radius based on the ratio of the inner height to the full height;
// this improves the uniformity of the border substantially
float iwidth = size.width() - 2*_borderWidth, iheight = size.height() - 2*_borderWidth;
float iradius = _borderRadius * (iheight / size.height());
image.canvas().setFillColor(_bgColor);
image.canvas().fillRoundRect(_borderWidth, _borderWidth, iwidth, iheight, iradius);
} else {
image.canvas().setFillColor(_bgColor);
image.canvas().fillRoundRect(0, 0, size.width(), size.height(), _radius);
}
ImageLayer layer = graphics().createImageLayer(image);
if (alpha != null) layer.setAlpha(alpha);
return new LayerInstance(size, layer);
}