<?xml version="1.0" encoding="utf-8"?>
<page xmlns="http://projectmallard.org/1.0/" xmlns:its="http://www.w3.org/2005/11/its" type="topic" id="tech-gdk" lang="uk">

  <info>
    <link type="guide" xref="tech" group="gdk"/>
    <revision pkgversion="3.0" date="2011-04-05" status="candidate"/>

    <credit type="author copyright">
      <name>Shaun McCance</name>
      <email its:translate="no">shaunm@gnome.org</email>
      <years>2011–2012</years>
    </credit>

    <license xmlns="http://projectmallard.org/1.0/" href="http://creativecommons.org/licenses/by-sa/3.0/us/">
<p>This work is licensed under a
<link href="http://creativecommons.org/licenses/by-sa/3.0/us/">Creative Commons
Attribution-Share Alike 3.0 United States License</link>.</p>
<p>За виняткових обставин власники авторських прав можу надати вам дозвіл копіювати, змінювати і розповсюджувати приклади коду, що містяться у цьому документі, за довільних умов, без обмежень.</p>
</license>

    <desc>Низькорівнева абстракція для систем керування вікнами</desc>
  <credit type="translator copyright"><name>Максим Дзюманенко</name><email>dziumanenko@gmail.com</email><years>2010</years></credit><credit type="translator copyright"><name>Юрій Чорноіван</name><email>yurchor@ukr.net</email><years>2020</years></credit></info>

<title>GDK</title>

  <p>GDK є низькорівневою бібліотекою, яку використовує <link xref="tech-gtk">GTK</link> для взаємодії із системою керування вікнами для роботи із графічними пристроями та пристроями введення. Хоча вам не доведеться надто часто використовувати GDK безпосередньо у коді, у цій бібліотеці містяться усі потрібні функціональні можливості для створення низькорівневих вікон на екрані і взаємодії із користувачем за допомогою різноманітних пристроїв введення. GDK працює як рівень абстракції над різноманітними системами керування вікнами, забезпечуючи можливість портування GTK на усі ці системи: X Window System (X11), Microsoft Windows, Mac OS X Quartz.</p>

<p>GDK надає вам достпу до подій з клавіатур, мишей та інших пристроїв для введення. Реалізації віджетів на GTK використовують цю функціональну можливість і передають події до високорівневих сигналів, якими, надалі, можна скористатися з коду програми. Наприклад, віджет <code>GtkButton</code> стежить за подіями <code>GDK_BUTTON_PRESS</code> і <code>GDK_BUTTON_RELEASE</code>, які надходять від миші, і транслює їх відповідним чином до сигналу <code>GtkButton::clicked</code>, коли користувач натискає і відпускає кнопку у належному місці.</p>

<p>Крім того, GDK надає у ваше розпорядження низькорівневі процедури для доступу до перетягування зі скиданням та даних буфера обміну даними з системи. При реалізації нетипових засобів керування вам може знадобитися доступ до цих можливостей для реалізації належної поведінки при взаємодії із користувачем.</p>

<p>GDK надає інші функціональні можливості, які потрібні для реалізації повного графічного набору інструментів, подібного до GTK. Оскільки GDK працює як абстракція платформи, надаючи GTK змогу працювати у декількох середовищах, вона надає програмний інтерфейс до усіх функціональних можливостей системи, які потрібні GTK. Це стосується відомостей щодо роботи із декількома дисплеями, роздільної здатності та глибини кольорів, мап кольорів та курсорів.</p>

  <p>Вам слід використовувати GDK усюди, де вам потрібен низькорівневий доступ до підлеглої системи вікон, включно із низькорівневим доступом до подій, вікон та буфера обміну даними. Використання GDK для виконання цих завдань забезпечує портованість вашого коду та інтегрованість його із рештою вашого коду GTK. Загалом, не слід використовувати прості підпрограми для малювання у GDK; ці підпрограми є залишками того періоду, коли GDK був простою обгорткою для малювання примітивів системи керування вікнами. Вам слід користуватися широкими функціональними можливостями, які надаються <link xref="tech-cairo">Cairo</link> для малювання високоякісної двовимірної графіки.</p>

<list style="compact">
  <item><p><link href="https://developer.gnome.org/gdk3/stable/">Довідник-підручник з GDK</link></p></item>
</list>
</page>
