projects
/
goodguy
/
history.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
font debug env var, drag fixes, cposer hide scrollbar, plugin tool tip
[goodguy/history.git]
/
cinelerra-5.1
/
plugins
/
titler
/
titler.C
diff --git
a/cinelerra-5.1/plugins/titler/titler.C
b/cinelerra-5.1/plugins/titler/titler.C
index aa4619fb1179c72f43948975cf5cfe7f46a5a290..3e13abecfff6ec0ba0f4888175f80dc099ea242c 100644
(file)
--- a/
cinelerra-5.1/plugins/titler/titler.C
+++ b/
cinelerra-5.1/plugins/titler/titler.C
@@
-294,6
+294,10
@@
void GlyphUnit::process_package(LoadPackage *package)
{
GlyphPackage *pkg = (GlyphPackage*)package;
TitleGlyph *glyph = pkg->glyph;
{
GlyphPackage *pkg = (GlyphPackage*)package;
TitleGlyph *glyph = pkg->glyph;
+ BC_Resources *resources = BC_WindowBase::get_resources();
+ if( resources->font_debug )
+ printf("GlyphUnit load glyph (%s) %04x, '%c'\n", glyph->font->displayname,
+ (unsigned)glyph->char_code, (unsigned)glyph->char_code);
int result = 0;
char new_path[BCTEXTLEN];
if( plugin->load_freetype_face(freetype_library, freetype_face, glyph->font->path) ) {
int result = 0;
char new_path[BCTEXTLEN];
if( plugin->load_freetype_face(freetype_library, freetype_face, glyph->font->path) ) {
@@
-311,7
+315,6
@@
void GlyphUnit::process_package(LoadPackage *package)
if( gindex == 0 ) {
printf("GlyphUnit::process_package 1 glyph not found (%s) %04x, '%c'\n",
glyph->font->displayname, (unsigned)glyph->char_code, (unsigned)glyph->char_code);
if( gindex == 0 ) {
printf("GlyphUnit::process_package 1 glyph not found (%s) %04x, '%c'\n",
glyph->font->displayname, (unsigned)glyph->char_code, (unsigned)glyph->char_code);
- BC_Resources *resources = BC_WindowBase::get_resources();
// Search replacement font
if( resources->find_font_by_char(glyph->char_code, new_path, freetype_face) ) {
plugin->load_freetype_face(freetype_library,
// Search replacement font
if( resources->find_font_by_char(glyph->char_code, new_path, freetype_face) ) {
plugin->load_freetype_face(freetype_library,
@@
-1151,7
+1154,8
@@
NEW_WINDOW_MACRO(TitleMain, TitleWindow);
void TitleMain::build_previews(TitleWindow *gui)
{
void TitleMain::build_previews(TitleWindow *gui)
{
- ArrayList<BC_FontEntry*>&fonts = *gui->get_resources()->fontlist;
+ BC_Resources *resources = BC_WindowBase::get_resources();
+ ArrayList<BC_FontEntry*>&fonts = *resources->fontlist;
for( int font_number=0; font_number<fonts.size(); ++font_number ) {
BC_FontEntry *font = fonts.get(font_number);
for( int font_number=0; font_number<fonts.size(); ++font_number ) {
BC_FontEntry *font = fonts.get(font_number);
@@
-1166,7
+1170,7
@@
void TitleMain::build_previews(TitleWindow *gui)
char new_path[BCTEXTLEN];
int text_height = gui->get_text_height(LARGEFONT);
int max_height = 3*text_height/2, max_width = 2 * max_height;
char new_path[BCTEXTLEN];
int text_height = gui->get_text_height(LARGEFONT);
int max_height = 3*text_height/2, max_width = 2 * max_height;
- int text_color =
BC_WindowBase::get_resources()
->default_text_color;
+ int text_color =
resources
->default_text_color;
int r = (text_color >> 16) & 0xff;
int g = (text_color >> 8) & 0xff;
int b = text_color & 0xff;
int r = (text_color >> 16) & 0xff;
int g = (text_color >> 8) & 0xff;
int b = text_color & 0xff;
@@
-1179,6
+1183,8
@@
void TitleMain::build_previews(TitleWindow *gui)
int total_w = 0;
int total_h = 0;
for( int pass=0; pass<2; ++pass ) {
int total_w = 0;
int total_h = 0;
for( int pass=0; pass<2; ++pass ) {
+ if( resources->font_debug )
+ printf("Titler: build previews pass %d\n",pass);
//printf("TitleMain::build_previews %d %d %d\n",
//__LINE__, text_height, total_h);
for( int font_number=0; font_number<fonts.size(); ++font_number ) {
//printf("TitleMain::build_previews %d %d %d\n",
//__LINE__, text_height, total_h);
for( int font_number=0; font_number<fonts.size(); ++font_number ) {
@@
-1188,7
+1194,7
@@
void TitleMain::build_previews(TitleWindow *gui)
for( int i=0; i<font_number; ++i ) {
if( !strcasecmp(fonts[i]->displayname, font->displayname) ) {
if( pass == 1 ) {
for( int i=0; i<font_number; ++i ) {
if( !strcasecmp(fonts[i]->displayname, font->displayname) ) {
if( pass == 1 ) {
- font->image =
fonts[i]->image
;
+ font->image =
new VFrame(*fonts[i]->image)
;
}
skip = 1;
break;
}
skip = 1;
break;
@@
-1196,6
+1202,8
@@
void TitleMain::build_previews(TitleWindow *gui)
}
if( skip ) continue;
}
if( skip ) continue;
+ if( resources->font_debug )
+ printf("Titler: preview %s = %s\n",font->displayname, font->path);
if( pass > 0 ) {
font->image = new VFrame;
font->image->set_use_shm(0);
if( pass > 0 ) {
font->image = new VFrame;
font->image->set_use_shm(0);
@@
-1353,7
+1361,7
@@
int TitleMain::load_freetype_face(FT_Library &freetype_library,
int TitleMain::load_font(BC_FontEntry *font)
{
int TitleMain::load_font(BC_FontEntry *font)
{
- if( load_freetype_face(freetype_library,freetype_face, font->path) ) return 1;
+ if(
!font ||
load_freetype_face(freetype_library,freetype_face, font->path) ) return 1;
strcpy(text_font, font->displayname);
return 0;
}
strcpy(text_font, font->displayname);
return 0;
}
@@
-2329,7
+2337,8
@@
void TitleMain::draw_overlay()
if( !translate )
translate = new TitleTranslate(this, cpus);
if( !translate )
translate = new TitleTranslate(this, cpus);
- if( text_x+mask_w > 0 && text_x < title_w ) {
+ int tx = text_x - text_x1 + mask_x1;
+ if( tx < title_w && tx+mask_w > 0 ) {
translate->xlat_mask = text_mask;
translate->run_packages();
if( config.stroke_width >= SMALL && (config.style & BC_FONT_OUTLINE) ) {
translate->xlat_mask = text_mask;
translate->run_packages();
if( config.stroke_width >= SMALL && (config.style & BC_FONT_OUTLINE) ) {
@@
-2604,11
+2613,19
@@
void TitleMain::save_data(KeyFrame *keyframe)
output.tag.set_property("LOOP_PLAYBACK", config.loop_playback);
output.append_tag();
output.append_newline();
output.tag.set_property("LOOP_PLAYBACK", config.loop_playback);
output.append_tag();
output.append_newline();
- char text[
BCTEXTLEN
];
+ char text[
2*sizeof(config.wtext)
];
int text_len = BC_Resources::encode(
BC_Resources::wide_encoding, DEFAULT_ENCODING,
(char*)config.wtext, config.wlen*sizeof(wchar_t),
text, sizeof(text));
int text_len = BC_Resources::encode(
BC_Resources::wide_encoding, DEFAULT_ENCODING,
(char*)config.wtext, config.wlen*sizeof(wchar_t),
text, sizeof(text));
+ int len = output.length(), avail = MESSAGESIZE-16 - len;
+ if( text_len >= avail ) { // back off last utf8 char
+ text_len = avail;
+ while( text_len > 0 && (text[text_len-1] & 0xc0) == 0x80 )
+ text[--text_len] = 0;
+ if( text_len > 0 )
+ text[--text_len] = 0;
+ }
output.append_text(text, text_len);
output.tag.set_title("/TITLE");
output.append_tag();
output.append_text(text, text_len);
output.tag.set_title("/TITLE");
output.append_tag();