push2: scale selection and display on video display now working
[ardour.git] / libs / surfaces / push2 / scale.h
index a859756d2fbc2f0ad9fe2b67271a75b49ae9d5ce..ffa95fe241cc854c5a10610aad5e086577dfbccb 100644 (file)
 #ifndef __ardour_push2_scale_layout_h__
 #define __ardour_push2_scale_layout_h__
 
+#include <vector>
+
 #include "layout.h"
 
 namespace ARDOUR {
        class Stripable;
 }
 
+namespace ArdourCanvas {
+       class Rectangle;
+}
+
 namespace ArdourSurface {
 
 class ScaleLayout : public Push2Layout
 {
    public:
-       ScaleLayout (Push2& p, ARDOUR::Session&, Cairo::RefPtr<Cairo::Context>);
+       ScaleLayout (Push2& p, ARDOUR::Session&);
        ~ScaleLayout ();
 
-       bool redraw (Cairo::RefPtr<Cairo::Context>) const;
+       void render (ArdourCanvas::Rect const &, Cairo::RefPtr<Cairo::Context>) const;
+
+       void show ();
 
        void button_upper (uint32_t n);
        void button_lower (uint32_t n);
-
+       void button_up ();
+       void button_down ();
+       void button_left ();
+       void button_right ();
        void strip_vpot (int, int);
-       void strip_vpot_touch (int, bool);
+
+       void strip_vpot_touch (int, bool) {}
 
    private:
+       ArdourCanvas::Rectangle* bg;
+       std::vector<ArdourCanvas::Text*> upper_text;
+       std::vector<ArdourCanvas::Text*> lower_text;
+       ArdourCanvas::Text* left_scroll_text;
+       ArdourCanvas::Text* right_scroll_text;
+       ArdourCanvas::Text* inkey_text;
+       ArdourCanvas::Text* chromatic_text;
+       ArdourCanvas::Text* close_text;
+       ArdourCanvas::Text* fixed_text;
+       ArdourCanvas::Rectangle* root_bg;
        Push2Menu* scale_menu;
-       void build_scale_menu (Cairo::RefPtr<Cairo::Context>);
+       int last_vpot;
+       int vpot_delta_cnt;
+       Push2::Button* root_button;
+
+       void build_scale_menu ();
+       PBD::ScopedConnectionList menu_connections;
+       PBD::ScopedConnectionList p2_connections;
+       void mode_changed ();
+       void menu_rearranged ();
+       void show_root_state ();
+       void update_cursor_buttons ();
 };
 
 } /* namespace */