package rup.česky.tvary_1;

/*******************************************************************************
 * Třída pro prací s čtvercem na virtuálním plátně.
 * Čtverec je definován jako potomek obdélníku, 
 * přičemž při nastavování rozměrů nastaví menší ze zadaných velikostí.
 *
 * @author Rudolf Pecinovský
 * @version 0.00.000,  0.0.2003
 */
public class Čtverec extends Obdélník
{
//== KONSTANTNÍ ATRIBUTY TŘÍDY =================================================
//== PROMĚNNÉ ATRIBUTY TŘÍDY ===================================================
//== KONSTANTNÍ ATRIBUTY INSTANCÍ ==============================================
//== PROMĚNNÉ ATRIBUTY INSTANCÍ ================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ TŘÍDY ========================================
//== OSTATNÍ METODY TŘÍDY ======================================================

//##############################################################################
//== KONSTRUKTORY A TOVÁRNÍ METODY =============================================

    /***************************************************************************
     * Vytvoří novou instanci s implicitními rozměry, umístěním a barvou.
     * Instance bude umístěna v levém horním rohu plátna 
     * a bude mít implicitní barvu, 
     * výšku a šířku 1 pole.
     */
    public Čtverec()
    {
        super( 0, 0, AP.getKrok(), AP.getKrok() );
    }


    /***************************************************************************
     * Vytvoří novou instanci se zadanou polohou a rozměry 
     * a implicitní barvou.
     *
     * @param x       x-ová souřadnice počátku, x>=0, x=0 má levý okraj plátna
     * @param y       y-ová souřadnice počátku, y>=0, y=0 má horní okraj plátna
     * @param strana  Délka strany vytvářené instance,  strana > 0
     */
    public Čtverec( int x, int y, int strana )
    {
        super( x, y, strana, strana );
    }


    /***************************************************************************
     * Vytvoří novou instanci se zadanou polohou a rozměry 
     * a implicitní barvou.
     *
     * @param počátek   Pozice počátku instance
     * @param rozměr    Rozměr instance
     */
    public Čtverec(Pozice počátek, Rozměr rozměr)
    {
        this( počátek.x, počátek.y, Math.min(rozměr.šířka, rozměr.výška) );
    }


    /***************************************************************************
     * Vytvoří novou instanci se zadanou polohou, rozměry a barvou.
     *
     * @param počátek   Pozice počátku instance
     * @param rozměr    Rozměr instance
     * @param barva     Barva instance
     */
    public Čtverec(Pozice počátek, Rozměr rozměr, Barva barva)
    {
        this( počátek.x, počátek.y, Math.min(rozměr.šířka, rozměr.výška), barva );
    }


    /***************************************************************************
     * Vytvoří novou instanci vyplňující zadanou oblast 
     * a mající implicitní barvu.
     *
     * @param oblast   Oblast definující pozici a rozměr instance
     */
    public Čtverec(Oblast oblast)
    {
        this( oblast.x, oblast.y, Math.min(oblast.šířka, oblast.výška) );
    }


    /***************************************************************************
     * Vytvoří novou instanci vyplňující zadanou oblast 
     * a mající zadanou barvu.
     *
     * @param oblast   Oblast definující pozici a rozměr instance
     * @param barva    Barva instance
     */
    public Čtverec(Oblast oblast, Barva barva)
    {
        this( oblast.x, oblast.y, Math.min(oblast.šířka, oblast.výška), barva );
    }


    /***************************************************************************
     * Vytvoří novou instanci se zadanými rozměry, polohou a barvou.
     *
     * @param x       x-ová souřadnice počátku, x>=0, x=0 má levý okraj plátna
     * @param y       y-ová souřadnice počátku, y>=0, y=0 má horní okraj plátna
     * @param strana  Délka strany vytvářené instance,  strana > 0
     * @param barva   Barva vytvářeného čtverce
     */
    public Čtverec( int x, int y, int strana, Barva barva )
    {
        super( x, y, strana, strana, barva );
    }



//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ INSTANCÍ =====================================

    /***************************************************************************
     * Nastaví délku strany čtverce jako menší ze zadaných délek.
     * Překrývá příslušnou metodu rodičkovské třídy tak,
     * aby upravený obrazec "nevyčníval" ze zadané oblasti.
     *
     * @param šířka kandidát na délku strany čtverce - šířka opsaného obdélníka
     * @param výška kandidát na délku strany čtverce - výška opsaného obdélníka
     */
    public void setRozměr(int šířka, int výška)
    {
        int strana = Math.min( šířka, výška );
        super.setRozměr( strana, strana );
    }



//== PŘEKRYTÉ METODY IMPLEMENTOVANÝCH ROZHRANÍ =================================
//== PŘEKRYTÉ ABSTRAKTNÍ METODY RODIČOVSKÉ TŘÍDY ===============================
//== OSTATNÍ PŘEKRYTÉ METODY RODIČOVSKÉ TŘÍDY ==================================
//== OSTATNÍ METODY INSTANCÍ ===================================================
//== SOUKROMÉ A POMOCNÉ METODY TŘÍDY ===========================================
//== SOUKROMÉ A POMOCNÉ METODY INSTANCÍ ========================================
//== VNOŘENÉ A VNITŘNÍ TŘÍDY ===================================================
//== TESTY A METODA MAIN =======================================================
}

