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

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

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

revision 2664 by schoenebeck, Sat Jul 5 19:43:14 2014 UTC revision 2844 by persson, Sun Sep 20 08:49:40 2015 UTC
# Line 1  Line 1 
1  /*  /*
2   * Copyright (C) 2007-2013 Andreas Persson   * Copyright (C) 2007-2015 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 17  Line 17 
17   * 02110-1301 USA.   * 02110-1301 USA.
18   */   */
19    
20    #include <glibmmconfig.h>
21    // threads.h must be included first to be able to build with
22    // G_DISABLE_DEPRECATED
23    #if (GLIBMM_MAJOR_VERSION == 2 && GLIBMM_MINOR_VERSION == 31 && GLIBMM_MICRO_VERSION >= 2) || \
24        (GLIBMM_MAJOR_VERSION == 2 && GLIBMM_MINOR_VERSION > 31) || GLIBMM_MAJOR_VERSION > 2
25    #include <glibmm/threads.h>
26    #endif
27    
28  #include "gigedit.h"  #include "gigedit.h"
29    
30    #include <gtkmmconfig.h>
31    #if GTKMM_MAJOR_VERSION < 3
32    #include <gdkmm/region.h>
33    #endif
34  #include <glibmm/dispatcher.h>  #include <glibmm/dispatcher.h>
35  #include <glibmm/main.h>  #include <glibmm/main.h>
36  #include <gtkmm/main.h>  #include <gtkmm/main.h>
# Line 39  Line 51 
51  #endif  #endif
52    
53  //TODO: (hopefully) just a temporary nasty hack for launching gigedit on the main thread on Mac (see comments below in this file for details)  //TODO: (hopefully) just a temporary nasty hack for launching gigedit on the main thread on Mac (see comments below in this file for details)
54  #if defined(__APPLE__) // the following global external variables are defined in LinuxSampler's global_private.cpp ...  #if defined(__APPLE__) && HAVE_LINUXSAMPLER // the following global external variables are defined in LinuxSampler's global_private.cpp ...
55  extern bool g_mainThreadCallbackSupported;  extern bool g_mainThreadCallbackSupported;
56  extern void (*g_mainThreadCallback)(void* info);  extern void (*g_mainThreadCallback)(void* info);
57  extern void* g_mainThreadCallbackInfo;  extern void* g_mainThreadCallbackInfo;
# Line 58  namespace { Line 70  namespace {
70  //  //
71  class GigEditState : public sigc::trackable {  class GigEditState : public sigc::trackable {
72  public:  public:
73      GigEditState(GigEdit* parent) : parent(parent), instrument(NULL) { }      GigEditState(GigEdit* parent) :
74            window(0), parent(parent), instrument(0) { }
75      void run(gig::Instrument* pInstrument);      void run(gig::Instrument* pInstrument);
76    
77      MainWindow* window;      MainWindow* window;
# Line 235  void connect_signals(GigEdit* gigedit, M Line 248  void connect_signals(GigEdit* gigedit, M
248      mainwindow->signal_keyboard_key_released().connect(      mainwindow->signal_keyboard_key_released().connect(
249          gigedit->signal_keyboard_key_released().make_slot()          gigedit->signal_keyboard_key_released().make_slot()
250      );      );
251        mainwindow->signal_switch_sampler_instrument().connect(
252            gigedit->signal_switch_sampler_instrument().make_slot()
253        );
254  }  }
255    
256  } // namespace  } // namespace
# Line 277  int GigEdit::run(gig::Instrument* pInstr Line 293  int GigEdit::run(gig::Instrument* pInstr
293    
294  void GigEdit::on_note_on_event(int key, int velocity) {  void GigEdit::on_note_on_event(int key, int velocity) {
295      if (!this->state) return;      if (!this->state) return;
296      GigEditState* state = (GigEditState*) this->state;      GigEditState* state = static_cast<GigEditState*>(this->state);
297      state->window->signal_note_on().emit(key, velocity);      state->window->signal_note_on().emit(key, velocity);
298  }  }
299    
300  void GigEdit::on_note_off_event(int key, int velocity) {  void GigEdit::on_note_off_event(int key, int velocity) {
301      if (!this->state) return;      if (!this->state) return;
302      GigEditState* state = (GigEditState*) this->state;      GigEditState* state = static_cast<GigEditState*>(this->state);
303      state->window->signal_note_off().emit(key, velocity);      state->window->signal_note_off().emit(key, velocity);
304  }  }
305    
# Line 335  sigc::signal<void, int/*key*/, int/*velo Line 351  sigc::signal<void, int/*key*/, int/*velo
351      return keyboard_key_released_signal;      return keyboard_key_released_signal;
352  }  }
353    
354    sigc::signal<void, gig::Instrument*>& GigEdit::signal_switch_sampler_instrument() {
355        return switch_sampler_instrument_signal;
356    }
357    
358  #ifdef OLD_THREADS  #ifdef OLD_THREADS
359  Glib::StaticMutex GigEditState::mutex = GLIBMM_STATIC_MUTEX_INIT;  Glib::StaticMutex GigEditState::mutex = GLIBMM_STATIC_MUTEX_INIT;
360  #else  #else
# Line 403  void GigEditState::run(gig::Instrument* Line 423  void GigEditState::run(gig::Instrument*
423      static bool main_loop_started = false;      static bool main_loop_started = false;
424      instrument = pInstrument;      instrument = pInstrument;
425      if (!main_loop_started) {      if (!main_loop_started) {
426  #if defined(__APPLE__)  #if defined(__APPLE__) && HAVE_LINUXSAMPLER
427          // spawn GUI on main thread :          // spawn GUI on main thread :
428          //     On OS X the Gtk GUI can only be launched on a process's "main"          //     On OS X the Gtk GUI can only be launched on a process's "main"
429          //     thread. When trying to launch the Gtk GUI on any other thread,          //     thread. When trying to launch the Gtk GUI on any other thread,

Legend:
Removed from v.2664  
changed lines
  Added in v.2844

  ViewVC Help
Powered by ViewVC