/[svn]/gigedit/trunk/src/gigedit/dimregionchooser.cpp
ViewVC logotype

Diff of /gigedit/trunk/src/gigedit/dimregionchooser.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1261 by persson, Thu Jul 5 17:12:20 2007 UTC revision 1656 by schoenebeck, Sat Feb 2 08:18:19 2008 UTC
# Line 1  Line 1 
1  /*  /*
2   * Copyright (C) 2006, 2007 Andreas Persson   * Copyright (C) 2006-2008 Andreas Persson
3   *   *
4   * This program is free software; you can redistribute it and/or   * This program is free software; you can redistribute it and/or
5   * modify it under the terms of the GNU General Public License as   * modify it under the terms of the GNU General Public License as
# Line 44  DimRegionChooser::DimRegionChooser() Line 44  DimRegionChooser::DimRegionChooser()
44      resize.active = false;      resize.active = false;
45      cursor_is_resize = false;      cursor_is_resize = false;
46      h = 20;      h = 20;
     w = 800;  
47      set_flags(Gtk::CAN_FOCUS);      set_flags(Gtk::CAN_FOCUS);
48      add_events(Gdk::BUTTON_PRESS_MASK | Gdk::POINTER_MOTION_MASK |      add_events(Gdk::BUTTON_PRESS_MASK | Gdk::POINTER_MOTION_MASK |
49                 Gdk::POINTER_MOTION_HINT_MASK);                 Gdk::POINTER_MOTION_HINT_MASK);
50    
51      for (int i = 0 ; i < 256 ; i++) {      for (int i = 0 ; i < 256 ; i++) dimvalue[i] = 0;
         dimvalue_from[i] = 0;  
         dimvalue_to[i] = 1;  
     }  
52  }  }
53    
54  DimRegionChooser::~DimRegionChooser()  DimRegionChooser::~DimRegionChooser()
# Line 74  bool DimRegionChooser::on_expose_event(G Line 70  bool DimRegionChooser::on_expose_event(G
70      if (!region) return true;      if (!region) return true;
71    
72      // This is where we draw on the window      // This is where we draw on the window
73        int w = get_width();
74      Glib::RefPtr<Gdk::Window> window = get_window();      Glib::RefPtr<Gdk::Window> window = get_window();
75      Glib::RefPtr<Pango::Context> context = get_pango_context();      Glib::RefPtr<Pango::Context> context = get_pango_context();
76    
# Line 96  bool DimRegionChooser::on_expose_event(G Line 93  bool DimRegionChooser::on_expose_event(G
93              case gig::dimension_velocity: dstr="velocity"; break;              case gig::dimension_velocity: dstr="velocity"; break;
94              case gig::dimension_channelaftertouch: dstr="channelaftertouch"; break;              case gig::dimension_channelaftertouch: dstr="channelaftertouch"; break;
95              case gig::dimension_releasetrigger: dstr="releasetrigger"; break;              case gig::dimension_releasetrigger: dstr="releasetrigger"; break;
96              case gig::dimension_keyboard: dstr="keyboard"; break;              case gig::dimension_keyboard: dstr="keyswitching"; break;
97              case gig::dimension_roundrobin: dstr="roundrobin"; break;              case gig::dimension_roundrobin: dstr="roundrobin"; break;
98              case gig::dimension_random: dstr="random"; break;              case gig::dimension_random: dstr="random"; break;
99              case gig::dimension_smartmidi: dstr="smartmidi"; break;              case gig::dimension_smartmidi: dstr="smartmidi"; break;
# Line 233  bool DimRegionChooser::on_expose_event(G Line 230  bool DimRegionChooser::on_expose_event(G
230    
231  void DimRegionChooser::on_size_request(GtkRequisition* requisition)  void DimRegionChooser::on_size_request(GtkRequisition* requisition)
232  {  {
     printf("DimRegionChooser::on_size_request\n");  
233      *requisition = GtkRequisition();      *requisition = GtkRequisition();
234      requisition->height = region ? nbDimensions * 20 : 0;      requisition->height = region ? nbDimensions * 20 : 0;
235      requisition->width = 800;      requisition->width = 800;
# Line 250  void DimRegionChooser::set_region(gig::R Line 246  void DimRegionChooser::set_region(gig::R
246              if (region->pDimensionDefinitions[dim].bits == 0) continue;              if (region->pDimensionDefinitions[dim].bits == 0) continue;
247              nbDimensions++;              nbDimensions++;
248    
249              int from = dimvalue_from[region->pDimensionDefinitions[dim].dimension];              int z = std::min(dimvalue[region->pDimensionDefinitions[dim].dimension],
250              int to = dimvalue_to[region->pDimensionDefinitions[dim].dimension];                               region->pDimensionDefinitions[dim].zones - 1);
             int z;  
             switch (region->pDimensionDefinitions[dim].split_type) {  
             case gig::split_type_normal:  
                 z = int((to + from) / 2.0 / region->pDimensionDefinitions[dim].zone_size);  
                 break;  
             case gig::split_type_bit:  
                 z = std::min(from, region->pDimensionDefinitions[dim].zones - 1);  
                 break;  
             }  
             int mask =  
                 ~(((1 << region->pDimensionDefinitions[dim].bits) - 1) <<  
                   bitcount);  
             dimregno &= mask;  
251              dimregno |= (z << bitcount);              dimregno |= (z << bitcount);
252              bitcount += region->pDimensionDefinitions[dim].bits;              bitcount += region->pDimensionDefinitions[dim].bits;
253          }          }
# Line 276  void DimRegionChooser::set_region(gig::R Line 259  void DimRegionChooser::set_region(gig::R
259      queue_resize();      queue_resize();
260  }  }
261    
262    
263    void DimRegionChooser::get_dimregions(const gig::Region* region, bool stereo,
264                                          std::set<gig::DimensionRegion*>& dimregs) const
265    {
266        int dimregno = 0;
267        int bitcount = 0;
268        int stereo_bit = 0;
269        for (int dim = 0 ; dim < region->Dimensions ; dim++) {
270            if (region->pDimensionDefinitions[dim].bits == 0) continue;
271            if (stereo &&
272                region->pDimensionDefinitions[dim].dimension == gig::dimension_samplechannel) {
273                stereo_bit = (1 << bitcount);
274            } else {
275                int z = std::min(dimvalue[region->pDimensionDefinitions[dim].dimension],
276                                 region->pDimensionDefinitions[dim].zones - 1);
277                dimregno |= (z << bitcount);
278            }
279            bitcount += region->pDimensionDefinitions[dim].bits;
280        }
281        dimregs.insert(region->pDimensionRegions[dimregno]);
282        if (stereo_bit) dimregs.insert(region->pDimensionRegions[dimregno | stereo_bit]);
283    }
284    
285    
286  bool DimRegionChooser::on_button_release_event(GdkEventButton* event)  bool DimRegionChooser::on_button_release_event(GdkEventButton* event)
287  {  {
288      if (resize.active) {      if (resize.active) {
# Line 365  bool DimRegionChooser::on_button_release Line 372  bool DimRegionChooser::on_button_release
372    
373  bool DimRegionChooser::on_button_press_event(GdkEventButton* event)  bool DimRegionChooser::on_button_press_event(GdkEventButton* event)
374  {  {
375        int w = get_width();
376      if (region && event->y < nbDimensions * h &&      if (region && event->y < nbDimensions * h &&
377          event->x >= label_width && event->x < w) {          event->x >= label_width && event->x < w) {
378    
# Line 425  bool DimRegionChooser::on_button_press_e Line 433  bool DimRegionChooser::on_button_press_e
433                     region->pDimensionDefinitions[dim].split_type,                     region->pDimensionDefinitions[dim].split_type,
434                     region->pDimensionDefinitions[dim].zones,                     region->pDimensionDefinitions[dim].zones,
435                     region->pDimensionDefinitions[dim].zone_size);                     region->pDimensionDefinitions[dim].zone_size);
436  #if 0              dimvalue[region->pDimensionDefinitions[dim].dimension] = z;
             switch (region->pDimensionDefinitions[dim].split_type) {  
             case gig::split_type_normal:  
                 dimvalue_from[region->pDimensionDefinitions[dim].dimension] =  
                     int(z * region->pDimensionDefinitions[dim].zone_size);  
                 dimvalue_to[region->pDimensionDefinitions[dim].dimension] =  
                     int((z + 1) * region->pDimensionDefinitions[dim].zone_size) - 1;  
                 break;  
             case gig::split_type_bit:  
                 dimvalue_from[region->pDimensionDefinitions[dim].dimension] = z;  
                 dimvalue_to[region->pDimensionDefinitions[dim].dimension] = z + 1;  
                 break;  
             }  
 #endif  
437    
438              dimregno = c | (z << bitpos);              dimregno = c | (z << bitpos);
439    
# Line 460  bool DimRegionChooser::on_motion_notify_ Line 455  bool DimRegionChooser::on_motion_notify_
455      window->get_pointer(x, y, state);      window->get_pointer(x, y, state);
456    
457      if (resize.active) {      if (resize.active) {
458            int w = get_width();
459          int k = int((x - label_width) * 128.0 / (w - label_width - 1) + 0.5);          int k = int((x - label_width) * 128.0 / (w - label_width - 1) + 0.5);
460    
461          if (k < resize.min) k = resize.min;          if (k < resize.min) k = resize.min;
# Line 522  bool DimRegionChooser::on_motion_notify_ Line 518  bool DimRegionChooser::on_motion_notify_
518    
519  bool DimRegionChooser::is_in_resize_zone(double x, double y)  bool DimRegionChooser::is_in_resize_zone(double x, double y)
520  {  {
521        int w = get_width();
522      if (region && y < nbDimensions * h && x >= label_width && x < w) {      if (region && y < nbDimensions * h && x >= label_width && x < w) {
523          int ydim = int(y / h);          int ydim = int(y / h);
524          int dim;          int dim;
# Line 589  bool DimRegionChooser::is_in_resize_zone Line 586  bool DimRegionChooser::is_in_resize_zone
586      return false;      return false;
587  }  }
588    
589  sigc::signal<void> DimRegionChooser::signal_dimregion_selected()  sigc::signal<void>& DimRegionChooser::signal_dimregion_selected()
590  {  {
591      return dimregion_selected;      return dimregion_selected;
592  }  }
593    
594  sigc::signal<void> DimRegionChooser::signal_region_changed()  sigc::signal<void>& DimRegionChooser::signal_region_changed()
595  {  {
596      return region_changed;      return region_changed;
597  }  }

Legend:
Removed from v.1261  
changed lines
  Added in v.1656

  ViewVC Help
Powered by ViewVC