- Glib::RefPtr<Gdk::Window> win (w.get_window());
-
- gint width, height;
- win->get_size (width, height);
-
- cairo_surface_t* surface = cairo_image_surface_create (CAIRO_FORMAT_RGB24, width, height);
- cairo_t* cr = cairo_create (surface);
-
- cairo_move_to (cr, 0, 0);
- cairo_rectangle (cr, 0, 0, width, height);
- {
- Gdk::Color c = w.get_style()->get_bg (Gtk::STATE_NORMAL);
- cairo_set_source_rgb (cr, c.get_red_p(), c.get_green_p(), c.get_blue_p());
- }
- cairo_fill (cr);
-
- height = min(1024, height); // XXX see FastMeter::max_pattern_metric_size
-
- for (vector<DataType>::const_iterator i = types.begin(); i != types.end(); ++i) {
-
- Gdk::Color c;
-
- if (types.size() > 1) {
- /* we're overlaying more than 1 set of marks, so use different colours */
- Gdk::Color c;
- switch (*i) {
- case DataType::AUDIO:
- c = w.get_style()->get_fg (Gtk::STATE_NORMAL);
- cairo_set_source_rgb (cr, c.get_red_p(), c.get_green_p(), c.get_blue_p());
- break;
- case DataType::MIDI:
- c = w.get_style()->get_fg (Gtk::STATE_ACTIVE);
- cairo_set_source_rgb (cr, c.get_red_p(), c.get_green_p(), c.get_blue_p());
- break;
- }
- } else {
- c = w.get_style()->get_fg (Gtk::STATE_NORMAL);
- cairo_set_source_rgb (cr, c.get_red_p(), c.get_green_p(), c.get_blue_p());
- }
-
- std::map<int,float> points;
-
- switch (*i) {
- case DataType::AUDIO:
- points.insert (std::pair<int,float>(-60, 0.5));
- points.insert (std::pair<int,float>(-50, 0.5));
- points.insert (std::pair<int,float>(-40, 0.5));
- points.insert (std::pair<int,float>(-30, 0.5));
- points.insert (std::pair<int,float>(-25, 0.5));
- points.insert (std::pair<int,float>(-20, 1.0));
-
- points.insert (std::pair<int,float>(-19, 0.5));
- points.insert (std::pair<int,float>(-18, 1.0));
- points.insert (std::pair<int,float>(-17, 0.5));
- points.insert (std::pair<int,float>(-16, 0.5));
- points.insert (std::pair<int,float>(-15, 1.0));
-
- points.insert (std::pair<int,float>(-14, 0.5));
- points.insert (std::pair<int,float>(-13, 0.5));
- points.insert (std::pair<int,float>(-12, 0.5));
- points.insert (std::pair<int,float>(-11, 0.5));
- points.insert (std::pair<int,float>(-10, 1.0));
-
- points.insert (std::pair<int,float>( -9, 0.5));
- points.insert (std::pair<int,float>( -8, 0.5));
- points.insert (std::pair<int,float>( -7, 0.5));
- points.insert (std::pair<int,float>( -6, 0.5));
- points.insert (std::pair<int,float>( -5, 1.0));
- points.insert (std::pair<int,float>( -4, 0.5));
- points.insert (std::pair<int,float>( -3, 0.5));
- points.insert (std::pair<int,float>( -2, 0.5));
- points.insert (std::pair<int,float>( -1, 0.5));
-
- points.insert (std::pair<int,float>( 0, 1.0));
- points.insert (std::pair<int,float>( 1, 0.5));
- points.insert (std::pair<int,float>( 2, 0.5));
- points.insert (std::pair<int,float>( 3, 0.5));
- points.insert (std::pair<int,float>( 4, 0.5));
- points.insert (std::pair<int,float>( 5, 0.5));
- points.insert (std::pair<int,float>( 6, 0.5));