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

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

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

revision 1092 by persson, Sun Mar 11 15:21:58 2007 UTC revision 1185 by schoenebeck, Sun May 13 14:09:20 2007 UTC
# Line 131  bool DimRegionChooser::on_expose_event(G Line 131  bool DimRegionChooser::on_expose_event(G
131              }              }
132              layout->set_text(dstr);              layout->set_text(dstr);
133    
134              Pango::Rectangle rectangle = layout->get_logical_extents();              Pango::Rectangle rectangle = layout->get_logical_extents();
135              double text_w = double(rectangle.get_width()) / Pango::SCALE;              double text_w = double(rectangle.get_width()) / Pango::SCALE;
136              if (text_w > maxwidth) maxwidth = text_w;              if (text_w > maxwidth) maxwidth = text_w;
137              double text_h = double(rectangle.get_height()) / Pango::SCALE;              double text_h = double(rectangle.get_height()) / Pango::SCALE;
138              Glib::RefPtr<const Gdk::GC> fg = get_style()->get_fg_gc(get_state());              Glib::RefPtr<const Gdk::GC> fg = get_style()->get_fg_gc(get_state());
139              window->draw_layout(fg, 4, int(y + (h - text_h) / 2 + 0.5), layout);              window->draw_layout(fg, 4, int(y + (h - text_h) / 2 + 0.5), layout);
140    
# Line 232  void DimRegionChooser::on_size_request(G Line 232  void DimRegionChooser::on_size_request(G
232      requisition->width = 800;      requisition->width = 800;
233  }  }
234    
 void DimRegionChooser::set_instrument(gig::Instrument* instrument)  
 {  
     this->instrument = instrument;  
     this->region = 0;  
     this->dimregno = -1;  
     queue_draw();  
 }  
   
235  void DimRegionChooser::set_region(gig::Region* region)  void DimRegionChooser::set_region(gig::Region* region)
236  {  {
237      this->region = region;      this->region = region;
238      dimregno = 0;      dimregno = 0;
     int bitcount = 0;  
239      nbDimensions = 0;      nbDimensions = 0;
240      for (int dim = 0 ; dim < region->Dimensions ; dim++) {      if (region) {
241          if (region->pDimensionDefinitions[dim].bits == 0) continue;          int bitcount = 0;
242          nbDimensions++;          for (int dim = 0 ; dim < region->Dimensions ; dim++) {
243                if (region->pDimensionDefinitions[dim].bits == 0) continue;
244          int from = dimvalue_from[region->pDimensionDefinitions[dim].dimension];              nbDimensions++;
245          int to = dimvalue_to[region->pDimensionDefinitions[dim].dimension];  
246          int z;              int from = dimvalue_from[region->pDimensionDefinitions[dim].dimension];
247          switch (region->pDimensionDefinitions[dim].split_type) {              int to = dimvalue_to[region->pDimensionDefinitions[dim].dimension];
248          case gig::split_type_normal:              int z;
249              z = int((to + from) / 2.0 / region->pDimensionDefinitions[dim].zone_size);              switch (region->pDimensionDefinitions[dim].split_type) {
250              break;              case gig::split_type_normal:
251          case gig::split_type_bit:                  z = int((to + from) / 2.0 / region->pDimensionDefinitions[dim].zone_size);
252              z = std::min(from, region->pDimensionDefinitions[dim].zones - 1);                  break;
253              break;              case gig::split_type_bit:
254                    z = std::min(from, region->pDimensionDefinitions[dim].zones - 1);
255                    break;
256                }
257                int mask =
258                    ~(((1 << region->pDimensionDefinitions[dim].bits) - 1) <<
259                      bitcount);
260                dimregno &= mask;
261                dimregno |= (z << bitcount);
262                bitcount += region->pDimensionDefinitions[dim].bits;
263          }          }
264          int mask =          dimreg = region->pDimensionRegions[dimregno];
265              ~(((1 << region->pDimensionDefinitions[dim].bits) - 1) <<      } else {
266                bitcount);          dimreg = 0;
         dimregno &= mask;  
         dimregno |= (z << bitcount);  
         bitcount += region->pDimensionDefinitions[dim].bits;  
267      }      }
     dimreg = region->pDimensionRegions[dimregno];  
268      sel_changed_signal.emit();      sel_changed_signal.emit();
269      queue_resize();      queue_resize();
270  }  }
271    
 /*  
   void DimRegionChooser::set_dimregno(int x) {  
   this->dimregno = x;  
   queue_draw();  
   }  
 */  
   
272  bool DimRegionChooser::on_button_release_event(GdkEventButton* event)  bool DimRegionChooser::on_button_release_event(GdkEventButton* event)
273  {  {
274      if (resize.active) {      if (resize.active) {
# Line 508  bool DimRegionChooser::is_in_resize_zone Line 497  bool DimRegionChooser::is_in_resize_zone
497              int mask = ~(((1 << region->pDimensionDefinitions[dim].bits) - 1) << bitpos);              int mask = ~(((1 << region->pDimensionDefinitions[dim].bits) - 1) << bitpos);
498              c = dimregno & mask; // mask away this dimension              c = dimregno & mask; // mask away this dimension
499          }          }
500          bool customsplits =          const bool customsplits =
501              ((region->pDimensionDefinitions[dim].split_type == gig::split_type_normal &&              ((region->pDimensionDefinitions[dim].split_type == gig::split_type_normal &&
502                region->pDimensionRegions[c]->DimensionUpperLimits[dim]) ||                region->pDimensionRegions[c]->DimensionUpperLimits[dim]) ||
503               (region->pDimensionDefinitions[dim].dimension == gig::dimension_velocity &&               (region->pDimensionDefinitions[dim].dimension == gig::dimension_velocity &&
504                region->pDimensionRegions[c]->VelocityUpperLimit));                region->pDimensionRegions[c]->VelocityUpperLimit));
505    
506          if (customsplits) {          // dimensions of split_type_bit cannot be resized
507            if (region->pDimensionDefinitions[dim].split_type != gig::split_type_bit) {
508              int prev_limit = 0;              int prev_limit = 0;
509              for (int j = 0 ; j < nbZones - 1 ; j++) {              for (int iZone = 0 ; iZone < nbZones - 1 ; iZone++) {
510                  gig::DimensionRegion *d = region->pDimensionRegions[c + (j << bitpos)];                  gig::DimensionRegion *d = region->pDimensionRegions[c + (iZone << bitpos)];
511                  int upperLimit = d->DimensionUpperLimits[dim];                  const int upperLimit =
512                  if (!upperLimit) upperLimit = d->VelocityUpperLimit;                      (customsplits) ?
513                            (d->DimensionUpperLimits[dim]) ?
514                                d->DimensionUpperLimits[dim] : d->VelocityUpperLimit
515                            : (iZone+1) * (int)region->pDimensionDefinitions[dim].zone_size;
516                  int limit = upperLimit + 1;                  int limit = upperLimit + 1;
517                  int limitx = int((w - label_width - 1) * limit / 128.0 + 0.5) + label_width;                  int limitx = int((w - label_width - 1) * limit / 128.0 + 0.5) + label_width;
   
518                  if (x <= limitx - 2) break;                  if (x <= limitx - 2) break;
519                  if (x <= limitx + 2) {                  if (x <= limitx + 2) {
520                      resize.dimension = dim;                      resize.dimension = dim;
521                      resize.offset = j << bitpos;                      resize.offset = iZone << bitpos;
522                      resize.pos = limit;                      resize.pos = limit;
523                      resize.min = prev_limit;                      resize.min = prev_limit;
524    
525                      int dr = (dimregno >> bitpos) &                      int dr = (dimregno >> bitpos) &
526                          ((1 << region->pDimensionDefinitions[dim].bits) - 1);                          ((1 << region->pDimensionDefinitions[dim].bits) - 1);
527                      resize.selected = dr == j ? resize.left :                      resize.selected = dr == iZone ? resize.left :
528                          dr == j + 1 ? resize.right : resize.none;                          dr == iZone + 1 ? resize.right : resize.none;
529    
530                        iZone++;
531                        gig::DimensionRegion *d = region->pDimensionRegions[c + (iZone << bitpos)];
532    
533                        const int upperLimit =
534                            (customsplits) ?
535                                (d->DimensionUpperLimits[dim]) ?
536                                    d->DimensionUpperLimits[dim] : d->VelocityUpperLimit
537                                : (iZone+1) * (int)region->pDimensionDefinitions[dim].zone_size;
538    
                     j++;  
                     gig::DimensionRegion *d = region->pDimensionRegions[c + (j << bitpos)];  
                     int upperLimit = d->DimensionUpperLimits[dim];  
                     if (!upperLimit) upperLimit = d->VelocityUpperLimit;  
539                      int limit = upperLimit + 1;                      int limit = upperLimit + 1;
540                      resize.max = limit;                      resize.max = limit;
541                      return true;                      return true;

Legend:
Removed from v.1092  
changed lines
  Added in v.1185

  ViewVC Help
Powered by ViewVC