From fa2fd6315c549b1d5f34fc9e00ae36b24be11c54 Mon Sep 17 00:00:00 2001 From: Oli Date: Fri, 03 Aug 2007 08:16:32 +0000 Subject: move tooltips, display string of highLightGate, color and speaker bug --- (limited to 'SynthLab') diff --git a/SynthLab/SynthLabConstants.py b/SynthLab/SynthLabConstants.py index 2bbd716..ef09661 100755 --- a/SynthLab/SynthLabConstants.py +++ b/SynthLab/SynthLabConstants.py @@ -1,3 +1,5 @@ +from gettext import gettext as _ + class SynthLabConstants: PIC_SIZE = 80 @@ -35,12 +37,9 @@ class SynthLabConstants: m.append( ( x, y ) ) OBJ_Y_LOC = 710 -# INIT_LOCATIONS = [ [330,OBJ_Y_LOC], [405,OBJ_Y_LOC], [480,OBJ_Y_LOC], [555, OBJ_Y_LOC], [15,OBJ_Y_LOC], [90,OBJ_Y_LOC], -# [170,OBJ_Y_LOC], [250, OBJ_Y_LOC], [635,OBJ_Y_LOC], [710,OBJ_Y_LOC], [785,OBJ_Y_LOC], [860, OBJ_Y_LOC], -# [600, 625]] - INIT_LOCATIONS = [ [450,OBJ_Y_LOC], [450,OBJ_Y_LOC], [450,OBJ_Y_LOC], + INIT_LOCATIONS = [ [450,OBJ_Y_LOC], [450,OBJ_Y_LOC], [450,OBJ_Y_LOC], [450, OBJ_Y_LOC], [225,OBJ_Y_LOC], [225,OBJ_Y_LOC], - [225,OBJ_Y_LOC], [225, OBJ_Y_LOC], [675,OBJ_Y_LOC], + [225,OBJ_Y_LOC], [225, OBJ_Y_LOC], [675,OBJ_Y_LOC], [675,OBJ_Y_LOC], [675,OBJ_Y_LOC], [675, OBJ_Y_LOC], [450, 625]] @@ -73,18 +72,193 @@ class SynthLabConstants: 'chorus': [.5, 1., 5., .5, 0, 3, 0, 10, 0, 30, 0, 1, FLOAT, FLOAT, FLOAT]} CONTROL_TYPES = ['lfo', 'rand', 'adsr', 'trackpadX', 'trackpadY'] - CONTROL_TYPES_SEL = ['lfosel', 'randsel', 'adsrsel', 'trackpadXsel', 'trackpadYsel'] - CONTROL_TYPES_PLUS = ['lfo+', 'rand+', 'adsr+', 'trackpadX+', 'trackpadY+'] + CONTROL_TYPES_SEL = [type + 'sel' for type in CONTROL_TYPES] + CONTROL_TYPES_PLUS = [type + '+' for type in CONTROL_TYPES] SOURCE_TYPES = ['fm', 'buzz', 'vco', 'pluck', 'noise', 'sample', 'voice', 'grain', 'addSynth'] - SOURCE_TYPES_SEL = ['fmsel', 'buzzsel', 'vcosel', 'plucksel', 'noisesel', 'samplesel', 'voicesel', 'grainsel', 'addSynthsel'] - SOURCE_TYPES_PLUS = ['fm+', 'buzz+', 'vco+', 'pluck+', 'noise+', 'sample+', 'voice+', 'grain+', 'addSynth+'] + SOURCE_TYPES_SEL = [type + 'sel' for type in SOURCE_TYPES] + SOURCE_TYPES_PLUS = [type + '+' for type in SOURCE_TYPES] FX_TYPES = ['wguide', 'distort','filter', 'ring', 'reverb', 'harmon', 'eq4band', 'chorus'] - FX_TYPES_SEL = ['wguidesel', 'distortsel','filtersel', 'ringsel', 'reverbsel', 'harmonsel', 'eq4bandsel', 'chorussel'] - FX_TYPES_PLUS = ['wguide+', 'distort+','filter+', 'ring+', 'reverb+', 'harmon+', 'eq4band+', 'chorus+'] + FX_TYPES_SEL = [type + 'sel' for type in FX_TYPES] + FX_TYPES_PLUS = [type + '+' for type in FX_TYPES] OUTPUT_TYPE = ['adsr'] OUTPUT_TYPE_SEL = ['adsrsel'] CHOOSE_TYPE = [CONTROL_TYPES, SOURCE_TYPES, FX_TYPES, OUTPUT_TYPE] CHOOSE_TYPE2 = [CONTROL_TYPES_SEL, SOURCE_TYPES_SEL, FX_TYPES_SEL, OUTPUT_TYPE_SEL] CHOOSE_TYPE_PLUS = [CONTROL_TYPES_PLUS, SOURCE_TYPES_PLUS, FX_TYPES_PLUS] - PRESET = ['docu1', 'docu2', 'docu3', 'docu4', 'docu5', 'docu6', 'docu7', 'docu8', 'docu9', 'docu10'] +# SynthLab Tooltips + SOURCE = _('Source') + EFFECT = _('Effect') + CONTROL = _('Control') + SOUNDOUT = _('Sound Output') + + #Controls + LFO = _('LFO') + AMP = _('Amplitude') + FREQ = _('Frequency') + WAVEFORM = _('Waveform') + LFO_WAVEFORMS = [_('Sine'), _('Triangle'), _('Bi-Square'), _('Uni-Square'), _('Sawtooth'), _('Sawtooth-down')] + OFFSET = _('Offset') + + RANDOM = _('Random') + MIN = _('Minimum') + MAX = _('Maximum') + FREQ = FREQ + SEED = _('Seed') + + ADSR = _('Envelope') + ATTACK = _('Attack') + DECAY = _('Decay') + SUSTAIN = _('Sustain') + RELEASE = _('Release') + + TRACKPADX = _('Trackpad X') + MIN = MIN + MAX = MAX + SCALING = _('Scaling') + SCALING_TYPES = [_('Lin'), _('Log')] + POLL = _('Poll time') + + TRACKPADY = _('Trackpad Y') + MIN = MIN + MAX = MAX + SCALING = SCALING + SCALING_TYPES = SCALING_TYPES + POLL = POLL + + #Source + FM = _('FM') + CAR = _('Carrier Frequency') + MOD = _('Modulator Frequency') + INDEX = _('Index') + GAIN = _('Gain') + + BUZZ = _('Buzz') + FREQ = FREQ + NHARM = _('Number of harmonics') + FSLOPE = _('Filter Slope') + GAIN = GAIN + + VCO = _('VCO') + FREQ = FREQ + WAVEFORM = WAVEFORM + VCO_WAVEFORMS = [_('Sawtooth'), _('Square'), _('Triangle')] + FSLOPE = FSLOPE + GAIN = GAIN + + PLUCK = _('Pluck') + FREQ = FREQ + LFILTER = _('Lowpass Filter') + VIBRATO = _('Vibrato') + GAIN = GAIN + + NOISE = _('Noise') + NOISETYPE = _('Type') + NOISE_TYPES = [_('White'), _('Pink'), _('Gauss')] + FREQ = FREQ + BANDWITH = _('Bandwith') + GAIN = GAIN + + SAMPLE = _('Sound Sample') + FREQ = FREQ + SAMPLEN = _('Sample Number') + SAMPLE_NAMES = _('Sample name') + LFILTER = LFILTER + GAIN = GAIN + + VOICE = _('Voice') + FREQ = FREQ + VOWEL = _('Vowel') + VOWEL_TYPES = ['i', 'e', 'ee', 'a', 'u', 'o1', 'o2', 'oa', 'oe'] + VIBRATO = VIBRATO + GAIN = GAIN + + GRAIN = _('Grain') + FREQ = FREQ + SAMPLEN = SAMPLEN + INDEX = _('Index') + GAIN = GAIN + + ADDSYNTH = _('Additive Synthesis') + FREQ = FREQ + SPREAD = _('Spread') + WAVE = _('Waveform') + GAIN = GAIN + + #Effects + DELAY = _('Delay') + FREQ = FREQ + LFILTER = LFILTER + FEEDBACK = _('Feedback') + GAIN = GAIN + + DIST = _('Distortion') + FREQ = FREQ + RESON = _('Resonance') + DISTL = _('Distotion Level') + GAIN = GAIN + + FILTER = _('Filter') + FREQ = FREQ + FSLOPE = FSLOPE + FTYPE = _('Type') + FILTER_TYPES = [_('Lowpass'), _('Highpass'), _('Bandpass')] + GAIN = GAIN + + RINGMOD = _('Ring Modulator') + FREQ = FREQ + MIX = _('Mix') + WAVEFORM = WAVEFORM + LFO_WAVEFORMS = LFO_WAVEFORMS + GAIN = GAIN + + REVERB = _('Reverb') + REVERBD = _('Length') + REVERBF = _('Lowpass Filter') + REVERBL = _('Reverb Level') + GAIN = GAIN + + HARMON = _('Harmonizer') + FREQ = FREQ + DRYDELAY = _('Dry delay') + MIX = MIX + GAIN = GAIN + + EQ4BAND = _('Equalizer 4 bands') + FREQ1 = _('Band one gain') + FREQ2 = _('Band two gain') + FREQ3 = _('Band three gain') + FREQ4 = _('Band four gain') + + CHORUS = _('Chorus') + LFODEPTH = _('LFO Depth') + LFOFREQ = _('LFO Frequency') + DELAY = _('Delay') + FEEDBACK = FEEDBACK + + SYNTHTYPES = [[LFO, RANDOM, ADSR, TRACKPADX, TRACKPADY], + [FM, BUZZ, VCO, PLUCK, NOISE, SAMPLE, VOICE, GRAIN, ADDSYNTH], + [DELAY, DIST, FILTER, RINGMOD, REVERB, HARMON, EQ4BAND, CHORUS], [ADSR]] + + SYNTHPARA = { _('lfo'): [AMP, FREQ, WAVEFORM, OFFSET], + _('rand'): [MIN, MAX, FREQ, SEED], + _('adsr'): [ATTACK, DECAY, SUSTAIN, RELEASE], + _('trackpadX'): [MIN, MAX, SCALING, POLL], + _('trackpadY'): [MIN, MAX, SCALING, POLL], + _('fm'): [CAR, MOD, INDEX, GAIN], + _('buzz'): [FREQ, NHARM, FSLOPE, GAIN], + _('vco'): [FREQ, WAVEFORM, FSLOPE, GAIN], + _('pluck'): [FREQ, LFILTER, VIBRATO, GAIN], + _('noise'): [NOISETYPE, FREQ, BANDWITH, GAIN], + _('sample'): [FREQ, SAMPLEN, LFILTER, GAIN], + _('voice'): [FREQ, VOWEL, VIBRATO, GAIN], + _('grain'): [FREQ, SAMPLEN, INDEX, GAIN], + _('addSynth'): [FREQ, SPREAD, WAVE, GAIN], + _('wguide'): [FREQ, LFILTER, FEEDBACK, GAIN], + _('distort'): [FREQ, RESON, DISTL, GAIN], + _('filter'): [FREQ, FSLOPE, FTYPE, GAIN], + _('ring'): [FREQ, MIX, WAVEFORM, GAIN], + _('reverb'): [REVERBD, REVERBF, REVERBL, GAIN], + _('harmon'): [FREQ, DRYDELAY, MIX, GAIN], + _('eq4band'): [FREQ1, FREQ2, FREQ3, FREQ4], + _('chorus'): [LFODEPTH, LFOFREQ, DELAY, FEEDBACK]} diff --git a/SynthLab/SynthLabWindow.py b/SynthLab/SynthLabWindow.py index 53c35c0..eaf8fd6 100644 --- a/SynthLab/SynthLabWindow.py +++ b/SynthLab/SynthLabWindow.py @@ -22,7 +22,6 @@ from SynthLab.SynthLabToolbars import mainToolbar from SynthLab.SynthLabToolbars import presetToolbar from Util.Trackpad import Trackpad from SubActivity import SubActivity -Tooltips = Config.Tooltips as_window = False @@ -51,7 +50,6 @@ class SynthLabWindow(SubActivity): self.recordWait = 0 self.recCount = 0 self.duration = 2 - self.new = True self.viewType = '' self.viewParam = '' self.curSlider = 1 @@ -85,7 +83,6 @@ class SynthLabWindow(SubActivity): self.lineWidthMUL4SQ = self.lineWidthMUL4*self.lineWidthMUL4 self.clockStart = 0 self.sample_names = [name for i in range( len( Config.INSTRUMENTS ) ) for name in Config.INSTRUMENTS.keys() if Config.INSTRUMENTS[ name ].instrumentId == i ] - self.tooltips = gtk.Tooltips() if as_window: self.add_events(gtk.gdk.KEY_PRESS_MASK|gtk.gdk.KEY_RELEASE_MASK) @@ -131,7 +128,7 @@ class SynthLabWindow(SubActivity): comboMenu = ToolComboBox(self.objComboBox) menuBox.pack_start(comboMenu) self.infoBox.pack_start(menuBox, False, False, 5) - + slidersBox = gtk.HBox() #fake values @@ -297,7 +294,6 @@ class SynthLabWindow(SubActivity): def select(self, i): if i == self.instanceID: return - self.new = False if self.instanceID > 0: self.invalidate_rect( self.bounds[self.instanceID][0], self.bounds[self.instanceID][1]-2, SynthLabConstants.PIC_SIZE, SynthLabConstants.PIC_SIZE_HIGHLIGHT ) self.instanceID = i @@ -314,10 +310,10 @@ class SynthLabWindow(SubActivity): else: self.choosenType = 0 self.objComboBox.set_active(self.choosenType) - if self.choosenType == oldChoosen: - self.changeObject(self.objComboBox) - else: - self.updateViewer() + #if self.choosenType != oldChoosen: + self.changeObject(self.objComboBox) + #else: + self.updateViewer() #Not sure about this self.slider1.grab_focus() self.sendTables(self.slider1, 1) @@ -325,64 +321,59 @@ class SynthLabWindow(SubActivity): def changeObject(self, widget): self.choosenType = widget.props.value self.resize() - self.synthObjectsParameters.setType(self.instanceID, self.choosenType) - self.writeTables( self.synthObjectsParameters.types, - self.synthObjectsParameters.controlsParameters, - self.synthObjectsParameters.sourcesParameters, + if self.instanceID != 12: + self.synthObjectsParameters.setType(self.instanceID, self.choosenType) + self.writeTables( self.synthObjectsParameters.types, + self.synthObjectsParameters.controlsParameters, + self.synthObjectsParameters.sourcesParameters, self.synthObjectsParameters.fxsParameters ) self.updateViewer() def updateViewer(self): - self.viewType = Tooltips.SYNTHTYPES[self.objectType][self.choosenType] + self.viewType = SynthLabConstants.SYNTHTYPES[self.objectType][self.choosenType] selectedType = SynthLabConstants.CHOOSE_TYPE[self.objectType][self.choosenType] - self.viewParam = Tooltips.SYNTHPARA[selectedType][self.curSlider-1] + ': ' + self.recallSliderValue(self.curSlider) + self.viewParam = SynthLabConstants.SYNTHPARA[selectedType][self.curSlider-1] + ': ' + self.recallSliderValue(self.curSlider) self.infoText = self.viewType + '\n\n' + self.viewParam self.textBuf.set_text(self.infoText) def recallSliderValue( self, num ): if num == 1: - if Tooltips.SYNTHTYPES[self.objectType][self.choosenType] == Tooltips.NOISE: - return Tooltips.NOISE_TYPES[int(self.slider1Val)] + if SynthLabConstants.SYNTHTYPES[self.objectType][self.choosenType] == SynthLabConstants.NOISE: + return SynthLabConstants.NOISE_TYPES[int(self.slider1Val)] else: return '%.2f' % self.slider1Val if num == 2: - if Tooltips.SYNTHTYPES[self.objectType][self.choosenType] == Tooltips.VCO: - return Tooltips.VCO_WAVEFORMS[int(self.slider2Val)] - elif Tooltips.SYNTHTYPES[self.objectType][self.choosenType] == Tooltips.SAMPLE or Tooltips.SYNTHTYPES[self.objectType][self.choosenType] == Tooltips.GRAIN: + if SynthLabConstants.SYNTHTYPES[self.objectType][self.choosenType] == SynthLabConstants.VCO: + return SynthLabConstants.VCO_WAVEFORMS[int(self.slider2Val)] + elif SynthLabConstants.SYNTHTYPES[self.objectType][self.choosenType] == SynthLabConstants.SAMPLE or SynthLabConstants.SYNTHTYPES[self.objectType][self.choosenType] == SynthLabConstants.GRAIN: return self.sample_names[int(self.slider2Val)] - elif Tooltips.SYNTHTYPES[self.objectType][self.choosenType] == Tooltips.VOICE: - return Tooltips.VOWEL_TYPES[int(self.slider2Val)] + elif SynthLabConstants.SYNTHTYPES[self.objectType][self.choosenType] == SynthLabConstants.VOICE: + return SynthLabConstants.VOWEL_TYPES[int(self.slider2Val)] else: return '%.2f' % self.slider2Val if num == 3: - if Tooltips.SYNTHTYPES[self.objectType][self.choosenType] == Tooltips.LFO: - return Tooltips.LFO_WAVEFORMS[int(self.slider3Val)] - elif Tooltips.SYNTHTYPES[self.objectType][self.choosenType] == Tooltips.TRACKPADX: - return Tooltips.SCALING_TYPES[int(self.slider3Val)] - elif Tooltips.SYNTHTYPES[self.objectType][self.choosenType] == Tooltips.TRACKPADY: - return Tooltips.SCALING_TYPES[int(self.slider3Val)] - elif Tooltips.SYNTHTYPES[self.objectType][self.choosenType] == Tooltips.FILTER: - return Tooltips.FILTER_TYPES[int(self.slider3Val)] - elif Tooltips.SYNTHTYPES[self.objectType][self.choosenType] == Tooltips.RINGMOD: - return Tooltips.LFO_WAVEFORMS[int(self.slider3Val)] + if SynthLabConstants.SYNTHTYPES[self.objectType][self.choosenType] == SynthLabConstants.LFO: + return SynthLabConstants.LFO_WAVEFORMS[int(self.slider3Val)] + elif SynthLabConstants.SYNTHTYPES[self.objectType][self.choosenType] == SynthLabConstants.TRACKPADX: + return SynthLabConstants.SCALING_TYPES[int(self.slider3Val)] + elif SynthLabConstants.SYNTHTYPES[self.objectType][self.choosenType] == SynthLabConstants.TRACKPADY: + return SynthLabConstants.SCALING_TYPES[int(self.slider3Val)] + elif SynthLabConstants.SYNTHTYPES[self.objectType][self.choosenType] == SynthLabConstants.FILTER: + return SynthLabConstants.FILTER_TYPES[int(self.slider3Val)] + elif SynthLabConstants.SYNTHTYPES[self.objectType][self.choosenType] == SynthLabConstants.RINGMOD: + return SynthLabConstants.LFO_WAVEFORMS[int(self.slider3Val)] else: return '%.2f' % self.slider3Val if num == 4: return '%.2f' % self.slider4Val def resize( self ): selectedType = SynthLabConstants.CHOOSE_TYPE[self.objectType][self.choosenType] - if self.new: - slider1Init = SynthLabConstants.TYPES[selectedType][0] - slider2Init = SynthLabConstants.TYPES[selectedType][1] - slider3Init = SynthLabConstants.TYPES[selectedType][2] - slider4Init = SynthLabConstants.TYPES[selectedType][3] - else: - parametersTable = self.synthObjectsParameters.choiceParamsSet[self.objectType] - tablePos = (self.instanceID % 4)*4 - slider1Init = parametersTable[tablePos] - slider2Init = parametersTable[tablePos+1] - slider3Init = parametersTable[tablePos+2] - slider4Init = parametersTable[tablePos+3] + parametersTable = self.synthObjectsParameters.choiceParamsSet[self.objectType] + tablePos = (self.instanceID % 4)*4 + slider1Init = parametersTable[tablePos] + slider2Init = parametersTable[tablePos+1] + slider3Init = parametersTable[tablePos+2] + slider4Init = parametersTable[tablePos+3] slider1Min = SynthLabConstants.TYPES[selectedType][4] slider1Max = SynthLabConstants.TYPES[selectedType][5] @@ -409,8 +400,6 @@ class SynthLabWindow(SubActivity): self.slider2.set_digits(slider2Snap) self.slider3.set_digits(slider3Snap) - self.new = True - def sendTables( self, widget, data ): self.curSlider = data self.slider1Val = self.p1Adjust.value @@ -429,7 +418,7 @@ class SynthLabWindow(SubActivity): elif self.objectType == 2: for i in range(4): self.synthObjectsParameters.setFxParameter((self.instanceID % 4)*4+i, sliderListValue[i]) - else: + elif self.objectType == 3: for i in range(4): self.synthObjectsParameters.setOutputParameter(i, sliderListValue[i]) self.updateViewer() @@ -438,7 +427,7 @@ class SynthLabWindow(SubActivity): if self.instanceID != 12: self.writeTables( self.synthObjectsParameters.types, self.synthObjectsParameters.controlsParameters, self.synthObjectsParameters.sourcesParameters, self.synthObjectsParameters.fxsParameters ) - + def handleSliderEnter(self, widget, data, slider): widget.grab_focus() self.sendTables(widget, slider) @@ -539,7 +528,7 @@ class SynthLabWindow(SubActivity): self.highlightWire( None ) self.highlightGate( None ) - + if self.action == "drag-object": self.doneAction() elif self.action == "draw-wire": @@ -558,7 +547,7 @@ class SynthLabWindow(SubActivity): self.highlightWire( None ) self.highlightGate( None ) - + if event.button == 1: for i in range(self.objectCount-1,-1,-1): if self.bounds[i][0] < event.x < self.bounds[i][2] and self.bounds[i][1] < event.y < self.bounds[i][3]: @@ -584,7 +573,7 @@ class SynthLabWindow(SubActivity): i = self.wireUnderLoc( event.x, event.y ) if i >= 0: self.deleteWire( i ) - + def handleMotion( self, widget, event ): if event.is_hint: @@ -714,6 +703,7 @@ class SynthLabWindow(SubActivity): # pass in obj = None to clear def highlightGate( self, obj, gate = None, reject = False ): + print obj, gate if obj == None: self.parameterUpdate('') if self.overGateObj != obj or self.overGate != gate or self.overGateReject != reject: @@ -728,15 +718,24 @@ class SynthLabWindow(SubActivity): y = self.locations[self.overGateObj][1] + self.overGate[3][1] - self.overGateSizeDIV2 self.overGateLoc = ( x, y ) self.invalidate_rect( self.overGateLoc[0], self.overGateLoc[1], self.overGateSize, self.overGateSize ) - if obj != 12: - choosen = SynthLabConstants.CHOOSE_TYPE[obj/4][self.typesTable[obj]] - _str = Tooltips.SYNTHTYPES[obj/4][self.typesTable[obj]] + ': ' + Tooltips.SYNTHPARA[choosen][gate[1]] - if gate[0] == 1: + if True: #obj != 12: + if gate[0] == 0: + _str = SynthLabConstants.SYNTHTYPES[obj/4][self.typesTable[obj]] + ': output' + elif gate[0] == 1: + choosen = SynthLabConstants.CHOOSE_TYPE[obj/4][self.typesTable[obj]] + _str = SynthLabConstants.SYNTHTYPES[obj/4][self.typesTable[obj]] + ': ' + SynthLabConstants.SYNTHPARA[choosen][gate[1]] if self.overGateObj == self.instanceID: gateNum = self.overGate[1]+1 exec 'self.slider%s.grab_focus()' % str(gateNum) - exec 'self.sendTables(self.slider%s, %d)' % (str(gateNum), gateNum) - self.parameterUpdate( _str ) + exec 'self.sendTables(self.slider%s, %d)' % (str(gateNum), gateNum) + elif gate[0] == 2: + _str = SynthLabConstants.SYNTHTYPES[obj/4][self.typesTable[obj]] + ': sound output' + elif gate[0] == 3: + if obj != 12: + _str = SynthLabConstants.SYNTHTYPES[obj/4][self.typesTable[obj]] + ': sound input' + else: + _str = 'Send sound to the speakers' + self.parameterUpdate( _str ) def startDragObject( self, i ): self.dragObject = i @@ -765,7 +764,7 @@ class SynthLabWindow(SubActivity): for i in self.inputMap[self.dragObject]: self.invalidate_rect( self.cBounds[i][0], self.cBounds[i][1], self.cBounds[i][2], self.cBounds[i][3], False ) - if y > self.separatorY: self.potentialDisconnect = True + if y > (self.separatorY-5): self.potentialDisconnect = True else: self.potentialDisconnect = False self.locations[self.dragObject][0] = int( x ) @@ -938,7 +937,7 @@ class SynthLabWindow(SubActivity): type = i >> 2 self.gc.set_clip_origin( self.bounds[i][0]-SynthLabConstants.PIC_SIZE*type, self.bounds[i][1] ) buf.draw_drawable( self.gc, self.pixmap[i], 0, 0, self.bounds[i][0], self.bounds[i][1], SynthLabConstants.PIC_SIZE, SynthLabConstants.PIC_SIZE ) - + if self.dragObject != self.instanceID: i = self.instanceID type = i >> 2 -- cgit v0.9.1