void Canvas::text_transparent(PixelScalar x, PixelScalar y, const TCHAR *text) { assert(text != NULL); assert(ValidateUTF8(text)); #ifdef HAVE_GLES assert(x_offset == OpenGL::translate_x); assert(y_offset == OpenGL::translate_y); #endif if (font == NULL) return; GLTexture *texture = TextCache::Get(font, text); if (texture == NULL) return; GLEnable scope(GL_TEXTURE_2D); texture->Bind(); GLLogicOp logic_op(GL_AND_INVERTED); /* cut out the shape in black */ OpenGL::glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); texture->Draw(x, y); if (text_color != COLOR_BLACK) { /* draw the text color on top */ OpenGL::glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); logic_op.set(GL_OR); text_color.Set(); texture->Draw(x, y); } }
void Canvas::DrawClippedText(int x, int y, unsigned width, unsigned height, const TCHAR *text) { assert(text != nullptr); assert(ValidateUTF8(text)); #ifdef HAVE_GLES assert(offset == OpenGL::translate); #endif if (font == nullptr) return; GLTexture *texture = TextCache::Get(*font, text); if (texture == nullptr) return; if (texture->GetHeight() < height) height = texture->GetHeight(); if (texture->GetWidth() < width) width = texture->GetWidth(); PrepareColoredAlphaTexture(text_color); #ifndef USE_GLSL GLEnable scope(GL_TEXTURE_2D); #endif const GLBlend blend(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); texture->Bind(); texture->Draw(x, y, width, height, 0, 0, width, height); }
void Canvas::DrawTransparentText(int x, int y, const TCHAR *text) { assert(text != nullptr); assert(ValidateUTF8(text)); #ifdef HAVE_GLES assert(offset == OpenGL::translate); #endif if (font == nullptr) return; GLTexture *texture = TextCache::Get(*font, text); if (texture == nullptr) return; PrepareColoredAlphaTexture(text_color); #ifndef USE_GLSL GLEnable scope(GL_TEXTURE_2D); #endif const GLBlend blend(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); texture->Bind(); texture->Draw(x, y); }
void Canvas::DrawText(int x, int y, const TCHAR *text) { assert(text != nullptr); assert(ValidateUTF8(text)); #ifdef HAVE_GLES assert(offset == OpenGL::translate); #endif if (font == nullptr) return; GLTexture *texture = TextCache::Get(*font, text); if (texture == nullptr) return; if (background_mode == OPAQUE) DrawFilledRectangle(x, y, x + texture->GetWidth(), y + texture->GetHeight(), background_color); PrepareColoredAlphaTexture(text_color); #ifndef USE_GLSL GLEnable scope(GL_TEXTURE_2D); #endif const GLBlend blend(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); texture->Bind(); texture->Draw(x, y); }
void Canvas::text(PixelScalar x, PixelScalar y, const TCHAR *text) { assert(text != NULL); assert(ValidateUTF8(text)); #ifdef HAVE_GLES assert(x_offset == OpenGL::translate_x); assert(y_offset == OpenGL::translate_y); #endif if (font == NULL) return; GLTexture *texture = TextCache::Get(font, text); if (texture == NULL) return; if (background_mode == OPAQUE) /* draw the opaque background */ DrawFilledRectangle(x, y, x + texture->GetWidth(), y + texture->GetHeight(), background_color); GLEnable scope(GL_TEXTURE_2D); texture->Bind(); GLLogicOp logic_op(GL_AND_INVERTED); if (background_mode != OPAQUE || background_color != COLOR_BLACK) { /* cut out the shape in black */ OpenGL::glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); texture->Draw(x, y); } if (text_color != COLOR_BLACK) { /* draw the text color on top */ OpenGL::glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); logic_op.set(GL_OR); text_color.Set(); texture->Draw(x, y); } }
void Canvas::Stretch(int dest_x, int dest_y, unsigned dest_width, unsigned dest_height, const GLTexture &texture, int src_x, int src_y, unsigned src_width, unsigned src_height) { #ifdef HAVE_GLES assert(offset == OpenGL::translate); #endif texture.Draw(dest_x, dest_y, dest_width, dest_height, src_x, src_y, src_width, src_height); }
void Canvas::Stretch(PixelScalar dest_x, PixelScalar dest_y, UPixelScalar dest_width, UPixelScalar dest_height, const GLTexture &texture, PixelScalar src_x, PixelScalar src_y, UPixelScalar src_width, UPixelScalar src_height) { #ifdef HAVE_GLES assert(x_offset == OpenGL::translate_x); assert(y_offset == OpenGL::translate_y); #endif texture.Draw(dest_x, dest_y, dest_width, dest_height, src_x, src_y, src_width, src_height); }