X-Git-Url: https://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fplugins%2Ftitler%2Ftitlerwindow.C;h=394d82dee327bfd197be6c07aeca29d78cba6a00;hb=624f99bd6dccb2af28fdbef8fbb3ae41c19fcbd2;hp=ef89eb8ddd28a93a1d2ff23af2270109bfaa1c70;hpb=77815ec03df6a03ed75433e8cf8ae1e83fb76d6e;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/plugins/titler/titlerwindow.C b/cinelerra-5.1/plugins/titler/titlerwindow.C index ef89eb8d..394d82de 100644 --- a/cinelerra-5.1/plugins/titler/titlerwindow.C +++ b/cinelerra-5.1/plugins/titler/titlerwindow.C @@ -21,6 +21,7 @@ #include "bcdisplayinfo.h" #include "bcsignals.h" +#include "browsebutton.h" #include "clip.h" #include "cstrdup.h" #include "automation.h" @@ -56,49 +57,68 @@ TitleWindow::TitleWindow(TitleMain *client) { //printf("TitleWindow::TitleWindow %d %d %d\n", __LINE__, client->config.window_w, client->config.window_h); this->client = client; + + font_title = 0; + font = 0; font_tumbler = 0; - justify_title = 0; + x_title = 0; title_x = 0; + y_title = 0; title_y = 0; + w_title = 0; title_w = 0; + h_title = 0; title_h = 0; + dropshadow_title = 0; dropshadow = 0; + outline_title = 0; outline = 0; + stroker_title = 0; stroker = 0; style_title = 0; + italic = 0; + bold = 0; + drag = 0; + cur_popup = 0; + fonts_popup = 0; + + color_x = color_y = 0; + outline_color_x = outline_color_y = 0; + drag_dx = drag_dy = dragging = 0; + cur_ibeam = -1; + size_title = 0; + size = 0; + size_tumbler = 0; + pitch_title = 0; + pitch = 0; + encoding_title = 0; + encoding = 0; + color_button = 0; + color_thread = 0; + outline_color_button = 0; + outline_color_thread = 0; motion_title = 0; - speed_title = 0; - font_title = 0; - fadeout_title = 0; + motion = 0; + line_pitch = 0; + loop = 0; fadein_title = 0; - dropshadow_title = 0; + fade_in = 0; + fadeout_title = 0; + fade_out = 0; text_title = 0; - - font = 0; size = 0; - title_x = 0; title_y = 0; - x_title = 0; y_title = 0; - title_w = 0; title_h = 0; - w_title = 0; h_title = 0; - top = 0; mid = 0; bottom = 0; - left = 0; center = 0; right = 0; - loop = 0; motion = 0; speed = 0; - dropshadow = 0; text = 0; + justify_title = 0; + left = 0; center = 0; right = 0; + top = 0; mid = 0; bottom = 0; + speed_title = 0; + speed = 0; timecode = 0; - bold = 0; - italic = 0; - dragging = 0; - fade_in = 0; - fade_out = 0; - color_button = 0; - color_x = color_y = 0; - color_thread = 0; + timecode_format = 0; background = 0; background_path = 0; - cur_ibeam = -1; + loop_playback = 0; } TitleWindow::~TitleWindow() { ungrab(client->server->mwindow->cwindow->gui); - for( int j=0; jget_icon(); - } + delete fonts_popup; + for( int i=0; iget_icon(); sizes.remove_all_objects(); delete timecode_format; @@ -344,7 +364,11 @@ void TitleWindow::create_objects() add_tool(background = new TitleBackground(client, this, x, y)); x += background->get_w() + margin; add_tool(background_path = new TitleBackgroundPath(client, this, x, y)); - x += background_path->get_w() + 2*margin; + x += background_path->get_w() + margin; + add_tool(background_browse = new BrowseButton( + client->server->mwindow->theme, this, background_path, + x, y, 0, _("background media"), _("Select background media path"))); + x += background_browse->get_w() + 3*margin; add_tool(loop_playback = new TitleLoopPlayback(client, x, y)); y += loop_playback->get_h() + 10; @@ -357,9 +381,11 @@ void TitleWindow::create_objects() add_tool(cur_popup = new TitleCurPopup(client, this)); cur_popup->create_objects(); + add_tool(fonts_popup = new TitleFontsPopup(client, this)); + color_popup = new TitleColorPopup(client, this); - update(); show_window(1); + update(); } int TitleWindow::resize_event(int w, int h) @@ -590,7 +616,17 @@ void TitleWindow::next_font() client->send_configure_change(); } - +int TitleWindow::insert_ibeam(const char *txt, int adv) +{ + int ibeam = cur_ibeam; + client->insert_text(txt, ibeam); + if( (ibeam += adv) >= client->config.wlen) + ibeam = client->config.wlen; + text->wset_selection(-1, -1, ibeam); + text->update(client->config.wtext); + client->send_configure_change(); + return 1; +} void TitleWindow::update_color() { @@ -965,6 +1001,7 @@ int TitleText::button_press_event() int TitleText::handle_event() { + window->fonts_popup->deactivate(); int len = sizeof(client->config.wtext) / sizeof(wchar_t); wcsncpy(client->config.wtext, get_wtext(), len); client->config.wtext[len-1] = 0; @@ -1185,7 +1222,7 @@ int TitleBottom::handle_event() TitleColorThread::TitleColorThread(TitleMain *client, TitleWindow *window, int is_outline) - : ColorThread(1) + : ColorThread(1, _("Text Color")) { this->client = client; this->window = window; @@ -1280,61 +1317,83 @@ TitleCurPopup::TitleCurPopup(TitleMain *client, TitleWindow *window) } int TitleCurPopup::handle_event() { -printf("cur popup\n"); return 1; } void TitleCurPopup::create_objects() { TitleCurItem *cur_item; TitleCurSubMenu *sub_menu; - add_item(cur_item = new TitleCurItem(this, "nudge")); + add_item(cur_item = new TitleCurItem(this, _("nudge"))); cur_item->add_submenu(sub_menu = new TitleCurSubMenu(cur_item)); - sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,"nudge")); - sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,"/nudge")); - add_item(cur_item = new TitleCurItem(this, "color")); + sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,_("nudge dx,dy"))); + sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,_("/nudge"))); + add_item(cur_item = new TitleCurItem(this, _("color"))); cur_item->add_submenu(sub_menu = new TitleCurSubMenu(cur_item)); - sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,"color")); - sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,"/color")); - add_item(cur_item = new TitleCurItem(this, "alpha")); + sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,_("color #"))); + sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,_("color "))); + sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,_("/color"))); + add_item(cur_item = new TitleCurItem(this, _("alpha"))); cur_item->add_submenu(sub_menu = new TitleCurSubMenu(cur_item)); - sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,"alpha")); - sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,"/alpha")); - add_item(cur_item = new TitleCurItem(this, "font")); + sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,_("alpha "))); + sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,_("alpha 0."))); + sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,_("alpha .5"))); + sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,_("alpha 1."))); + sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,_("/alpha"))); + add_item(cur_item = new TitleCurItem(this, _("font"))); cur_item->add_submenu(sub_menu = new TitleCurSubMenu(cur_item)); - sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,"font")); - sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,"/font")); - add_item(cur_item = new TitleCurItem(this, "size")); + sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,_("font name"))); + sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,_("font "))); + sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,_("/font"))); + add_item(cur_item = new TitleCurItem(this, _("size"))); cur_item->add_submenu(sub_menu = new TitleCurSubMenu(cur_item)); - sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,"size")); - sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,"/size")); - add_item(cur_item = new TitleCurItem(this, "bold")); + sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,_("size +"))); + sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,_("size -"))); + sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,_("size "))); + sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,_("/size"))); + add_item(cur_item = new TitleCurItem(this, _("bold"))); cur_item->add_submenu(sub_menu = new TitleCurSubMenu(cur_item)); - sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,"bold")); - sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,"/bold")); - add_item(cur_item = new TitleCurItem(this, "italic")); + sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,_("bold 1"))); + sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,_("bold 0"))); + sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,_("/bold"))); + add_item(cur_item = new TitleCurItem(this, _("italic"))); cur_item->add_submenu(sub_menu = new TitleCurSubMenu(cur_item)); - sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,"italic")); - sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,"/italic")); - add_item(cur_item = new TitleCurItem(this, "caps")); + sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,_("italic 1"))); + sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,_("italic 0"))); + sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,_("/italic"))); + add_item(cur_item = new TitleCurItem(this, _("caps"))); cur_item->add_submenu(sub_menu = new TitleCurSubMenu(cur_item)); - sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,"caps")); - sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,"/caps")); - add_item(cur_item = new TitleCurItem(this, "ul")); + sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,_("caps 1"))); + sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,_("caps 0"))); + sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,_("caps -1"))); + sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,_("/caps"))); + add_item(cur_item = new TitleCurItem(this, _("ul"))); cur_item->add_submenu(sub_menu = new TitleCurSubMenu(cur_item)); - sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,"ul")); - sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,"/ul")); - add_item(cur_item = new TitleCurItem(this, "blink")); + sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,_("ul 1"))); + sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,_("ul 0"))); + sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,_("/ul"))); + add_item(cur_item = new TitleCurItem(this, _("blink"))); cur_item->add_submenu(sub_menu = new TitleCurSubMenu(cur_item)); - sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,"blink")); - sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,"/blink")); - add_item(cur_item = new TitleCurItem(this, "fixed")); + sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,_("blink 1"))); + sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,_("blink -1"))); + sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,_("blink "))); + sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,_("blink 0"))); + sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,_("/blink"))); + add_item(cur_item = new TitleCurItem(this, _("fixed"))); cur_item->add_submenu(sub_menu = new TitleCurSubMenu(cur_item)); - sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,"fixed")); - sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,"/fixed")); - add_item(cur_item = new TitleCurItem(this, "sup")); + sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,_("fixed "))); + sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,_("fixed 20"))); + sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,_("fixed 10"))); + sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,_("fixed 0"))); + sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,_("/fixed"))); + add_item(cur_item = new TitleCurItem(this, _("sup"))); cur_item->add_submenu(sub_menu = new TitleCurSubMenu(cur_item)); - sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,"sup")); - sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,"/sup")); + sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,_("sup 1"))); + sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,_("sup 0"))); + sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,_("sup -1"))); + sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,_("/sup"))); + add_item(cur_item = new TitleCurItem(this, _("png"))); + cur_item->add_submenu(sub_menu = new TitleCurSubMenu(cur_item)); + sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,_("png file"))); } TitleCurItem::TitleCurItem(TitleCurPopup *popup, const char *text) @@ -1365,34 +1424,72 @@ TitleCurSubMenuItem::~TitleCurSubMenuItem() } int TitleCurSubMenuItem::handle_event() { - char id[BCSTRLEN]; - sprintf(id, "<%s>",get_text()); - int ilen = strlen(id); - TitleMain *client = submenu->cur_item->popup->client; - TitleWindow *window = submenu->cur_item->popup->window; - - wchar_t *wtext = client->config.wtext; - int wsize = sizeof(client->config.wtext)-1; - int wlen = client->config.wlen; - int ibeam_letter = window->cur_ibeam; - if( ibeam_letter < 0 ) ibeam_letter = 0; - if( ibeam_letter > wlen ) ibeam_letter = wlen; - - for( int i=wlen-1, j=wlen+ilen-1; i>=ibeam_letter; --i,--j ) { - if( j >= wsize ) continue; - wtext[j] = wtext[i]; + TitleCurPopup *popup = submenu->cur_item->popup; + TitleWindow *window = popup->window; + const char *item_text = get_text(); + if( !strcmp(item_text, _("font name")) ) { + int px, py; + window->get_pop_cursor_xy(px ,py); + window->fonts_popup->activate(px, py, 300,200); + return 1; } - for( int i=ibeam_letter, j=0; j= wsize ) break; - wtext[i] = id[j]; + if( !strcmp(item_text, _("color #")) ) { + window->color_popup->activate(); + return 1; } + char txt[BCSTRLEN]; + sprintf(txt, "<%s>", item_text); + int adv = strlen(txt); + if( adv > 1 && (txt[1] != '/' && strcmp(txt,_("font"))) ) --adv; + return window->insert_ibeam(txt,adv); +} - if( (wlen+=ilen) > wsize ) wlen = wsize; - wtext[wlen] = 0; - window->text->update(wtext); - client->config.wlen = wlen; - client->send_configure_change(); - return 1; +TitleFontsPopup::TitleFontsPopup(TitleMain *client, TitleWindow *window) + : BC_ListBox(-1, -1, 1, 1, LISTBOX_ICON_LIST, + &window->fonts, 0, 0, 1, 0, 1) +{ + this->client = client; + this->window = window; + set_use_button(0); +} +TitleFontsPopup::~TitleFontsPopup() +{ +} + +int TitleFontsPopup::handle_event() +{ + deactivate(); + BC_ListBoxItem *item = get_selection(0, 0); + if( !item ) return 1; + const char *item_text = item->get_text(); + char txt[BCTEXTLEN]; sprintf(txt, "",item_text); + return window->insert_ibeam(txt, strlen(txt)); } +TitleColorPopup::TitleColorPopup(TitleMain *client, TitleWindow *window) + : ColorThread(0, _("Text Color")) +{ + this->client = client; + this->window = window; + this->color_value = client->config.color; +} +TitleColorPopup::~TitleColorPopup() +{ +} +int TitleColorPopup::handle_new_color(int output, int alpha) +{ + color_value = output; + return 1; +} +int TitleColorPopup::activate() +{ + start_window(client->config.color, 255, 1); + return 1; +} +void TitleColorPopup::handle_done_event(int result) +{ + if( result ) return; + char txt[BCSTRLEN]; sprintf(txt, "",color_value); + window->insert_ibeam(txt, strlen(txt)); +}