Cvičení 5


Úkoly

  1. Vyzkoušejte překreslování okna po zaslání zprávy move středu instance třídy circle. V čem je problém? Jak byste ho vyřešili? Je ještě nějaká třída, kterou je třeba upravit?

  2. Napište potomka třídy window, jehož instance budou mít následující vlastnost: po změně libovolného objektu v okně se pozadí okna přebarví na barvu podobnou barvě objektu. Podobnou barvu k dané barvě můžete zjistit například touto funkcí:

        
        (defun darken-color (color)
            (let ((color-spec (color:get-color-spec color)))
                (color:make-hsv (color:color-hue color-spec)
                                (color:color-saturation color-spec)
                                (/ (color:color-value color-spec) 2))))
        
    
  3. Napište potomka třídy window, jehož instance budou mít následující vlastnost: před změnou libovolného objektu v okně se objeví dotaz, zda se má změna opravdu provést. Pokud uživatel zvolí možnost NE, dojde k chybě. Dialog s dotazem můžete vytvořit voláním

        
        (capi:confirm-yes-or-no "Umožnit změnu?")
        
    
  4. Napište potomka třídy window, jehož instance budou mít následující vlastnost: po změně libovolného nesloženého objektu v okně (tj. objektu, který není instancí třídy compound-shape) se barva tohoto objektu změní na červenou. Barva libovolného dříve změněného objektu se vrátí na původní. Jaký je problém se složenými objekty?

Úkoly mi nemusíte posílat, jedná se pouze o úlohy k procvičení.