Credit Andrew - fix vorbis audio which was scratchy and ensure aging plugin does...
[goodguy/cinelerra.git] / cinelerra-5.1 / guicast / bcresources.C
index 16f53f97b0fad8476f6d04dd8d4861fea7cf54cb..3fa8bed1f53ba30d891a90a65d13ded8a7107dac 100644 (file)
@@ -39,6 +39,9 @@
 #include <iconv.h>
 #include <sys/ipc.h>
 #include <sys/shm.h>
+#if defined(__FreeBSD__)
+#include <sys/sysctl.h>
+#endif
 #include <X11/extensions/XShm.h>
 #include <fontconfig/fontconfig.h>
 #include <fontconfig/fcfreetype.h>
@@ -298,6 +301,7 @@ int BC_Resources::machine_cpus = 1;
 
 int BC_Resources::get_machine_cpus()
 {
+#if !defined(__FreeBSD__)
        int cpus = 1;
        FILE *proc = fopen("/proc/cpuinfo", "r");
        if( proc ) {
@@ -315,6 +319,14 @@ int BC_Resources::get_machine_cpus()
                fclose(proc);
        }
        return cpus;
+#else
+       int mib[2], ncpu;
+       size_t len = sizeof(ncpu);
+       mib[0] = CTL_HW;
+       mib[1] = HW_NCPU;
+       if( sysctl(mib, 2, &ncpu, &len, 0, 0) ) ncpu = 1;
+       return ncpu;
+#endif
 }
 
 void BC_Resources::new_vframes(int n, VFrame *vframes[], ...)
@@ -362,12 +374,24 @@ VFrame *BC_Resources::default_vscroll_data[10] = { 0, };
 VFrame *BC_Resources::default_hscroll_data[10] = { 0, };
 VFrame *BC_Resources::default_icon_img = 0;
 
-BC_Resources::BC_Resources()
+BC_Resources::BC_Resources(float x_scale, float y_scale)
 {
+       BC_WindowBase::resources = this;
        synchronous = 0;
        vframe_shm = 0;
-       double default_scale = 1.0; // display_size/1000.;
-       char *env = getenv("BC_FONT_DEBUG");
+#if !defined(__FreeBSD__)
+       use_shm = -1;
+       shm_reply = 1;
+#else
+       use_shm = 0;
+       shm_reply = 0;
+#endif
+       if( x_scale <= 0 ) x_scale = 1;
+       if( y_scale <= 0 ) y_scale = x_scale;
+       this->x_scale = x_scale;
+       this->y_scale = y_scale;
+       float default_scale = bmin(x_scale, y_scale);
+       const char *env = getenv("BC_FONT_DEBUG");
        font_debug = env ? atoi(env) : 0;
        env = getenv("BC_FONT_SCALE");
        font_scale = env ? atof(env) : default_scale;
@@ -732,7 +756,7 @@ new_vframes(10,default_vscroll_data,
        listbox_title_overlap = 0;
        listbox_title_margin = 0;
        listbox_title_color = BLACK;
-       listbox_title_hotspot = 5;
+       listbox_title_hotspot = xS(5);
 
        listbox_border1 = DKGREY;
        listbox_border2_hi = RED;
@@ -748,12 +772,9 @@ new_vframes(10,default_vscroll_data,
        pan_data = 0;
        pan_text_color = YELLOW;
 
-       generic_button_margin = 15;
+       generic_button_margin = xS(15);
        draw_clock_background=1;
 
-       use_shm = -1;
-       shm_reply = 1;
-
 // Initialize
        bg_color = ORANGE;
        bg_shadow1 = DKGREY;
@@ -780,6 +801,7 @@ new_vframes(10,default_vscroll_data,
        button_uphighlighted = RED;   // upper side when highlighted
 
        tumble_data = 0;
+       tumblepatch_data = 0;
        tumble_duration = 150;
 
        ok_images = default_ok_images;
@@ -800,9 +822,9 @@ new_vframes(10,default_vscroll_data,
        popupmenu_images = 0;
 
 
-       popupmenu_margin = 10;
+       popupmenu_margin = xS(10);
        popupmenu_btnup = 1;
-       popupmenu_triangle_margin = 10;
+       popupmenu_triangle_margin = xS(10);
 
        min_menu_w = 0;
        menu_title_text = BLACK;
@@ -841,24 +863,24 @@ new_vframes(10,default_vscroll_data,
        tooltips_enabled = 1;
        textbox_focus_policy = 0;
 
-       filebox_margin = 110;
-       dirbox_margin = 90;
+       filebox_margin = yS(110);
+       dirbox_margin = yS(90);
        filebox_mode = LISTBOX_TEXT;
        sprintf(filebox_filter, "*");
-       filebox_w = 640;
-       filebox_h = 480;
+       filebox_w = xS(640);
+       filebox_h = yS(480);
        filebox_columntype[0] = FILEBOX_NAME;
        filebox_columntype[1] = FILEBOX_SIZE;
        filebox_columntype[2] = FILEBOX_DATE;
        filebox_columntype[3] = FILEBOX_EXTENSION;
-       filebox_columnwidth[0] = 200;
-       filebox_columnwidth[1] = 100;
-       filebox_columnwidth[2] = 100;
-       filebox_columnwidth[3] = 100;
+       filebox_columnwidth[0] = xS(300);
+       filebox_columnwidth[1] = xS(100);
+       filebox_columnwidth[2] = xS(150);
+       filebox_columnwidth[3] = xS(49);
        dirbox_columntype[0] = FILEBOX_NAME;
        dirbox_columntype[1] = FILEBOX_DATE;
-       dirbox_columnwidth[0] = 200;
-       dirbox_columnwidth[1] = 100;
+       dirbox_columnwidth[0] = xS(400);
+       dirbox_columnwidth[1] = xS(199);
 
        filebox_text_images = default_filebox_text_images;
        filebox_icons_images = default_filebox_icons_images;
@@ -880,8 +902,8 @@ new_vframes(10,default_vscroll_data,
 
        pot_images = default_pot_images;
        pot_offset = 2;
-       pot_x1 = pot_images[0]->get_w() / 2 - pot_offset;
-       pot_y1 = pot_images[0]->get_h() / 2 - pot_offset;
+       pot_x1 = pot_images[0]->get_w() / 2 - xS(pot_offset);
+       pot_y1 = pot_images[0]->get_h() / 2 - yS(pot_offset);
        pot_r = pot_x1;
        pot_needle_color = BLACK;
 
@@ -891,7 +913,7 @@ new_vframes(10,default_vscroll_data,
        ymeter_images = 0;
        meter_font = SMALLFONT_3D;
        meter_font_color = RED;
-       meter_title_w = 20;
+       meter_title_w = xS(20);
        meter_3d = 1;
        medium_7segment = default_medium_7segment;
 
@@ -907,11 +929,8 @@ new_vframes(10,default_vscroll_data,
        use_xft = 0;
 #endif
 
-
-       drag_radius = 10;
+       drag_radius = xS(10);
        recursive_resizing = 1;
-
-
 }
 
 void BC_Resources::del_vframes(VFrame *vframes[], int n)
@@ -1854,7 +1873,7 @@ void BC_Resources::encode_to_utf8(char *buffer, int buflen)
 {
         if(BC_Resources::locale_utf8) return;
        char lbuf[buflen];
-       encode(encoding, 0, buffer, buflen, lbuf, buflen);
+       encode(encoding, 0, buffer, -1, lbuf, buflen);
        strcpy(buffer, lbuf);
 }