@Override
	public void render() {
		GL11.glPushMatrix();
		GL11.glScaled(getScale(), -getScale(), 1);
		getColor().apply();
		
		org.newdawn.slick.Color utilColor = new org.newdawn.slick.Color((int) (getColor().getRed() * 255), (int) (getColor().getGreen() * 255), (int) (getColor().getBlue() * 255), (int) (getColor().getAlpha() * 255));
		
		if (this.timeStamp < this.timer.getTime()) {
			this.timeStamp = this.timer.getTime() + BLINK_TIME;
			this.cursorOn = !this.cursorOn;
		}

		for (int i = 0; i < this.lines.length; ++i) {
			this.ttf.drawString((float) (-this.width / 2), (float) (-this.height / 2 + i * ttf.getHeight() * LINE_SPACE), this.lines[i].toString(), utilColor);						
		}
		
		if (this.cursorOn && this.showCursor) {
			GL11.glDisable(GL11.GL_TEXTURE_2D);
	    	GL11.glEnable(GL11.GL_BLEND);
	    	
			double offsetX;
			if (this.curX == 0) {
				offsetX = 0;
			} else if (this.curX >= this.lines[this.curY].length()){
				offsetX = this.ttf.getWidth(this.lines[this.curY].substring(0, this.lines[this.curY].length()));
			} else {
				offsetX = this.ttf.getWidth(this.lines[this.curY].substring(0, this.curX));				
			}
			double offsetY = this.curY * this.ttf.getHeight() * LINE_SPACE;
			
			double x = -this.width / 2 + offsetX;
			double y = -this.height / 2 + offsetY + this.ttf.getHeight() / 2;
			double curHeight = this.ttf.getHeight() / 2 * 0.8;
			
		    GL11.glBegin(GL11.GL_LINES);
	        GL11.glVertex2d(x, y + curHeight);
	        GL11.glVertex2d(x, y - curHeight);
		    GL11.glEnd();
		}
		GL11.glPopMatrix();
	}