İki farklı yöntem ile pencere boyutlarını elde edebiliriz;
- glfwGetWindowSize fonksiyonu
- glfwSetWindowSizeCallback, geri çağırım (callback) fonksiyonu
1.Yöntem: glfwGetWindowSize Fonksiyonu
Bu yöntem ile öğrenmek istediğimiz pencere boyut bilgisini doğrudan öğrenmemize yarar.// PrototipBu fonksiyon, pencere boyutlarının yükseklik ve genişlik bilgisini vermektedir.
void glfwGetWindowSize(GLFWwindow *window,int *width, int *height);
// Kullanımı
glfwGetWindowSize(window, &width, &height);
Fonksiyon Parametreleri;
- [in] GLFWwindow *window - Pencere boyut bilgisini alacağımız pencere nesnesi
- [out] int width - Genişlik bilgisini 'pixel' cinsinden geri dönen değişken.
- [out] int height - Yükseklik bilgini 'pixel' cinsinden geri dönen değişken.
Not: Referans aldığım dokümandaki bir ayrıntıyı, fonksiyon parametre(ler) açıklamasına eklemenin yararlı olacağını düşündüm.Örnek:
- [in]: fonksiyonun kendi içinde kullanacağı nesneyi atıyoruz.
- [out]: fonksiyonun geri döndüğü referans değerlerin, kopyalanacağı değişkeni tanımlıyoruz.
// Pencere boyut bilgisiPencerenin boyutlarını almak ve sonuçları konsol penceresine yazdırmak için global düzeyde değişkenler tanımlıyoruz.
int width;
int height;
// Klavye mesajlarının işlendiği callback fonksiyonuArdından klavye geri çağırım fonksiyonunda, klavyemizin 'F1' tuşuna basıldığında glfwGetWindowSize() fonksiyonu ile geri dönen referans değerlerini, oluşturduğumuz değişkenlere atamasını sağlayarak, konsol penceresinde bu bilgileri yazdırmış olduk.
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);
// Pencere boyutlarını klavyemizin F1 tuşuna tıklıyoruz.
else if(key == GLFW_KEY_F1 && action == GLFW_PRESS){
glfwGetWindowSize(window, &width, &height);
cout << "glfwGetWindowSize fonksiyonu" << endl;
cout << "------------------------------------------" << endl;
cout << "Suan ki pencere boyutu;" << endl;
cout << "Genislik(width): " << width << endl;
cout << "Yukselik(height): " << height << endl;
}
}
2.Yöntem: glfwSetWindowSizeCallback Geri Çağırım Fonksiyonu
Bu yöntem, aslında pencere boyut bilgisi almaktan çok, kullanıcının pencereyi yeniden boyutlandırması halinde, gerekli komut dizisi veya güncellenmesi gereken değerlerin, işlenmesi için tasarlanmıştır.// Prototip
GLFWwindowsizefun glfwSetWindowSizeCallback(GLFWwindow *window, GLFWwindowsizefun cbfun);
// Kullanımı
glfwSetWindowSizeCallback(window, fonksiyon_adı);
Bu fonksiyon, pencere boyutlarında değişiklik yapıldığında yani pencere yeniden boyutlandırma olayı (resize event) gerçekleştiğinde devreye giren bir geri çağırım fonksiyonudur. Değişikliğin yapıldığı anlarda, güncel pencere boyut değerleri ile width (genişlik) ve height (yükseklik) parametrelerine geri dönmektedir.
Fonksiyon Parametreleri;
- [in] GLFWwindow *window - Pencere boyut bilgisini alacağımız pencere nesnesi
- [in] GLFWwindowsizefun cbfun - Geri çağırım fonksiyon adı.
// Konsol temizleme sabitleriBu yöntem ile pencere boyutlarındaki her değişikliği konsolda alt alta yazdıracağından, Windows ve diğer işletim sistemlerinde konsolu sıfırlamak için gereken sabiti 'main.cpp' dosyamızın en başına tanımlıyoruz.
#ifdef _WIN32
#define CLEAR "cls"
#else // Windows dışı işletim sistemleri (Other OS) için...
#define CLEAR "clear"
#endif
#include <cstdlib>Ardından konsolu sıfırlamak için gereken system() fonksiyonu için '<cstdlib>' kütüphanesini dosyamıza dahil ediyoruz.
// Pencere yeniden boyutlandırıldığında çağırılacak fonksiyon (callback)Pencere yeniden boyutlandırma gerçekleştiğinde, çağrılacak fonksiyonu belirtmek için geri çağırım fonksiyonunu, diğer geri çağırım fonksiyonlarının altına tanımlıyoruz.
glfwSetWindowSizeCallback(window, pencereBoyut_callback);
void pencereBoyut_callback(GLFWwindow *window, int width, int height)Ve son olarak çağrılacak fonksiyonumuzu 'main' fonksiyonumuzun üstüne tanımlıyoruz. Bu fonksiyon ile pencere her boyutlandırma da konsolu sıfırlayarak, bize güncel pencere boyut bilgilerini yazdıracaktır.
{
system(CLEAR);
cout << "Callback fonksiyonu" << endl;
cout << "------------------------------------------" << endl;
cout << "GLFW -> Pencere yeniden boyutlandirildi;" << endl;
cout << "Genislik(width) : " << width << endl;
cout << "Yukseklik(Height) : " << height << endl;
cout << "------------------------------------------" << endl;
}
Bu yazımızda ileride ihtiyaç duyabileceğimiz pencere boyutlarının bilgisini elde etmeyi öğrendik.
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önder