diff --git a/src/NoteDisplay.cpp b/src/NoteDisplay.cpp index 39c39c83a4..6268f38ca2 100644 --- a/src/NoteDisplay.cpp +++ b/src/NoteDisplay.cpp @@ -756,7 +756,12 @@ void NoteDisplay::DrawHoldPart(vector &vpSpr, /* Only draw the section that's within the range specified. If a hold note is * very long, don't process or draw the part outside of the range. Don't change * part_args.y_top or part_args.y_bottom; they need to be left alone to calculate texture coordinates. */ - const float y_start_pos = max(part_args.y_top, part_args.y_start_pos); + // If hold body, draw texture to the outside screen.(fix by A.C) + float y_start_pos = (part_type == hpt_body) ? part_args.y_top : max(part_args.y_top, part_args.y_start_pos); + if (part_args.y_top < part_args.y_start_pos - unzoomed_frame_height) + { + y_start_pos = fmod((y_start_pos - part_args.y_start_pos), unzoomed_frame_height) + part_args.y_start_pos; + } float y_end_pos = min(part_args.y_bottom, part_args.y_end_pos); const float color_scale= glow ? 1 : part_args.color_scale; if(part_type == hpt_body)