picon dirs, new cinfinity picons, plugin info, rework text drawing, show msg, compres...
authorGood Guy <[email protected]>
Wed, 26 Jul 2017 00:35:46 +0000 (18:35 -0600)
committerGood Guy <[email protected]>
Wed, 26 Jul 2017 00:35:46 +0000 (18:35 -0600)
19 files changed:
cinelerra-5.1/Makefile.am
cinelerra-5.1/cinelerra/awindowgui.C
cinelerra-5.1/cinelerra/awindowgui.h
cinelerra-5.1/cinelerra/interfaceprefs.C
cinelerra-5.1/cinelerra/mwindow.C
cinelerra-5.1/cinelerra/mwindowgui.C
cinelerra-5.1/cinelerra/mwindowgui.h
cinelerra-5.1/cinelerra/render.C
cinelerra-5.1/cinelerra/statusbar.C
cinelerra-5.1/cinelerra/statusbar.h
cinelerra-5.1/guicast/bcpopupmenu.C
cinelerra-5.1/guicast/bctextbox.C
cinelerra-5.1/guicast/bcwindowbase.h
cinelerra-5.1/guicast/bcwindowdraw.C
cinelerra-5.1/info/plugins.txt
cinelerra-5.1/picon_cinfinity/ff_audio.png [new file with mode: 0644]
cinelerra-5.1/picon_cinfinity/ff_video.png [new file with mode: 0644]
cinelerra-5.1/picon_cinfinity/lad_picon.png [new file with mode: 0644]
cinelerra-5.1/plugins/compressor/compressor.C

index 7e00103038cdfb62b4c83c0bce0485a16ce99592..a6426923cb64cb5da95603f0ae5bb31815ded62c 100644 (file)
@@ -36,6 +36,7 @@ binstall:     install-recursive
                > "bin/applications/$(WANT_CIN).desktop"
        cp -a image/cin.svg "bin/pixmaps/$(WANT_CIN)".svg
        cp -a image/cin.xpm "bin/pixmaps/$(WANT_CIN)".xpm
+       for d in picon*; do cp -a $$d/. bin/plugins/$$d/.; done
        cp -a db/utils/new_db "bin/cin_db"
 
 buninstall:
index 272bfea8ef56bbf71ca1b6526db45a68414fc5f8..13e7164d582562645952bb4321d50a232b77681d 100644 (file)
@@ -163,13 +163,14 @@ AssetPicon::AssetPicon(MWindow *mwindow,
 }
 
 AssetPicon::AssetPicon(MWindow *mwindow,
-       AWindowGUI *gui, int folder)
+       AWindowGUI *gui, int folder, int persist)
  : BC_ListBoxItem(_(AWindowGUI::folder_names[folder]), gui->folder_icon)
 {
        reset();
        foldernum = folder;
        this->mwindow = mwindow;
        this->gui = gui;
+       persistent = persist;
 }
 
 AssetPicon::AssetPicon(MWindow *mwindow,
@@ -464,22 +465,19 @@ AWindowGUI::~AWindowGUI()
        displayed_assets[1].remove_all_objects();
 
        delete vicon_thread;
-       delete file_icon;
-       delete audio_icon;
-       delete video_icon;
-       delete folder_icon;
-       delete clip_icon;
-       delete label_icon;
-       delete atransition_icon;
-       delete vtransition_icon;
-       delete aeffect_icon;
-       delete ladspa_icon;
-       delete ladspa_vframe;
-       delete ff_aud_icon;
-       delete ff_aud_vframe;
-       delete ff_vid_icon;
-       delete ff_vid_vframe;
-       delete veffect_icon;
+       delete file_icon;         delete file_res;
+       delete audio_icon;        delete audio_res;
+       delete video_icon;        delete video_res;
+       delete folder_icon;       delete folder_res;
+       delete clip_icon;         delete clip_res;
+       delete label_icon;        delete label_res;
+       delete atransition_icon;  delete atrans_res;
+       delete vtransition_icon;  delete vtrans_res;
+       delete aeffect_icon;      delete aeffect_res;
+       delete veffect_icon;      delete veffect_res;
+       delete ladspa_icon;       delete ladspa_res;
+       delete ff_aud_icon;       delete ff_aud_res;
+       delete ff_vid_icon;       delete ff_vid_res;
        delete newfolder_thread;
        delete asset_menu;
        delete clip_menu;
@@ -489,7 +487,7 @@ AWindowGUI::~AWindowGUI()
        delete cliplist_menu;
        delete labellist_menu;
        delete folderlist_menu;
-       if( temp_picon ) delete temp_picon;
+       delete temp_picon;
        delete remove_plugin;
 }
 
@@ -510,10 +508,48 @@ bool AWindowGUI::protected_pixmap(BC_Pixmap *icon)
                icon == ff_vid_icon;
 }
 
-void AWindowGUI::create_objects()
+VFrame *AWindowGUI::get_picon(const char *name, const char *plugin_icons)
+{
+       char png_path[BCTEXTLEN];
+       char *pp = png_path, *ep = pp + sizeof(png_path)-1;
+       pp += snprintf(pp, ep-pp, "%s/picon", File::get_plugin_path());
+       if( strcmp(DEFAULT_PICON, plugin_icons) )
+               pp += snprintf(pp, ep-pp, "_%s", plugin_icons);
+       pp += snprintf(pp, ep-pp, "/%s.png", name);
+       return VFramePng::vframe_png(png_path,0,0);
+}
+
+VFrame *AWindowGUI::get_picon(const char *name)
 {
-       AssetPicon *picon;
+       VFrame *vframe = get_picon(name, mwindow->preferences->plugin_icons);
+       if( !vframe ) vframe = get_picon(name, DEFAULT_PICON);
+       return vframe;
+}
 
+VFrame *AWindowGUI::resource_icon(VFrame *&vfrm, BC_Pixmap *&icon, const char *fn, int idx)
+{
+       VFrame *ret = vfrm = get_picon(fn);
+       if( !ret ) vfrm = BC_WindowBase::get_resources()->type_to_icon[idx];
+       icon = new BC_Pixmap(this, vfrm, PIXMAP_ALPHA);
+       return ret;
+}
+VFrame *AWindowGUI::theme_icon(VFrame *&vfrm, BC_Pixmap *&icon, const char *fn)
+{
+       VFrame *ret = vfrm = get_picon(fn);
+       if( !ret ) vfrm = mwindow->theme->get_image(fn);
+       icon = new BC_Pixmap(this, vfrm, PIXMAP_ALPHA);
+       return ret;
+}
+VFrame *AWindowGUI::plugin_icon(VFrame *&vfrm, BC_Pixmap *&icon, const char *fn, unsigned char *png)
+{
+       VFrame *ret = vfrm = get_picon(fn);
+       if( !ret ) vfrm = new VFramePng(png);
+       icon = new BC_Pixmap(this, vfrm, PIXMAP_ALPHA);
+       return vfrm;
+}
+
+void AWindowGUI::create_objects()
+{
        lock_window("AWindowGUI::create_objects");
 SET_TRACE
 //printf("AWindowGUI::create_objects 1\n");
@@ -521,64 +557,34 @@ SET_TRACE
        asset_titles[1] = _("Comments");
 
 SET_TRACE
-
        set_icon(mwindow->theme->get_image("awindow_icon"));
-       file_icon = new BC_Pixmap(this,
-               BC_WindowBase::get_resources()->type_to_icon[ICON_UNKNOWN],
-               PIXMAP_ALPHA);
-
-       folder_icon = new BC_Pixmap(this,
-               BC_WindowBase::get_resources()->type_to_icon[ICON_FOLDER],
-               PIXMAP_ALPHA);
-
-       audio_icon = new BC_Pixmap(this,
-               BC_WindowBase::get_resources()->type_to_icon[ICON_SOUND],
-               PIXMAP_ALPHA);
 
-       video_icon = new BC_Pixmap(this,
-               BC_WindowBase::get_resources()->type_to_icon[ICON_FILM],
-               PIXMAP_ALPHA);
+       file_res    = resource_icon(file_vframe,   file_icon,   "film_icon",   ICON_UNKNOWN);
+       folder_res  = resource_icon(folder_vframe, folder_icon, "folder_icon", ICON_FOLDER);
+       audio_res   = resource_icon(audio_vframe,  audio_icon,  "audio_icon",  ICON_SOUND);
+       video_res   = resource_icon(video_vframe,  video_icon,  "video_icon",  ICON_FILM);
+       label_res   = resource_icon(label_vframe,  label_icon,  "label_icon",  ICON_LABEL);
 
-       label_icon = new BC_Pixmap(this,
-               BC_WindowBase::get_resources()->type_to_icon[ICON_LABEL],
-               PIXMAP_ALPHA);
-
-SET_TRACE
+       clip_res    = theme_icon(clip_vframe,        clip_icon,        "clip_icon");
+       atrans_res  = theme_icon(atransition_vframe, atransition_icon, "atransition_icon");
+       vtrans_res  = theme_icon(vtransition_vframe, vtransition_icon, "vtransition_icon");
+       aeffect_res = theme_icon(aeffect_vframe,     aeffect_icon,     "aeffect_icon");
+       veffect_res = theme_icon(veffect_vframe,     veffect_icon,     "veffect_icon");
 
-       clip_vframe = mwindow->theme->get_image("clip_icon");
-       clip_icon = new BC_Pixmap(this, clip_vframe, PIXMAP_ALPHA);
-       atransition_vframe = mwindow->theme->get_image("atransition_icon");
-       atransition_icon = new BC_Pixmap(this, atransition_vframe, PIXMAP_ALPHA);
-       vtransition_vframe = mwindow->theme->get_image("vtransition_icon");
-       vtransition_icon = new BC_Pixmap(this, vtransition_vframe, PIXMAP_ALPHA);
-       aeffect_vframe = mwindow->theme->get_image("aeffect_icon");
-       aeffect_icon = new BC_Pixmap(this, aeffect_vframe, PIXMAP_ALPHA);
-       ladspa_vframe = new VFramePng(lad_picon_png);
-       ladspa_icon = new BC_Pixmap(this, ladspa_vframe, PIXMAP_ALPHA);
-       ff_aud_vframe = new VFramePng(ff_audio_png);
-       ff_aud_icon = new BC_Pixmap(this, ff_aud_vframe, PIXMAP_ALPHA);
-       ff_vid_vframe = new VFramePng(ff_video_png);
-       ff_vid_icon = new BC_Pixmap(this, ff_vid_vframe, PIXMAP_ALPHA);
-       veffect_vframe = mwindow->theme->get_image("veffect_icon");
-       veffect_icon = new BC_Pixmap(this, veffect_vframe, PIXMAP_ALPHA);
+       ladspa_res  = plugin_icon(ladspa_vframe, ladspa_icon, "lad_picon", lad_picon_png);
+       ff_aud_res  = plugin_icon(ff_aud_vframe, ff_aud_icon, "ff_audio",  ff_audio_png);
+       ff_vid_res  = plugin_icon(ff_vid_vframe, ff_vid_icon, "ff_video",  ff_video_png);
 
 SET_TRACE
 
 // Mandatory folders
-       folders.append(picon = new AssetPicon(mwindow, this, AW_AEFFECT_FOLDER));
-       picon->persistent = 1;
-       folders.append(picon = new AssetPicon(mwindow, this, AW_VEFFECT_FOLDER));
-       picon->persistent = 1;
-       folders.append(picon = new AssetPicon(mwindow, this, AW_ATRANSITION_FOLDER));
-       picon->persistent = 1;
-       folders.append(picon = new AssetPicon(mwindow, this, AW_VTRANSITION_FOLDER));
-       picon->persistent = 1;
-       folders.append(picon = new AssetPicon(mwindow, this, AW_LABEL_FOLDER));
-       picon->persistent = 1;
-       folders.append(picon = new AssetPicon(mwindow, this, AW_CLIP_FOLDER));
-       picon->persistent = 1;
-       folders.append(picon = new AssetPicon(mwindow, this, AW_MEDIA_FOLDER));
-       picon->persistent = 1;
+       folders.append(new AssetPicon(mwindow, this, AW_AEFFECT_FOLDER, 1));
+       folders.append(new AssetPicon(mwindow, this, AW_VEFFECT_FOLDER, 1));
+       folders.append(new AssetPicon(mwindow, this, AW_ATRANSITION_FOLDER, 1));
+       folders.append(new AssetPicon(mwindow, this, AW_VTRANSITION_FOLDER, 1));
+       folders.append(new AssetPicon(mwindow, this, AW_LABEL_FOLDER, 1));
+       folders.append(new AssetPicon(mwindow, this, AW_CLIP_FOLDER, 1));
+       folders.append(new AssetPicon(mwindow, this, AW_MEDIA_FOLDER, 1));
 
        create_label_folder();
 SET_TRACE
@@ -947,7 +953,7 @@ void AWindowGUI::update_folder_list()
                if( !exists ) {
                        int aw_folder = folder_number(folder);
                        AssetPicon *picon = aw_folder >= 0 ?
-                               new AssetPicon(mwindow, this, aw_folder) :
+                               new AssetPicon(mwindow, this, aw_folder, 0) :
                                new AssetPicon(mwindow, this, folder, AW_USER_FOLDER);
                        picon->create_objects();
                        folders.append(picon);
index 165e201f60a26af2ed5af0657b87a98b4afcb3b4..62e865970aee8a631f6f5b61f4fa8586d909a9b0 100644 (file)
@@ -50,7 +50,7 @@ public:
        AssetPicon(MWindow *mwindow, AWindowGUI *gui, EDL *edl);
        AssetPicon(MWindow *mwindow, AWindowGUI *gui, PluginServer *plugin);
        AssetPicon(MWindow *mwindow, AWindowGUI *gui, Label *plugin);
-       AssetPicon(MWindow *mwindow, AWindowGUI *gui, int folder);
+       AssetPicon(MWindow *mwindow, AWindowGUI *gui, int folder, int persist);
        AssetPicon(MWindow *mwindow, AWindowGUI *gui, const char *folder_name, int folder_num);
        virtual ~AssetPicon();
 
@@ -167,6 +167,12 @@ public:
        void stop_vicon_drawing();
        void update_picon(Indexable *indexable);
 
+       VFrame *get_picon(const char *name, const char *plugin_icons);
+       VFrame *get_picon(const char *name);
+       VFrame *resource_icon(VFrame *&vfrm, BC_Pixmap *&icon, const char *fn, int idx);
+       VFrame *theme_icon(VFrame *&vfrm, BC_Pixmap *&icon, const char *fn);
+       VFrame *plugin_icon(VFrame *&vfrm, BC_Pixmap *&icon, const char *fn, unsigned char *png);
+
        MWindow *mwindow;
        AWindow *awindow;
 
@@ -193,19 +199,19 @@ public:
 
        BC_Hash *defaults;
 // Persistent icons
-       BC_Pixmap *folder_icon;
-       BC_Pixmap *file_icon;
-       BC_Pixmap *audio_icon;
-       BC_Pixmap *video_icon;
-       BC_Pixmap *label_icon;
-       BC_Pixmap *clip_icon;         VFrame *clip_vframe;
-       BC_Pixmap *atransition_icon;  VFrame *atransition_vframe;
-       BC_Pixmap *vtransition_icon;  VFrame *vtransition_vframe;
-       BC_Pixmap *aeffect_icon;      VFrame *aeffect_vframe;
-       BC_Pixmap *ladspa_icon;       VFrame *ladspa_vframe;
-       BC_Pixmap *ff_aud_icon;       VFrame *ff_aud_vframe;
-       BC_Pixmap *ff_vid_icon;       VFrame *ff_vid_vframe;
-       BC_Pixmap *veffect_icon;      VFrame *veffect_vframe;
+       BC_Pixmap *folder_icon;       VFrame *folder_res,  *folder_vframe;
+       BC_Pixmap *file_icon;         VFrame *file_res,    *file_vframe;
+       BC_Pixmap *audio_icon;        VFrame *audio_res,   *audio_vframe;
+       BC_Pixmap *video_icon;        VFrame *video_res,   *video_vframe;
+       BC_Pixmap *label_icon;        VFrame *label_res,   *label_vframe;
+       BC_Pixmap *clip_icon;         VFrame *clip_res,    *clip_vframe;
+       BC_Pixmap *atransition_icon;  VFrame *atrans_res,  *atransition_vframe;
+       BC_Pixmap *vtransition_icon;  VFrame *vtrans_res,  *vtransition_vframe;
+       BC_Pixmap *aeffect_icon;      VFrame *aeffect_res, *aeffect_vframe;
+       BC_Pixmap *veffect_icon;      VFrame *veffect_res, *veffect_vframe;
+       BC_Pixmap *ladspa_icon;       VFrame *ladspa_res,  *ladspa_vframe;
+       BC_Pixmap *ff_aud_icon;       VFrame *ff_aud_res,  *ff_aud_vframe;
+       BC_Pixmap *ff_vid_icon;       VFrame *ff_vid_res,  *ff_vid_vframe;
        NewFolderThread *newfolder_thread;
 
 // Popup menus
index c4771fc2aabc6aa56fe4f9b933980536ff2bb0cf..2b8250135c42c3c0947c15055e1e2699ce76e821 100644 (file)
@@ -202,7 +202,7 @@ void InterfacePrefs::create_objects()
        y1 = y + 5;
        y += 35;
        add_subwindow(title = new BC_Title(x, y, _("Keyframe reticle:")));
-       x1 = x + 100;
+       x1 = x + 140;
        keyframe_reticle = new KeyframeReticle(x1, y, &pwindow->thread->preferences->keyframe_reticle);
        add_subwindow(keyframe_reticle);
        keyframe_reticle->create_objects();
@@ -244,6 +244,7 @@ void InterfacePrefs::create_objects()
        y += 25;
        add_subwindow(new BC_Title(x, y, _("Button 1:")));
 
+       x1 = x + 100;
        ViewBehaviourText *text;
        add_subwindow(text = new ViewBehaviourText(x1, y - 5,
                behavior_to_text(pwindow->thread->edl->session->edit_handle_mode[0]),
@@ -284,16 +285,14 @@ void InterfacePrefs::create_objects()
        y += 30;
        ViewTheme *theme;
        add_subwindow(new BC_Title(x, y, _("Theme:")));
-       x += 100;
-       add_subwindow(theme = new ViewTheme(x, y, pwindow));
+       add_subwindow(theme = new ViewTheme(x1, y, pwindow));
        theme->create_objects();
 
        x = x0;
        y += theme->get_h() + 5;
        ViewPluginIcons *plugin_icons;
        add_subwindow(new BC_Title(x, y, _("Plugin Icons:")));
-       x += 100;
-       add_subwindow(plugin_icons = new ViewPluginIcons(x, y, pwindow));
+       add_subwindow(plugin_icons = new ViewPluginIcons(x1, y, pwindow));
        plugin_icons->create_objects();
 }
 
index 107ef1669a8036f0e7b8fedd57d90ceecc0f58b4..ce48f12407e82e03ab1b1fb29f6d3c8f4ad03e9a 100644 (file)
@@ -1529,6 +1529,7 @@ SET_TRACE
                        case FILE_NOT_FOUND:
                                sprintf(string, _("Failed to open %s"), new_asset->path);
                                gui->show_message(string, theme->message_error);
+                               gui->update_default_message();
                                break;
 
 // Unknown format
index 41882647b751236b77e618d89e21328544cb0d78..7587d46dee0fbbfa8e296eecd22c21335875d4de 100644 (file)
@@ -916,16 +916,19 @@ int MWindowGUI::visible(int64_t x1, int64_t x2, int64_t view_x1, int64_t view_x2
 
 void MWindowGUI::show_message(const char *message, int color)
 {
-       statusbar->set_message(message, color);
+       statusbar->show_message(message, color);
 }
-void MWindowGUI::set_default_message(const char *message)
+
+void MWindowGUI::update_default_message()
 {
-       statusbar->set_default_message(message);
+       statusbar->update_default_message();
 }
+
 void MWindowGUI::reset_default_message()
 {
        statusbar->reset_default_message();
 }
+
 void MWindowGUI::default_message()
 {
        statusbar->default_message();
index de21ee819e1d7668c2a616216112044ed22ea39a..2d5fd10cbe97d419e89532b59668b7943e79338a 100644 (file)
@@ -142,11 +142,10 @@ public:
        int menu_w();
        int menu_h();
 // Draw on the status bar only.
-       void show_message(const char *message, int color = -1);
-       void set_default_message(const char *message);
+       void show_message(const char *message, int color=-1);
+       void update_default_message();
        void reset_default_message();
        void default_message();
-// Pop up a box if the statusbar is taken and show an error.
        void show_error(char *message, int color = BLACK);
        int repeat_event(int64_t duration);
 // Entry point for drag events in all windows
index be49dabba38df98be90afc8ebcf2519405c97e29..34b5c7dc51eaf42ca45fab9051ad8d219345f68f 100644 (file)
@@ -495,7 +495,8 @@ void Render::stop_progress()
 
                sprintf(string2, _("Rendering took %s"), string);
                mwindow->gui->lock_window("");
-               mwindow->gui->set_default_message(string2);
+               mwindow->gui->show_message(string2);
+               mwindow->gui->update_default_message();
                mwindow->gui->stop_hourglass();
                mwindow->gui->unlock_window();
        }
index 02b92d058c0b9d889e9a2fe4943d960de39e5930..b7e97138106e03aa235a81ac0f0a6e633ed9f256 100644 (file)
@@ -103,24 +103,25 @@ void StatusBar::resize_event()
        flash(0);
 }
 
-void StatusBar::set_message(const char *text, int color)
+void StatusBar::show_message(const char *text, int color)
 {
        if( color < 0 ) color = mwindow->theme->message_normal;
        status_text->set_color(color);
        status_text->update(text);
 }
-void StatusBar::set_default_message(const char *text)
+void StatusBar::reset_default_message()
 {
-       strcpy(default_msg, text);
-       default_message();
+       status_color = -1;
+       strcpy(default_msg, _("Welcome to cinelerra"));
 }
-void StatusBar::reset_default_message()
+void StatusBar::update_default_message()
 {
-       set_default_message(_("Welcome to cinelerra"));
+       status_color = status_text->get_color();
+       strcpy(default_msg, status_text->get_text());
 }
 void StatusBar::default_message()
 {
-       set_message(default_msg, mwindow->theme->message_normal);
+       show_message(default_msg, status_color);
 }
 
 StatusBarCancel::StatusBarCancel(MWindow *mwindow, int x, int y)
index 726a08c24a6ba1e5e693257a8c4392ce3415dd1c..eac565949f8f38b61b06e8a36503f8e43bb0f068 100644 (file)
@@ -34,8 +34,8 @@ public:
        StatusBar(MWindow *mwindow, MWindowGUI *gui);
        ~StatusBar();
 
-       void set_message(const char *text, int color=-1);
-       void set_default_message(const char *text);
+       void show_message(const char *text, int color=-1);
+       void update_default_message();
        void reset_default_message();
        void default_message();
 
@@ -47,6 +47,7 @@ public:
        BC_ProgressBar *main_progress;
        StatusBarCancel *main_progress_cancel;
        BC_Title *status_text;
+       int status_color;
        char default_msg[BCTEXTLEN];
 };
 
index 9d8e2c223132310ebc93c8a306a0a3eff8296952..8421a6bf46ef675f8a8ae11cbd173b1f976a022c 100644 (file)
@@ -291,6 +291,7 @@ int BC_PopupMenu::activate_menu()
 {
        if( !get_button_down() || !BC_WindowBase::get_resources()->popupmenu_btnup )
                return menu_activate();
+       top_level->active_popup_menu = this;
        pending = 1;
        return 0;
 }
@@ -328,7 +329,7 @@ int BC_PopupMenu::menu_activate()
                popup_down = 1;
                if(use_title) draw_title(1);
        }
-       return 0;
+       return 1;
 }
 
 int BC_PopupMenu::deactivate_menu()
index 2536cf7a278b3193f382b7a6adf42031e484aa09..d377a448a0039398ee493a8ce2ced415b8bf05b3 100644 (file)
@@ -697,7 +697,7 @@ void BC_TextBox::draw(int flush)
                        int len = row_end - row_begin;
                        if( len > 0 ) {
                                set_color(enabled ? resources->text_default : DMGREY);
-                               draw_wtext(text_x, k + text_ascent, wtext_row, len, 0);
+                               draw_single_text(1, font, text_x, k + text_ascent, wtext_row, len);
                        }
 
 // Get ibeam location
index 0bcad162d02db799222cd452ae65f002ed3ad81a..5532ae49a5454803f0061c5527232e76a9460ab8 100644 (file)
@@ -397,7 +397,8 @@ public:
                BC_Pixmap *pixmap = 0, int is_utf8 = 0);
        void draw_xft_text(int x, int y, const wchar_t *text,
                int length, BC_Pixmap *pixmap);
-       void draw_wtext(int x, int y, const wchar_t *text, int length = -1, BC_Pixmap *pixmap = 0);
+       int draw_single_text(int draw, int font,
+               int x, int y, const wchar_t *text, int length = -1, BC_Pixmap *pixmap = 0);
 // truncate the text to a ... version that fits in the width, using the current_font
        void truncate_text(char *result, const char *text, int w);
        void draw_center_text(int x, int y, const char *text, int length = -1);
index c5d904ea2b1b58f6c2afadcf7498d09bc9c10d4e..cd28636f19c15e307c05627657cd01062e156341 100644 (file)
@@ -232,15 +232,16 @@ void BC_WindowBase::draw_xft_text(int x, int y,
 {
        int dy = -1;
        const wchar_t *wsp = text, *wep = wsp + length;
+       int font = top_level->current_font;
        while( wsp < wep ) {
                const wchar_t *wcp = wsp;
                while( wcp < wep && *wcp != '\n' ) ++wcp;
                int len = wcp - wsp;
                if( len > 0 )
-                       draw_wtext(x, y, wsp, len, pixmap);
+                       draw_single_text(1, font, x, y, wsp, len, pixmap);
                if( wcp >= wep ) break;
                if( dy < 0 )
-                       dy = get_text_height(top_level->current_font);
+                       dy = get_text_height(font);
                y += dy;
                wsp = wcp + 1;
        }
@@ -281,6 +282,12 @@ void BC_WindowBase::xft_draw_string(XftColor *xft_color, XftFont *xft_font,
 }
 
 int BC_WindowBase::get_single_text_width(int font, const wchar_t *text, int length)
+{
+       return draw_single_text(0, font, 0,0, text, length);
+}
+
+int BC_WindowBase::draw_single_text(int draw, int font,
+       int x, int y, const wchar_t *text, int length, BC_Pixmap *pixmap)
 {
        if( length < 0 )
                length = wcslen(text);
@@ -293,10 +300,31 @@ int BC_WindowBase::get_single_text_width(int font, const wchar_t *text, int leng
                        xp->byte1 = (unsigned char) (text[i] >> 8);
                        xp->byte2 = (unsigned char) (text[i] & 0xff);
                }
+               if( draw ) {
+                       XDrawString16(top_level->display,
+                               pixmap ? pixmap->opaque_pixmap : this->pixmap->opaque_pixmap,
+                               top_level->gc, x, y, xtext, length);
+               }
                return XTextWidth16(get_font_struct(font), xtext, length);
        }
-       int x = 0;
+
 #ifdef HAVE_XFT
+       XftColor xft_color;
+       if( draw ) {
+               XRenderColor color;
+               color.red = (top_level->current_color & 0xff0000) >> 16;
+               color.red |= color.red << 8;
+               color.green = (top_level->current_color & 0xff00) >> 8;
+               color.green |= color.green << 8;
+               color.blue = (top_level->current_color & 0xff);
+               color.blue |= color.blue << 8;
+               color.alpha = 0xffff;
+
+               XftColorAllocValue(top_level->display, top_level->vis, top_level->cmap,
+                       &color, &xft_color);
+       }
+
+       int x0 = x;
        XftFont *basefont = top_level->get_xft_struct(font);
        XftFont *curfont = 0, *altfont = 0;
        const wchar_t *up = text, *ubp = up, *uep = ubp + length;
@@ -327,6 +355,10 @@ int BC_WindowBase::get_single_text_width(int font, const wchar_t *text, int leng
                        xft_font = basefont;
                if( xft_font != curfont ) {
                        if( curfont && up > ubp ) {
+                               if( draw ) {
+                                       xft_draw_string(&xft_color, curfont, x, y,
+                                               (const FcChar32*)ubp, up-ubp, pixmap);
+                               }
                                XGlyphInfo extents;
                                XftTextExtents32(top_level->display, curfont,
                                        (const FcChar32*)ubp, up-ubp, &extents);
@@ -338,105 +370,22 @@ int BC_WindowBase::get_single_text_width(int font, const wchar_t *text, int leng
        }
 
        if( curfont && up > ubp ) {
+               if( draw ) {
+                       xft_draw_string(&xft_color, curfont, x, y,
+                               (const FcChar32*)ubp, up-ubp, pixmap);
+               }
                XGlyphInfo extents;
                XftTextExtents32(top_level->display, curfont,
                        (const FcChar32*)ubp, up-ubp, &extents);
                x += extents.xOff;
        }
 
-       if( altfont )
-               XftFontClose(top_level->display, altfont);
-#endif
-       return x;
-}
-
-void BC_WindowBase::draw_wtext(int x, int y,
-       const wchar_t *text, int length, BC_Pixmap *pixmap)
-{
-       if( length < 0 )
-               length = wcslen(text);
-       if( !length ) return;
-
-       int font = top_level->current_font;
-       if( !get_resources()->use_xft ) {
-               if( !get_font_struct(font) ) return;
-               XChar2b xtext[length], *xp = xtext;
-               for( int i=0; i<length; ++i,++xp ) {
-                       xp->byte1 = (unsigned char) (text[i] >> 8);
-                       xp->byte2 = (unsigned char) (text[i] & 0xff);
-               }
-               XDrawString16(top_level->display,
-                       pixmap ? pixmap->opaque_pixmap : this->pixmap->opaque_pixmap,
-                       top_level->gc, x, y, xtext, length);
-               return;
-       }
-
-#ifdef HAVE_XFT
-       XRenderColor color;
-       color.red = (top_level->current_color & 0xff0000) >> 16;
-       color.red |= color.red << 8;
-       color.green = (top_level->current_color & 0xff00) >> 8;
-       color.green |= color.green << 8;
-       color.blue = (top_level->current_color & 0xff);
-       color.blue |= color.blue << 8;
-       color.alpha = 0xffff;
-
-       XftColor xft_color;
-       XftColorAllocValue(top_level->display, top_level->vis, top_level->cmap,
-               &color, &xft_color);
-
-       XftFont *basefont = top_level->get_xft_struct(font);
-       XftFont *curfont = 0, *altfont = 0;
-       const wchar_t *up = text, *ubp = up, *uep = ubp + length;
-
-       while( up < uep ) {
-               XftFont *xft_font = 0;
-               if( XftCharExists(top_level->display, basefont, *up) )
-                       xft_font = basefont;
-               else if( altfont ) {
-                       if( XftCharExists(top_level->display, altfont, *up))
-                               xft_font = altfont;
-                       else {
-                               XftFontClose(top_level->display, altfont);
-                               altfont = 0;
-                       }
-               }
-               if( !xft_font ) {
-                       FcPattern *pattern = BC_Resources::find_similar_font(*up, basefont->pattern);
-                       if( pattern != 0 ) {
-                               double psize = 0;
-                               FcPatternGetDouble(basefont->pattern, FC_PIXEL_SIZE, 0, &psize);
-                               FcPatternAddDouble(pattern, FC_PIXEL_SIZE, psize);
-                               FcPatternDel(pattern, FC_SCALABLE);
-                               xft_font = altfont = XftFontOpenPattern(top_level->display, pattern);
-                       }
-               }
-               if( !xft_font )
-                       xft_font = basefont;
-               if( xft_font != curfont ) {
-                       if( curfont && up > ubp ) {
-                               xft_draw_string(&xft_color, curfont, x, y,
-                                       (const FcChar32*)ubp, up-ubp, pixmap);
-                               XGlyphInfo extents;
-                               XftTextExtents32(top_level->display, curfont,
-                                       (const FcChar32*)ubp, up-ubp, &extents);
-                               x += extents.xOff;
-                       }
-                       ubp = up;  curfont = xft_font;
-               }
-               ++up;
-       }
-
-       if( curfont && up > ubp ) {
-               xft_draw_string(&xft_color, curfont, x, y,
-                       (const FcChar32*)ubp, up-ubp, pixmap);
-       }
-
        if( altfont )
                XftFontClose(top_level->display, altfont);
 
        XftColorFree(top_level->display, top_level->vis, top_level->cmap, &xft_color);
 #endif
+       return x - x0;
 }
 
 void BC_WindowBase::truncate_text(char *result, const char *text, int w)
index edc32cecdcb2bb5dc5da4dafa54ce39eaa64edfc..94c0e6890f636691480fee949d99ae5f1a564744 100644 (file)
@@ -419,7 +419,8 @@ F_volume:   Change input volume.
 #4 x 4 pole allpass:
 #Artificial latency:
 #Audio Divider (Suboctave Generator):
-#AudioScope:
+AudioScope:    Convert input audio to video output representing the
+               audio power spectrum. Shows you the sound wave.
 #Auto phaser:
 #Barry's Satan Maximiser:
 #Bode frequency shifter:
@@ -430,7 +431,9 @@ F_volume:   Change input volume.
 #Comb delay line, cubic spline interpolation:
 #Comb delay line, linear interpolation:
 #Comb delay line, noninterpolating:
-#Compressor:
+Compressor:    Lessen the dynamic range between the loudest and quietest
+               parts of an audio signal by boosting the quieter signals
+               and attenuating the louder signals.
 #Constant Signal Generator:
 #Crossfade:
 #Crossfade (4 outs):
@@ -442,10 +445,10 @@ F_volume: Change input volume.
 #DJ flanger:
 #Decimator:
 #Declipper:
-#Delay audio:
+Delay audio:    Delay the audio by some number of seconds.
 #Delayorama:
-#Denoise:
-#DenoiseFFT:
+Denoise:       Reduce audio background noise.
+DenoiseFFT:    Noise removal from audio using FFT editing.
 #Despike:
 #Diode Processor:
 #Dyson compressor:
@@ -453,7 +456,7 @@ F_volume:   Change input volume.
 #EQ Parametric:
 Echo:          Add echo - reflection of sound - for effect.
                . Level represents the volume adjustment
-               . Atten is attenuation meaning reduction in reflection
+               . Atten is attenuation meaning reduction in reflection
                . Offset is the lag in the attenuated echo signal
 EchoCancel:    Removes echoes from audio to improve the quality.
                Recommended to just set the Mode to On for simplicity.
@@ -515,7 +518,9 @@ Pitch shift:        Uses FFT to try to change the pitch without
 #Remove Gaps:
 #ResampleRT:
 #Retro Flanger:
-#Reverb:
+Reverb:                Reflections of sound to add depth and fullness.
+               Simulates creation of a large number of reflections
+               which build up and then decay.
 #Reverse Delay (5s max):
 Reverse audio:         Play the audio backwards.
 #Ringmod with LFO:
@@ -552,3 +557,22 @@ Reverse audio:             Play the audio backwards.
 #VyNil (Vinyl Effect):
 #Wave Terrain Oscillator:
 #z-1:
+#
+# Transitions - Audio and Video
+#
+Crossfade:     Creates a smooth transition from one audio source
+               edit to another. The crossfade has the first
+               source fade out while the second fades in.
+BandSlide:     Bands slide across video and you see the image slide.
+BandWipe:      Bands wipe across the video and you see the mask slides.
+Dissolve:      A soft dissolve transition between two video segments,
+               The left segment turns more transparent while at the
+               same time the right segment materializes into place.
+Flash:         The video flashes when transitioning between segments.
+IrisSquare:    Video switches segments via a small rectangular view
+               that gradually grows to full size.
+Shape Wipe:    Wipe a specific shape across the video.  Available
+               shapes are: circle, clock, heart, tile2x2h, tile2x2v.
+Slide:         Image slides into view - can set: Left/Right/In/Out.
+Wipe:          Wipe the image across screen starting left or right.
+Zoom:          Zoom out video at X/Y magnification for some seconds.
diff --git a/cinelerra-5.1/picon_cinfinity/ff_audio.png b/cinelerra-5.1/picon_cinfinity/ff_audio.png
new file mode 100644 (file)
index 0000000..60dde31
Binary files /dev/null and b/cinelerra-5.1/picon_cinfinity/ff_audio.png differ
diff --git a/cinelerra-5.1/picon_cinfinity/ff_video.png b/cinelerra-5.1/picon_cinfinity/ff_video.png
new file mode 100644 (file)
index 0000000..a26b8e9
Binary files /dev/null and b/cinelerra-5.1/picon_cinfinity/ff_video.png differ
diff --git a/cinelerra-5.1/picon_cinfinity/lad_picon.png b/cinelerra-5.1/picon_cinfinity/lad_picon.png
new file mode 100644 (file)
index 0000000..2efaeb5
Binary files /dev/null and b/cinelerra-5.1/picon_cinfinity/lad_picon.png differ
index 9797bc3d690e0a79483998cc56ee8edbc81f273a..54405a4c819ea70c468c04e95f6001b99561a025 100644 (file)
@@ -1071,6 +1071,7 @@ CompressorCanvas::CompressorCanvas(CompressorEffect *plugin, int x, int y, int w
 {
        this->plugin = plugin;
        current_operation = NONE;
+       current_point = 0;
 }
 
 int CompressorCanvas::button_press_event()