package org.schmivits.airball.widget; import android.graphics.Canvas; public abstract class Widget { protected float mX; protected float mY; protected float mW; protected float mH; private boolean mVisible = true; private boolean mClip = true; private boolean mSizing = false; private boolean mMoving = false; protected Widget() { this(0, 0, 0, 0); } protected Widget(float x, float y, float w, float h) { mX = x; mY = y; mW = w; mH = h; } public void moveTo(float x, float y) { mX = x; mY = y; if (!mMoving) { mMoving = true; onMove(); mMoving = false; } } public void sizeTo(float w, float h) { mW = w; mH = h; if (!mSizing) { mSizing = true; onResize(); mSizing = false; } } public final float getX() { return mX; } public final void setX(float x) { moveTo(x, mY); } public final float getY() { return mY; } public final void setY(float y) { moveTo(mX, y); } public final float getWidth() { return mW; } public final void setWidth(float w) { sizeTo(w, mH); } public final float getHeight() { return mH; } public final void setHeight(float h) { sizeTo(mW, h); } public boolean isVisible() { return mVisible; } public void setVisible(boolean visible) { mVisible = visible; } public boolean isClip() { return mClip; } public void setClip(boolean clip) { mClip = clip; } protected void onResize() {} protected void onMove() {} public final void draw(Canvas canvas) { if (!mVisible) { return; } canvas.save(); canvas.translate(mX, mY); if (mClip) { canvas.clipRect(0f, 0f, mW, mH); } drawContents(canvas); canvas.restore(); } protected abstract void drawContents(Canvas canvas); }