Button.java

/**
 * Copyright (c) 2013 Nokia Corporation. All rights reserved.
 * Nokia and Nokia Connecting People are registered trademarks of Nokia Corporation.
 * Oracle and Java are trademarks or registered trademarks of Oracle and/or its
 * affiliates. Other product and company names mentioned herein may be trademarks
 * or trade names of their respective owners.
 * See LICENSE.TXT for license information.
 */

package com.nokia.example.voip.view.components;

import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;

import com.nokia.mid.ui.CanvasGraphicsItem;

public abstract class Button
    extends CanvasGraphicsItem {

    protected static final int BACKGROUND_COLOR = 0xf4f4f4;

    protected Image image;
    protected Image pressedImage;
    protected boolean pressed;

    public Button(Image image, Image pressedImage) {
        super(image.getWidth(), image.getHeight());
        this.image = image;
        this.pressedImage = pressedImage;
    }

    /**
     * @see com.nokia.mid.ui.CanvasGraphicsItem#paint(javax.microedition.lcdui.Graphics)
     */
    protected void paint(Graphics g) {
        g.setColor(BACKGROUND_COLOR);
        g.fillRect(0, 0, getWidth(), getHeight());
        
        if (pressed) {
            g.drawImage(pressedImage, 0, 0, Graphics.TOP | Graphics.LEFT);
        }
        else {
            g.drawImage(image, 0, 0, Graphics.TOP | Graphics.LEFT);
        }
    }

    public boolean contains(int x, int y) {
        return (x >= getPositionX() && x < getPositionX() + getWidth()
            && y >= getPositionY() && y < getPositionY() + getHeight());
    }

    public void pointerPressed(int x, int y) {
        pressed = true;
        repaint();
    }

    public void pointerReleased(int x, int y) {
        if (pressed == true) {
            onClick();
        }
        
        pressed = false;
        repaint();
    }

    public abstract void onClick();
}