public float DrawCharacter(BGICanvas bgi, float x, float y, BGICanvas.Direction dir, int size, byte character, IList <Rectangle> updates) { BGICharacter ch = this[character]; if (ch != null) { var drawUpdates = updates ?? new List <Rectangle>(); ch.Draw(bgi, x, y, dir, size, updates); if (updates == null) { bgi.UpdateRegion(drawUpdates); } return(ch.GetWidth(size)); } return(0); }
public void Draw(BGICanvas bgi, float x, float y, BGICanvas.Direction dir, int size, IList <Rectangle> updates) { var drawUpdates = updates ?? new List <Rectangle> (); var height = font.Height * scaleup [size] / scaledown [size]; if (dir == BGICanvas.Direction.Horizontal) { foreach (var stroke in strokes) { int curx = (int)x + (stroke.x * scaleup [size] / scaledown [size]); int cury = (int)y + height - (stroke.y * scaleup [size] / scaledown [size]); if (stroke.type == StrokeType.MoveTo) { bgi.MoveTo(curx, cury); } else if (stroke.type == StrokeType.LineTo) { bgi.LineTo(curx, cury, drawUpdates); } } } else { foreach (var stroke in strokes) { int curx = (int)x + height - (stroke.y * scaleup [size] / scaledown [size]); int cury = (int)y - (stroke.x * scaleup [size] / scaledown [size]); if (stroke.type == StrokeType.MoveTo) { bgi.MoveTo(curx, cury); } else if (stroke.type == StrokeType.LineTo) { bgi.LineTo(curx, cury, drawUpdates); } } } if (updates == null) { bgi.UpdateRegion(drawUpdates); } }
public float DrawCharacter(BGICanvas bgi, float x, float y, BGICanvas.Direction dir, int size, byte character, IList <Rectangle> updates) { byte foreCol = bgi.GetColor(); FontCharacter fc = this[character]; if (dir == BGICanvas.Direction.Horizontal) { int starty = (int)y; for (int cy = 0; cy < Height; cy++) { int startx = (int)x; for (int cx = 0; cx < Width; cx++) { if (fc[cx, cy]) { if (size == 1) { bgi.PutPixelInternal(startx, starty, foreCol); } else { for (int ccy = 0; ccy < size; ccy++) { for (int ccx = 0; ccx < size; ccx++) { bgi.PutPixelInternal(startx + ccx, starty + ccy, foreCol); } } } } startx += size; } starty += size; } var updateRect = new Rectangle((int)x, (int)y, Width * size, Height * size); if (updates != null) { updates.Add(updateRect); } else { bgi.UpdateRegion(updateRect); } } else { int startx = (int)x; for (int cy = 0; cy < Height; cy++) { int starty = (int)y; for (int cx = 0; cx < Width; cx++) { if (fc[cx, cy]) { if (size == 1) { bgi.PutPixelInternal(startx, starty, foreCol); } else { for (int ccy = 0; ccy < size; ccy++) { for (int ccx = 0; ccx < size; ccx++) { bgi.PutPixelInternal(startx + ccx, starty - ccy, foreCol); } } } } starty -= size; } startx += size; } var updateRect = new Rectangle((int)x, (int)y, Height * size, Width * size); if (updates != null) { updates.Add(updateRect); } else { bgi.UpdateRegion(updateRect); } } return(Width * size); }