Glfw Pencere Başlığını Değiştirme - Mustafa Sabri OĞUZ

Duyurular

25 Nisan 2014 Cuma

Glfw Pencere Başlığını Değiştirme

Daha önce Glfw penceresi oluşturmayı ve başlık belirtmeyi öğrenmiştik. Bu dersimizde pencerenin başlığını çalışır (runtime) vaziyette iken değiştirmeyi konu alacağız.

Peki bu konu nerelerde ve niçin kullanılır? Bize ne gibi bir fayda sağlar? Bu sorunların cevabını birlikte öğrenelim.

Oyun programlarken bu konu bize, fazla bir fayda sağlamıyor. Fakat duruma göre ihtiyaç duyabileceğimiz yerler olacak. Mesela OpenGL içeriğimize göre yada dinamik olarak birden fazla pencere oluşturmamız ve bunlarla çalışmamız gerekebilir. Çeşitli durumlarda pencere başlıklarını yeniden tanımlamamız gerekebilir.

Örnek vermek gerekirse: Kendi 3D model tasarım programı (mesela blender, 3Ds Max, Maya vb.) geliştirdiğimizi düşünelim. 3D Model için gereken bir özellik olan perspektif bakış açılarıdır. Modelin Ön (Front), Yan (Side), Arka (Back), Üst (Top) ve Alt (Under) gibi perspektif bakış ihtiyacımıza göre pencere yada ayrı ayrı pencereler oluşturduğumuzu düşünelim.
Anlatmak istediğim, bir pencerenin perspektif bakışını değiştirdiğimizi varsayalım, yani ön profil yerine arka profile geçiş yaptık. Bu durumda modele hangi perspektif'den bakıldığı bilgisini başlığı değiştirerek, pencere başlığından kısaca öğrenebiliriz.

Eğer 3D model tasarım programı üzerinde deneyim sahibi değilseniz, verdiğim örnek biraz kafa karıştırıcı gelebilir. İleri de deneyim kazandıkça ne demek istediğimi anlayacağınızdan eminim.

glfwSetWindowTitle fonksiyonu nedir?

// Prototip tanımı
void glfwSetWindowTitle (GLFWwindow *window, const char *title)  
 
// Kullanım şekli
glfwSetWindowTitle(window, "Pencere Başlık Adı");
glfwSetWindowTitle: Pencere başlığını çalışır (runtime) vaziyette değiştirmemize yarayan void türünden bir fonksiyondur.
Fonksiyon Parametreleri;
  • GLFWwindow *window - Önceden oluşturduğumuz ve kullanacağımız pencere nesnesi
  • const char *title - Pencerenin yeni başlığı girdiğimiz değişken
Bu dersimizde ki örneğimizde basit tutmaya çalıştım. Klavyemizin 1'den 3'e olan tuşlara ayrı ayrı pencereye isim atama (değiştirme) şekillerini göstermeye çalıştım.

// Klavye mesajlarının işlendiği callback fonksiyonu
static void klavye_callback(GLFWwindow *window, int key, int scancode, int action, int mods)
{
    // Esc tuşuna basıldığında, pencereyi kapat
    if(key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)
        glfwSetWindowShouldClose(window, GL_TRUE);

    /* Klavye Tuşlarına göre pencere başlık ismini değiştirme */
    // Tuş 1'e Basılırsa : Önceden tanımlanmış isim ile başlığı değiştir
    else if(key == GLFW_KEY_1 && action == GLFW_PRESS){
        glfwSetWindowTitle(window, "Deneme için hazırlanmış başlık");
        cout << "Pencere basligi degistirildi, yeni baslik : " << "Deneme için hazırlanmış başlık" << endl;
    }
    // Tuş 2'e Basılırsa : Global'de tanımlanmış değişken ile başlığı değiştir
    else if(key == GLFW_KEY_2 && action == GLFW_PRESS){
        glfwSetWindowTitle(window, baslik);
        cout << "Pencere basligi degistirildi, yeni baslik : " << baslik << endl;
    }
    // Tuş 3'e Basılırsa : Konsol penceresinde girilen string isim ile başlığı değiştir
    else if(key == GLFW_KEY_3 && action == GLFW_PRESS){
        cout << "Lutfen bir pencere basligi giriniz : ";
        getline(cin, sBaslik);
        yeniBaslik = sBaslik.c_str();

        glfwSetWindowTitle(window, yeniBaslik);
        cout << "Pencere basligi degistirildi, yeni baslik : " << yeniBaslik << endl;
    }
}
'1' tuşuna basıldığında; Önceden hazırladığımız, "Deneme için hazırlanmış başlık" yazısını yeni pencere başlığı olarak değiştirecek.
'2' tuşuna basıldığında; Önceden tanımladığımız char * türünden 'baslik' adında ki değişkendeki değeri yeni pencere başlığı olarak değiştirecek.
'3' tuşuna basıldığında ise; Konsol penceresinden bir satırı girerek, pencere başlığını dinamik olarak değiştirmektedir. Sizi bir konuda uyarmalıyım: Windows konsol penceresi, UTF-8 karakter setini desteklememektedir. Bu nedenle Türkçe karakterler kullanmamaya çalışın.

Bitbucket: main.cpp dosyasını indirmek için tıklayın.

Referans:
http://www.glfw.org/docs/latest/group__window.html

Hiç yorum yok:

Yorum Gönderme