inline Quadro::Quadro(Dimensao const& dimensao, Cor fundo, double aspecto)
    : dimensao_(dimensao), fundo_(fundo), aspecto_(aspecto),
      pixeis(dimensao.linhas(), std::vector<Cor>(dimensao.colunas(), fundo))
{
}

inline void Quadro::pinta(Posicao const& posicao, Cor const& cor) 
{
    if(dentro(posicao))
        pixeis[posicao.linha()][posicao.coluna()] = cor;
}

inline void Quadro::pinta(Posicao const& posicao) 
{
    if(dentro(posicao))
        pixeis[posicao.linha()][posicao.coluna()] = contrasta(fundo());
}

inline void Quadro::limpa(Posicao const& posicao) 
{
    pinta(posicao, fundo());
}

inline Quadro::Cor Quadro::cor(Posicao const& posicao) const 
{
    return dentro(posicao) ? 
	pixeis[posicao.linha()][posicao.coluna()] : fundo();
}

inline bool Quadro::dentro(Posicao const& posicao) const 
{
    return (0 <= posicao.linha() and posicao.linha() < dimensao().linhas() and
            0 <= posicao.coluna() and posicao.coluna() < dimensao().colunas());
}

inline Quadro::Cor Quadro::fundo() const 
{
    return fundo_;
}

inline double Quadro::aspecto() const 
{
    return aspecto_;
}

inline Dimensao Quadro::dimensao() const 
{
    return dimensao_;
}