All pastes #913005 Raw Edit

Someone

public text v1 · immutable
·published 2008-02-21 19:47 UTC
rendered paste body
package org.ucam.ned.foxtrot.engine.renderer.transitions;

import java.util.List;

/**
 * Slides that are using this transition effect slide in from the right of the
 * screen covering the previously displayed one.
 */
public class SlideTransition implements TransitionEffect
{

    private QTimer m_timer;
    private List<QGraphicsItemInterface> m_oldItems;
    private List<QGraphicsItemInterface> m_newItems;
    private QGraphicsView m_view;
    private int translateX = 0;

    public SlideTransition()
    {
    	m_timer = new QTimer(m_view);
    	m_timer.timeout.connect(this, "translate()");
    }

    public void animate(QGraphicsView view,
        List<QGraphicsItemInterface> newItems)
    {
        m_newItems = newItems;
        m_oldItems = view.scene().items();
        m_view = view;

        Iterator i = m_newItems.iterator();

        FoxtrotItem item;

        // Add new items with offset -SCREEN_WIDTH
        while (i.hasNext()) {
            item = (FoxtrotItem) i.next();
            item.moveBy(-1 * Globals.SCREEN_WIDTH, 0);
            view.scene().addItem(item);
        }

        m_timer.start(1);
    }

    public void translate()
    {
    	if (translateX >= Globals.SCREEN_WIDTH) {
    		removeOldItems();
    		m_timer.dispose();
    		return;
    	}
    	
    	int stepValue = 15;
    	
    	if (Globals.SCREEN_WIDTH - translateX < stepValue)
    		stepValue = Globals.SCREEN_WIDTH - translateX;
    	
    	Iterator i;
    	
    	i = m_view.scene().items().iterator();
    	
    	FoxtrotItem item;
    	
    	while (i.hasNext()) {
    		item = (FoxtrotItem)i.next();
    		item.moveBy(stepValue, 0);
    	}
    	
    	translateX += stepValue;
    }

    public void removeOldItems()
    {
        Iterator i;

        i = m_oldItems.iterator();

        while (i.hasNext()) {
            m_view.scene().removeItem((QGraphicsItemInterface) i.next());
        }
    }

}