KumiScript/renderer/Glyph.cs

101 lines
2.5 KiB
C#

using SDL2;
namespace KumiScript.Renderer
{
public class Glyph : IDisposable
{
readonly char _char;
readonly int _width;
readonly int _height;
SDLTexture _tex;
SDLRenderer _renderer;
public Glyph(char c, SDLFont font, SDL.SDL_Color clr, SDLRenderer renderer)
{
_char = c;
nint surface = SDL_ttf.TTF_RenderGlyph32_Blended(font.GetHandle(), c, clr);
_tex = new SDLTexture(surface, renderer);
SDL.SDL_FreeSurface(surface);
_tex.QueryTexture(out _, out _, out _width, out _height);
_renderer = renderer;
}
public void Dispose()
{
_tex.Dispose();
return;
}
public char GetCharacter()
{
return _char;
}
public SDLTexture GetTexture()
{
return _tex;
}
public int GetWidth()
{
return _width;
}
public void DrawAt(int x, int y)
{
SDL.SDL_Rect destRect;
destRect.x = x;
destRect.y = y;
destRect.w = _width;
destRect.h = _height;
SDL.SDL_Rect sourceRect;
sourceRect.x = 0;
sourceRect.y = 0;
sourceRect.w = _width;
sourceRect.h = _height;
_tex.Draw(_renderer, sourceRect, destRect);
}
public void DrawAdvancePen(int x, int y, out int pen)
{
SDL.SDL_Rect destRect;
destRect.x = x;
destRect.y = y;
destRect.w = _width;
destRect.h = _height;
SDL.SDL_Rect sourceRect;
sourceRect.x = 0;
sourceRect.y = 0;
sourceRect.w = _width;
sourceRect.h = _height;
_tex.Draw(_renderer, sourceRect, destRect);
pen = x + _width;
}
internal void DrawAdvancePenModAlpha(int x, int y, out int pen, byte v)
{
_tex.SetAlpha(v);
SDL.SDL_Rect destRect;
destRect.x = x;
destRect.y = y;
destRect.w = _width;
destRect.h = _height;
SDL.SDL_Rect sourceRect;
sourceRect.x = 0;
sourceRect.y = 0;
sourceRect.w = _width;
sourceRect.h = _height;
_tex.Draw(_renderer, sourceRect, destRect);
_tex.SetAlpha(255);
pen = x + _width;
return;
}
}
}