#include "osdopenvg.h"\r
#include "mtd.h"\r
#include "videoomx.h"\r
+#include "surface.h"\r
#include <Magick++.h>\r
\r
#include "message.h"\r
#include "command.h"\r
+#include "teletxt/txtfont.h"\r
\r
#include <sys/syscall.h>\r
#include <vector>\r
if (query_str) Log::getInstance()->logLongString("OSD", Log::NOTICE, query_str);\r
else Log::getInstance()->log("OSD", Log::WARN, "Could not query display %x",vgGetError());\r
\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
aspect_correction= ((float)BACKBUFFER_HEIGHT)/576.f/(((float)BACKBUFFER_WIDTH)/720.f);\r
initPaths();\r
if (!loadFont()) {\r
return 0;\r
}\r
+ vgttfont=vgCreateFont(0);\r
+ vgttpaint=vgCreatePaint();\r
+ vgSetParameteri( vgttpaint, VG_PAINT_TYPE, VG_PAINT_TYPE_COLOR);\r
+ vgSetColor(vgttpaint,0xffffffff);\r
\r
eglSwapInterval(egl_display, 1 );\r
\r
\r
FT_Done_Face(ft_face);\r
vgDestroyFont(vgfont);\r
+ vgDestroyFont(vgttfont);\r
+ vgDestroyPaint(vgttpaint);\r
destroyPaths();\r
vgClear(0,0,BACKBUFFER_WIDTH,BACKBUFFER_HEIGHT);\r
eglSwapBuffers(egl_display, egl_surface);\r
return font_exp_x[glyph_index];\r
}\r
\r
+unsigned int OsdOpenVG::loadTTchar(cTeletextChar c)\r
+{\r
+ unsigned int glyph_index=c.getGlyphIndex();\r
+ if (tt_font_chars.find(glyph_index)!=tt_font_chars.end())\r
+ {\r
+ return glyph_index;\r
+ }\r
+\r
+ unsigned int buffer[10];\r
+ const VGfloat glyphOrigin[] = { 0.f, 0.f };\r
+ const VGfloat escapement[] = { 12.f, 0.f };\r
+ unsigned int * charmap = GetFontChar(c, buffer);\r
+ if (!charmap) { //invalid char\r
+ return 0;\r
+ }\r
+ for (int i=0;i<10;i++) {\r
+ buffer[i]=charmap[i]>>4;\r
+ }\r
+\r
+ VGImage handle = vgCreateImage(\r
+ VG_A_8,\r
+ 12,\r
+ 10,\r
+ VG_IMAGE_QUALITY_NONANTIALIASED | VG_IMAGE_QUALITY_FASTER\r
+ | VG_IMAGE_QUALITY_BETTER);\r
+ vgImageSubData(handle, buffer, 4, VG_A_1, 0, 0, 12, 10);\r
+ vgSetGlyphToImage(\r
+ vgttfont,\r
+ glyph_index,\r
+ handle, glyphOrigin, escapement);\r
+ vgDestroyImage(handle);\r
+ tt_font_chars[glyph_index]=1;\r
+\r
+ return glyph_index;\r
+}\r
+\r
int OsdOpenVG::loadFont()\r
{\r
int error=FT_Init_FreeType(&ft_library);\r
vgSetPaint((VGPaint) command.reference,VG_FILL_PATH);\r
vgSetPaint((VGPaint) command.reference,VG_STROKE_PATH);\r
vgTranslate(command.x,command.y);\r
- // vgLoadIdentity();\r
- // vgTranslate(500.,500.);\r
- //vgScale(18.f,18.f);\r
VGfloat gori[]={0.,0.};\r
vgSetfv(VG_GLYPH_ORIGIN,2,gori);\r
\r
vgSeti(VG_MATRIX_MODE, VG_MATRIX_PATH_USER_TO_SURFACE);\r
} break;\r
case DrawTTchar:{\r
+ cTeletextChar tchar;\r
+ tchar.setInternal(command.target.ttchar);\r
+ vgSeti(VG_MATRIX_MODE, VG_MATRIX_GLYPH_USER_TO_SURFACE);\r
+ vgGetMatrix(save_matrix);\r
+ enumTeletextColor ttforegcolour=tchar.GetFGColor();\r
+ enumTeletextColor ttbackgcolour=tchar.GetBGColor();\r
+ if (tchar.GetBoxedOut()) {\r
+ ttforegcolour=ttcTransparent;\r
+ ttbackgcolour=ttcTransparent;\r
+ }\r
+ vgSeti(VG_IMAGE_MODE,VG_DRAW_IMAGE_STENCIL);\r
+ vgSeti(VG_BLEND_MODE, VG_BLEND_SRC_OVER);\r
+\r
+\r
+ vgTranslate(command.x+command.w*11.95f*1.4f,command.y+command.h*19.95f);\r
+ VGfloat gori[]={0.,0.};\r
+ vgSetfv(VG_GLYPH_ORIGIN,2,gori);\r
+\r
+ vgScale(-1.4f,2.f);\r
+ unsigned int color=Surface::enumTeletextColorToCoulour(ttbackgcolour).rgba();\r
+ color=color<<8 | (color &0xff000000)>>24;\r
+ vgSetColor(vgttpaint,color);\r
+ vgSetPaint((VGPaint) vgttpaint,VG_FILL_PATH);\r
+ vgSetPaint((VGPaint) vgttpaint,VG_STROKE_PATH);\r
+ cTeletextChar filled;\r
+ filled.setInternal(0x187f);\r
+ unsigned int glyph_index=loadTTchar(filled);\r
+ vgDrawGlyph(vgttfont,glyph_index,VG_FILL_PATH,VG_FALSE);\r
+\r
+ color=Surface::enumTeletextColorToCoulour(ttforegcolour).rgba();\r
+ color=color<<8 | (color &0xff000000)>>24;\r
+ vgSetColor(vgttpaint,color);\r
+ vgSetPaint((VGPaint) vgttpaint,VG_FILL_PATH);\r
+ vgSetPaint((VGPaint) vgttpaint,VG_STROKE_PATH);\r
+ glyph_index=loadTTchar(tchar);\r
+ vgDrawGlyph(vgttfont,glyph_index,VG_FILL_PATH,VG_FALSE);\r
+\r
+ /* Log::getInstance()->log("OSD", Log::DEBUG, "Draw TTchar %x %x %x %x",glyph_index,ttforegcolour,Surface::enumTeletextColorToCoulour(ttforegcolour).rgba(),\r
+ vgGetColor(vgttpaint));*/\r
+\r
+\r
+ vgLoadMatrix(save_matrix);\r
+ vgSeti(VG_MATRIX_MODE, VG_MATRIX_PATH_USER_TO_SURFACE);\r
+ vgSeti(VG_IMAGE_MODE,VG_DRAW_IMAGE_NORMAL);\r
+ vgSeti(VG_BLEND_MODE, VG_BLEND_SRC);\r
\r
}break;\r
}\r