Onko SDL-kirjastoissa joku valmis systeemi nappuloiden tekemiseen? Eli tarkoitan siis esim. jotain valmista funktiota tai luokkaa, jolla voi tehdä nappulan, jota painamalla tapahtuu jokin sille määritetty funktio. Vähän samaan tyyliin kuin javascriptissä onClick-ominaisuus.
Vai pitääkö tämä kaikki tehdä vaikean kautta, eli tarkastaa hiiren sijainti, onko hiiren alla nappulaa ja sitä kautta sählätä nuo nappuloille määritellyt funktiot. Tämä ei kyllä toimisi, jos esimerkiksi pitäisi painaa päälimmäistä nappulaa (jos siis useampi mennyt päällekäin).
punppis kirjoitti:
Onko SDL-kirjastoissa joku valmis systeemi nappuloiden tekemiseen?
Ei oo.
punppis kirjoitti:
tarkastaa hiiren sijainti, onko hiiren alla nappulaa ja sitä kautta sählätä nuo nappuloille määritellyt funktiot
Kyllä.
SDL-sivujen haulla löytää. Vaikkapa tällaisia on.
Jahas, ei saa muokata enää? Ajattelin lisätä, että jos alkuperäinen kysyjä haluaa kuitenkin tehdä oman pikkusysteemin nappuloille ja valikoille, tuo päällekkäisyysongelma on ratkaistavissa. Käytän nyt termiä ikkuna, vaikka kyse voi olla napeista ja muista GUI-objekteista.
Monissa GUI-malleissa ikkunoilla ym. on sijainnin xy-koordinaatistossa lisäksi myös käsitteellinen korkeus, eli ns. z-indeksi. Se kertoo, kuinka korkealla kukin ikkuna on suhteessa toisiinsa. Jos samassa paikassa on useampi klikkauksen mahdollinen kohde, niistä lopulliseksi valitaan se, jonka z-indeksi kertoo sen olevan ylimpänä. (Idea on tietenkin, että jokaisella ikkunalla on oma erillinen z-indeksinsä, jotta aina tietää missä järjestyksessä ne ovat.)
Ikkunat oletettavasti on viisasta laittaa johonkin rakenteeseen, josta niiden sijaintia ja z-indeksiä voi kysellä, ja näitä tietoja päivittää helposti. Tosin jos ikkunoita on kerralla vähän, riittää yksinkertainen vektorikin hyvin.
Tällaisen yksinkertaisen GUI-logiikan miettiminen ja toteuttaminen on varmasti ihan hauskaa puuhaa, mutta siinä on se pieni ongelma, että jotkut muu ovat jo tehneet sen useita kertoja. Siksi tuo kirjastolinkki tuli ekana mieleen :)
Aihe on jo aika vanha, joten et voi enää vastata siihen.