titler font fixups, debian i386 build
[goodguy/history.git] / cinelerra-5.1 / plugins / titler / titlerwindow.C
index bdf11eda3852bb9653106db0437bf0d24c96ab0a..a97974aaee5530ab97ee9ee84c4d86656a91ee26 100644 (file)
@@ -20,7 +20,9 @@
  */
 
 #include "bcdisplayinfo.h"
+#include "bcdialog.h"
 #include "bcsignals.h"
+#include "browsebutton.h"
 #include "clip.h"
 #include "cstrdup.h"
 #include "automation.h"
@@ -115,7 +117,8 @@ TitleWindow::TitleWindow(TitleMain *client)
 TitleWindow::~TitleWindow()
 {
        ungrab(client->server->mwindow->cwindow->gui);
-       delete fonts_popup;
+       delete color_popup;
+       delete png_popup;
        for( int i=0; i<fonts.size(); ++i )
                delete fonts[i]->get_icon();
 
@@ -363,7 +366,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, "", _("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;
 
@@ -377,6 +384,8 @@ 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);
+       png_popup = new TitlePngPopup(client, this);
 
        show_window(1);
        update();
@@ -590,6 +599,7 @@ void TitleWindow::previous_font()
 
        font->update(fonts.values[current_font]->get_text());
        strcpy(client->config.font, fonts.values[current_font]->get_text());
+       check_style(client->config.font);
        client->send_configure_change();
 }
 
@@ -607,6 +617,7 @@ void  TitleWindow::next_font()
 
        font->update(fonts.values[current_font]->get_text());
        strcpy(client->config.font, fonts.values[current_font]->get_text());
+       check_style(client->config.font);
        client->send_configure_change();
 }
 
@@ -661,6 +672,7 @@ void TitleWindow::update()
        fade_in->update((float)client->config.fade_in);
        fade_out->update((float)client->config.fade_out);
        font->update(client->config.font);
+       check_style(client->config.font);
        text->update(&client->config.wtext[0]);
        speed->update(client->config.pixels_per_second);
        outline->update((int64_t)client->config.outline_size);
@@ -793,13 +805,7 @@ int TitleItalic::handle_event()
 
 
 TitleSize::TitleSize(TitleMain *client, TitleWindow *window, int x, int y, char *text)
- : BC_PopupTextBox(window,
-               &window->sizes,
-               text,
-               x,
-               y,
-               64,
-               300)
+ : BC_PopupTextBox(window, &window->sizes, text, x, y, 64, 300)
 {
        this->client = client;
        this->window = window;
@@ -958,9 +964,18 @@ int TitleFade::handle_event()
        return 1;
 }
 
+void TitleWindow::check_style(const char *font_name)
+{
+       BC_FontEntry *font;
+       font = TitleMain::get_font(font_name, BC_FONT_ITALIC);
+       strcmp(font_name, font->displayname) ? italic->disable() : italic->enable();
+       font = TitleMain::get_font(font_name, BC_FONT_BOLD);
+       strcmp(font_name, font->displayname) ? bold->disable() : bold->enable();
+}
+
 TitleFont::TitleFont(TitleMain *client, TitleWindow *window, int x, int y)
  : BC_PopupTextBox(window, &window->fonts, client->config.font,
-               x, y, 200, 500, LISTBOX_ICON_LIST)
+               x, y, 240, 300, LISTBOX_ICON_LIST)
 {
        this->client = client;
        this->window = window;
@@ -968,6 +983,7 @@ TitleFont::TitleFont(TitleMain *client, TitleWindow *window, int x, int y)
 int TitleFont::handle_event()
 {
        strcpy(client->config.font, get_text());
+       window->check_style(client->config.font);
        client->send_configure_change();
        return 1;
 }
@@ -1216,7 +1232,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;
@@ -1319,55 +1335,75 @@ void TitleCurPopup::create_objects()
        TitleCurSubMenu *sub_menu;
        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 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 #")));
+       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 ")));
+       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 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 +")));
+       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 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 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 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 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 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 ")));
+       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 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")));
+       sub_menu->add_submenuitem(new TitleCurSubMenuItem(sub_menu,_("png file")));
 }
 
 TitleCurItem::TitleCurItem(TitleCurPopup *popup, const char *text)
@@ -1401,13 +1437,18 @@ int TitleCurSubMenuItem::handle_event()
        TitleCurPopup *popup = submenu->cur_item->popup;
        TitleWindow *window = popup->window;
        const char *item_text = get_text();
-       if( !strcmp(item_text, _("font")) ) {
-               int w = 300, h = 200;
-               int x = window->get_abs_cursor_x(0) - w + 10;
-               int y = window->get_abs_cursor_y(0) - 20;
-               if( x < 2 ) x = 2;
-               if( y < 2 ) y = 2;
-               window->fonts_popup->activate(x, y, w,h);
+       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;
+       }
+       if( !strcmp(item_text, _("color #")) ) {
+               window->color_popup->activate();
+               return 1;
+       }
+       if( !strcmp(item_text, _("png file")) ) {
+               window->png_popup->activate();
                return 1;
        }
        char txt[BCSTRLEN];
@@ -1435,10 +1476,73 @@ 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, "<font %s>",item_text);
-       int adv = strlen(txt);
-       int ret = window->insert_ibeam(txt, adv);
-       return ret;
+       char txt[BCTEXTLEN];  sprintf(txt, "<font %s>",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 #%06x>",color_value);
+       window->insert_ibeam(txt, strlen(txt));
+}
+
+TitlePngPopup::TitlePngPopup(TitleMain *client, TitleWindow *window)
+ : BC_DialogThread()
+{
+       this->client = client;
+       this->window = window;
+}
+
+TitlePngPopup::~TitlePngPopup()
+{
+       close_window();
+}
+
+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, "<png %s>",path);
+       window->insert_ibeam(txt, strlen(txt));
+}
+
+BC_Window *TitlePngPopup::new_gui()
+{
+        BC_DisplayInfo display_info;
+        int x = display_info.get_abs_cursor_x();
+        int y = display_info.get_abs_cursor_y();
+
+       BC_Window *gui = new BrowseButtonWindow(client->server->mwindow->theme,
+               x-25, y-100, window, "", _("Png file"), _("Png path"), 0);
+        gui->create_objects();
+       return gui;
+}
+
+int TitlePngPopup::activate()
+{
+       BC_DialogThread::start();
+       return 1;
 }