package electrosphere.renderer.ui.elementtypes;

import electrosphere.renderer.OpenGLState;
import electrosphere.renderer.RenderPipelineState;

/**
 * A UI Element that is actually drawable to the screen
 */
public interface DrawableElement extends Element {
    
    /**
     * Gets if the drawable is currently set to visible
     * @return true if visible, false otherwise
     */
    public boolean getVisible();

    /**
     * Sets the visibility status of the element
     * @param draw true for visible, false otherwise
     */
    public void setVisible(boolean draw);

    /**
     * Draws the element
     * @param renderPipelineState The render pipeline state
     * @param openGLState The opengl state
     * @param parentFramebufferPointer The parent's framebuffer pointer
     * @param parentPosX the parent's position x
     * @param parentPosY the parent's position y
     * @param parentWidth the parent's width
     * @param parentHeight the parent's height
     */
    public abstract void draw(RenderPipelineState renderPipelineState, OpenGLState openGLState, int parentFramebufferPointer, int parentPosX, int parentPosY, int parentWidth, int parentHeight);

    
}
