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

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

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

revision 3363 by schoenebeck, Tue Jul 11 23:06:38 2017 UTC revision 3364 by schoenebeck, Tue Nov 14 18:07:25 2017 UTC
# Line 17  Line 17 
17   * 02110-1301 USA.   * 02110-1301 USA.
18   */   */
19    
20    #include "compat.h"
21  #include "global.h"  #include "global.h"
22  #include "regionchooser.h"  #include "regionchooser.h"
23    
# Line 25  Line 26 
26    
27  #include <cairomm/context.h>  #include <cairomm/context.h>
28  #include <gdkmm/general.h>  #include <gdkmm/general.h>
29    #if HAS_GDKMM_SEAT
30    # include <gdkmm/seat.h>
31    #endif
32  #include <gdkmm/cursor.h>  #include <gdkmm/cursor.h>
33  #include <gtkmm/stock.h>  #if HAS_GTKMM_STOCK
34    # include <gtkmm/stock.h>
35    #endif
36  #include <gdkmm/pixbuf.h>  #include <gdkmm/pixbuf.h>
37  #include <gtkmm/spinbutton.h>  #include <gtkmm/spinbutton.h>
38  #include <gtkmm/dialog.h>  #include <gtkmm/dialog.h>
# Line 126  RegionChooser::RegionChooser() : Line 132  RegionChooser::RegionChooser() :
132          }          }
133    
134          Cairo::RefPtr<Cairo::ImageSurface> imageSurface = Cairo::ImageSurface::create(          Cairo::RefPtr<Cairo::ImageSurface> imageSurface = Cairo::ImageSurface::create(
135    #if HAS_CAIROMM_CPP11_ENUMS
136                this->blueHatchedPatternARGB->get_pixels(), Cairo::Surface::Format::ARGB32, width, height, stride
137    #else
138              this->blueHatchedPatternARGB->get_pixels(), Cairo::FORMAT_ARGB32, width, height, stride              this->blueHatchedPatternARGB->get_pixels(), Cairo::FORMAT_ARGB32, width, height, stride
139    #endif
140          );          );
141          this->blueHatchedSurfacePattern = Cairo::SurfacePattern::create(imageSurface);          this->blueHatchedSurfacePattern = Cairo::SurfacePattern::create(imageSurface);
142    #if HAS_CAIROMM_CPP11_ENUMS
143            this->blueHatchedSurfacePattern->set_extend(Cairo::Pattern::Extend::REPEAT);
144    #else
145          this->blueHatchedSurfacePattern->set_extend(Cairo::EXTEND_REPEAT);          this->blueHatchedSurfacePattern->set_extend(Cairo::EXTEND_REPEAT);
146    #endif
147      }      }
148    
149      instrument = 0;      instrument = 0;
# Line 163  RegionChooser::RegionChooser() : Line 177  RegionChooser::RegionChooser() :
177      m_VirtKeybPropsBox.show();      m_VirtKeybPropsBox.show();
178      for (int i = 0 ; i < 128 ; i++) key_pressed[i] = false;      for (int i = 0 ; i < 128 ; i++) key_pressed[i] = false;
179    
180      actionGroup = Gtk::ActionGroup::create();      actionGroup = ActionGroup::create();
181    #if USE_GLIB_ACTION
182        actionGroup->add_action(
183            "Properties", sigc::mem_fun(*this, &RegionChooser::show_region_properties)
184        );
185        actionGroup->add_action(
186            "Remove", sigc::mem_fun(*this, &RegionChooser::delete_region)
187        );
188        actionGroup->add_action(
189            "Add", sigc::mem_fun(*this, &RegionChooser::add_region)
190        );
191        actionGroup->add_action(
192            "Dimensions", sigc::mem_fun(*this, &RegionChooser::manage_dimensions)
193        );
194        insert_action_group("PopupMenuInsideRegion", actionGroup);
195    #else
196      actionGroup->add(Gtk::Action::create("Properties",      actionGroup->add(Gtk::Action::create("Properties",
197                                           Gtk::Stock::PROPERTIES),                                           Gtk::Stock::PROPERTIES),
198                       sigc::mem_fun(*this,                       sigc::mem_fun(*this,
# Line 174  RegionChooser::RegionChooser() : Line 203  RegionChooser::RegionChooser() :
203                       sigc::mem_fun(*this, &RegionChooser::add_region));                       sigc::mem_fun(*this, &RegionChooser::add_region));
204      actionGroup->add(Gtk::Action::create("Dimensions", _("Dimensions...")),      actionGroup->add(Gtk::Action::create("Dimensions", _("Dimensions...")),
205                       sigc::mem_fun(*this, &RegionChooser::manage_dimensions));                       sigc::mem_fun(*this, &RegionChooser::manage_dimensions));
206    #endif
207    
208    #if USE_GTKMM_BUILDER
209        uiManager = Gtk::Builder::create();
210        Glib::ustring ui_info =
211            "<interface>"
212            "  <menu id='menu-PopupMenuInsideRegion'>"
213            "    <section>"
214            "      <item>"
215            "        <attribute name='label' translatable='yes'>Properties</attribute>"
216            "        <attribute name='action'>PopupMenuInsideRegion.Properties</attribute>"
217            "      </item>"
218            "      <item>"
219            "        <attribute name='label' translatable='yes'>Dimensions</attribute>"
220            "        <attribute name='action'>PopupMenuInsideRegion.Dimensions</attribute>"
221            "      </item>"
222            "      <item>"
223            "        <attribute name='label' translatable='yes'>Remove</attribute>"
224            "        <attribute name='action'>PopupMenuInsideRegion.Remove</attribute>"
225            "      </item>"
226            "    </section>"
227            "  </menu>"
228            "  <menu id='menu-PopupMenuOutsideRegion'>"
229            "    <section>"
230            "      <item>"
231            "        <attribute name='label' translatable='yes'>Add</attribute>"
232            "        <attribute name='action'>PopupMenuInsideRegion.Add</attribute>"
233            "      </item>"
234            "    </section>"
235            "  </menu>"
236            "</interface>";
237        uiManager->add_from_string(ui_info);
238        
239        popup_menu_inside_region = new Gtk::Menu(
240             Glib::RefPtr<Gio::Menu>::cast_dynamic(
241                 uiManager->get_object("menu-PopupMenuInsideRegion")
242             )
243        );
244        popup_menu_outside_region = new Gtk::Menu(
245             Glib::RefPtr<Gio::Menu>::cast_dynamic(
246                 uiManager->get_object("menu-PopupMenuOutsideRegion")
247             )
248        );
249    #else
250      uiManager = Gtk::UIManager::create();      uiManager = Gtk::UIManager::create();
251      uiManager->insert_action_group(actionGroup);      uiManager->insert_action_group(actionGroup);
252      Glib::ustring ui_info =      Glib::ustring ui_info =
# Line 195  RegionChooser::RegionChooser() : Line 267  RegionChooser::RegionChooser() :
267      popup_menu_outside_region = dynamic_cast<Gtk::Menu*>(      popup_menu_outside_region = dynamic_cast<Gtk::Menu*>(
268          uiManager->get_widget("/PopupMenuOutsideRegion"));          uiManager->get_widget("/PopupMenuOutsideRegion"));
269    
270    #endif // USE_GTKMM_BUILDER
271    
272    #if GTKMM_MAJOR_VERSION > 3 || (GTKMM_MAJOR_VERSION == 3 && GTKMM_MINOR_VERSION > 22)
273    # warning GTKMM4 event registration code missing for regionchooser!
274        //add_events(Gdk::EventMask::BUTTON_PRESS_MASK);
275    #else
276      add_events(Gdk::BUTTON_PRESS_MASK | Gdk::BUTTON_RELEASE_MASK |      add_events(Gdk::BUTTON_PRESS_MASK | Gdk::BUTTON_RELEASE_MASK |
277                 Gdk::POINTER_MOTION_MASK | Gdk::POINTER_MOTION_HINT_MASK);                 Gdk::POINTER_MOTION_MASK | Gdk::POINTER_MOTION_HINT_MASK);
278    #endif
279    
280      dimensionManager.region_to_be_changed_signal.connect(      dimensionManager.region_to_be_changed_signal.connect(
281          region_to_be_changed_signal.make_slot()          region_to_be_changed_signal.make_slot()
# Line 275  bool RegionChooser::on_draw(const Cairo: Line 354  bool RegionChooser::on_draw(const Cairo:
354  #if (GTKMM_MAJOR_VERSION == 2 && GTKMM_MINOR_VERSION < 90) || GTKMM_MAJOR_VERSION < 2  #if (GTKMM_MAJOR_VERSION == 2 && GTKMM_MINOR_VERSION < 90) || GTKMM_MAJOR_VERSION < 2
355      const Gdk::Color bg = get_style()->get_bg(Gtk::STATE_NORMAL);      const Gdk::Color bg = get_style()->get_bg(Gtk::STATE_NORMAL);
356  #else  #else
357    #if GTKMM_MAJOR_VERSION > 3 || (GTKMM_MAJOR_VERSION == 3 && GTKMM_MINOR_VERSION > 22)
358        GdkRGBA gdkBgRGBA;
359        gtk_style_context_get_background_color(get_style_context()->gobj(), &gdkBgRGBA);
360        const Gdk::RGBA bg = Glib::wrap(&gdkBgRGBA, true);
361    # else
362      const Gdk::RGBA bg = get_style_context()->get_background_color();      const Gdk::RGBA bg = get_style_context()->get_background_color();
363    # endif
364  #endif  #endif
365      Gdk::Cairo::set_source_rgba(cr, bg);      Gdk::Cairo::set_source_rgba(cr, bg);
366      cr->paint();      cr->paint();
# Line 574  bool RegionChooser::on_button_release_ev Line 659  bool RegionChooser::on_button_release_ev
659  #if (GTKMM_MAJOR_VERSION == 2 && GTKMM_MINOR_VERSION < 90) || GTKMM_MAJOR_VERSION < 2  #if (GTKMM_MAJOR_VERSION == 2 && GTKMM_MINOR_VERSION < 90) || GTKMM_MAJOR_VERSION < 2
660          get_window()->pointer_ungrab(event->time);          get_window()->pointer_ungrab(event->time);
661  #else  #else
662    # if GTKMM_MAJOR_VERSION < 3 || (GTKMM_MAJOR_VERSION == 3 && GTKMM_MINOR_VERSION < 20)
663          Glib::wrap(event->device, true)->ungrab(event->time);          Glib::wrap(event->device, true)->ungrab(event->time);
664    # else
665            gdk_device_ungrab(Glib::wrap(event->device, true)->gobj(), event->time);
666    # endif
667  #endif  #endif
668          resize.active = false;          resize.active = false;
669    
# Line 586  bool RegionChooser::on_button_release_ev Line 675  bool RegionChooser::on_button_release_ev
675  #if (GTKMM_MAJOR_VERSION == 2 && GTKMM_MINOR_VERSION < 90) || GTKMM_MAJOR_VERSION < 2  #if (GTKMM_MAJOR_VERSION == 2 && GTKMM_MINOR_VERSION < 90) || GTKMM_MAJOR_VERSION < 2
676          get_window()->pointer_ungrab(event->time);          get_window()->pointer_ungrab(event->time);
677  #else  #else
678    # if GTKMM_MAJOR_VERSION < 3 || (GTKMM_MAJOR_VERSION == 3 && GTKMM_MINOR_VERSION < 20)
679          Glib::wrap(event->device, true)->ungrab(event->time);          Glib::wrap(event->device, true)->ungrab(event->time);
680    # else
681            gdk_device_ungrab(Glib::wrap(event->device, true)->gobj(), event->time);
682    # endif
683  #endif  #endif
684          move.active = false;          move.active = false;
685    
# Line 594  bool RegionChooser::on_button_release_ev Line 687  bool RegionChooser::on_button_release_ev
687  #if (GTKMM_MAJOR_VERSION == 2 && GTKMM_MINOR_VERSION < 90) || GTKMM_MAJOR_VERSION < 2  #if (GTKMM_MAJOR_VERSION == 2 && GTKMM_MINOR_VERSION < 90) || GTKMM_MAJOR_VERSION < 2
688              get_window()->set_cursor(Gdk::Cursor(Gdk::SB_H_DOUBLE_ARROW));              get_window()->set_cursor(Gdk::Cursor(Gdk::SB_H_DOUBLE_ARROW));
689  #else  #else
690              get_window()->set_cursor(Gdk::Cursor::create(Gdk::SB_H_DOUBLE_ARROW));              get_window()->set_cursor(
691    # if GTKMM_MAJOR_VERSION < 3 || (GTKMM_MAJOR_VERSION == 3 && GTKMM_MINOR_VERSION < 20)
692                    Gdk::Cursor::create(Gdk::SB_H_DOUBLE_ARROW)
693    # else
694                    Gdk::Cursor::create(
695                        Glib::wrap(event->device, true)->get_seat()->get_display(),
696                        Gdk::SB_H_DOUBLE_ARROW
697                    )
698    # endif
699                );
700  #endif  #endif
701              cursor_is_resize = true;              cursor_is_resize = true;
702          }          }
# Line 690  bool RegionChooser::on_button_press_even Line 792  bool RegionChooser::on_button_press_even
792                                         Gdk::Cursor(Gdk::SB_H_DOUBLE_ARROW),                                         Gdk::Cursor(Gdk::SB_H_DOUBLE_ARROW),
793                                         event->time);                                         event->time);
794  #else  #else
795    # if GTKMM_MAJOR_VERSION < 3 || (GTKMM_MAJOR_VERSION == 3 && GTKMM_MINOR_VERSION < 20)
796              Glib::wrap(event->device, true)->grab(get_window(),              Glib::wrap(event->device, true)->grab(get_window(),
797                                                    Gdk::OWNERSHIP_NONE,                                                    Gdk::OWNERSHIP_NONE,
798                                                    false,                                                    false,
# Line 698  bool RegionChooser::on_button_press_even Line 801  bool RegionChooser::on_button_press_even
801                                                    Gdk::POINTER_MOTION_HINT_MASK,                                                    Gdk::POINTER_MOTION_HINT_MASK,
802                                                    Gdk::Cursor::create(Gdk::SB_H_DOUBLE_ARROW),                                                    Gdk::Cursor::create(Gdk::SB_H_DOUBLE_ARROW),
803                                                    event->time);                                                    event->time);
804    # else
805                gdk_device_grab(
806                    Glib::wrap(event->device, true)->gobj(),
807                    get_window()->gobj(),
808                    GDK_OWNERSHIP_NONE,
809                    false,
810                    GdkEventMask(GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK |
811                                 GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON1_MOTION_MASK),
812                    Gdk::Cursor::create(
813                        Glib::wrap(event->device, true)->get_seat()->get_display(),
814                        Gdk::SB_H_DOUBLE_ARROW
815                    )->gobj(),
816                    event->time
817                );
818    # endif
819  #endif  #endif
820              resize.active = true;              resize.active = true;
821          } else {          } else {
# Line 716  bool RegionChooser::on_button_press_even Line 834  bool RegionChooser::on_button_press_even
834                                             Gdk::Cursor(Gdk::FLEUR),                                             Gdk::Cursor(Gdk::FLEUR),
835                                             event->time);                                             event->time);
836  #else  #else
837                  Glib::wrap(event->device, true)->grab(get_window(),  # if GTKMM_MAJOR_VERSION < 3 || (GTKMM_MAJOR_VERSION == 3 && GTKMM_MINOR_VERSION < 20)
838                                                        Gdk::OWNERSHIP_NONE,              Glib::wrap(event->device, true)->grab(get_window(),
839                                                        false,                                                    Gdk::OWNERSHIP_NONE,
840                                                        Gdk::BUTTON_RELEASE_MASK |                                                    false,
841                                                        Gdk::POINTER_MOTION_MASK |                                                    Gdk::BUTTON_RELEASE_MASK |
842                                                        Gdk::POINTER_MOTION_HINT_MASK,                                                    Gdk::POINTER_MOTION_MASK |
843                                                        Gdk::Cursor::create(Gdk::FLEUR),                                                    Gdk::POINTER_MOTION_HINT_MASK,
844                                                        event->time);                                                    Gdk::Cursor::create(Gdk::FLEUR),
845                                                      event->time);
846    # else
847                gdk_device_grab(
848                    Glib::wrap(event->device, true)->gobj(),
849                    get_window()->gobj(),
850                    GDK_OWNERSHIP_NONE,
851                    false,
852                    GdkEventMask(GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK |
853                                 GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON1_MOTION_MASK),
854                    Gdk::Cursor::create(
855                        Glib::wrap(event->device, true)->get_seat()->get_display(),
856                        Gdk::FLEUR
857                    )->gobj(),
858                    event->time
859                );
860    # endif
861  #endif  #endif
862                  move.active = true;                  move.active = true;
863                  move.offset = event->x - key_to_x(region->KeyRange.low, w);                  move.offset = event->x - key_to_x(region->KeyRange.low, w);
# Line 941  bool RegionChooser::on_motion_notify_eve Line 1075  bool RegionChooser::on_motion_notify_eve
1075  {  {
1076      Glib::RefPtr<Gdk::Window> window = get_window();      Glib::RefPtr<Gdk::Window> window = get_window();
1077      int x, y;      int x, y;
1078    #if HAS_GDKMM_SEAT
1079        x = event->x;
1080        y = event->y;
1081        Gdk::ModifierType state = Gdk::ModifierType(event->state);
1082    #else
1083      Gdk::ModifierType state = Gdk::ModifierType(0);      Gdk::ModifierType state = Gdk::ModifierType(0);
1084      window->get_pointer(x, y, state);      window->get_pointer(x, y, state);
1085    #endif
1086    
1087      // handle virtual MIDI keyboard      // handle virtual MIDI keyboard
1088      if (m_VirtKeybModeChoice.get_value() != VIRT_KEYBOARD_MODE_CHORD &&      if (m_VirtKeybModeChoice.get_value() != VIRT_KEYBOARD_MODE_CHORD &&
# Line 973  bool RegionChooser::on_motion_notify_eve Line 1113  bool RegionChooser::on_motion_notify_eve
1113  #if (GTKMM_MAJOR_VERSION == 2 && GTKMM_MINOR_VERSION < 90) || GTKMM_MAJOR_VERSION < 2  #if (GTKMM_MAJOR_VERSION == 2 && GTKMM_MINOR_VERSION < 90) || GTKMM_MAJOR_VERSION < 2
1114                  window->set_cursor(Gdk::Cursor(Gdk::SB_H_DOUBLE_ARROW));                  window->set_cursor(Gdk::Cursor(Gdk::SB_H_DOUBLE_ARROW));
1115  #else  #else
1116                  window->set_cursor(Gdk::Cursor::create(Gdk::SB_H_DOUBLE_ARROW));                  window->set_cursor(
1117    # if GTKMM_MAJOR_VERSION < 3 || (GTKMM_MAJOR_VERSION == 3 && GTKMM_MINOR_VERSION < 20)
1118                        Gdk::Cursor::create(Gdk::SB_H_DOUBLE_ARROW)
1119    # else
1120                        Gdk::Cursor::create(
1121                            Glib::wrap(event->device, true)->get_seat()->get_display(),
1122                            Gdk::SB_H_DOUBLE_ARROW
1123                        )
1124    # endif
1125                    );
1126  #endif  #endif
1127                  cursor_is_resize = true;                  cursor_is_resize = true;
1128              }              }
# Line 1053  void RegionChooser::show_region_properti Line 1202  void RegionChooser::show_region_properti
1202      // add "Keygroup" checkbox      // add "Keygroup" checkbox
1203      Gtk::CheckButton checkBoxKeygroup(_("Member of a Keygroup (Exclusive Group)"));      Gtk::CheckButton checkBoxKeygroup(_("Member of a Keygroup (Exclusive Group)"));
1204      checkBoxKeygroup.set_active(region->KeyGroup);      checkBoxKeygroup.set_active(region->KeyGroup);
1205    #if USE_GTKMM_BOX
1206        dialog.get_content_area()->pack_start(checkBoxKeygroup);
1207    #else
1208      dialog.get_vbox()->pack_start(checkBoxKeygroup);      dialog.get_vbox()->pack_start(checkBoxKeygroup);
1209    #endif
1210      checkBoxKeygroup.show();      checkBoxKeygroup.show();
1211      // add "Keygroup" spinbox      // add "Keygroup" spinbox
1212  #if (GTKMM_MAJOR_VERSION == 2 && GTKMM_MINOR_VERSION < 90) || GTKMM_MAJOR_VERSION < 2  #if (GTKMM_MAJOR_VERSION == 2 && GTKMM_MINOR_VERSION < 90) || GTKMM_MAJOR_VERSION < 2
# Line 1063  void RegionChooser::show_region_properti Line 1216  void RegionChooser::show_region_properti
1216      Gtk::SpinButton spinBox(Gtk::Adjustment::create(1, 1, 999));      Gtk::SpinButton spinBox(Gtk::Adjustment::create(1, 1, 999));
1217  #endif  #endif
1218      if (region->KeyGroup) spinBox.set_value(region->KeyGroup);      if (region->KeyGroup) spinBox.set_value(region->KeyGroup);
1219    #if USE_GTKMM_BOX
1220        dialog.get_content_area()->pack_start(spinBox);
1221    #else
1222      dialog.get_vbox()->pack_start(spinBox);      dialog.get_vbox()->pack_start(spinBox);
1223    #endif
1224      spinBox.show();      spinBox.show();
1225      // add OK and CANCEL buttons to the dialog      // add OK and CANCEL buttons to the dialog
1226    #if HAS_GTKMM_STOCK
1227      dialog.add_button(Gtk::Stock::OK, 0);      dialog.add_button(Gtk::Stock::OK, 0);
1228      dialog.add_button(Gtk::Stock::CANCEL, 1);      dialog.add_button(Gtk::Stock::CANCEL, 1);
1229    #else
1230        dialog.add_button(_("_OK"), 0);
1231        dialog.add_button(_("_Cancel"), 1);
1232    #endif
1233      dialog.set_position(Gtk::WIN_POS_MOUSE);      dialog.set_position(Gtk::WIN_POS_MOUSE);
1234    #if HAS_GTKMM_SHOW_ALL_CHILDREN
1235      dialog.show_all_children();      dialog.show_all_children();
1236    #endif
1237      if (!dialog.run()) { // OK selected ...      if (!dialog.run()) { // OK selected ...
1238          region->KeyGroup =          region->KeyGroup =
1239              (checkBoxKeygroup.get_active()) ? spinBox.get_value_as_int() : 0;              (checkBoxKeygroup.get_active()) ? spinBox.get_value_as_int() : 0;

Legend:
Removed from v.3363  
changed lines
  Added in v.3364

  ViewVC Help
Powered by ViewVC