]> rtime.felk.cvut.cz Git - edu/osp-wiki.git/blob - prednasky/gui/index.mdwn
Merge branch 'master' of rtime.felk.cvut.cz:edu/osp-wiki
[edu/osp-wiki.git] / prednasky / gui / index.mdwn
1 [[!meta title="Grafická uživatelská prostředí a knihovny"]]
2
3 [[!toc levels=2]]
4
5 #Grafická uživatelská prostředí a knihovny
6
7 ## X Window System 
8
9 - Grafické prostředí pro operační systém UNIX
10 - Začal vyvíjet institut MIT (Massachusetts Institute of Technology) v r. 1984.
11 - Označení X11 (verze 11) od r. 1987
12 - Další verze jsou označovány jako revize. 
13 - Současná podoba systému oken X se principiálně nemění a nová vydání jsou rozšiřující především z pohledu způsobů implementace grafických režimů.
14 - Klient-server architektura, klient (GUI aplikace) nemusí nutně běžet na stejném stroji, jako server.
15 - Server se stará o klávesnici, myš a zobrazení grafického výstupu aplikací.
16 - Klient komunikuje se serverem pomocí socketu. Používá [X-protokol](#x-protocol). 
17 - XFree86 v roce 1992 z X386, což byla implementace X serveru pro 386 architekturu.
18 - X11R6.4 restriktivnější licence ve verzi 4.4 v únoru 2004.
19 - Referenční implementací je X server vyvíjený X.Org Foundation.
20
21 ![X architektura][1]
22
23 ## Správce oken (window manager)
24
25 Samotný X Server má na starost pouze zobrazení na obrazovku, obsluhu hardware (grafická karta, myš, klávesnice, touchpad) a sám o sobě je těžko použitelný. Proto se používá spolu se správcem oken (anglicky window manager), který se stará o ovládání uživatelem (přesun a změna velikosti okna) a podobně (horní lišta oken, ohraničení oken, změna velikosti, překrývání atp.). Z hlediska X Serveru je ovšem správce oken jen další klient, a proto je snadno zaměnitelný. Pro Linux existuje několik desítek správců oken, přičemž mezi nejznámějším patří IceWM, FVWM, Sawfish, Window Maker, Kwm, Metacity nebo Fluxbox.
26
27 <a name="x-protocol"/>
28
29 ## X protokol ###
30
31 - Specifikuje způsob komunikace mezi X-Serverem a X-Klienty. 
32 - Nejslavnější implementací je Xlib.
33
34 ![Xlib][3]
35
36 Používat přímo xlib by bylo poněkud těžkopádné ([[příklad| xlib-example]]), proto vzniklo mnoho knihoven, které se snaží tvorbu GUI aplikací zjednodušit. Např. GTK+, Qt, FLTK, wxWindows, HTML + DOM + JavaScript, atd.
37
38 ----------
39
40 ## Gnome
41 - GNU Network Object Model Environment
42 - Window manager
43 - Vývojová platforma
44 - GTK+
45 - Bylo potřeba něco jako Win95 pro Linux.
46 - V r. 1997 Miguel de Icaza and Federico Mena mimo jiné i kvůli problémům s Qt licencí v KDE.
47 - [the story o the Gnome](http://primates.ximian.com/~miguel/gnome-history.html)
48
49 ----------
50
51 ## KDE
52 - 1996 Matthias Ettrich, student Eberhard Karls University v Tübingen (1998 zaměstnanec TrollTech).
53 - I jemu scházelo něco jako Win95 pro Linux.
54 - Qt
55 - Trošku jiná filosofie než Gnome, ale v podstatě to samé.
56
57 ----------
58
59 ## FLTK
60 - Vhodná pro aplikace s nízkými HW nároky a statické linkování
61
62 ----------
63
64 ## wxWindows
65
66 ----------
67
68 ## GTK+ (GIMP Toolkit)
69
70 - Vytvořen v roce 1997 členy skupiny eXperimental Computing Facility (XCF) Kalifornské university v Berkeley (Peter Mattis, Spencer Kimball, Josh MacDonald) pro vývoj programu GIMP (GNU Image Manipulation Program) jako náhrada knihovny Motif.
71 - Napsán objektově v jazyce C, což sebou nese řadu výhod i nevýhod.
72 - LGPL licence.
73 - Současná verze již multiplatformní.
74 - Součást GNU projektu.
75 - Využívá jej mnoho vyšších programovacích jazyků pro snadný wrapping.
76
77 [[GTK+ hello world]]
78
79 ----------
80
81 ## QT
82
83 - Haavard Nord a Eirik Chambe-Eng (Norwegian Institute of Technology in Trondheim) začali vývoj v roce 1991, později založili firmu Trolltech [celkem zajímavé](http://www.civilnet.cn/book/embedded/gui/qt4/pref04.html).
84 - V r. 2009 ji koupila Nokia.
85 - V C++ => obtížnější wrapping.
86 - Od samého počátku multiplatformní (dokonce vlastni make systém).
87 - Signal/Slot koncept (implementace observer pattern).
88 - Komerční a LGPL licence (od r. 2009), dříve GPL, ještě dříve podivná QPL (1998) kvuli KDE.
89 - Snaží se doplnit C++ a libc/c++ o chybějící vlastnosti vyplývající zejména z chabého RTTI v C++
90 1. signals and slots
91 1. object properties
92 1. QSharedPointer, QWeakPointer, QScopedPointer - guarded pointers that are automatically set to 0 when the referenced object is destroyed, unlike normal C++ pointers which become dangling pointers when their objects are destroyed
93 1. qobject_cast - a dynamic cast that works across library boundaries
94 1. contextual string translation for internationalization
95 1. sophisticated interval driven timers that make it possible to elegantly integrate many tasks in an event-driven GUI
96 1. hierarchical and queryable object trees that organize object ownership in a natural way
97 - Implementují velké množství objektů, které se využívají při tvorbě aplikací jako kontajnery, grafické formáty, sockety, SQL konektivita, SSL, JavaScript interpreter, QML apod. **multiplatformním způsobem**.
98 - Model/View architektura.
99 - Implicitně sdílené objekty.
100 - Cenou, kterou za to platíme je MOC (Meta Object Compiler)
101
102 [[Qt hello world]]
103
104 # Tvorba grafických aplikací
105
106 ## Tvorba aplikaci
107
108 ### Požadavky na aplikaci
109
110 - logování
111 - konfigurace
112 - kontainery
113 - persistentní data
114 - komunikace s okolím, často nějaký druh RPC (SQL, HTTP, AJAX, DBus)
115 - podpora standardů (XML, JSON, PDF, JPG, PNG, SVG)
116 - autentizace uživatelů
117 - bezpečnost (systémová, práva uživatelů)
118 - lokalizace
119 - multithreading, synchronizace
120 - pluginy
121 - atd. ...
122
123 GUI aplikace mají navíc:
124
125 - zpracování eventů (event driven aplikace)
126 - widgetset
127 - layout manager
128 - 3D layer, podporu akcelerace
129 - atd. ...
130
131 ### Režie
132
133 - instalátor/balíčkovací systém
134 - aktualizace
135 - build system (CMake, QMake, Ant, ...)
136
137 #### Stále nemáme ani řádek cílené funkcionality
138
139 ### Systémové požadavky
140
141 - cílová platforma / multiplatformnost
142 - desktop / web / embeded
143 - HW nároky (paměť, procesor, konektivita)
144 - GC ano či ne?
145
146 ### Ekonomické
147
148 - možství času
149 - množství peněz
150 - množství developerů
151
152 ### V neposlední řadě
153
154 - **MUSÍ TO FUNGOVAT**
155 - měli by jste to ve zdraví přežít
156
157 ----------
158
159 ## Proč GUI
160
161 - Uživatel může být hloupější a nemusí se tolik učit, existuje jisté latentní Know-How, aplikace se ovládají obdobně pomocí stejných typů widgetů.
162 - Stačí pasivní znalost UI.
163 - Větší vyjadřovací schopnost.
164
165 ## Úspěšné postupy při tvorbě GUI aplikací
166
167 ### Komunikace objektů, Signal/Slot koncept
168
169 - Obecně řeší observer pattern.
170 - Many to many relationship.
171 - Velice se hodí na řešení volání callback funkcí widgetů.
172 - dokáží multiplatformě obalit problém synchronizace window system eventů a eventů od file desriptorů (implementace není vždy ideální)
173 - Kromě toho řeší mnoho dalších problémů, zejména neexistující reference (dangling pointers).
174
175 ![signal-slot][4]
176
177 ### Model-View architektura
178
179 - Odděluje data od jejich prezentace.
180 - Jedny data mohpu být zobrazeny více způsoby či perspektivami.
181 - Více fronendů.
182
183 ![model-view-overview][5]
184
185 ![model-view][6]
186
187 ### Použití layout manageru
188
189 - Zaručuje optimální umístění a velikost widgetů při změně velikosti okna.
190
191   [1]: X_client_sever_example.svg
192   [2]: http://cs.wikipedia.org/wiki/X_display_manager
193   [3]: xlib.png
194   [4]: abstract-connections.png
195   [5]: modelview-overview.png
196   [6]: modelview-example.svg
197
198
199
200
201
202
203