From becc8ebb379df6805d8a014c6b1a86a9e797456d Mon Sep 17 00:00:00 2001 From: davidus01 Date: Sun, 18 Jul 2010 22:00:51 +0000 Subject: editor: resize note by mouse - first & last 20% of note use to resize note git-svn-id: svn://svn.code.sf.net/p/ultrastardx/svn/branches/experimental@2583 b956fd51-792f-4845-bead-9b4dfca2ff2c --- us_maker_edition/src/screens/UScreenEditSub.pas | 103 +++++++++++++++++------- 1 file changed, 76 insertions(+), 27 deletions(-) (limited to 'us_maker_edition/src') diff --git a/us_maker_edition/src/screens/UScreenEditSub.pas b/us_maker_edition/src/screens/UScreenEditSub.pas index 31d9ea76..83d0e8d4 100644 --- a/us_maker_edition/src/screens/UScreenEditSub.pas +++ b/us_maker_edition/src/screens/UScreenEditSub.pas @@ -203,10 +203,14 @@ type // player static picture playerIconId: array[1..2] of integer; // currentX, CurrentY - CurrentX: integer; - CurrentY: integer; - LastX: integer; - LastY: integer; + CurrentX: integer; + CurrentY: integer; + LastX: integer; + LastY: integer; + resize_note_left: boolean; + resize_note_right: boolean; + move_note: boolean; + Lyric: TEditorLyrics; @@ -452,6 +456,7 @@ begin PasteText else Log.LogStatus('PasteText: invalid range', 'TScreenEditSub.ParseInput'); + Lyric.AddLine(Lines[0].Current); end; if SDL_ModState = KMOD_LCTRL + KMOD_LSHIFT then @@ -910,7 +915,7 @@ begin AudioPlayback.Stop; PlaySentence := false; PlayOne := false; - PlayVideo := false; + PlayVideo := false; {$IFDEF UseMIDIPort} MidiOut.PutShort($B1, $7, floor(1.27*SelectsS[VolumeMidiSlideId].SelectedOption)); MidiOut.PutShort($81, Lines[0].Line[Lines[0].Current].Note[MidiLastNote].Tone + 60, 127); @@ -1281,12 +1286,35 @@ begin if (BtnDown) then begin - if (MouseButton = SDL_BUTTON_RIGHT) then + if (MouseButton = SDL_BUTTON_RIGHT) or (MouseButton = SDL_BUTTON_LEFT) then begin LastPressedMouseType := MouseButton; LastX := CurrentX; LastY := CurrentY; + + move_note := true; + resize_note_left := false; + resize_note_right := false; + // check current mouse position to resize note - 20% of left or right note to resize + if (Interactions[nBut].Typ = iButton) then + if CurrentX < Button[Interactions[nBut].Num].X + Button[Interactions[nBut].Num].W*0.2 then + begin + // selected left side note - 20% + resize_note_left := true; + resize_note_right := false; + move_note := false; + end; + if (Interactions[nBut].Typ = iButton) then + if CurrentX > Button[Interactions[nBut].Num].X + Button[Interactions[nBut].Num].W - Button[Interactions[nBut].Num].W*0.2 then + begin + // selected right side note - 20% + resize_note_left := false; + resize_note_right := true; + move_note := false; + end; + end; + if (MouseButton = SDL_BUTTON_LEFT) then begin //click button or SelectS @@ -1296,9 +1324,6 @@ begin end else Action := maReturn; - LastPressedMouseType := MouseButton; - LastX := CurrentX; - LastY := CurrentY; end; // move notes by mouse move (left-right) tempR := 720 / (Lines[0].Line[Lines[0].Current].End_ - Lines[0].Line[Lines[0].Current].Note[0].Start); @@ -1308,7 +1333,22 @@ begin if (Floor((CurrentX-40)/tempr) > Floor((LastX-40)/tempr)) or (Floor((CurrentX-40)/tempr) < Floor((LastX-40)/tempr)) then begin CopyToUndo; - MoveAllToEnd(floor((CurrentX-40)/(720 / (Lines[0].Line[Lines[0].Current].End_ + floor((CurrentX-40)/tempr - Floor((LastX-40)/tempr)) - Lines[0].Line[Lines[0].Current].Note[0].Start)) - Floor((LastX-40)/tempr))); + i := floor((currentx-40) / floor(tempr)) - floor((lastx-40) / floor(tempr)); + if move_note then + MoveAllToEnd(i); + if (resize_note_right) and (Lines[0].Line[Lines[0].Current].Note[CurrentNote].Length + i > 0) then + begin + MoveAllToEnd(i); + Lines[0].Line[Lines[0].Current].Note[CurrentNote].Start := Lines[0].Line[Lines[0].Current].Note[CurrentNote].Start - i; + Lines[0].Line[Lines[0].Current].Note[CurrentNote].Length := Lines[0].Line[Lines[0].Current].Note[CurrentNote].Length + i; + end; + if (resize_note_left) and (Lines[0].Line[Lines[0].Current].Note[CurrentNote].Length - i > 0) then + begin + Lines[0].Line[Lines[0].Current].Note[CurrentNote].Start := Lines[0].Line[Lines[0].Current].Note[CurrentNote].Start + i; + Lines[0].Line[Lines[0].Current].Note[CurrentNote].Length := Lines[0].Line[Lines[0].Current].Note[CurrentNote].Length - i; + if CurrentNote = 0 then + Lines[0].Line[Lines[0].Current].Start := Lines[0].Line[Lines[0].Current].Start - i; + end; LastX := CurrentX; GoldenRec.KillAll; ShowInteractiveBackground; @@ -1327,28 +1367,34 @@ begin //move one note by mouse move if (MouseButton = 0) and (LastPressedMouseType = SDL_BUTTON_LEFT) then begin - if (Floor((CurrentX-40)/tempr) > Floor((LastX-40)/tempr)) or (Floor((CurrentX-40)/tempr) < Floor((LastX-40)/tempr)) then + if (Floor((CurrentX-40)/tempr) > Floor((LastX-40)/tempr)) or (Floor((CurrentX-40)/tempr) < Floor((LastX-40)/tempr)) then begin CopyToUndo; // move left & right - if Floor((CurrentX-40)/tempr) > Floor((LastX-40)/tempr) then - begin - Inc(Lines[0].Line[Lines[0].Current].Note[CurrentNote].Start); - if CurrentNote = 0 then - begin - Inc(Lines[0].Line[Lines[0].Current].Start); - end; - if CurrentNote = Lines[0].Line[Lines[0].Current].HighNote then - Inc(Lines[0].Line[Lines[0].Current].End_); - end - else - begin - Dec(Lines[0].Line[Lines[0].Current].Note[CurrentNote].Start); + i := floor((currentx-40) / floor(tempr)) - floor((lastx-40) / floor(tempr)); + if move_note then + begin + Lines[0].Line[Lines[0].Current].Note[CurrentNote].Start := Lines[0].Line[Lines[0].Current].Note[CurrentNote].Start +i; if CurrentNote = 0 then - Dec(Lines[0].Line[Lines[0].Current].Start); + Lines[0].Line[Lines[0].Current].Start := Lines[0].Line[Lines[0].Current].Start - i; if CurrentNote = Lines[0].Line[Lines[0].Current].HighNote then - Dec(Lines[0].Line[Lines[0].Current].End_); - end; + Lines[0].Line[Lines[0].Current].End_ := Lines[0].Line[Lines[0].Current].End_ + i; + end; + // resize note + if (resize_note_right) and (Lines[0].Line[Lines[0].Current].Note[CurrentNote].Length + i > 0) then + begin + Lines[0].Line[Lines[0].Current].Note[CurrentNote].Length := Lines[0].Line[Lines[0].Current].Note[CurrentNote].Length + i; + if CurrentNote = Lines[0].Line[Lines[0].Current].HighNote then + Lines[0].Line[Lines[0].Current].End_ := Lines[0].Line[Lines[0].Current].End_ + i; + end; + if (resize_note_left) and (Lines[0].Line[Lines[0].Current].Note[CurrentNote].Length - i > 0) then + begin + Lines[0].Line[Lines[0].Current].Note[CurrentNote].Start := Lines[0].Line[Lines[0].Current].Note[CurrentNote].Start + i; + Lines[0].Line[Lines[0].Current].Note[CurrentNote].Length := Lines[0].Line[Lines[0].Current].Note[CurrentNote].Length - i; + if CurrentNote = 0 then + Lines[0].Line[Lines[0].Current].Start := Lines[0].Line[Lines[0].Current].Start + i; + end; + LastX := CurrentX; GoldenRec.KillAll; ShowInteractiveBackground; @@ -2852,6 +2898,9 @@ begin NotesH := 7; NotesW := 4; + resize_note_left := false; + resize_note_right := false; + move_note := false; //show transparent background for notes ShowInteractiveBackground; // user input tracking -- cgit v1.2.3