Nastal čas na kakao - Přehled tříd AppKitu 5: hlavně grafika - MujMAC.cz - Apple, Mac OS X, Apple iPod

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:

Soutěž

Sponzorem soutěže je:

IDIF

 

Kde se narodil známý fotograf František Drtikol?

V dnešní soutěži hrajeme o:

Seriály

Více seriálů



Software

Nastal čas na kakao - Přehled tříd AppKitu 5: hlavně grafika

7. listopadu 2005, 00.00 | Hlavním tématem dnešního článku ovšem je grafika. Samozřejmě, do jisté míry s grafikou souviselo již to, co jsme si na začátku řekli o struktuře "views" a o spolupráci tříd NSCell (a jejích podtříd) a NSView (a jejích podtříd); dnes se však podíváme trochu blíž na služby, jež "do views" skutečně kreslí.

Ačkoli jsme minule dokončili všechny třídy, které byly zobrazeny v souhrnném obrázku, převzatém ze standardní vývojářské dokumentace knihovny AppKit, nejsme ještě zatím se souhrnem těchto tříd docela hotovi; to proto, že třídy AppKitu jsou pro lepší přehlednost rozděleny do dvou obrázků... První, větší, zahrnuje většinu z nich; zbývá nám však ještě druhý, v němž je zbývajících několik tříd:

Podobně jako minule, i nyní si samozřejmě ti, kdo mají v počítači instalováno vývojové prostředí Xcode a programátorskou dokumentaci, mohou najít obrázek v plném rozlišení v rámci úvodního článku popisu AppKitu.

Barvy a práce s nimi

Nejprve se podíváme na barvy – ty totiž "fungují" v Cocoa tak trochu podobně, jako písma, kterými jsme se zabývali minule: stejně jako konkrétní písmo bylo representováno instancí třídy NSFont, pro representaci konkrétní barvy slouží instance třídy NSColor – a třída sama nabízí řadu služeb pro vyhledávání a sestavování barev.

Vzájemné převody barev a podobné služby nepotřebují samostatnou třídu, služby samotné třídy NSColor zde postačují; úzce ovšem spolupracuje třída NSColorSpace, která representuje barevné prostory (např. asi nejznámější RGB či CMYK) a umožňuje i definovat uživatelské.

Kromě barevných prostorů se při práci s barvami velmi často užívá také seznamů barev (dobrým příkladem může být profesionální seznam barev Pantone) – pro práci s nimi slouží třída NSColorList. Poslední třída NSColorPicker spolupracuje s GUI pro systémy a možnosti výběru požadované barvy.

Grafika

Hlavním tématem dnešního článku ovšem je grafika. Samozřejmě, do jisté míry s grafikou souviselo již to, co jsme si na začátku řekli o struktuře "views" a o spolupráci tříd NSCell (a jejích podtříd) a NSView (a jejích podtříd); dnes se však podíváme trochu blíž na služby, které "do views" skutečně kreslí.

Základní grafický model Cocoa zhruba odpovídá grafickému modelu PDF (na němž je ostatně grafický subsystém Mac OS X založen); Cocoa ovšem nabízí abstrakci na poměrně vysoké úrovni, která umožňuje psát aplikace snadno přenositelné do jiných grafických systémů (založených např. na PostScriptu, jako tomu bývalo ve starých zlatých časech NeXTStepu).

Za nejzákladnější prvky vlastního grafického prostředí tedy lze v Cocoa označit následující trojici tříd:

  • NSGraphicsContext: v praxi tuto třídu a její služby využijeme jen celkem málokdy; jejím prostřednictvím můžeme přistupovat ke kontextu, v jehož rámci jakékoli kreslení probíhá, který udržuje "momentálně platná" nastavení barev a podobných atributů, a podobně. Grafický kontext můžeme také podle potřeby ukládat a opět obnovovat...
  • NSBezierPath: v podstatě se dá říci, že cokoli kreslíme, vždy kreslíme vhodnou Bézierovu křivku – jde o třídu křivek, které jsou zároveň velmi vhodné pro aproximaci libovolných tvarů, a zároveň je možné je snadno, pohodlně a efektivně implementovat. Na té "nejnižší" úrovni tedy vlastně Cocoa neumí kreslit "bod, čáru, elipsu" – jak tomu bývalo v elementárních grafických prostředích typu QuickDraw – ale pouze Bézierovy křivky; samozřejmě ale programátoři mají k dispozici služby vyšší úrovně, pomocí které lze snadno a bez jakéhokoli matematického vzdělání ☺ vytvořit Bézierovu křivku třeba pro kružnici nebo pro cokoli jiného, co potřebujeme;
  • NSAffineTransform representuje transformaci, převod souřadnic: standardně grafický systém Cocoa předpokládá, že kreslíme na plochu, jež má souřadnice [0, 0] vlevo dole (cokoli to "vlevo dole" v rámci konkrétního grafického prvku znamená – u běžných "views" obvykle skutečně levý dolní roh), a jejíž souřadnice se vkládají v tiskařských bodech (a tedy na běžných displejích s hustotou bodů 72 dpi náhodou odpovídají také pixelům). To se nám ovšem v praxi často nehodí; abychom nemuseli souřadnice neustále převádět programově, nabízí třída NSAffineTransform (samozřejmě ve spolupráci s třídou NSGraphicsContext) možnost v podstatě libovolného převodu souřadnic, včetně rotací.

Jak jsme se zmínili již v souvislosti s třídou NSBezierPath, Cocoa nabízí pro programátorské pohodlí přebohaté API, zahrnující i řadu standardních funkcí, jež implementují ty nejčastěji využívané grafické prvky (typu "obdélník", "vyplněný obdélník" a podobně).

Vzhledem k tomu, že vedle vlastního dvourozměrného grafického subsystému založeného v zásadě na PDF obsahuje Mac OS X také standardní třírozměrný grafický subsystém OpenGL, máme samozřejmě v Cocoa i odpovídající služby – přístup k nim nám zajistí třídy NSOpenGL... (jakkoli v praxi je nezřídka pohodlnější sestavit požadovanou třírozměrnou animaci v aplikaci Quartz Composer, a do naší "kakaové" aplikace ji převzít jako celek – to jsme si ukázali v samostatném seriálku, věnovaném právě Composeru).

Ostatní třídy nabízejí doplňkové nebo pomocné služby:

  • NSAnimation nabízí pohodlný a efektivní způsob, jak implementovat časování jednoduchých animací (včetně např. automatického spuštění druhé animace po dokončení prvé), aniž bychom se museli zabývat programováním vlastního časovače;
  • NSCursor representuje kursor myši; jejím prostřednictvím můžeme kupříkladu měnit jeho vzhled;
  • NSImage (a NSImageRep) representují obrázky, v prakticky libovolném formátu. Služby, které Mac OS X nabízí pro práci s obrázky, jsou velmi zajímavé, poměrně často používané, a my se na ně v našem seriálu podíváme samozřejmě mnohem podrobněji; pro dnešní téma však zatím stačí uvést, že obrázek (jehož obsah může být kupříkladu načten z diskového souboru) dokáže "sám sebe" nakreslit v rámci právě platného NSGraphicsContextu;
  • NSMovie representuje obdobným způsobem videoklip (a v podstatě je jen tenkou slupkou objektových služeb nad knihovnou QuickTime; ta ovšem již nyní v Tigeru má vlastní objektový kit, nabízející daleko bohatší služby;
  • NSScreen je representace obrazovky; využijeme ji v případě, že chceme aplikaci nějak speciálně uzpůsobit pro práci na počítači vybaveném více monitory, nebo chceme-li řídit grafiku podle konkrétních možností té které obrazovky;
  • konečně NSShadow je pouze pomocná třída, representující stínování grafických objektů.

Obsah seriálu (více o seriálu):

Tématické zařazení:

 » Rubriky  » Informace  

 » Rubriky  » Agregator  

 » Rubriky  » Software  

Poslat článek

Nyní máte možnost poslat odkaz článku svým přátelům:

Váš e-mail:

(Není povinný)

E-mail adresáta:

Odkaz článku:

Vzkaz:

Kontrola:

Do spodního pole opište z obrázku 5 znaků:

Kód pro ověření

 

 

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: