#else
#define DEFAULT_ENCODING "ISO8859-1"
#endif
-#define DEFAULT_TIMECODEFORMAT TIME_HMS
+#define DEFAULT_TIMECODEFORMAT TIME_HMSF
static inline int kw_strcmp(const char *ap, const char *bp) {
return !strcmp(ap, bp) ? 0 : strcmp(ap,_(bp));
strcpy(font, "fixed");
strcpy(encoding, DEFAULT_ENCODING);
style = FONT_ALIAS;
- size = 24;
- color = BLACK;
+ size = 48;
+ color = WHITE;
alpha = 0xff;
outline_size = 0.;
- outline_color = WHITE;
+ outline_color = RED;
outline_alpha = 0xff;
color_stroke = 0xff0000;
stroke_width = 0.0;
wtext = 0; wsize = 0; wlen = 0;
title_x = title_y = 0.0;
title_w = title_h = 0;
- window_w = 860;
- window_h = 460;
+ window_w = xS(860);
+ window_h = yS(460);
next_keyframe_position = 0;
prev_keyframe_position = 0;
timecode = 0;
- dropshadow = 2;
+ dropshadow = 0;
background = 0;
strcpy(background_path, "");
timecode_format = DEFAULT_TIMECODEFORMAT;
- drag = 0;
loop_playback = 0;
}
// fade_in == that.fade_in && fade_out == that.fade_out &&
// EQUIV(pixels_per_second, that.pixels_per_second) &&
wlen == that.wlen &&
- !memcmp(wtext, that.wtext, wlen * sizeof(wchar_t)) &&
- title_x == that.title_x && title_y == that.title_y &&
+ !memcmp(wtext, that.wtext, wlen * sizeof(wchr_t)) &&
+ EQUIV(title_x, that.title_x) && EQUIV(title_y, that.title_y) &&
title_w == that.title_w && title_h == that.title_h &&
// window_w == that.window_w && window_h == that.window_h &&
timecode == that.timecode &&
background == that.background &&
!strcmp(background_path, that.background_path) &&
timecode_format == that.timecode_format &&
-// drag == that.drag &&
loop_playback == that.loop_playback;
}
fade_out = that.fade_out;
pixels_per_second = that.pixels_per_second;
demand(wlen = that.wlen);
- memcpy(wtext, that.wtext, that.wlen * sizeof(wchar_t));
+ memcpy(wtext, that.wtext, that.wlen * sizeof(wchr_t));
title_x = that.title_x; title_y = that.title_y;
title_w = that.title_w; title_h = that.title_h;
window_w = that.window_w; window_h = that.window_h;
background = that.background;
strcpy(background_path, that.background_path);
timecode_format = that.timecode_format;
- drag = that.drag;
loop_playback = that.loop_playback;
}
fade_out = prev.fade_out;
pixels_per_second = prev.pixels_per_second;
demand(wlen = prev.wlen);
- memcpy(wtext, prev.wtext, prev.wlen * sizeof(wchar_t));
+ memcpy(wtext, prev.wtext, prev.wlen * sizeof(wchr_t));
wtext[wlen] = 0;
this->title_x = prev.title_x == next.title_x ? prev.title_x :
prev.title_x * prev_scale + next.title_x * next_scale;
background = prev.background;
strcpy(background_path, prev.background_path);
timecode_format = prev.timecode_format;
- drag = prev.drag;
loop_playback = prev.loop_playback;
}
if( wtext && wsize >= sz ) return 0;
delete [] wtext;
wsize = sz + wlen/2 + 0x1000;
- wtext = new wchar_t[wsize+1];
+ wtext = new wchr_t[wsize+1];
wtext[wsize] = 0;
return 1;
}
{
demand(tlen);
wlen = BC_Resources::encode(from_enc, BC_Resources::wide_encoding,
- (char*)text,tlen, (char *)wtext,sizeof(*wtext)*wsize) / sizeof(wchar_t);
+ (char*)text,tlen, (char *)wtext,sizeof(*wtext)*wsize) / sizeof(wchr_t);
while( wlen > 0 && !wtext[wlen-1] ) --wlen;
}
glyph->right = 0; glyph->bottom = 0;
glyph->freetype_index = 0;
glyph->data = new VFrame(glyph->width, glyph->height, BC_A8, glyph->pitch);
- glyph->data->clear_frame();
+ glyph->data->black_frame();
glyph->data_stroke = 0;
// create outline glyph
if( plugin->config.stroke_width >= SMALL &&
(plugin->config.style & BC_FONT_OUTLINE) ) {
glyph->data_stroke = new VFrame(glyph->width, glyph->height, BC_A8, glyph->pitch);
- glyph->data_stroke->clear_frame();
+ glyph->data_stroke->black_frame();
}
}
// char found and no outline desired
//glyph->width, glyph->height, glyph->pitch, glyph->left, glyph->top, glyph->advance_x, glyph->freetype_index);
glyph->data = new VFrame(glyph->width, glyph->height, BC_A8, glyph->pitch);
- glyph->data->clear_frame();
+ glyph->data->black_frame();
bm.buffer = glyph->data->get_data();
ft_Outline_Translate(&((FT_OutlineGlyph) glyph_image)->outline,
- bbox.xMin, - bbox.yMin);
//printf("GlyphUnit::process_package 1\n");
glyph->data = new VFrame(glyph->width, glyph->height, BC_A8, glyph->pitch);
- glyph->data->clear_frame();
+ glyph->data->black_frame();
glyph->data_stroke = new VFrame(glyph->width, glyph->height, BC_A8, glyph->pitch);
- glyph->data_stroke->clear_frame();
+ glyph->data_stroke->black_frame();
// for debugging memset( glyph->data_stroke->get_data(), 60, glyph->pitch * glyph->height);
bm.buffer=glyph->data->get_data();
ft_Outline_Get_Bitmap( freetype_library,
if( cpus > 8 ) cpus = 8;
last_position = -1;
need_reconfigure = 1;
+ drag = 0;
}
TitleMain::~TitleMain()
background = 0;
}
delete render_engine;
- delete video_cache;
+ if( video_cache )
+ video_cache->remove_user();
delete overlay_frame;
delete bg_file;
delete bg_frame;
NEW_WINDOW_MACRO(TitleMain, TitleWindow);
+void TitleMain::render_gui(void *data)
+{
+ TitleMain *tilter = (TitleMain *)data;
+ tilter->drag = drag;
+}
+
+int TitleMain::is_dragging()
+{
+ drag = 0;
+ send_render_gui(this);
+ return drag;
+}
void TitleMain::build_previews(TitleWindow *gui)
{
Indexable *TitleMain::open_background(const char *filename)
{
delete render_engine; render_engine = 0;
- delete video_cache; video_cache = 0;
+ if( video_cache ) { video_cache->remove_user(); video_cache = 0; }
delete bg_file; bg_file = new File;
Asset *asset = new Asset(filename);
}
-static inline bool is_ltr(wchar_t wch) { return iswalpha(wch); }
-static inline bool is_nbr(wchar_t wch) { return iswdigit(wch); }
-static inline bool is_ws(wchar_t wch) { return wch==' ' || wch=='\t'; }
-static inline bool is_idch(wchar_t wch) { return is_ltr(wch) || is_nbr(wch) || wch=='_'; }
+static inline bool is_ltr(wchr_t wch) { return iswalpha(wch); }
+static inline bool is_nbr(wchr_t wch) { return iswdigit(wch); }
+static inline bool is_ws(wchr_t wch) { return wch==' ' || wch=='\t'; }
+static inline bool is_idch(wchr_t wch) { return is_ltr(wch) || is_nbr(wch) || wch=='_'; }
// return eof=-1, chr=0, opener=1, closer=2
-int TitleParser::wget(wchar_t &wch)
+int TitleParser::wget(wchr_t &wch)
{
- wchar_t *wip = wid, *wtp = wtxt; *wip = 0; *wtp = 0;
+ wchr_t *wip = wid, *wtp = wtxt; *wip = 0; *wtp = 0;
int ilen = sizeof(wid)/sizeof(wid[0]);
int tlen = sizeof(wtxt)/sizeof(wtxt[0]);
int ich;
wch = ich;
return ret;
}
-int TitleParser::tget(wchar_t &wch)
+int TitleParser::tget(wchr_t &wch)
{
int ret = wget(wch);
if( ret > 0 ) {
- int wid_len = wcslen(wid)+1;
+ int wid_len = wstrlen(wid)+1;
BC_Resources::encode(
BC_Resources::wide_encoding, plugin->config.encoding,
(char*)wid,wid_len*sizeof(wid[0]), (char *)id,sizeof(id));
- int wtxt_len = wcslen(wtxt)+1;
+ int wtxt_len = wstrlen(wtxt)+1;
BC_Resources::encode(
BC_Resources::wide_encoding, plugin->config.encoding,
(char*)wtxt,wtxt_len*sizeof(wtxt[0]), (char *)text,sizeof(text));
int total_packages = 0;
while( !wchrs.eof() ) {
- wchar_t wch1 = wchrs.wcur(), wch;
+ wchr_t wch1 = wchrs.wcur(), wch;
long ipos = wchrs.tell();
int ret = wchrs.tget(wch);
if( ret > 0 ) {
if( !row ) row = title_rows.add();
TitleChar *chr = 0;
long ipos = wchrs.tell();
- wchar_t wch1 = wchrs.wcur(), wch;
+ wchr_t wch1 = wchrs.wcur(), wch;
int ret = wchrs.tget(wch);
if( ret < 0 || wch == '\n' ) {
if( row->x1 > row->x2 ) row->x1 = row->x2 = 0;
if( !result )
draw_overlay();
- if( config.drag )
+ if( is_dragging() )
draw_boundry();
return 0;
output.tag.set_property("TIMECODEFORMAT", config.timecode_format);
output.tag.set_property("WINDOW_W", config.window_w);
output.tag.set_property("WINDOW_H", config.window_h);
- output.tag.set_property("DRAG", config.drag);
output.tag.set_property("BACKGROUND", config.background);
output.tag.set_property("BACKGROUND_PATH", config.background_path);
output.tag.set_property("LOOP_PLAYBACK", config.loop_playback);
char text[tsz];
int text_len = BC_Resources::encode(
BC_Resources::wide_encoding, DEFAULT_ENCODING,
- (char*)config.wtext, config.wlen*sizeof(wchar_t),
+ (char*)config.wtext, config.wlen*sizeof(wchr_t),
text, tsz);
output.append_text(text, text_len);
output.tag.set_title("/TITLE");
config.timecode_format = input.tag.get_property("TIMECODEFORMAT", config.timecode_format);
config.window_w = input.tag.get_property("WINDOW_W", config.window_w);
config.window_h = input.tag.get_property("WINDOW_H", config.window_h);
- config.drag = input.tag.get_property("DRAG", config.drag);
config.background = input.tag.get_property("BACKGROUND", config.background);
input.tag.get_property("BACKGROUND_PATH", config.background_path);
config.loop_playback = input.tag.get_property("LOOP_PLAYBACK", config.loop_playback);
}
}
-void TitleMain::insert_text(const wchar_t *wtxt, int pos)
+void TitleMain::insert_text(const wchr_t *wtxt, int pos)
{
- int len = wcslen(wtxt);
+ int len = wstrlen(wtxt);
int wlen = config.wlen;
if( pos < 0 ) pos = 0;
if( pos > wlen ) pos = wlen;
config.demand(wlen + len);
int wsize1 = config.wsize-1;
- wchar_t *wtext = config.wtext;
+ wchr_t *wtext = config.wtext;
for( int i=wlen, j=wlen+len; --i>=pos; ) {
if( --j >= wsize1 ) continue;
wtext[j] = wtext[i];