private boolean adjust(int idx) {
		if(this.ttf.getWidth(this.lines[idx].toString()) > this.width) {
			if (idx + 1 >= this.lines.length) {
				return false;
			}
			
			int i = this.lines[idx].length() - 1;
			while (i > 0 && this.lines[idx].charAt(i) != ' ') {
				--i;
			}
			if (i == 0) {
				return false;
			}
			
			String word = this.lines[idx].substring(i + 1, this.lines[idx].length());
			this.lines[idx].delete(i, this.lines[idx].length());
			this.lines[idx + 1].insert(0, word);
			boolean needSpace = this.lines[idx + 1].length() > word.length();
			if (needSpace) {
				this.lines[idx + 1].insert(word.length(), ' ');
			}
			
			int oldCurX = -1;
			if (idx == this.curY && this.curX > this.lines[idx].length()) {
				this.curY++;
				oldCurX = this.curX;
				this.curX = word.length();
			}
			
			if (!adjust(idx + 1)) {
				this.lines[idx].append(word);
				this.lines[idx + 1].delete(0, word.length());
				if (needSpace) {
					this.lines[idx + 1].delete(0, 1);					
				}
				if (oldCurX != -1) {
					this.curY--;
					this.curX = oldCurX;
				}
				return false;
			}
			return adjust(idx);
		}
		
		return true;
	}