X-Git-Url: http://git.cinelerra-gg.org/git/?p=goodguy%2Fhistory.git;a=blobdiff_plain;f=cinelerra-5.1%2Fplugins%2Ftitler%2Ftitler.C;h=8d964918177dbe488f46e9b6b95227ee106e5b2a;hp=117e279e77fd91b394ff71eaf1095fd78b338423;hb=9a16c85641dee9f15136f40c8a3195d88d45513f;hpb=717c4ad1dac14387ac7519228b904026a3a7d493 diff --git a/cinelerra-5.1/plugins/titler/titler.C b/cinelerra-5.1/plugins/titler/titler.C index 117e279e..8d964918 100644 --- a/cinelerra-5.1/plugins/titler/titler.C +++ b/cinelerra-5.1/plugins/titler/titler.C @@ -82,7 +82,7 @@ TitleConfig::TitleConfig() { strcpy(font, "fixed"); strcpy(encoding, DEFAULT_ENCODING); - style = 0; + style = FONT_ALIAS; size = 24; color = BLACK; alpha = 0xff; @@ -289,6 +289,17 @@ GlyphUnit::~GlyphUnit() FT_Done_FreeType(freetype_library); } +static inline void to_mono(VFrame *data) +{ + if( !data ) return; + int w = data->get_w(), h = data->get_h(); + uint8_t **rows = data->get_rows(); + for( int y=0; y= 0x80 ? 0xff : 0; + } +} + void GlyphUnit::process_package(LoadPackage *package) { GlyphPackage *pkg = (GlyphPackage*)package; @@ -491,6 +502,11 @@ printf("GlyphUnit::process_package 1 glyph not found (%s) %04x, '%c'\n", //printf("GlyphUnit::process_package 2\n"); } + + if( !(glyph->style & FONT_ALIAS) ) { + to_mono(glyph->data); + to_mono(glyph->data_stroke); + } } } @@ -841,6 +857,10 @@ TitleCurFixed::TitleCurFixed(TitleParser *parser, TitleMain *plugin) : TitleStack(parser, 0) { } +TitleCurAlias::TitleCurAlias(TitleParser *parser, TitleMain *plugin) + : TitleStack(parser, (plugin->config.style & FONT_ALIAS) ? 1 : 0) +{ +} TitleCurSuper::TitleCurSuper(TitleParser *parser, TitleMain *plugin) : TitleStack(parser, 0) { @@ -859,6 +879,7 @@ TitleParser::TitleParser(TitleMain *plugin) cur_under(this, plugin), cur_blink(this, plugin), cur_fixed(this, plugin), + cur_alias(this, plugin), cur_super(this, plugin) { bfr = out = plugin->config.wtext; @@ -1578,6 +1599,14 @@ int TitleCurFixed::set(const char *txt) return 0; } +int TitleCurAlias::set(const char *txt) +{ + int alias = !*txt ? 1 : strtol(txt,(char **)&txt,0); + if( *txt ) return 1; + push(alias); + return 0; +} + int TitleCurSuper::set(const char *txt) { int super = !*txt ? 1 : strtol(txt,(char **)&txt,0); @@ -1611,6 +1640,7 @@ int TitleParser::set_attributes(int ret) if( !strcmp(id,KW_UL) ) return ret>1 ? cur_under.unset(text) : cur_under.set(text); if( !strcmp(id,KW_BLINK) ) return ret>1 ? cur_blink.unset(text) : cur_blink.set(text); if( !strcmp(id,KW_FIXED) ) return ret>1 ? cur_fixed.unset(text) : cur_fixed.set(text); + if( !strcmp(id,KW_ALIAS) ) return ret>1 ? cur_alias.unset(text) : cur_alias.set(text); if( !strcmp(id,KW_SUP) ) return ret>1 ? cur_super.unset(text) : cur_super.set(text); return 1; } @@ -1644,6 +1674,8 @@ void TitleMain::load_glyphs() if( cur_bold ) cur_style |= BC_FONT_BOLD; int cur_italic = wchrs.cur_italic; if( cur_italic ) cur_style |= BC_FONT_ITALIC; + int cur_alias = wchrs.cur_alias; + if( cur_alias ) cur_style |= FONT_ALIAS; int cur_super = wchrs.cur_super; if( cur_super ) cur_size /= 2; int exists = 0; @@ -1758,6 +1790,8 @@ int TitleMain::get_text() int cur_style = 0; int cur_bold = wchrs.cur_bold; if( cur_bold ) cur_style |= BC_FONT_BOLD; + int cur_alias = wchrs.cur_alias; + if( cur_alias ) cur_style |= FONT_ALIAS; int cur_italic = wchrs.cur_italic; if( cur_italic ) cur_style |= BC_FONT_ITALIC; short nx = cur_nudge >> 16, ny = cur_nudge; @@ -2314,46 +2348,9 @@ int TitleMain::init_freetype() void TitleMain::draw_boundry() { - VFrame &out = *output; - int iw = output->get_w(), ih = output->get_h(); - int mr = MIN(iw, ih)/200 + 2, rr = 2*mr; - int x = title_x, y = title_y, w = title_w, h = title_h; - int r2 = (rr+1)/2; - int x0 = x-r2, x1 = x+(w+1)/2, x2 = x+w+r2; - int y0 = y-r2, y1 = y+(h+1)/2, y2 = y+h+r2; - int st = 1; - for( int r=2; r=0; ) { // bbox - int lft = x+r, rgt = x+w-1-r; - int top = y+r, bot = y+h-1-r; - out.draw_line(lft,top, rgt,top); - out.draw_line(rgt,top, rgt,bot); - out.draw_line(rgt,bot, lft,bot); - out.draw_line(lft,bot, lft,top); - } - - for( int r=mr; r=0; ) { // edge arrows - out.draw_line(x1-r,y0+r, x1+r,y0+r); - out.draw_line(x2-r,y1-r, x2-r,y1+r); - out.draw_line(x1-r,y2-r, x1+r,y2-r); - out.draw_line(x0+r,y1+r, x0+r,y1-r); - } - x0 += r2; y0 += r2; x2 -= r2; y2 -= r2; - for( int r=2*mr; --r>=0; ) { // corner arrows - out.draw_line(x0,y0+r, x0+r,y0); - out.draw_line(x2,y0+r, x2-r,y0); - out.draw_line(x2,y2-r, x2-r,y2); - out.draw_line(x0,y2-r, x0+r,y2); - } + if( !gui_open() ) return; + DragCheckBox::draw_boundary(output, + title_x, title_y, title_w, title_h); }