Pencerelerin Temizlenmesi
Önceki Ncurses'a Giriş Sonraki
Pencerelerin Temizlenmesi
Pencelere yazmak tamam. Peki pencereleri nasıl temizleyeceğiz, istediğimiz satırları ve karakterleri nasıl sileceğiz?
ncurses'da silme, silinecek karenin, satırın ya da pencerenin içeriğinin boşluklarla doldurulması demektir. Aşağıda değindiğim silme işlevlerinın yaptığı da silinecek yerleri boşlukla doldurmaktır.
Önce tek tek karakterler ya da satırlarla uğraşan işlevlere değinelim. delch ve wdelch pencerede o an mantıksal imlecin altında olan karakteri siler ve aynı satırda mantıksal imlecin sağında bulunan karakterleri birer sola kaydırır. deleteln ve wdeleteln ise mantıksal imlecin bulunduğu satırı sildikten sonra alttaki satırları birer yukarı kaydırır.
clrtoeol ve wclrtoeol işlevleri mantıksal imlecin bulunduğu satırda imlecin sağında kalan tüm karakterleri silerler. clrtobot ve wclrtobot işlevleri ise önce bir wclrtoeol çağırıp satırda mantıksal imlecin solunda kalan karakterleri, daha sonra da mantıksal imlecin bulunduğu satırın altında kalan tüm satırları silerler.
Bunların dışında bir de tüm ekranı ya da pencereyi temizlemeye yarayan işlevler vardır. Tüm ekranı silecek işlevlerin kullanabileceği iki yöntem vardır. Birincisi tüm ekranı boşluklarla doldurup refresh işlevini çağırmak, diğeri de uçbirime ekranı temizlemesini belirten kontrol kodunu göndermektir. Birinci yöntem ikinciden daha yavaştır çünkü tek tek her karakterin ekrana yeniden yazılmasını gerektirir. İkincisi ise tüm ekranı hemen temizler.
erase ve werase işlevleri bir pencerenin karakter dizisini boşluklarla dolduran işlevlerdir. Bir sonraki refresh çağrısında pencere temizlenmiş olacaktır. Bu işlevleri kullanmak temizlenmek istenen pencere tam ekran boyutunda ise çok mantıklı değildir. Çünkü bu işlevler yukarıda bahsedilen yöntemlerden ilkini kullanmaktadır. Temizlenecek pencere tam ekran boyutunda olduğu zaman aşağıda anlatacağım işlevleri kullanmak daha yararlıdır.
Diğer işlevlere geçmeden önce _clear bayrağından sözetmek gerekir. Her pencerede olan _clear bayrağı, eğer doğruysa bir sonraki refresh'te uçbirime kontrol kodunun gönderilmesini ister. Ancak refresh bunu yapmadan önce bunu isteyen pencerenin tam ekran boyutunda olup olmadığını (_FULLWIN bayrağı ile) kontrol eder. Eğer pencere tam ekran boyutundaysa, refresh uçbirimin ekranı temizlemesini sağlar ve sadece boşluktan farklı olan karakterleri ekrana yazar. Bu, tüm ekran boyutunda temizlemenin hızlı olmasını sağlar. Uçbirim yönteminin sadece tam ekran boyutundaki pencerelerin temizlenmesi için kullanılmasının sebebi, uçbirime kontrol kodu gönderildiği zaman tüm ekranın temizlenmesidir. Pencere tam ekran boyutunda değilse, tüm ekranın temizlenmesi istenmez. _clear bayrağını clearok işlevi kontrol eder.
clear ve wclear işlevleri tam ekran boyutundaki pencerelerin temizlenmesi için tercih edilir. Aslında bu işlevler bir werase ve bir clearok çağrısı yapmaya denktir. Öncelikle pencerenin karakter dizisini boşluklarla doldururlar. Daha sonra da _clear bayrağını doğrulayarak pencere tam ekran boyutunda ise uçbirim yoluyla, değilse de tek tek tüm karelerin üzerine boşluk karakteri yazmak yoluyla pencereyi temizlerler.
Sonuç olarak, temizlenecek pencerenin tam ekran boyutunda olduğunu biliyorsanız, clear yoksa wclear kullanın. Daha hızlı bir sonuç elde edersiniz. Fakat silinecek pencere tam ekran boyutunda değilse, wclear ya da werase kullanmanız arasında bir performans farkı yoktur.
Önceki Üst Ana Başlık Sonraki
Fiziksel ve Mantıksal İmleç Başlangıç Renkler
Bir Linux Kitaplığı Sayfası