Blob Blame Raw

#ifndef SIMULATOR_H
#define SIMULATOR_H


#include <algorithm>

#include "track.h"
#include "raster.h"
#include "tool.h"


class Simulator {
public:
    virtual ~Simulator() { }
    virtual void simulate(const Track &track, const Tool &tool) = 0;
    virtual void scroll_to(int index) = 0;
    virtual void draw() const = 0;
};


class SimulatorXYZ: public Simulator {
private:
    TouchPointList points;
    int simu_index;

public:
    FlatRaster raster;

    explicit SimulatorXYZ(int xpixels = 0, int ypixels = 0):
        simu_index(), raster(xpixels, ypixels, 0, 0, 0, 0, 0, 0) { }
        
    const TouchPointList& get_points() const { return points; }
    int get_simu_index() const { return simu_index; }
    int get_index() const { return simu_index <= 0 ? -1 : points[simu_index-1].index; }

    void simulate(const Track &track, const Tool &tool) override;
    void scroll_to(int index) override;
    void draw() const override
        { raster.draw(); }
};


class SimulatorXYZA: public Simulator {
private:
    TouchPointList points;
    int simu_index;

public:
    PolarRaster raster;

    explicit SimulatorXYZA(int xpixels = 0, int ypixels = 0):
        simu_index(), raster(xpixels, ypixels, 0, 0, 0, 0) { }
        
    const TouchPointList& get_points() const { return points; }
    int get_simu_index() const { return simu_index; }
    int get_index() const { return simu_index <= 0 ? -1 : points[simu_index-1].index; }

    void simulate(const Track &track, const Tool &tool) override;
    void scroll_to(int index) override;
    void draw() const override
        { raster.draw(); }
};


#endif