Кіріспе

2D графикалық кітапхана және оған байланысты API

QuickDraw – классикалық Mac OS жүйесінің негізгі бөлігі болған 2D графикалық кітапхана және оған байланысты қолданбалық бағдарламалау интерфейсі (API). Оны бастапқыда Билл Аткинсон және Энди Герцфельд жасаған. QuickDraw әлі де macOS кітапханаларының құрамында сақталған, бірақ оның орнын көбінесе заманауи Quartz графикалық жүйесі басты. Mac OS X Tiger жүйесінде QuickDraw ресми түрде қолданудан шығарылды. Mac OS X Leopard жүйесінде QuickDraw қолданатын бағдарламалар 64 биттік қолдаудан пайдалана алмайды. OS X Mountain Lion жүйесінде операциялық жүйеден QuickDraw бас файлдарына қолдау алынып тасталды. QuickDraw қолданатын бағдарламалар OS X Mountain Lion-нан macOS High Sierra-ға дейін жұмыс істеді; алайда, Xcode және macOS SDK-ның қазіргі нұсқаларында мұндай бағдарламаларды құрастыруға қажетті бас файлдар жоқ.

QuickDraw-тың қағидалары

QuickDraw 1980-ші жылдардың басындағы Apple Lisa-ның LisaGraf-ы негізінде құрылған және Apple-дің алғашқы жүйелерінің Pascal негізделген интерфейстерімен және даму орталарымен үйлесімді болу үшін жасалған. Сонымен қатар, QuickDraw графикалық ақпараттың негізгі бірлігі ретінде пикселді анықтайтын растрлық графикалық жүйе болды. Бұл векторлық графикалық жүйелерден өзгеше, онда графикалық элементтер математикалық түрде анықталады және дисплейдің ажыратымдылығына сәйкес растрлендіріледі. Растрлық жүйеге процессордың қуаты анағұрлым аз қажет, және QuickDraw әзірленген кезде басымдық құратын тәсіл болды. QuickDraw негізгі дерек құрылымын, графикалық портты немесе GrafPort анықтады. Бұл графикалық суреттерді салуға болатын логикалық сызу аймағы еді. GrafPort-қа сәйкес келетін экрандағы ең айқын "объект" терезе болды, бірақ бүкіл жұмыс үстелінің көрінісі де GrafPort бола алатын, сондай-ақ экраннан тыс порттар да болуы мүмкін. GrafPort координаталар жүйесін анықтады. QuickDraw-да бұл 16 биттік ажыратымдылыққа ие болды, бұл 65 536 бірегей тік және көлденең орналасуды қамтамасыз етті. Бұл сандар ең сол жақ шетінен (немесе жоғарыдан) -32 767-ден ең оң жақ шетіне (немесе төменіне) +32 767-ге дейін нөмірленеді. Терезе әдетте оның мазмұны аймағының жоғарғы сол жақ бұрышы 0,0 координатасында орналасқан GrafPort-та орналастырылды. Терезенің мазмұны аймағына терезенің жиегі, көлеңкесі немесе тақырып жолағы (бар болса) кірмейді. QuickDraw координаттары пикселдер арасындағы шексіз жұқа сызықтарға сілтеме жасайды. Нақты пиксель координатадан бір қадам оңға және төменге орналасқан кеңістікте салынды. Бұл бағдарламашыларға бір қатеден туындаған графикалық қателерден аулақ болуға көмектесті. Macintosh-та пиксельдер шаршы болды және GrafPort-та әдепкі ажыратымдылық 72 пикселге бір дюйм болды, бұл баспа индустриясы белгілеген 72 пунктке бір дюйм стандартына сәйкес таңдалды. QuickDraw сонымен қатар масштабтау және бейнелеу функцияларын қамтиды. QuickDraw процеске бірнеше жаһандық айнымалыларды сақтайды, олардың ең маңыздысы – ағымдағы порт. Бұл бастапқыда API-ді жеңілдетті, өйткені барлық операциялар "ағымдағы портқа" қатысты, бірақ операциялық жүйе дамыған сайын, жаһандық күйді пайдалану QuickDraw-ды көп жіптілік және алдын ала көп тапсырмалылық сияқты қазіргі заманғы дизайн тәсілдерімен интеграциялауды қиындатты. Бұл мәселелерді шешу үшін Carbon API (Mac OS 9 мен Mac OS X арасындағы көпір) кейбір процедураларға қосымша параметрлер қосты, бұл жіптік ақпаратты (тұманды) сақтауға және жаңа (сұраныс бойынша емес) оқиға құрылымын пайдалануға мүмкіндік берді.

Жоғары деңгейдегі операциялар

QuickDraw-қа жасалған графикалық шақырулардың кез келген тізбегі Picture деп аталатын құрылымда тіркелуі мүмкін. Бұл жадыға сақталып, кез келген уақытта "қайта ойнатылып", графикалық тізбекті қайта жасай алады. Ойнату кезінде суретті жаңа координаттарға орналастыруға немесе бит картасын масштабтау кезіндегідей ажыратымдылықты жоғалтпай масштабтауға болады. Суретті дискіге сақтауға болады, ол Apple PICT форматын анықтайды. Толық BitMap (немесе түсті суреттерде PixMap) масштабтау және қию арқылы бір GrafPort-тен екінші GrafPort-ке көшірілуі мүмкін. Бұл операция функция атынан алынған blitting немесе CopyBits деп аталады және Mac-тегі анимация мен спрайттар сияқты эффекттердің негізін құрайды. QuickDraw GrafPort-та жүгіруді жүзеге асыруға арналған ұқсас blitting функциясын ұсынады – порттағы кескінді масштабтаусыз жаңа орынға жылжытуға болады (бірақ қалауынша қиюға болады). Әрбір графикалық примитив операциясы GrafPort-та сақталған функциялық көрсеткіштер тізбегі StdProcs арқылы жүзеге асырылады. Бұл шектеулі полиморфизм жеке операцияларды жоюға немесе оларды арнайы функциялармен алмастыруға мүмкіндік береді, соның арқасында принтер драйверлері графикалық командаларды ұстап алып, оларды принтердің тиісті операцияларына аудара алады. Осылайша QuickDraw PostScript арқылы көрсетілуі мүмкін, бұл Macintosh-қа үстелдік басылымды жасауға мүмкіндік берді. Кіші сыныпқа ұқсас, терезе деректерінің құрылымы байланысты GrafPort-пен басталады, осылайша терезелерді кез келген GrafPort-пен алмастыруға болады. Бұл ыңғайлы болғанымен, экраннан тыс графикалық портты толыққанды терезе күтетін API-ге жіберуге болатын қате кодты жазуды жеңілдетті.

Тарих

QuickDraw Apple Lisa жобасының бір бөлігі ретінде Lisa Graf ретінде бастау алды. Macintosh үшін бастапқыда оңайлатылып, кейін кеңейтілді. Алғашқыда QuickDraw GrafPorts тек 1 биттік тереңдікті, яғни пикселге бір битті немесе қара-ақ түсті қолдады. Бұл 512×342 пикселдік экранның алғашқы Macintosh-тың стандартты экранына сәйкес келді. Шешілген түс қолдау қарапайым жазық модельді пайдалану арқылы жүзеге асырылды, бұл QuickDraw-қа көп түсті ленталарды қолданатын матрицалық принтерлердің кейбір түрлерін басқаруға мүмкіндік берді, бірақ бұл мүмкіндікті қолдаған қосымшалар өте сирек кездесті. 1987 жылы Macintosh II әзірленіп, шығарылды, ол дәстүрлі үш бөліктен тұратын – компьютер, монитор және пернетақта – құрылымға ие болды. Монитор бөлек болғандықтан және бастапқы Mac-тен үлкен болғандықтан, бейне архитектурасы сөзсіз өзгертілуі керек еді. Сонымен қатар, Mac II Macintosh-ты қара-ақ түстен толық түске көшірді. Apple сол кезде бірнеше мониторды қамтитын біріктірілген жұмыс үстелін қолдауға шешім қабылдады, бұл өнеркәсіптегі алғашқы қадам болды. Осылайша Color QuickDraw, бастапқы QuickDraw-дың маңызды кеңейтімі пайда болды. Алғашқы архитектура кеңейтуге көп мүмкіндік бермеді, бірақ бірқатар тәжірибелер арқылы Apple әзірлеушілері түстерді қосуды және жаңа бейне архитектурасын әзірлеушілер мен пайдаланушылар үшін біркелкі етуге қол жеткізді. Color QuickDraw жаңа дерек құрылымдарын енгізді, соның ішінде GDevices – әрбір қосылған бейне картасын/мониторды бейнелеу үшін, және түспен жұмыс істеу үшін жаңа түсті GrafPort (CGrafPort) құрылымын, сондай-ақ пикселге бірнеше бит үшін BitMaps орнына PixMaps-ты пайдаланды. Үйлесімділікті қамтамасыз ету үшін қолданылған тәжірибелердің бірі – жаңа құрылымның көлемі ескі құрылыммен бірдей болды, дерек мүшелерінің көпшілігі сол жерде сақталды, бірақ BitMap өріштерінің орнына қосымша тұтқалар мен түс құрылымдарына сілтемелер қосылды. rowBytes өрісінің жоғарғы екі биті GrafPort-ты CGrafPort-тан ажырату үшін флагтар ретінде пайдаланылды (олар ескі үлгідегі GrafPort-тарда әрқашан нөлге тең болды, өйткені BitMap ешқашан осы биттерді орнатуға жеткілікті кең бола алмайды). Бұл екі битті пайдалану кейінірек QuickDraw-қа қиындықтар тудырды, өйткені ол 32 биттік PixMaps-та жолдың максималды енін 4095-ке дейін шектеді, бұл жоғары ажыратымдылықтағы графикалық жұмыстар үшін мәселе тудырды. Кейінгі даму (Carbon) бұл шектеуді жойды, бірақ толыққанды кері үйлесімділік қамтамасыз етілмеді. Color QuickDraw-қа индекстелген бейне құрылғыларындағы түстерді басқаратын Палитра менеджері де қосылды. Көптеген графикалық примитивтер өзгеріссіз қалды (бірақ түстік режимде жұмыс істейтін), немесе қара-ақ API-дің жаңа түсті нұсқалары қосылды. Алғашқыда Color QuickDraw тек 1, 2, 4 және 8 биттік бейнекарталармен жұмыс істей алды, бұл сол кезде қол жетімді болатын. Бірақ көп ұзамай 24 биттік бейнекарталар пайда болды (сонымен аталатын «нағыз түс»), және QuickDraw пикселге 32 битке дейін түс деректерін қолдау үшін қайта жаңартылды («32 биттік QuickDraw»). Архитектура бұған әрқашан мүмкіндік берді, сондықтан жаңа API қажет болған жоқ. Түс дерек құрылымдарының өзі 1, 2, 4, 8, 15 және 24 биттік түс тереңдігін қамтамасыз етті, сәйкесінше 2, 4, 16, 256, 32,768 және 16,777,216 түс немесе 4, 16 және 256 сұр түстің градацияларын ұсынды. QuickDraw нақты бейне жабдығының қол жетімді түс тереңдігіне түстерді қайта өлшеуді немесе экраннан тыс кескін буферлері арасындағы көшіруді, сондай-ақ кескін сапасын жақсарту үшін кескіндерді төменгі тереңдікке дейін опционалды түрде түрлендіруді басқарды. Индекстелген бейне құрылғыларымен пайдалану үшін оңтайлы түс палитраларын жасауға бағдарламашыларға көмектесетін түс үлгілерін алу құралдары жиынтығы да қосылды. QuickDraw архитектурасы GrafPorts және олардың BitMaps немесе PixMaps-тарын «экраннан тыс» жасауға мүмкіндік берді, онда графикалар экранда бірден көрінбей жадыда құрастырылуы мүмкін. Пикселдер экраннан тыс порттар мен экран арасында QuickDraw-тың CopyBits функциясы арқылы көшірілуі мүмкін. Мұндай экраннан тыс құрастыру ойындар мен графикалық жүктемелі қосымшалар үшін маңызды құрал. Алайда, 32 биттік QuickDraw пайда болғанға дейін мұндай экраннан тыс әлемдерді бағдарламашылар өздерінің қосымшаларында қолмен жасау және орнату керек болды. Бұл қателерге әкелуі мүмкін, өйткені ол үш немесе одан да көп жеке және күрделі дерек құрылымдарын қамтиды (CGrafPort, PixMap және GDevice, сондай-ақ индекстелген құрылғылар үшін түс кестесі және оның керісінше). 32 биттік QuickDraw-пен, «Экраннан тыс графикалық әлем» немесе GWorld арқылы, оны басқару үшін жүйелік қолдау қосылды. GWorld-тің бейне буфері (PixMap) негізгі жадыда немесе, қолжетімді болған жағдайда, бейне жадының бос бөліктерінде сақталуы мүмкін, бұл пиксел деректерін негізгі жады шинасы арқылы көшіру қажеттілігін болдырмау арқылы экранға көшіру жылдамдығын арттыруға мүмкіндік берді. QuickTime пайда болғаннан кейін QuickDraw JPEG сияқты қысылған растрлық деректермен жұмыс істеуге мүмкіндік алды. QuickTime Image Compression Manager QuickDraw-пен тығыз байланысты болды: атап айтқанда, кескіннің декомпрессия шақырулары толыққанды QuickDraw сурет салу шақырулары болды, ал егер сурет жазылып жатса, қысылған дерек суреттің бөлігі ретінде сақталады, одан кейін сурет салынғанда көрсету үшін. Image Compression Manager ColorSync түс сәйкестігімен де интеграцияланды. Осыдан кейін, процессор архитектурасын (PowerPC) оңтайландыруға арналған артқы өзгерістерден басқа, QuickDraw классикалық Mac OS-тың қалған өмірі бойында көбінесе өзгеріссіз қалды. QuickDraw GX және QuickDraw 3D QuickDraw атауын бөлісті және QuickDraw PixMap және сурет дерек құрылымдарымен өзара әрекеттесе алды, бірақ функционалдық тұрғысынан толығымен бөлек болды. Mac OS X-пен QuickDraw Carbon API-дің бөлігіне айналды. 2005 жылы Mac OS X 10.4 шығарылымымен QuickDraw ресми түрде ескірген деп жарияланды. 2010 жылы Computer History Museum арқылы MacPaint 1.3-тың бастапқы коды жарияланғанда, QuickDraw бастапқы кодын тарихи нұсқасы да қолжетімді болды.