Hi , Last time I wrote the BasicShape object , today I think that I should add some proprieties : value & font in order to add text to shapes. Also a font's setter method :
/**
* Set font proprieties.
*
* @param int size : Size of border in pixel.
* @param string color : Color of border (Hex).
* @param string family : Font family.
* @return void
*/
BasicShape.prototype.Font = function (size, color, family) {
this.font.size = size || 14;
this.font.color = color || '#000000';
this.font.family = family || 'Arial';
};
The next big thing is how to draw text on a shape while respecting border , border-radius , and padding ?!!Canvas has a method called clip() which allow us to define clipping regions you can read more on 1.5.6 HTML5 Canvas Clipping Region Tutorial . we will define a region using Mcontrols method :
/**
* Get mask's controls
*
* @return array
*/
BasicShape.prototype.Mcontrols = function () {
var Mcontrols = [];
Mcontrols[0] = {x : this.x + this.padding[3] , y : this.y + this.padding[0] };
Mcontrols[1] = {x : this.x + this.width - this.padding[1] , y : this.y + this.padding[0] };
Mcontrols[2] = {x : this.x + this.width - this.padding[1] , y : this.y + this.height - this.padding[2]};
Mcontrols[3] = {x : this.x + this.padding[3] , y : this.y + this.height - this.padding[2]};
return Mcontrols;
};
So the draw function become :
BasicShape.prototype.Draw = function () {
....
// Clipping region
this.context.save();
this.context.beginPath();
this.context.rect(Mcontrols[0].x, Mcontrols[0].y, Mcontrols[1].x - Mcontrols[0].x, Mcontrols[3].y - Mcontrols[0].y);
this.context.closePath();
this.context.clip();
// Drawing Text
this.context.font = this.font.size+'px '+this.font.family;
this.context.fillStyle = this.font.color;
this.context.textBaseline = 'middle';
this.context.fillText(this.value, Mcontrols[0].x , Mcontrols[0].y + this.height / 2);
this.context.restore();
};
That was quick , next time we will work on FormCanvas a form that contain different inputs and .
No comments:
Post a Comment