1 |
/* |
/* |
2 |
* Copyright (C) 2006-2014 Andreas Persson |
* Copyright (C) 2006-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 |
29 |
#include <gtkmm/dialog.h> |
#include <gtkmm/dialog.h> |
30 |
|
|
31 |
#include "global.h" |
#include "global.h" |
32 |
|
#include "Settings.h" |
33 |
|
|
34 |
#define REGION_BLOCK_HEIGHT 30 |
#define REGION_BLOCK_HEIGHT 30 |
35 |
#define KEYBOARD_HEIGHT 40 |
#define KEYBOARD_HEIGHT 40 |
516 |
void RegionChooser::update_after_move(int pos) |
void RegionChooser::update_after_move(int pos) |
517 |
{ |
{ |
518 |
instrument_struct_to_be_changed_signal.emit(instrument); |
instrument_struct_to_be_changed_signal.emit(instrument); |
519 |
region->SetKeyRange(pos, pos + region->KeyRange.high - |
const int range = region->KeyRange.high - region->KeyRange.low; |
520 |
region->KeyRange.low); |
const int diff = pos - int(region->KeyRange.low); |
521 |
|
region->SetKeyRange(pos, pos + range); |
522 |
|
if (Settings::singleton()->moveRootNoteWithRegionMoved) { |
523 |
|
for (int i = 0; i < 256; ++i) { |
524 |
|
gig::DimensionRegion* dimrgn = region->pDimensionRegions[i]; |
525 |
|
if (!dimrgn || !dimrgn->pSample || !dimrgn->PitchTrack) continue; |
526 |
|
dimrgn->UnityNote += diff; |
527 |
|
} |
528 |
|
} |
529 |
regions.update(instrument); |
regions.update(instrument); |
530 |
instrument_changed.emit(); |
instrument_changed.emit(); |
531 |
instrument_struct_changed_signal.emit(instrument); |
instrument_struct_changed_signal.emit(instrument); |
547 |
} |
} |
548 |
} |
} |
549 |
|
|
550 |
|
// left mouse button double click |
551 |
|
if (event->type == GDK_2BUTTON_PRESS && event->button == 1) { |
552 |
|
if (event->y < REGION_BLOCK_HEIGHT) { |
553 |
|
// show dimension manager dialog for this region |
554 |
|
manage_dimensions(); |
555 |
|
} |
556 |
|
} |
557 |
|
|
558 |
if (event->y >= REGION_BLOCK_HEIGHT) return true; |
if (event->y >= REGION_BLOCK_HEIGHT) return true; |
559 |
if (event->type == GDK_BUTTON_PRESS && event->button == 3) { |
if (event->type == GDK_BUTTON_PRESS && event->button == 3) { |
560 |
gig::Region* r = get_region(k); |
gig::Region* r = get_region(k); |
630 |
return 0; |
return 0; |
631 |
} |
} |
632 |
|
|
633 |
|
void RegionChooser::set_region(gig::Region* region) { |
634 |
|
this->region = region; |
635 |
|
queue_draw(); |
636 |
|
region_selected(); |
637 |
|
dimensionManager.set_region(region); |
638 |
|
} |
639 |
|
|
640 |
void RegionChooser::motion_resize_region(int x, int y) |
void RegionChooser::motion_resize_region(int x, int y) |
641 |
{ |
{ |
642 |
const int w = get_width() - 1; |
const int w = get_width() - 1; |