bld tweaks for xplatform builds, fix bad clamps, andrews lv2/opencv tweaks, trim...
[goodguy/cinelerra.git] / cinelerra-5.1 / cinelerra / cwindowgui.C
index 970cadf9d9574ba66e9f861e05c3fed5fae61844..c0d64487f0b087dd67b5a5183d6677039f7dd30c 100644 (file)
@@ -21,6 +21,7 @@
 
 #include "automation.h"
 #include "autos.h"
+#include "bccolors.h"
 #include "bcsignals.h"
 #include "canvas.h"
 #include "clip.h"
@@ -162,8 +163,6 @@ void CWindowGUI::create_objects()
        canvas = new CWindowCanvas(mwindow, this);
 
        canvas->create_objects(mwindow->edl);
-       canvas->use_cwindow();
-
 
        add_subwindow(timebar = new CTimeBar(mwindow,
                this,
@@ -971,6 +970,22 @@ void CWindowTransport::goto_end()
        gui->lock_window("CWindowTransport::goto_end 2");
 }
 
+CWindowCanvasToggleControls::CWindowCanvasToggleControls(CWindowCanvas *canvas)
+ : BC_MenuItem(calculate_text(canvas->get_controls()))
+{
+       this->canvas = canvas;
+}
+int CWindowCanvasToggleControls::handle_event()
+{
+       canvas->toggle_controls();
+       set_text(calculate_text(canvas->get_controls()));
+       return 1;
+}
+
+const char *CWindowCanvasToggleControls::calculate_text(int controls)
+{
+       return !controls ? _("Show controls") : _("Hide controls");
+}
 
 
 CWindowCanvas::CWindowCanvas(MWindow *mwindow, CWindowGUI *gui)
@@ -984,6 +999,19 @@ CWindowCanvas::CWindowCanvas(MWindow *mwindow, CWindowGUI *gui)
        last_xscroll = 0;
        last_yscroll = 0;
        last_zoom = 0;
+       controls = 0;
+}
+
+void CWindowCanvas::create_objects(EDL *edl)
+{
+       Canvas::create_objects(edl);
+       canvas_menu->add_item(new CanvasPopupAuto(this));
+       canvas_menu->add_item(new CanvasPopupResetCamera(this));
+       canvas_menu->add_item(new CanvasPopupResetProjector(this));
+       canvas_menu->add_item(new CanvasPopupCameraKeyframe(this));
+       canvas_menu->add_item(new CanvasPopupProjectorKeyframe(this));
+       canvas_menu->add_item(controls = new CWindowCanvasToggleControls(this));
+       fullscreen_menu->add_item(new CanvasPopupAuto(this));
 }
 
 void CWindowCanvas::status_event()
@@ -2345,45 +2373,22 @@ int CWindowCanvas::do_eyedrop(int &rerender, int button_press, int draw)
                                gui->eyedrop_visible = 1;
                        }
 
-// Decompression coefficients straight out of jpeglib
-#define V_TO_R    1.40200
-#define V_TO_G    -0.71414
-
-#define U_TO_G    -0.34414
-#define U_TO_B    1.77200
-
-#define GET_COLOR(type, components, max, do_yuv) \
-{ \
+#define GET_COLOR(type, components, max, do_yuv) { \
        type *row = (type*)(refresh_frame->get_rows()[i]) + \
                j * components; \
        float red = (float)*row++ / max; \
        float green = (float)*row++ / max; \
        float blue = (float)*row++ / max; \
        if( do_yuv ) \
-       { \
-               float r = red + V_TO_R * (blue - 0.5); \
-               float g = red + U_TO_G * (green - 0.5) + V_TO_G * (blue - 0.5); \
-               float b = red + U_TO_B * (green - 0.5); \
-               mwindow->edl->local_session->red += r; \
-               mwindow->edl->local_session->green += g; \
-               mwindow->edl->local_session->blue += b; \
-               if( r > mwindow->edl->local_session->red_max ) mwindow->edl->local_session->red_max = r; \
-               if( g > mwindow->edl->local_session->green_max ) mwindow->edl->local_session->green_max = g; \
-               if( b > mwindow->edl->local_session->blue_max ) mwindow->edl->local_session->blue_max = b; \
-       } \
-       else \
-       { \
-               mwindow->edl->local_session->red += red; \
-               mwindow->edl->local_session->green += green; \
-               mwindow->edl->local_session->blue += blue; \
-               if( red > mwindow->edl->local_session->red_max ) mwindow->edl->local_session->red_max = red; \
-               if( green > mwindow->edl->local_session->green_max ) mwindow->edl->local_session->green_max = green; \
-               if( blue > mwindow->edl->local_session->blue_max ) mwindow->edl->local_session->blue_max = blue; \
-       } \
+               YUV::yuv.yuv_to_rgb_f(red, green, blue, red, green-0.5, blue-0.5); \
+       mwindow->edl->local_session->red += red; \
+       mwindow->edl->local_session->green += green; \
+       mwindow->edl->local_session->blue += blue; \
+       if( red > mwindow->edl->local_session->red_max ) mwindow->edl->local_session->red_max = red; \
+       if( green > mwindow->edl->local_session->green_max ) mwindow->edl->local_session->green_max = green; \
+       if( blue > mwindow->edl->local_session->blue_max ) mwindow->edl->local_session->blue_max = blue; \
 }
 
-
-
                        mwindow->edl->local_session->red = 0;
                        mwindow->edl->local_session->green = 0;
                        mwindow->edl->local_session->blue = 0;
@@ -3395,7 +3400,7 @@ void CWindowCanvas::toggle_controls()
        gui->resize_event(gui->get_w(), gui->get_h());
 }
 
-int CWindowCanvas::get_cwindow_controls()
+int CWindowCanvas::get_controls()
 {
        return mwindow->session->cwindow_controls;
 }