A skadze znowu. To tylko kwestia zalozen przy tworzeniu i o to wlasnie chodzi - zanim zacznie sie tworzyc. GUI to nie stawianie pikseli na ekranie, czy rysowanie okien a do tego sprowadza się kwestia sterownika.
Jesli zaczniesz robic GUI koncentrujac sie na rysowaniu, to nie osiagniesz sukcesu bo to jest samo dno hierarchii kodu, zaplaczesz sie w szczegolach technicznych. Dlatego takie rzeczy robi sie dwuwarstwowo - tworzy sie biblioteke operacji ekranowych a nastepnie logike ktora z nich korzysta. Zmiana urzadzenia - to zmiana biblioteki. Przeciez GUI ma robic znacznie wiecej nic narysowac okienko.
Teraz, aby nie uderzyc w bariere wydajnosci, biblioteka , sterownik czy jak go nazwiemy, nie moze realizowac operacji atomowych typu postaw piksel, narysuj prostokat, tylko narysuj okno, ustaw tekst , przesun okno itp. Te operacje sa dostatecznie elementarne, zeby nawet ktos z zewnatrz mogl je zaimplementowac i dostatecznie zlozone aby uniknac miliarda skokow przy kazdej operacji na ekranie.
Programujac liniowo albo nie zrobi sie tego w ogole albo zajmie to lata, a i tak sledzenie bledow bedzie koszmarem. Wszystko jest kwestia kompromisu