/[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 1071 by persson, Mon Mar 5 17:58:24 2007 UTC revision 1089 by persson, Sat Mar 10 08:58:30 2007 UTC
# Line 76  bool DimRegionChooser::on_expose_event(G Line 76  bool DimRegionChooser::on_expose_event(G
76      window->clear();      window->clear();
77      const int h = 20;      const int h = 20;
78      const int w = 800;      const int w = 800;
     const int w1 = 100;  
79      int y = 0;      int y = 0;
80      int bitpos = 0;      double maxwidth = 0;
81      for (int i = 0 ; i < region->Dimensions ; i++) {      for (int i = 0 ; i < region->Dimensions ; i++) {
82    
83          int nbZones = region->pDimensionDefinitions[i].zones;          int nbZones = region->pDimensionDefinitions[i].zones;
# Line 95  bool DimRegionChooser::on_expose_event(G Line 94  bool DimRegionChooser::on_expose_event(G
94              case gig::dimension_keyboard: dstr="keyboard"; break;              case gig::dimension_keyboard: dstr="keyboard"; break;
95              case gig::dimension_roundrobin: dstr="roundrobin"; break;              case gig::dimension_roundrobin: dstr="roundrobin"; break;
96              case gig::dimension_random: dstr="random"; break;              case gig::dimension_random: dstr="random"; break;
97                case gig::dimension_smartmidi: dstr="smartmidi"; break;
98                case gig::dimension_roundrobinkeyboard: dstr="roundrobinkeyboard"; break;
99              case gig::dimension_modwheel: dstr="modwheel"; break;              case gig::dimension_modwheel: dstr="modwheel"; break;
100              case gig::dimension_breath: dstr="breath"; break;              case gig::dimension_breath: dstr="breath"; break;
101              case gig::dimension_foot: dstr="foot"; break;              case gig::dimension_foot: dstr="foot"; break;
# Line 127  bool DimRegionChooser::on_expose_event(G Line 128  bool DimRegionChooser::on_expose_event(G
128              layout->set_text(dstr);              layout->set_text(dstr);
129    
130              Pango::Rectangle rectangle = layout->get_logical_extents();              Pango::Rectangle rectangle = layout->get_logical_extents();
131                double text_w = double(rectangle.get_width()) / Pango::SCALE;
132                if (text_w > maxwidth) maxwidth = text_w;
133              double text_h = double(rectangle.get_height()) / Pango::SCALE;              double text_h = double(rectangle.get_height()) / Pango::SCALE;
134              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());
135              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);
136    
137            }
138            y += h;
139        }
140        y = 0;
141        int bitpos = 0;
142        label_width = int(maxwidth + 10);
143        for (int i = 0 ; i < region->Dimensions ; i++) {
144            int nbZones = region->pDimensionDefinitions[i].zones;
145            if (nbZones) {
146    
147              if (has_focus() && focus_line == i) {              if (has_focus() && focus_line == i) {
148                  Gdk::Rectangle farea(0, y, 50, 20);                  Gdk::Rectangle farea(0, y, 150, 20);
149                  get_style()->paint_focus(window, get_state(), farea, *this, "hejsan", 0, y, 50, 20);                  get_style()->paint_focus(window, get_state(), farea, *this, "", 0, y, label_width, 20);
150              }              }
151    
152              Glib::RefPtr<const Gdk::GC> black = get_style()->get_black_gc();              Glib::RefPtr<const Gdk::GC> black = get_style()->get_black_gc();
153              window->draw_line(black, w1, y, w - 1, y);              window->draw_line(black, label_width, y, w - 1, y);
154              window->draw_line(black, w - 1, y + h - 1, w1, y + h - 1);              window->draw_line(black, w - 1, y + h - 1, label_width, y + h - 1);
155              window->draw_rectangle(get_style()->get_white_gc(), true, w1 + 1, y + 1, (w - w1 - 2), h - 2);              window->draw_rectangle(get_style()->get_white_gc(), true, label_width + 1, y + 1, (w - label_width - 2), h - 2);
156    
157              int c = 0;              int c = 0;
158              if (dimregno >= 0) {              if (dimregno >= 0) {
# Line 153  bool DimRegionChooser::on_expose_event(G Line 166  bool DimRegionChooser::on_expose_event(G
166                   region->pDimensionRegions[c]->VelocityUpperLimit));                   region->pDimensionRegions[c]->VelocityUpperLimit));
167    
168              if (customsplits) {              if (customsplits) {
169                  window->draw_line(black, w1, y + 1, w1, y + h - 2);                  window->draw_line(black, label_width, y + 1, label_width, y + h - 2);
170                  for (int j = 0 ; j < nbZones ; j++) {                  for (int j = 0 ; j < nbZones ; j++) {
171                      gig::DimensionRegion *d = region->pDimensionRegions[c + (j << bitpos)];                      gig::DimensionRegion *d = region->pDimensionRegions[c + (j << bitpos)];
172                      int upperLimit = d->DimensionUpperLimits[i];                      int upperLimit = d->DimensionUpperLimits[i];
173                      if (!upperLimit) upperLimit = d->VelocityUpperLimit;                      if (!upperLimit) upperLimit = d->VelocityUpperLimit;
174                      int v = upperLimit + 1;                      int v = upperLimit + 1;
175                      int x = int((w - w1 - 1) * v / 128.0 + 0.5);                      int x = int((w - label_width - 1) * v / 128.0 + 0.5);
176                      window->draw_line(black, w1 + x, y + 1, w1 + x, y + h - 2);                      window->draw_line(black, label_width + x, y + 1, label_width + x, y + h - 2);
177                  }                  }
178              } else {              } else {
179                  for (int j = 0 ; j <= nbZones ; j++) {                  for (int j = 0 ; j <= nbZones ; j++) {
180                      int x = int((w - w1 - 1) * j / double(nbZones) + 0.5);                      int x = int((w - label_width - 1) * j / double(nbZones) + 0.5);
181                      window->draw_line(black, w1 + x, y + 1, w1 + x, y + h - 2);                      window->draw_line(black, label_width + x, y + 1, label_width + x, y + h - 2);
182                  }                  }
183              }              }
184    
# Line 179  bool DimRegionChooser::on_expose_event(G Line 192  bool DimRegionChooser::on_expose_event(G
192                          int upperLimit = d->DimensionUpperLimits[i];                          int upperLimit = d->DimensionUpperLimits[i];
193                          if (!upperLimit) upperLimit = d->VelocityUpperLimit;                          if (!upperLimit) upperLimit = d->VelocityUpperLimit;
194                          int v = upperLimit + 1;                          int v = upperLimit + 1;
195                          int x2 = int((w - w1 - 1) * v / 128.0 + 0.5);                          int x2 = int((w - label_width - 1) * v / 128.0 + 0.5);
196                          if (j == dr && x1 < x2) {                          if (j == dr && x1 < x2) {
197                              window->draw_rectangle(gc, true, w1 + x1 + 1, y + 1, (x2 - x1) - 1, h - 2);                              window->draw_rectangle(gc, true, label_width + x1 + 1, y + 1, (x2 - x1) - 1, h - 2);
198                              break;                              break;
199                          }                          }
200                          x1 = x2;                          x1 = x2;
201                      }                      }
202                  } else {                  } else {
203                      if (dr < nbZones) {                      if (dr < nbZones) {
204                          int x1 = int((w - w1 - 1) * dr / double(nbZones) + 0.5);                          int x1 = int((w - label_width - 1) * dr / double(nbZones) + 0.5);
205                          int x2 = int((w - w1 - 1) * (dr + 1) / double(nbZones) + 0.5);                          int x2 = int((w - label_width - 1) * (dr + 1) / double(nbZones) + 0.5);
206                          window->draw_rectangle(gc, true, w1 + x1 + 1, y + 1, (x2 - x1) - 1, h - 2);                          window->draw_rectangle(gc, true, label_width + x1 + 1, y + 1, (x2 - x1) - 1, h - 2);
207                      }                      }
208                  }                  }
209              }              }
# Line 208  void DimRegionChooser::on_size_request(G Line 221  void DimRegionChooser::on_size_request(G
221  {  {
222      printf("DimRegionChooser::on_size_request\n");      printf("DimRegionChooser::on_size_request\n");
223      *requisition = GtkRequisition();      *requisition = GtkRequisition();
224      requisition->height = region ? region->Dimensions * 20 : 0;      requisition->height = region ? nbDimensions * 20 : 0;
225      requisition->width = 800;      requisition->width = 800;
226  }  }
227    
# Line 225  void DimRegionChooser::set_region(gig::R Line 238  void DimRegionChooser::set_region(gig::R
238      this->region = region;      this->region = region;
239      dimregno = 0;      dimregno = 0;
240      int bitcount = 0;      int bitcount = 0;
241        nbDimensions = 0;
242      for (int dim = 0 ; dim < region->Dimensions ; dim++) {      for (int dim = 0 ; dim < region->Dimensions ; dim++) {
243            if (region->pDimensionDefinitions[dim].bits == 0) continue;
244            nbDimensions++;
245    
246          int from = dimvalue_from[region->pDimensionDefinitions[dim].dimension];          int from = dimvalue_from[region->pDimensionDefinitions[dim].dimension];
247          int to = dimvalue_to[region->pDimensionDefinitions[dim].dimension];          int to = dimvalue_to[region->pDimensionDefinitions[dim].dimension];
248          int z;          int z;
# Line 260  bool DimRegionChooser::on_button_press_e Line 277  bool DimRegionChooser::on_button_press_e
277  {  {
278      const int h = 20;      const int h = 20;
279      const int w = 800;      const int w = 800;
     const int w1 = 100;  
280    
281      if (region) {      if (region) {
282          if (event->y < region->Dimensions * h &&          if (event->y < nbDimensions * h &&
283              event->x >= w1 && event->x < w) {              event->x >= label_width && event->x < w) {
284    
285              int dim = int(event->y / h);              int ydim = int(event->y / h);
286                int dim;
287                for (dim = 0 ; dim < region->Dimensions ; dim++) {
288                    if (region->pDimensionDefinitions[dim].bits == 0) continue;
289                    if (ydim == 0) break;
290                    ydim--;
291                }
292              int nbZones = region->pDimensionDefinitions[dim].zones;              int nbZones = region->pDimensionDefinitions[dim].zones;
293    
294              int z = -1;              int z = -1;
# Line 286  bool DimRegionChooser::on_button_press_e Line 308  bool DimRegionChooser::on_button_press_e
308                   (region->pDimensionDefinitions[i].dimension == gig::dimension_velocity &&                   (region->pDimensionDefinitions[i].dimension == gig::dimension_velocity &&
309                    region->pDimensionRegions[c]->VelocityUpperLimit));                    region->pDimensionRegions[c]->VelocityUpperLimit));
310              if (customsplits) {              if (customsplits) {
311                  int val = int((event->x - w1) * 128 / (w - w1 - 1));                  int val = int((event->x - label_width) * 128 / (w - label_width - 1));
312    
313                  if (region->pDimensionRegions[c]->DimensionUpperLimits[i]) {                  if (region->pDimensionRegions[c]->DimensionUpperLimits[i]) {
314                      for (z = 0 ; z < nbZones ; z++) {                      for (z = 0 ; z < nbZones ; z++) {
# Line 300  bool DimRegionChooser::on_button_press_e Line 322  bool DimRegionChooser::on_button_press_e
322                      }                      }
323                  }                  }
324              } else {              } else {
325                  z = int((event->x - w1) * nbZones / (w - w1 - 1));                  z = int((event->x - label_width) * nbZones / (w - label_width - 1));
326              }              }
327    
328              printf("dim=%d z=%d dimensionsource=%d split_type=%d zones=%d zone_size=%f\n", dim, z,              printf("dim=%d z=%d dimensionsource=%d split_type=%d zones=%d zone_size=%f\n", dim, z,

Legend:
Removed from v.1071  
changed lines
  Added in v.1089

  ViewVC Help
Powered by ViewVC