dynamic keyframes, textbox rework, andrea ffmpeg.opts, perpetual chkpt undo, lv2...
[goodguy/history.git] / cinelerra-5.1 / plugins / titler / titlerwindow.C
index 1fc0a1e5bf230efe3e7af444a6a51b95a6d8614b..bddb7993bdb845162de47d773e6454d01b847865 100644 (file)
@@ -105,7 +105,6 @@ TitleWindow::TitleWindow(TitleMain *client)
        text_title = 0;
        text = 0;
        text_chars = 0;
-       text_bfrsz = 0;
        justify_title = 0;
        left = 0;  center = 0;  right = 0;
        top = 0;   mid = 0;     bottom = 0;
@@ -399,8 +398,6 @@ void TitleWindow::create_objects()
        x += text_title->get_w() + 20;
        int wid = BC_Title::calculate_w(this,"0")*10;
        add_tool(text_chars = new TitleTextChars(x,y,wid));
-       x += text_chars->get_w() + 20;
-       add_tool(text_bfrsz = new TitleTextBfrSz(x,y,wid));
 
        y += text_title->get_h() + margin;
        x = margin;
@@ -569,9 +566,6 @@ void TitleWindow::update_justification()
 void TitleWindow::update_stats()
 {
        text_chars->update(client->config.wlen);
-       int len = MESSAGESIZE - BCTEXTLEN - strlen(text->get_text()) - 1;
-       if( len < 0 ) len = 0;
-       text_bfrsz->update(len);
 }
 
 void TitleWindow::update()
@@ -591,7 +585,7 @@ void TitleWindow::update()
        fade_out->update((float)client->config.fade_out);
        font->update(client->config.font);
        check_style(client->config.font,0);
-       text->update(&client->config.wtext[0]);
+       text->update(client->config.wtext ? &client->config.wtext[0] : L"");
        speed->update(client->config.pixels_per_second);
        outline->update((int64_t)client->config.outline_size);
 #ifdef USE_STROKER
@@ -952,7 +946,7 @@ TitleText::TitleText(TitleMain *client, TitleWindow *window,
        int x, int y, int w, int h)
  : BC_ScrollTextBox(window, x, y, w,
                BC_TextBox::pixels_to_rows(window, MEDIUMFONT, h),
-               client->config.wtext, 8192)
+               client->config.wtext, 0)
 {
        this->client = client;
        this->window = window;
@@ -972,22 +966,11 @@ int TitleText::button_press_event()
 int TitleText::handle_event()
 {
        window->fonts_popup->deactivate();
-       int text_len = strlen(get_text());
-       int avail = MESSAGESIZE - BCTEXTLEN;
-       if( text_len >= avail ) { // back off last utf8 char
-               char text[2*sizeof(client->config.wtext)];
-               strcpy(text, get_text());
-               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;
-               update(text);
-       }
-       int len =  sizeof(client->config.wtext) / sizeof(wchar_t);
-       wcsncpy(client->config.wtext, get_wtext(), len);
-       client->config.wtext[len-1] = 0;
-       client->config.wlen = wcslen(client->config.wtext);
+       const wchar_t *wtext = get_wtext();
+       long wlen = wcslen(wtext);
+       client->config.demand(wlen);
+       wcsncpy(client->config.wtext, wtext, client->config.wsize);
+       client->config.wlen = wlen;
        window->update_stats();
        window->send_configure_change();
        return 1;
@@ -1006,20 +989,6 @@ int TitleTextChars::update(int n)
        return BC_Title::update(text, 0);
 }
 
-TitleTextBfrSz::TitleTextBfrSz(int x, int y, int w)
- : BC_Title(x, y, "", MEDIUMFONT, -1, 0, w)
-{
-}
-TitleTextBfrSz::~TitleTextBfrSz()
-{
-}
-int TitleTextBfrSz::update(int n)
-{
-       char text[BCSTRLEN];
-       sprintf(text, _("bfrsz: %d  "),n);
-       return BC_Title::update(text, 0);
-}
-
 
 TitleDropShadow::TitleDropShadow(TitleMain *client, TitleWindow *window, int x, int y)
  : BC_TumbleTextBox(window, client->config.dropshadow,
@@ -1370,80 +1339,80 @@ void TitleCurPopup::create_objects()
        TitleCurItem *cur_item;
        TitleCurSubMenu *sub_menu;
        char *item;
-       add_item(cur_item = new TitleCurItem(this, item = KW_NUDGE));
+       add_item(cur_item = new TitleCurItem(this, item = _(KW_NUDGE)));
        cur_item->add_submenu(sub_menu = new TitleCurSubMenu(cur_item));
        sub_menu->add_subitem("%s dx,dy",item);
        sub_menu->add_subitem("/%s",item);
-       add_item(cur_item = new TitleCurItem(this, item = KW_COLOR));
+       add_item(cur_item = new TitleCurItem(this, item = _(KW_COLOR)));
        cur_item->add_submenu(sub_menu = new TitleCurSubMenu(cur_item));
        sub_menu->add_subitem(POPUP_COLOR,"%s %s",item,_("#"));
        sub_menu->add_subitem("%s ",item);
        sub_menu->add_subitem("/%s",item);
-       add_item(cur_item = new TitleCurItem(this, item = KW_ALPHA));
+       add_item(cur_item = new TitleCurItem(this, item = _(KW_ALPHA)));
        cur_item->add_submenu(sub_menu = new TitleCurSubMenu(cur_item));
        sub_menu->add_subitem("%s ",item);
        sub_menu->add_subitem("%s 0.",item);
        sub_menu->add_subitem("%s .5",item);
        sub_menu->add_subitem("%s 1.",item);
        sub_menu->add_subitem("/%s",item);
-       add_item(cur_item = new TitleCurItem(this, item = KW_FONT));
+       add_item(cur_item = new TitleCurItem(this, item = _(KW_FONT)));
        cur_item->add_submenu(sub_menu = new TitleCurSubMenu(cur_item));
        sub_menu->add_subitem(POPUP_FONT,"%s %s",item, _("name"));
        sub_menu->add_subitem(POPUP_OFFSET, "%s ",item);
        sub_menu->add_subitem("/%s",item);
-       add_item(cur_item = new TitleCurItem(this, item = KW_SIZE));
+       add_item(cur_item = new TitleCurItem(this, item = _(KW_SIZE)));
        cur_item->add_submenu(sub_menu = new TitleCurSubMenu(cur_item));
        sub_menu->add_subitem("%s +",item);
        sub_menu->add_subitem("%s -",item);
        sub_menu->add_subitem("%s ",item);
        sub_menu->add_subitem("/%s",item);
-       add_item(cur_item = new TitleCurItem(this, item = KW_BOLD));
+       add_item(cur_item = new TitleCurItem(this, item = _(KW_BOLD)));
        cur_item->add_submenu(sub_menu = new TitleCurSubMenu(cur_item));
        sub_menu->add_subitem("%s 1",item);
        sub_menu->add_subitem("%s 0",item);
        sub_menu->add_subitem("/%s",item);
-       add_item(cur_item = new TitleCurItem(this, item = KW_ITALIC));
+       add_item(cur_item = new TitleCurItem(this, item = _(KW_ITALIC)));
        cur_item->add_submenu(sub_menu = new TitleCurSubMenu(cur_item));
        sub_menu->add_subitem("%s 1",item);
        sub_menu->add_subitem("%s 0",item);
        sub_menu->add_subitem("/%s",item);
-       add_item(cur_item = new TitleCurItem(this, item = KW_CAPS));
+       add_item(cur_item = new TitleCurItem(this, item = _(KW_CAPS)));
        cur_item->add_submenu(sub_menu = new TitleCurSubMenu(cur_item));
        sub_menu->add_subitem("%s 1",item);
        sub_menu->add_subitem("%s 0",item);
        sub_menu->add_subitem("%s -1",item);
        sub_menu->add_subitem("/%s",item);
-       add_item(cur_item = new TitleCurItem(this, item = KW_UL));
+       add_item(cur_item = new TitleCurItem(this, item = _(KW_UL)));
        cur_item->add_submenu(sub_menu = new TitleCurSubMenu(cur_item));
        sub_menu->add_subitem("%s 1",item);
        sub_menu->add_subitem("%s 0",item);
        sub_menu->add_subitem("/%s",item);
-       add_item(cur_item = new TitleCurItem(this, item = KW_BLINK));
+       add_item(cur_item = new TitleCurItem(this, item = _(KW_BLINK)));
        cur_item->add_submenu(sub_menu = new TitleCurSubMenu(cur_item));
        sub_menu->add_subitem("%s 1",item);
        sub_menu->add_subitem("%s -1",item);
        sub_menu->add_subitem("%s ",item);
        sub_menu->add_subitem("%s 0",item);
        sub_menu->add_subitem("/%s",item);
-       add_item(cur_item = new TitleCurItem(this, item = KW_FIXED));
+       add_item(cur_item = new TitleCurItem(this, item = _(KW_FIXED)));
        cur_item->add_submenu(sub_menu = new TitleCurSubMenu(cur_item));
        sub_menu->add_subitem("%s ",item);
        sub_menu->add_subitem("%s 20",item);
        sub_menu->add_subitem("%s 10",item);
        sub_menu->add_subitem("%s 0",item);
        sub_menu->add_subitem("/%s",item);
-       add_item(cur_item = new TitleCurItem(this, item = KW_ALIAS));
+       add_item(cur_item = new TitleCurItem(this, item = _(KW_ALIAS)));
        cur_item->add_submenu(sub_menu = new TitleCurSubMenu(cur_item));
        sub_menu->add_subitem("%s 1",item);
        sub_menu->add_subitem("%s 0",item);
        sub_menu->add_subitem("/%s",item);
-       add_item(cur_item = new TitleCurItem(this, item = KW_SUP));
+       add_item(cur_item = new TitleCurItem(this, item = _(KW_SUP)));
        cur_item->add_submenu(sub_menu = new TitleCurSubMenu(cur_item));
        sub_menu->add_subitem("%s 1",item);
        sub_menu->add_subitem("%s 0",item);
        sub_menu->add_subitem("%s -1",item);
        sub_menu->add_subitem("/%s",item);
-       add_item(cur_item = new TitleCurItem(this, item = KW_PNG));
+       add_item(cur_item = new TitleCurItem(this, item = _(KW_PNG)));
        cur_item->add_submenu(sub_menu = new TitleCurSubMenu(cur_item));
        sub_menu->add_subitem(POPUP_PNG,"%s %s", item, _("file"));
 }
@@ -1533,7 +1502,7 @@ int TitleFontsPopup::handle_event()
        BC_ListBoxItem *item = get_selection(0, 0);
        if( !item ) return 1;
        const char *item_text = item->get_text();
-       char txt[BCTEXTLEN];  sprintf(txt, "<%s %s>", KW_FONT, item_text);
+       char txt[BCTEXTLEN];  sprintf(txt, "<%s %s>", _(KW_FONT), item_text);
        return window->insert_ibeam(txt);
 }
 
@@ -1560,7 +1529,7 @@ int TitleColorPopup::activate()
 void TitleColorPopup::handle_done_event(int result)
 {
        if( result ) return;
-       char txt[BCSTRLEN];  sprintf(txt, "<%s #%06x>", KW_COLOR, color_value);
+       char txt[BCSTRLEN];  sprintf(txt, "<%s #%06x>", _(KW_COLOR), color_value);
        window->insert_ibeam(txt);
 }
 
@@ -1581,7 +1550,7 @@ void TitlePngPopup::handle_done_event(int result)
        if( result ) return;
        BrowseButtonWindow *gui = (BrowseButtonWindow *)get_gui();
        const char *path = gui->get_submitted_path();
-       char txt[BCSTRLEN];  sprintf(txt, "<%s %s>", KW_PNG, path);
+       char txt[BCSTRLEN];  sprintf(txt, "<%s %s>", _(KW_PNG), path);
        window->insert_ibeam(txt);
 }