X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.0%2Fplugins%2Ftitler%2Ftitle.C;h=8ccdb2a3648bfa19b28afd2cfe45454a463bdde5;hb=310cfd249d955850c39757d80e07949ad4fef205;hp=47e010362c9c41bbd912d283d06551e3e5bd7941;hpb=aec726a82269214e444c42aafabdf84974e8c3b7;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.0/plugins/titler/title.C b/cinelerra-5.0/plugins/titler/title.C index 47e01036..8ccdb2a3 100644 --- a/cinelerra-5.0/plugins/titler/title.C +++ b/cinelerra-5.0/plugins/titler/title.C @@ -30,7 +30,7 @@ #include "bcsignals.h" #include "clip.h" -#include "colormodels.h" +#include "bccmodels.h" #include "filexml.h" #include "filesystem.h" #include "transportque.inc" @@ -86,7 +86,7 @@ TitleConfig::TitleConfig() fade_out = 0.0; x = 0.0; y = 0.0; - dropshadow = 10; + dropshadow = 2; sprintf(font, "fixed"); sprintf(encoding, DEFAULT_ENCODING); timecode_format = DEFAULT_TIMECODEFORMAT; @@ -204,8 +204,8 @@ void TitleConfig::interpolate(TitleConfig &prev, // this->y = prev.y; timecode = prev.timecode; timecode_format = prev.timecode_format; -// this->dropshadow = (int)(prev.dropshadow * prev_scale + next.dropshadow * next_scale); - this->dropshadow = prev.dropshadow; + this->dropshadow = prev.dropshadow * prev_scale + next.dropshadow * next_scale; +// this->dropshadow = prev.dropshadow; } void TitleConfig::limits() @@ -539,10 +539,14 @@ void TitleUnit::draw_glyph(VFrame *output, VFrame *data, TitleGlyph *glyph, int unsigned char **out_rows = output->get_rows(); int baseline = plugin->get_char_height(); - if(engine->do_dropshadow) { + if( engine->do_dropshadow ) { x += plugin->config.dropshadow; y += plugin->config.dropshadow; } + else if( plugin->config.dropshadow < 0 ) { + x -= plugin->config.dropshadow; + y -= plugin->config.dropshadow; + } int x_in = 0, y_in = 0; int x_out = x + glyph->left; @@ -814,7 +818,6 @@ LoadPackage* TitleOutlineEngine::new_package() - TitleTranslatePackage::TitleTranslatePackage() : LoadPackage() { @@ -846,7 +849,6 @@ void TitleTranslate::run_packages() - #define TRANSLATE(type, max, components, ofs) \ { \ unsigned char **in_rows = plugin->text_mask->get_rows(); \ @@ -1123,7 +1125,7 @@ TitleMain::~TitleMain() delete outline_engine; } -const char* TitleMain::plugin_title() { return N_("Title"); } +const char* TitleMain::plugin_title() { return _("Title"); } int TitleMain::is_realtime() { return 1; } int TitleMain::is_synthesis() { return 1; } @@ -1201,10 +1203,12 @@ void TitleMain::build_previews(TitleWindow *gui) for(int j = 0; j < len; j++) { FT_ULong c = test_string[j]; - check_char_code_path(freetype_library, - font_entry->path, - c, - (char *)new_path); +// memory leaks here are fatal +// check_char_code_path(freetype_library, +// font_entry->path, +// c, +// (char *)new_path); + strcpy(new_path, font_entry->path); if( !load_freetype_face(freetype_library, freetype_face, new_path)) { FT_Set_Pixel_Sizes(freetype_face, text_height, 0); @@ -1212,11 +1216,11 @@ void TitleMain::build_previews(TitleWindow *gui) if(!FT_Load_Char(freetype_face, c, FT_LOAD_RENDER)) { if(pass == 0) { current_w = current_x + freetype_face->glyph->bitmap.width; - if(freetype_face->glyph->bitmap_top > current_ascent) + if((int)freetype_face->glyph->bitmap_top > current_ascent) current_ascent = freetype_face->glyph->bitmap_top; - if(freetype_face->glyph->bitmap.rows > total_h) + if((int)freetype_face->glyph->bitmap.rows > total_h) total_h = freetype_face->glyph->bitmap.rows; - if(freetype_face->glyph->bitmap.rows > current_h) + if((int)freetype_face->glyph->bitmap.rows > current_h) current_h = freetype_face->glyph->bitmap.rows; } else { @@ -1225,7 +1229,7 @@ void TitleMain::build_previews(TitleWindow *gui) int out_y = (total_h - height[font_number]) / 2 + ascent[font_number] - freetype_face->glyph->bitmap_top; for(int in_y = 0; - in_y < freetype_face->glyph->bitmap.rows && + in_y < (int)freetype_face->glyph->bitmap.rows && out_y < total_h; in_y++, out_y++) { unsigned char *out_row = font_entry->image->get_rows()[out_y] + @@ -1233,7 +1237,7 @@ void TitleMain::build_previews(TitleWindow *gui) unsigned char *in_row = freetype_face->glyph->bitmap.buffer + freetype_face->glyph->bitmap.pitch * in_y; - for(int out_x = 0; out_x < freetype_face->glyph->bitmap.width && + for(int out_x = 0; out_x < (int)freetype_face->glyph->bitmap.width && out_x < total_w; out_x++) { *out_row = (*in_row * r + @@ -1299,7 +1303,7 @@ int TitleMain::check_char_code_path(FT_Library &freetype_library, { FT_Set_Pixel_Sizes(temp_freetype_face, 128, 0); int gindex = FT_Get_Char_Index(temp_freetype_face, char_code); - if((!gindex == 0) && (!char_code != 10)) + if( gindex != 0 && char_code == 10 ) { strcpy(path_new, path_old); notfindit = 0; @@ -1325,7 +1329,7 @@ int TitleMain::check_char_code_path(FT_Library &freetype_library, { FT_Set_Pixel_Sizes(temp_freetype_face, 128, 0); int gindex = FT_Get_Char_Index(temp_freetype_face, char_code); - if((!gindex == 0) && (!char_code != 10)) + if( gindex != 0 && char_code == 10 ) { sprintf(path_new, "%s", tmpstring); notfindit = 0; @@ -1734,8 +1738,8 @@ int TitleMain::draw_mask() extent.x1 -= config.outline_size*2; extent.y1 -= config.outline_size*2; - extent.x2 += config.dropshadow + config.outline_size*2; - extent.y2 += config.dropshadow + config.outline_size*2; + extent.x2 += abs(config.dropshadow) + config.outline_size*2; + extent.y2 += abs(config.dropshadow) + config.outline_size*2; // Determine mask geometry mask_w = extent.x2 - extent.x1; @@ -1759,7 +1763,7 @@ int TitleMain::draw_mask() text_mask = new VFrame; text_mask->set_use_shm(0); text_mask->reallocate(0, -1, 0, 0, 0, mask_w, mask_h, color_model, -1); - int drop = !config.dropshadow ? 0 : config.dropshadow; + float drop = abs(config.dropshadow); int drop_w = mask_w + drop; int drop_h = mask_h + drop; text_mask_stroke = new VFrame;