Grafični zaslon Partnerja je fizično ločen od tekstovnega zaslona. Sistem ima dve neodvisni področji pomnilnika – eno za tekstovni zaslon (upravljan prek SCN2674) in eno za grafično ploskev. Ko program vstopi v grafični način, tekstovni zaslon ni izbrisan; tipično pa je zaželeno, da ga pred vstopom pobrišemo in skrijemo utripajoči kazalec, da ne moti grafičnega prikaza.
Priporočen vzorec inicializacije in zaključka:
#include <partner/conio.h>
#include <ugpx.h>
/* --- Vstop v grafični način --- */
clrscr(); /* Pobrišemo tekstovni zaslon */
setcursortype(NOCURSOR); /* Skrijemo utripajoci kazalec */
ginit(0); /* Inicializiramo grafiko */
/* ... graficne operacije ... */
/* --- Izhod iz grafičnega načina --- */
gexit(); /* Vrnemo tekstovni nacin */
setcursortype(NORMALCURSOR); /* Prikazemo kazalec */
Funkcija ginit() sprejme parameter načina:
ginit(0) – ločljivost 1024×256 točkginit(1) – ločljivost 1024×512 točkPartner ima dve grafični strani (strani 0 in 1). V danem trenutku je vidna ena stran, program pa piše v katerokoli. To omogoča tehniko dvojnega medpomnjenja (double buffering): risanje poteka na skriti strani, ki jo ob zaključku prikažemo – animacija tako ne utripa.
Stran izberemo s funkcijo gsetpage(uint8_t page). Klic nastavi tako vidno stran kot stran za risanje.
Opozorilo: ob inicializaciji sta obe strani neinicializirani. Pred začetkom risanja je treba pobrisati obe:
ginit(0);
gsetpage(0); gcls(); /* Pobrišemo stran 0 */
gsetpage(1); gcls(); /* Pobrišemo stran 1 */
gsetpage(0); /* Zacnemo na strani 0 */
Primer 1 – osnovno risanje točk, črt in pravokotnikov:
#include <partner/conio.h>
#include <ugpx.h>
clrscr();
setcursortype(NOCURSOR);
ginit(0);
/* Pobriši obe strani */
gsetpage(0); gcls();
gsetpage(1); gcls();
gsetpage(0);
gsetcolor(1); /* Bela barva risanja */
/* Točka */
gxy(100, 50);
gputpixel();
/* Črta od (10,10) do (200,80) */
gxy(10, 10);
gdrawline(200, 80);
/* Pravokotnik (obroba) */
gdrawrect(50, 20, 300, 100);
/* Zapolnjen pravokotnik */
gfillrect(400, 20, 600, 100);
/* Počakaj na tipko, nato izhod */
getch();
gexit();
setcursortype(NORMALCURSOR);
Primer 2 – izpis besedila s pisavo:
#include <partner/conio.h>
#include <ugpx.h>
/* Pisava mora biti prevedena z orodjem snatch
in deklarirana z extern (glej poglavje 6.2) */
extern void moja_pisava;
clrscr();
setcursortype(NOCURSOR);
ginit(0);
gsetpage(0); gcls();
gsetpage(1); gcls();
gsetpage(0);
gsetcolor(1);
gxy(50, 30);
gputtext("Pozdravljen, svet!", &moja_pisava);
getch();
gexit();
setcursortype(NORMALCURSOR);
Primer 3 – animacija z dvojnim medpomnjenjem:
Program riše na skriti strani, nato jo prikaže. Vidna stran se nikoli ne riše neposredno – animacija je gladka brez utripanja.
#include <partner/conio.h>
#include <ugpx.h>
clrscr();
setcursortype(NOCURSOR);
ginit(0);
gsetpage(0); gcls();
gsetpage(1); gcls();
uint8_t visible = 0; /* Trenutno vidna stran */
uint8_t hidden = 1; /* Stran za risanje */
uint16_t x = 0;
while (!kbhit()) {
/* Rišemo na skriti strani */
gsetpage(hidden);
gcls();
gsetcolor(1);
gxy(x, 100);
gdrawrect(x, 80, x + 40, 140);
/* Prikazemo skrito stran */
gsetpage(visible);
/* Zamenjamo vlogi strani */
uint8_t tmp = visible;
visible = hidden;
hidden = tmp;
/* Premik žogice */
x += 4;
if (x > 980) x = 0;
}
gexit();
setcursortype(NORMALCURSOR);
Popoln opis vseh grafičnih funkcij je v Dodatku C: Knjižnica ugpx.