3. Bölüm - GUIX'e İşlevsel Genel Bakış

Bu bölüm, yüksek performanslı GUIX kullanıcı arabirimi ürününe işlevsel bir genel bakış içerir.

Yürütmeye Genel Bakış

GUIX, olay odaklı bir programlama modeli uygular. Bu, GUIX çerçevesinin öncelikli olarak GUIX olay kuyruğuna gönderilen olayların alınmasıyla yönlendirildiğini gösterir. Bu olayların işlenmesi GUIX sistem başlatma sırasında oluşturulan bir ThreadX iş parçacığı olan GUIX iş parçacığı bağlamında gerçekleşir.

GUIX uygulamaları, windows ve alt pencere öğeleri oluşturmak için GUIX API işlevlerini çağırarak kullanıcı arabirimini tanımlar ve her pencere veya pencere öğesi türünün renklerini, stillerini, yazı tiplerini ve diğer çeşitli özniteliklerini tanımlamak için kullanılan ek API işlevlerini çağırarak bu pencere öğelerinin görünümünü özelleştirir. Kullanıcı arabirimi ekranlarınızın görünümünü oluşturmak için GUIX Studio kullanıyorsanız, görüntünüzü oluşturmak için GUIX API işlevlerini çağırma işinin büyük bir kısmı GUIX Studio uygulaması tarafından sizin için gerçekleştirilir.

GUIX uygulamaları, GUIX olay kuyruğundan alınan olayları işleyerek sistem kullanıcısı ve dış iş mantığıyla etkileşim kurar. Bu olaylar genellikle GUIX pencere öğeleri tarafından üretilir, ancak dış iş parçacıkları tarafından da oluşturulabilir. Tipik bir GUIX düğmesine basıldığında, bu düğme düğmenin üst penceresine bir olay gönderir. Uygulama programınız, düğmeye basma olayı için bir işleyici sağlayarak bu düğmeye basma üzerinde işlem yapacaktır.

Giriş sürücüleri gibi öğeler için genellikle ek GUIX iş parçacıkları oluşturulur. Tipik bir dokunmatik ekran giriş sürücüsü, ana GUIX iş parçacığının dışında tek başına bir iş parçacığı olarak yürütülür. Dokunma girişi sürücüsü, GUIX olay kuyruğuna olay göndererek dokunma bilgilerini GUIX iş parçacığına gönderir.

Animasyonlar gibi birçok kullanıcı arabirimi işlemi doğru zamanlama bilgileri gerektirdiğinden GUIX, basit ve kullanımı kolay bir zamanlayıcı arabirimi de uygular. Bu zamanlayıcı arabirimi ThreadX zamanlayıcı hizmeti üzerine kurulmuştur ve sistem başlangıcında otomatik olarak yapılandırılır.

GUIX yazılımının büyük çoğunluğu tüm donanım bağımlılıklarından bağımsızdır. Çerçeve, donanıma özgü giriş sürücüleri ve donanıma özgü grafik sürücüleri gerektirir. Bu donanıma özgü sürücülerin nasıl uygulandığının ayrıntıları 5. bölüme ertelenmektedir.

Başlatma

Hizmet gx_system_initialize başka bir GUIX hizmeti çağrılmadan önce çağrılmalıdır. GUIX sistem başlatma, ThreadX tx_application_define yordamından (başlatma bağlamı) veya uygulama iş parçacıklarından çağrılabilir. gx_system_initialize işlevi GUIX olay kuyruğu oluşturur, GUIX zamanlayıcı tesisini başlatır, ana GUIX sistem iş parçacığını oluşturur ve uygulamanızın yürütülmesi sırasında GUIX tarafından tutulan çeşitli veri yapılarını başlatır.

gx_system_initialize döndürdüğünde, uygulama görüntüler, tuvaller, pencereler, pencere öğeleri oluşturmaya ve tüm GUIX nesnelerinin özelliklerini özelleştirmeye hazır olur. GUIX nesne oluşturma API'sinin büyük bir kısmı tx_application_define veya uygulama iş parçacıklarından çağrılabilir.

Uygulama Arabirimi Çağrıları

Uygulamadan yapılan çağrılar büyük ölçüde tx_application_define (başlatma bağlamı) veya uygulama iş parçacıklarından yapılır. Hangi bağlamdan çağrılabileceğini belirlemek için lütfen Bölüm 4'te açıklanan her GUIX API'sinin "İzin Verilen" bölümüne bakın.

Çoğunlukla yoğun işleme etkinlikleri, tüm olay işleme ve pencere öğesi/pencere çizimi dahil olmak üzere iç GUIX iş parçacığına ertelenir.

GUIX API işlevleri, zamanlayıcı iş parçacıkları veya kesmeler dışında herhangi bir iş parçacığından çağrılabilir. Bazı GUIX API'leri bir mutex alırken iş parçacığını engelleme potansiyeline sahip olduğundan, bu kısıtlamanın nedeni zamanlayıcı iş parçacığının engellenmesini önlemektir. Bu durum, isteğin bir kesintiden kaynaklanması durumunda da sorun olabilir çünkü koruma hatasına yol açabilir.

Bununla birlikte, zaman açısından kritik iş mantığınızı kullanıcı arabirimi mantığınızdan ayırmak genellikle daha iyi bir mimari olarak kabul edilir. Kullanıcı arabirimi çizim işlemleri bazen görüntü boyutunuz ve CPU performansınıza bağlı olarak uzun sürebileceğinden, normalde bir çizim işleminin tamamlanmasını beklerken zaman açısından kritik iş parçacıklarının gecikmeli olmasını istemezsiniz.

İç GUIX İş Parçacığı

Belirtildiği gibi GUIX, GUI işleminin büyük bir kısmını gerçekleştiren bir iç iş parçacığına sahiptir. Bu iş parçacığı, uygulama yazılımı tarafından gx_system_initialize ve ardından gx_system_start çağrılarak oluşturulur.

İç GUIX iş parçacığının önceliği tarafından #define GX_SYSTEM_THREAD_PRIORITYbelirlenir. Bu değer varsayılan olarak 16 (orta öncelik) olarak ayarlanır, ancak bu değer gx_port.h veya gx_user.h üst bilgi dosyasında belirtilerek değiştirilebilir ve varsayılan değer geçersiz kılınabilir.

GUIX iş parçacığı zaman dilimi, varsayılan olarak 10 ms değerine sahip olan ile #define GX_SYSTEM_THREAD_TIMESLICEbenzer şekilde tanımlanır.

Sistem iş parçacığının yığın boyutu, gx_port.h üst bilgi dosyasında bulunan tarafından belirlenir#define GX_THREAD_STACK_SIZE, ancak gx_user.h üst bilgi dosyanızda bu değer belirtilerek geçersiz kılınabilir.

İç GUIX iş parçacığı yürütme döngüsü üç eylemden oluşur. İlk olarak GUIX, GUIX olay kuyruğundan olayları alır ve guix pencereleri ve pencere öğeleri tarafından işlenmek üzere bu olayları gönderir. Olaylar genellikle düzenli süreölçerler, dokunmatik ekran veya tuş takımı gibi giriş cihazları ve kullanıcı girişini işlerken GUIX pencere öğeleri tarafından GUIX olay kuyruğuna iletilir. Ardından, tüm olaylar işlendikten sonra GUIX bir ekran yenilemesi gerekip gerekmediğini belirler ve bu durumda, görüntü grafik verilerini güncelleştirmek için gerekli işlemeyi gerçekleştirir. Bunun için, temel olarak kirli olarak işaretlenmiş pencere ve pencere öğelerinin çizim işlevleri çağrılır. Son olarak GUIX, yeni bir giriş olayı veya olayları gelene kadar GUIX iş parçacığını askıya alır.

Olay İşleme

Dokunma veya kalem girişi olayları, dokunmatik veya kalem girişi piksel konumunun altındaki en üstteki pencere veya pencere öğesi belirlenerek ve bu pencerenin/pencere öğesinin olay işleme işlevi çağrılarak işlenir. Pencere öğesi kalem girişi olaylarını anlarsa, olayı bu pencere öğesi türüne uygun şekilde işler. Değilse, en üstteki pencere öğesi dokunma veya kalem girişi olayını işlem için pencere öğesinin üst öğesine geçirir. Olayın zincire geçirilmesi, olay işlenene veya olay kök pencereye ulaşana kadar devam eder ve bu durumda olay atılır.

Tuş takımı olayları, giriş odağı olan pencereye/pencere öğesine gönderilir. Giriş odak durumu GUIX gx_system bileşeni tarafından korunur.

Zamanlayıcı olayları her zaman işlenmek üzere zamanlayıcının sahibi olan pencereye veya pencere öğesine gönderilir.

Düğme tıklama olayları veya kaydırıcı değeri değiştirme olayları gibi dahili olarak oluşturulan olaylar her zaman olayı oluşturan pencere öğesinin üst öğesine gönderilir. Üst öğe olayı işlemezse, dokunma veya kalem girişi olaylarına benzer şekilde zincire geçirilir.

Çizim

Tüm olay işleme tamamlandıktan sonra GUIX iç iş parçacığı herhangi bir görüntüleme güncelleştirmesi gerekip gerekmediğini ve gerekliyse uygun pencere/pencere öğesi çizim işlevlerinin çağrılıp çağrılmadığını belirler. Çizim tamamlandığında, GUIX iç iş parçacığı bir sonraki GUIX olayının işlenmesi için olay kuyruğunda bekler.

GUIX, her pencere öğesi ve tuval için yeniden çizilmesi gereken alanlar olan kirli alanlar kavramını uygular. Pencere öğesi yalnızca daha önce kirli olarak işaretlenmiş alanlara çizim yapabilir. Bir pencere öğesi çizim işlevi çağrıldığında, tüm çizim işlemleri önceden tanımlanmış kirli dikdörtgene dahili olarak kırpılır. Bu alanın dışına çizim yapma girişimleri yoksayılır.

Pencere öğeleri ve pencereler, API işlevini gx_system_dirty_mark çağırarak kendilerini kirli olarak işaretler. Bu işlev, pencere öğesinin veya pencerenin tamamının yeniden çizilmesi gerektiğini işaretler. gx_system_dirty_partial_add ikinci bir işlev, pencerenin veya pencere öğesinin yalnızca bir kısmını kirli olarak işaretlemek için alternatif olarak çağrılabilir.

Pencere öğelerini kirli olarak işaretleme ve ardından bu pencere öğelerini yeniden çizme modeli, yalnızca tüm giriş olayları işlendiğinde ertelenmiş çizim olarak adlandırılır. GUIX ertelenen çizim algoritması ve kirli liste bakımı, çizim verimliliğini artırmak için tasarlanmıştır. Çizim işlemleri genellikle pahalı olduğundan GUIX gereksiz çizimi önlemek için çok çalışır.

Çizim bir GUIX tuvaline yapılır. Tuval, grafik verilerini barındıracak şekilde ayrılmış bir bellek alanıdır. Bir tuval, sistem mimarisine ve bellek kısıtlamalarına bağlı olarak donanım çerçevesi arabelleğine doğrudan bağlı olabilir veya olmayabilir. Herhangi bir çizimin gerçekleşebilmesi için önce gx_canvas_drawing_initiate API işlevi çağrılarak bir tuvalin çizim için açılması gerekir. Bu API, çizim için bir tuval hazırlar ve geçerli çizim bağlamını oluşturur. GUIX bir sistem tuval yenilemesi gerçekleştirdiğinde, tuval çizim için açılır ve pencere öğesi düzeyinde çizim API'leri çağrılmadan önce oluşturulan çizim bağlamı oluşturulur. Bu nedenle pencere öğelerinin pencere öğesi çizim işlevindeki bir tuval üzerinde çizim başlatması gerekmez.

Ancak, bir uygulama standart GUIX ertelenen çizim algoritmasının akışının dışında bir tuvale hemen çizim yapmak istiyorsa, uygulamanın diğer çizim API'leri işlevlerini çağırmadan önce doğrudan gx_canvas_drawing_initiate çağırması ve hemen çizim tamamlandıktan sonra gx_canvas_drawing_complete çağırması gerekir.

Kullanıcı Girişi

GUIX, önceden tanımlanmış olay türlerine sahip dokunmatik ekran, fare ve klavye cihazlarını destekler. Özel olay türleri tanımlanarak veya özel giriş cihazı önceden tanımlanmış olay türlerine eşlenerek ek giriş cihazları kullanılabilir.

Bu cihazlarla ilişkili eylemler, iç GUIX iş parçacığı tarafından işlenen olaylara çevrilir. Dokunmatik ekranı destekleyecek şekilde yazılmış sürücü düzeyinde yazılım, kalem aşağı, yukarı ve kalem sürükleme işlemleri için GUIX olay kuyruğu olaylarını hazırlamalı ve göndermelidir. Benzer şekilde, tuş takımı giriş sürücüsü de tuş basması ve tuş bırakma girişi için olaylar oluşturmalıdır.

Kalıcı iletişim kutusu yürütmesi, diğer GUIX pencerelerinin veya pencere öğelerinin kullanıcı girişini alabilmesi için kullanıcıya bir şekilde kapatılması gereken bir pencere sunmayı ifade eder. Kalıcı iletişim kutuları, dokunma veya fare girişi olaylarının x,y konumundan bağımsız olarak, iletişim kutusu penceresi görüntülenirken tüm kullanıcı girişini yakalar.

Kalıcı iletişim kutuları, uygulama yazılımı tarafından önce gx_window_create çağrılarak pencere normal şekilde oluşturulup ardından GUIX API işlevi gx_window_execute çağrılarak tetiklenir.

gx_window_execute işlevi çağrıldığında, GUIX yerel bir olay işleme döngüsü girer. gx_window_execute işlevi, kullanıcı girişi veya gx_window_close çağrılarak iletişim penceresi kapatılana kadar çağırana geri dönmez. Bu nedenle, guix iç iş parçacığı dışında herhangi bir iş parçacığından gx_window_execute işlevini çağırmamak çok önemlidir.

Düzenli İşleme

GuiX, uygulama düzenli istekleri için görüntü efektleri, sprite animasyonu ve destek sağlamak için bir ThreadX zamanlayıcı kullanır. Bu tek zamanlayıcı, GUIX ile ilgili tüm gereksinimleri karşılamak için kullanılır. Varsayılan olarak, sabit daha önce gx_port.h veya gx_user.h üst bilgisinde tanımlanmadığı sürece, GUIX iç zamanlayıcı işleme sıklığı gx_api.h içinde tanımlanan sabit GX_SYSTEM_TIMER_MS aracılığıyla 20ms olarak ayarlanır. Varsayılan sıklık, GUIX kitaplığını oluştururken derleme seçeneği aracılığıyla veya gx_user.h'de açıkça yeniden tanımlanarak uygulama tarafından değiştirilebilir.

Önemli

GUIX zamanlayıcı sıklığının RTOS zamanlayıcı değerlerinde ifade edildiğine ve sabit GX_SYSTEM_TIMER_TICKS tarafından tanımlandığına dikkat edin. GX_SYSTEM_TIMER_TICKS değeri GX_SYSTEM_TIMER_MS ve TX_TIMER_TICKS_PER_SECOND kullanılarak hesaplanır. Kullanıcı, GUIX zamanlayıcı sıklığını ve çözünürlüğünü ayarlamak için bu değerlerden herhangi birini gx_port.h veya gx_user.h dosyasında yeniden tanımlayabilir.

Görüntü Sürücüsü

Görüntü sürücüleri, çekirdek GUIX koduna bir dizi çizim işlevi sağlamakla sorumludur. Bu çizim işlevlerinin her birinin uygulanması sürücü tarafından belirlenir ve mümkün olduğunda uygulama donanım hızlandırma desteğinden yararlanacaktır. Genel olarak çizim işlevi, piksel verilerini fiziksel çerçeve arabelleği veya sürücü mimarisine bağlı olarak ikincil bir arabellek olabilecek bir bellek arabelleğine yazarak çalışır. Birçok sürücü, iki çerçeve arabelleği kullanarak çift arabelleğe alma uygular ve arabellek iki durumlu işlevi çağrılarak bu arabellekler iki durumlu olarak değiştirilir. GUIX bu işlevleri uygun zamanlarda dahili olarak çağırır. Bellek kısıtlanmış sistemler için çizim işlevleri yalnızca tek bir bellek çerçevesi arabelleğine yazabilir.

GUIX, her bir alt düzey çizim işlevinin varsayılan yazılım uygulamalarını her destek renk derinliğinde ve biçiminde sağlar. Bu işlevler, GX_DISPLAY yapısı içinde tutulan işlev işaretçileri aracılığıyla çağrılır. Donanıma özgü sürücüler oluşturulduğunda, genellikle hedef donanıma özgü işlevlerle bu işlev işaretçilerinin bir kısmının üzerine yazar.

Tipik bir donanım görüntü sürücüsü, önce gerekli renk derinliği ve biçimi için varsayılan GUIX görüntü sürücüsü oluşturularak uygulanır. Ardından donanım sürücüsü, belirli bir donanım uygulaması için iyileştirilmesi veya özelleştirilmesi gereken işlevlerin yerini alır.

GUIX, 1-bpp tek renkliden 32-bpp a:r:g:b biçimine kadar değişen piksel renk biçimlerini destekler. GUIX ayrıca her geniş renk derinliği kategorisi içinde r:g:b vs b:g:r bayt sırası, paketlenmiş piksel ve sözcük hizalı piksel biçimleri ve alfa kanalları gibi birçok çeşitlemesi destekler. Şu anda desteklenen 25 farklı renk biçimi vardır, ancak donanım satıcıları yeni çeşitlemeler verdikçe bu liste genişler.

Bellek Mimarilerini Görüntüleme

Çeşitli donanım hedefleri ve ekranları, hedefin bellek kısıtlamalarına ve uygulamanın işlevsellik gereksinimlerine bağlı olarak çeşitli görüntüleme belleği mimarileri kullanır. Ortak bellek mimarilerinden bazılarını burada özetleyeceğiz ve her birinin kısa bir açıklamasını yapacağız.

Model 1) Çerçeve arabelleği yok, dış GRAM'de tutulan grafik verileri:

Çerçeve arabelleği yok, dış GRAM'de tutulan grafik verileri

Yukarıdaki modelde, CPU'ya yerel bellekte çerçeve arabelleği için bellek yoktur. Tüm grafik verileri, ekranın kendisine dahil edilen bir dış GRAM'de depolanır. Dış GRAM arabirimi paralel veya seri olabilir. Bu mimari türü çok düşük maliyetlidir; ancak grafik verileri güncelleştirildiğinde istenmeyen yırtılma etkisi sergileyebilir.

Model 2) Bir yerel çerçeve arabelleği:

Bir yerel çerçeve arabelleği

Bu modelde grafik verileri için bellek, CPU'ya doğrudan erişilebilen rastgele erişimli bir bellekten ayrılır. Grafik verilerinin (zamanlama sinyalleriyle birlikte) yerel bellekten ekrana tekrar tekrar iletilmesi için ayrılmış donanım bulunmalıdır. Grafik belleğinin CPU için kullanılabilen yerel SRAM veya DRAM bloğu olması nedeniyle bu model model 1'den farklıdır. Bu, yığın ve program değişkenlerinin bulunduğu bellekle aynı olabilir.

Model 3) Yerel çerçeve arabelleği + dış GRAM:

Yerel çerçeve arabelleği + dış GRAM

Model 3, ilk ikisinin birleşimidir. Bu modelde, bir çerçeve arabelleği tutmak için yeterli yerel bellek vardır. Buna ek olarak, görüntü cihazı bir dış GRAM sağlar ve GRAM'de sağlanan verileri kullanarak kendisini otomatik olarak yeniler. Genellikle yerleşik DMA kanallarını kullanarak yerel çerçeve arabelleğinin değiştirilmiş kısmını bir blok aktarımında dış GRAM'e aktarabildiğimiz için bu mimari, geliştirilmiş güncelleştirme verimliliğinden yararlanır. Bu model ayrıca ilk iki modelden birinde mevcut olabilecek yırtılma ve titremeyi de ortadan kaldırır çünkü dış GRAM'e yalnızca tamamlanmış grafik içeriği kopyalanır.

Model 4) Ping-pong çerçeve arabellekleri:

Ping-pong çerçeve arabellekleri

Model 4'te, iki yerel çerçeve arabelleği sağlamak için yeterli bellek vardır. Bu durumda GUIX, bir çerçeve arabelleğine etkin çerçeve arabelleği, diğeri ise çalışma çerçevesi arabelleği olarak davranır. Bir görüntüleme güncelleştirmesi veya çizim işlemi devam ederken, çalışma arabelleğinde gerçekleşir. Çizim işlemi tamamlandığında arabellekler iki durumlu olarak değiştirilir ve çalışma arabelleği etkin arabelleğe, etkin arabellek de çalışma arabelleğine dönüşür. Bu model, tek bir arabelleğe alınmış sistemde gözlemlenebilen ekran titremesini ve yırtılmalarını da ortadan kaldırır.

Model 5) Tuval birleştirme ile ping-pong arabellekleri:

Tuval birleştirme ile ping-pong arabellekleri

Model 5'te kullanılabilir bellek sınırlarına kadar herhangi bir sayıda tuval oluşturulabilir. Tuvaller, tuval bileşimini oluşturmak için uygulama tarafından tanımlandığı gibi yer paylaşımlı veya birlikte karıştırılabilir. Ekran yenileme işleminden sonra yeni bir bileşik oluşturulduğunda, etkin ve çalışan bileşik arabellekler standart ping-pong arabellek mimarisiyle aynı işlemde değiştirilir. Model 5, tuvalleri son çıkış bileşimine karıştırarak ekran soldurma ve karıştırma işlemleri gerçekleştirme özelliği ekler.

Model 6) Dış GRAM ile tuval oluşturma:

Dış GRAM ile tuval oluşturma

Model 6, Model 5'te yalnızca bir bileşik arabelleğin gerekli olduğu ve bileşik arabelleğin daha sonra dış GRAM'ye aktarıldığı hafif bir varyasyondur. Bu model aynı zamanda tam ekran karıştırmayı ve yer paylaşımlarını da destekler.

Dize Kodlama

GUIX varsayılan olarak UTF8 biçim dizesi kodlamayı destekler. UTF8 dize kodlama desteği, gx_user.h üst bilgi dosyasında GX_DISABLE_UTF8_SUPPORT tanımlanarak devre dışı bırakılabilir. UTF8 kodlaması devre dışı bırakılırsa, GUIX dahili olarak yalnızca standart 8 bit ASCII artı Latin-1 kod sayfası karakter kodlaması kullanır. UTF8 dize kodlamasını devre dışı bırakmak, biraz daha küçük bir GUIX kitaplığı ayak izi ve dize işleme ve metin çizim işlevlerinin biraz daha hızlı çalışma zamanı yürütülmesine neden olur.

UTF8 dize kodlaması aşağıdaki özelliklere sahiptir:

  • ASCII dizeleri, standart 7 bit ASCII kodlamasından daha fazla depolama alanı almaz.

  • ANSI-C dize işlevlerinin çoğu UTF8 dize kodlamasıyla değişiklik yapmadan çalışır.

Kanji karakter kümeleri de dahil olmak üzere dünyadaki tüm etkin karakter kümeleri UTF8 dize kodlaması kullanılarak temsil edilebilir.

Statik ve Dinamik Dizeler

Metin görüntülemeyi destekleyen GUIX pencere öğelerinize atanan dizeler, normalde aşağıda açıklanan GUIX Dizesi tablosunun bir parçası olarak sabit depolama alanına yerleştirilen statik olarak tanımlanmış dize sabitleri ve sprintf veya gx_utility_ltoa gibi hizmetler kullanılarak çalışma zamanında oluşturulan dizeler olan dinamik olarak tanımlanmış dizeler olabilir.

Dinamik dizelere örnek olarak GUIX istemi pencere öğesi içinde sayı olarak görüntülenen bir değer veya kullanıcının konumu ve biçim tercihlerine göre dinamik olarak biçimlendirilmiş bir "saat / tarih" dizesi verilebilir. Çalışma zamanında GX_PROMPT veya GX_TEXT_BUTTON pencere öğeleri gibi GUIX pencere öğelerine atanacak dizeler oluşturursanız, çalışma zamanı tarafından oluşturulan bu dizeler için depolama alanını statik olarak ayırmayı (genel karakter dizileri) seçmelisiniz veya dinamik bellek ayırıcı işlevi tanımlayıp yükleyebilir ve GX_STYLE_TEXT_COPY stilini kullanabilirsiniz. bu pencere öğelerinin atanmış metin dizelerinin özel bir kopyasını oluşturmalarını isteyen bir örnektir.

Dinamik olarak oluşturulan bir dizeyi tutmak ve ardından bu dizeyi GX_STYLE_TEXT_COPY stili olmayan bir pencere öğesine atamak için otomatik karakter dizisi gibi geçici depolama kullanmak bir programlama hatasıdır. Bu stil etkinleştirilmediğinde, pencere öğesi sağlanan dize işaretçisini kopyalar ve dize verilerinin statik olarak ayrılması gerekir, aksi takdirde pencere öğesi dize işaretçisi büyük olasılıkla çöp verilerine işaret ederek öngörülemeyen sonuçlar üretir.

GX_STRING bağımsız değişkenlerini geçirme

bir GX_STRING parametresi kabul eden GUIX API işlevleri her zaman GX_STRING.gx_string_ptr alanının işaret ettiği dizenin uzunluğunun GX_STRING.gx_string_length alanının değeriyle eşleşip eşleşmediğini doğrular. İki alan tutarlı değilse bir GX_INVALID_STRING_LENGTH hatası döndürülür ve çağrılan API dize ataması kabul edilmeden döndürülür.

Güvenlikle ilgili dikkat edilmesi gerekenler için GUIX yazılımı hiçbir zaman strlen veya strcpy gibi standart C dizesi işlevlerini dahili olarak kullanmaz. Bu işlevlerin, dize verileri dinamik olarak alındığında kötü amaçlı saldırılara karşı duyarlı olduğu bilinmektedir ve bu durum genellikle bağlı uygulamalarda geçerlidir.

GUIX kitaplığı, parametre olarak kabul eden (GX_CONST GX_CHAR *text) 5.6 tanımlı API işlevlerini yayınlamadan önce yayınlanır. Geriye dönük uyumluluk için desteklenmeye devam eden bu işlevler, giriş parametresi olarak kabul eden (GX_CONST GX_STRING *string) tercih edilen API işlevleriyle engellenmiş ve değiştirilmiştir.

Kullanım dışı metin işleme API'si varsayılan olarak etkindir ve önceden yazılmış tüm uygulamaların GUIX kitaplığına yönelik en son güncelleştirmelerle temiz bir şekilde derlenmesine olanak tanır. Kullanım dışı bırakılmış metin işleme API'sini devre dışı bırakmak için tanım GX_DISABLE_DEPRECATED_STRING_APIgx_user.h üst bilgi dosyasına eklenmelidir. Tüm yeni uygulamalar GX_DISABLE_DEPRECATED_STRING_API tanımlamalı ve yalnızca yeni API işlevlerini kullanmalıdır. GUIX kitaplığı sürüm 5.6 veya üzeri için GUIX Studio tarafından oluşturulan tüm çıkış dosyaları yalnızca yeni API işlevlerini kullanır.

Aşağıdaki tabloda kullanım dışı bırakılan ve yeni tanımlanan değiştirme API işlev adları listelenmiştir:

Kullanım Dışı İşlev Adı Ile Değiştirildi
gx_binres_language_table_load gx_binres_language_table_load_ext
gx_canvas_rotated_text_draw gx_canvas_rotated_text_draw_ext
gx_canvas_text_draw gx_canvas_text_draw_ext
gx_context_string_get gx_context_string_get_ext
gx_display_language_table_get gx_display_language_table_get_ext
gx_display_language_table_set gx_display_language_table_set_ext
gx_display_string_get gx_display_string_get_ext
gx_display_string_table_get gx_display_string_table_get_ext
gx_multi_line_text_button_text_set gx_multi_line_text_button_text_set_ext
gx_multi_line_text_input_char_insert gx_multi_line_text_input_char_insert_ext
gx_multi_line_text_input_text_set gx_multi_line_text_input_text_set_ext
gx_multi_line_text_view_text_set gx_multi_line_text_view_text_set_ext
gx_prompt_text_get gx_prompt_text_get_ext
gx_prompt_text_set gx_prompt_text_set_ext
gx_single_line_text_input_text_set gx_single_line_text_input_text_set_ext
gx_system_string_width_get gx_system_string_width_get_ext
gx_system_version_string_get gx_system_version_string_get_ext
gx_text_button_text_get gx_text_button_text_get_ext
gx_text_button_text_set gx_text_button_text_set_ext
gx_text_scroll_wheel_callback_set gx_text_scroll_wheel_callback_set_ext
gx_utility_string_to_alphamap gx_utility_string_to_alphamap_ext
gx_widget_string_get gx_widget_string_get_ext
gx_widget_text_blend gx_widget_text_blend_ext
gx_widget_text_draw gx_widget_text_draw_ext

GUIX Dize Tablosu

GUIX dize tablosu ve dize kaynakları bir GUIX görüntüleme örneğiyle kaydedilir.

Çok monitörlü bir sistemdeki her ekranın kendi dize tablosu vardır ve her ekran kendi seçilen dilinde çalıştırılabilir. Diğer GUIX kaynak türleri (renkler, yazı tipleri ve piksel haritaları) guix görüntüleme bileşeni tarafından da korunur, çünkü bu kaynak türleri her bir görüntü rengi biçimine ve renk derinliğine özeldir.

Uygulama dizesi tablonuzu el ile oluşturabilirsiniz, ancak çoğu zaman görüntü dizesi tablosu proje kaynak dosyanızın bir parçası olarak GUIX Studio uygulaması tarafından tanımlanır. Kullanılabilir diller de kaynak üst bilgisi dosyasında tanımlanır. Görüntü dizesi tablosu, uygulama dizelerine yönelik işaretçilerden oluşan çok sütunlu bir tablodur. Dize tablosunun her sütunu, uygulama tarafından desteklenen bir dili temsil eder. Uygulamanız yalnızca İngilizce gibi tek bir dili destekliyorsa dize tablonuzda yalnızca bir sütun olur. Yine de, uygulama yazılımınızı değiştirmeden istediğiniz zaman ek diller için destek ekleyebilirsiniz.

Etkin dize tablosu, gx_display_string_table_set API işlevi çağrılarak atanır. Bu işlev GUIX Studio tarafından oluşturulan başlangıç kodu tarafından otomatik olarak çağrılır, ancak etkin dize tablosunu değiştirmek için doğrudan uygulama tarafından da çağrılabilir.

Etkin dil, gx_display_active_language_set API işlevi çağrılarak atanır. Bu işlev, görüntü dizesi tablosunun hangi sütununun etkin olduğunu belirler.

Bu işlev çağrıldığında, tüm görünür GUIX pencere öğelerine bir GX_EVENT_LANGUAGE_CHANGE olayı gönderilerek yeni etkin dize verilerini görüntüleyecek şekilde güncelleştirilebilmeleri sağlanır.

Pencere öğeleri ve uygulama yazılımları, dize kimliği değerlerini ve gx_display_string_get_ext veya gx_widget_string_get_ext API işlevlerini kullanarak statik olarak tanımlanmış dizeleri çözümler. Bu işlevler, belirli bir dize kimliği ve şu anda etkin olan dille ilişkili GX_STRING döndürür.

Çift Yönlü Metin Ekranı

GUIX, çift yönlü metin desteği için iki strateji sağlar.

Seçeneklerden biri, GUIX Studio uygulamasında bidi metin yeniden sıralama yapmaktır. Bu seçeneğin kullanılması GUIX Studio, çıktı dosyasına görüntüleme sırasına göre bidi metin oluşturmakla sorumludur. Bu çözüm çalışma zamanı performansı üzerinde sıfır etkiye sahiptir ve GUIX çalışma zamanı kitaplığına herhangi bir ekleme gerektirmez. GUIX Studio'un görüntüleme sırası bidi metin dizeleri oluşturmasına izin vermek için GUIX Studio dil yapılandırması iletişim kutusunda Görüntüleme Düzeninde Bidi Metni Oluştur onay kutusunu seçmeniz gerekir:

Dilleri yapılandırma

Bu seçenekler seçiliyken, oluşturulan kaynak dosyası görüntüleme sırasında oluşturulan Bidi dizelerini içerir ve GUIX çalışma zamanı kitaplığında fazladan işlem yapılması gerekmez.

İkinci seçenek, çalışma zamanında bidi metin yeniden sıralama yapmaktır. Bu seçenek, GUIX Studio uygulaması tarafından oluşturulmayan ve dinamik olarak tanımlanan bidi metin dizesini işlemesi gereken uygulamalar için desteklenir. Bu durumda GUIX çalışma zamanı kitaplığı, her metin dizesini çizmeden önce bidi metnini yeniden sıralamaktan sorumludur. Bu çözümün çalışma zamanı performansı ve bellek etkisi vardır. Bidi metin yeniden sıralama işlemi için yeterli dinamik bellek kullanılabilir olmalıdır. Bu çözüm, GUIX kitaplığını oluştururken koşullu GX_DYNAMIC_BIDI_TEXT_SUPPORT tanımlanmasını gerektirir. Çalışma zamanında bidi metin desteğini etkinleştirmek/devre dışı bırakmak için iki API işlevigx_system_bidi_text_enable ve gx_system_bidi_text_disable sağlanır.

Hem GX_DYNAMIC_BIDI_TEXT_SUPPORT hem de GUIX Studio'yu Bidi metnini görüntüleme sırasına göre oluşturacak şekilde yapılandırmamalısınız. Bidi metin dizesi işleme için bir stratejiyi veya diğerini seçmelisiniz.

Bellek Kullanımı

GUIX, uygulama programıyla birlikte bulunur. Sonuç olarak, GUIX'in statik bellek (veya sabit bellek) kullanımı geliştirme araçları tarafından belirlenir; Örneğin, derleyici, bağlayıcı ve bulucu. Dinamik bellek (veya çalışma zamanı belleği) kullanımı uygulamanın doğrudan denetimi altındadır.

Statik Bellek Kullanımı

Geliştirme araçlarının çoğu, uygulama programı görüntüsünü beş temel alana böler: yönerge, sabit, başlatılan veriler, başlatılmamış veriler ve GUIX iş parçacığı yığını. Aşağıdaki şekilde, bu bellek alanlarının olası bir düzeni gösterilmektedir:

Bellek düzeni

Bunun yalnızca bir örnek olduğunu anlamak önemlidir. Gerçek statik bellek düzeni işlemciye, geliştirme araçlarına, temel alınan donanıma ve uygulamanın kendisine özgüdür.

Yönerge alanı, programın tüm işlemci yönergelerini içerir. Bu alan genellikle ROM'da bulunur.

Sabit alan, GUIX'te varsayılan ayarları ve tüm uygulama kaynaklarını (görüntüler, dizeler, yazı tipleri ve renkler) içeren çeşitli derlenmiş sabitleri içerir. Ayrıca, bu alan başlatılan veri alanının "ilk kopyasını" içerir. Derleyicinin başlatma işlemi sırasında sabit alanın bu bölümü, RAM'de genel olarak başlatılan verileri ayarlamak için kullanılır. Sabit alan genellikle en büyüktür ve genellikle yönerge alanını izler ve genellikle ROM'da bulunur.

GUIX piksel haritaları ve yazı tipleri genellikle büyük miktarlarda sabit veri depolama alanı gerektirir. Bu büyük statik veri alanları normalde ROM veya FLASH olarak tutulur.

GUIX iş parçacığı yığını, gx_system.h dosyasındaki başlatılmamış veri alanında (genel değişken olarak) aşağıdaki gibi tanımlanır:

_gx_system_thread_stack[GX_THREAD_STACK_SIZE];

GX_THREAD_STACK_SIZEgx_port.h içinde tanımlanır, ancak gx_user.h üst bilgi dosyasında bu simge tanımlanarak veya proje seçenekleri ya da komut satırı parametreleri aracılığıyla uygulama tarafından geçersiz kılınabilir. Yığın boyutu, en kötü durum olay işleme ve iç içe çizim çağrılarını işleyecek kadar büyük olmalıdır.

Dinamik Bellek Kullanımı

Daha önce belirtildiği gibi, dinamik bellek kullanımı uygulamanın doğrudan denetimi altındadır. Tuvallerle ilişkili denetim blokları ve bellek, vb. hedefin bellek alanında herhangi bir yere yerleştirilebilir. Bu önemli bir özelliktir çünkü çalışma zamanında farklı fiziksel bellek türlerinin kolay kullanımını kolaylaştırır.

Örneğin, hedef donanım ortamının hem hızlı hem de yavaş belleğe sahip olduğunu varsayalım. Uygulamanın çizim için ek performansa ihtiyacı varsa tuval belleği, en iyi performans için yüksek hızlı bellek alanına açıkça yerleştirilebilir.

İsteğe bağlı bazı GUIX hizmetleri ve özellikleri genellikle yığın olarak adlandırılan bir çalışma zamanı dinamik bellek ayırma mekanizması gerektirir. Bu hizmetler ve özellikler tamamen isteğe bağlıdır ve birçok GUIX uygulaması herhangi bir yığın kullanmaz ve çalışma zamanı bellek ayırma mekanizması tanımlamaz.

Çalışma zamanı bellek ayırması gerektiren hizmetleri kullanacaksanız, belleğin dinamik olarak ayrılması veya serbest olması gerektiğinde GUIX'in çağıracağı işlevleri yüklemeniz gerekir. Bu işlevleri istediğiniz gibi uygulayabilirsiniz, böylece bu durumda bile dinamik bellek havuzunun konumu uygulama denetimi altında olur. Dinamik bellek ayırma desteğini yüklemek için uygulamanın, bellek ayırmanızı ve belleksiz hizmetlerinizi tanımlamak üzere program başlatma sırasında API hizmeti gx_system_memory_allocator_set çağırması gerekir. Tam bir örnek için bu API'nin belgelerine bakın.

Çalışma zamanı bellek ayırma ve ayırmayı kaldırma hizmeti gerektiren GUIX hizmetleri şunlardır:

  • İkili kaynakları dış depolamadan GUIX çalışma zamanı ortamına yükleme.

  • Yazılım çalışma zamanı jpeg görüntü kod çözücüsü.

  • Yazılım çalışma zamanı png görüntü kod çözücü.

  • GX_STYLE_TEXT_COPY ile metin pencere öğelerini kullanma.

  • Çalışma zamanı pixelmap yeniden boyutlandırma ve döndürme yardımcı programı işlevleri.

  • Çalışma zamanı ekranı ve pencere öğesi denetimi blok ayırma.

Daha küçük uygulamalar için GUIX kaynakları genellikle uygulama görüntüsünün bir parçası olarak derlenir ve statik olarak bağlanır ve ikili kaynak yüklemesi gerekli değildir. İkili kaynaklar, uygulamanın bir flash sürücü veya URL gibi bir depolama konumundan yüklenen çalışma zamanında kaynakları (yazı tipleri, görüntüler, diller) yüklemesine olanak tanır.

Çalışma zamanı jpeg ve png kod çözücüleri isteğe bağlı bileşenlerdir. Çoğu GUIX uygulaması, GUIX Studio aracının tüm gerekli görüntü dosyalarının kodunu önceden çözmesine ve bunları özel GUIX Pixelmap veri kaynakları olarak depolamasına olanak tanır. Bu hizmetler, jpeg ve/veya PNG görüntülerinin pixelmap biçimine çalışma zamanı dönüştürülmesi gereken uygulamalar için eksiksiz olarak sağlanır.

GX_STYLE_TEXT_COPY , kullanıcının belirli bir pencere öğesinin veya pencere öğelerinin dinamik olarak atanan metnin kendi özel kopyasını saklayacağını belirtmesine olanak tanır. Bu seçeneğin kullanılması, bellek ayırma mekanizmasının kullanılmadan önce yüklenmesini gerektirir. Metin türü pencere öğesi oluşturulduğunda bu stil bayrağı sağlanmazsa , uygulamanın dinamik olarak oluşturulan ve atanan tüm metin dizeleri için statik depolama alanları ayırması gerekir. Bu durumda çalışma zamanı tarafından oluşturulan dize verilerini tutmak için otomatik değişkenler kullanılmamalıdır. GX_STYLE_TEXT_COPY stili etkinleştirilirse, guix pencere öğelerine atanan dize verilerini tutmak için otomatik değişkenler kullanılabilir, çünkü her pencere öğesi atanan metnin kendi kopyasını oluşturur.

Pixelmap yeniden boyutlandırma ve döndürme yardımcı programı işlevleri, sonuçta elde edilen çevrilmiş piksel haritasını uygulamada kullanılabilen yeni bir piksel haritası olarak döndürür. Bu hizmetler kullanılıyorsa, çalışma zamanı tarafından oluşturulan piksel haritası veri bloklarını tutmak için yeterli dinamik bellek kullanılabilir olmalıdır.

Son olarak, GUIX ekranları ve pencere öğeleri için denetim blokları statik veya dinamik olarak ayrılabilir. Daha küçük uygulamalar için, program başlatma sırasında tüm uygulama ekranlarını oluşturmak ve statik olarak ayrılmış denetim blokları kullanmak yaygın bir durumdur. Büyük uygulamalarda, ekran ve alt pencere öğesi denetimlerini gerektiği gibi temellerde dinamik olarak oluşturmak yaygın bir durumdur. Dinamik olarak ayrılan denetim blokları, GUIX Studio özellikler görünümünde Çalışma Zamanı Ayır onay kutusu seçilerek veya standart API aracılığıyla pencere öğesi oluşturulurken stil bayrağı GX_STYLE_DYNAMICALLY_ALLOCATED geçirilerek belirtilir. Dinamik olarak ayrılan pencere öğesi denetim bloklarının kullanılması, bellek ayırma ve serbest bırakma hizmetlerinin yukarıda açıklandığı gibi tanımlanmasını gerektirir.

GUIX Bileşenleri

GUIX API'leri, GUIX sisteminin temel bileşenlerine karşılık gelen birkaç temel gruba ayrılır ve düzenlenir. Temel bileşenler şunlardır:

Bileşenler Description
GX_SYSTEM Başlatma, olaylar, zamanlayıcılar, dize tabloları ve görünür pencere öğesi hiyerarşi yönetiminden sorumlu GUIX sistem bileşeni.
GX_CANVAS Çizim alanı. Tuval, donanım çerçevesi arabelleğinin ince bir soyutlaması olabileceği gibi, saf bir bellek tuvali de olabilir. Tuval türü, gx_canvas_create API işlevine geçirilen parametrelerle belirlenir.
GX_CONTEXT Çizim bağlam bileşeni. Çizim bağlamı, geçerli çizim işlemleri için ekran, tuval ve fırça ile kırpma alanı hakkındaki bilgileri içerir.
GX_DISPLAY Uygulamanızın ve GUIX pencere öğelerinin tuval üzerinde çizim yapmasını sağlamak için API'leri ve sürücü düzeyinde uygulamaları sağlar. GX_DISPLAY, tuvalin gerekli renk biçimini kullanarak her tuvalde grafikleri doğru şekilde işlemek için uygulanır. GX_DISPLAY bileşeni, her ekrana bağlı tuvallere çizen pencere öğelerinin kullanabileceği kaynakları da (renkler, yazı tipleri ve piksel haritaları) yönetir.
GX_WIDGET Temel görünür pencere öğesi nesnesi ve ilişkili API'ler. Tüm GUIX pencere öğesi türleri temel GX_WIDGET türünü temel alır veya türetilir.
GX_UTILITY Dikdörtgenlerle çalışmaya yönelik yardımcı program işlevleri, dize dönüştürme işlevleri ve ANSI olmayan matematik işlevleri bu gruba dahil edilir.

Bu temel bileşenlere ek olarak, GUIX kitaplıkta sağlanan her pencere öğesi türüne özgü API'ler içerir. Bu API'ler, bu Kullanıcı Kılavuzu'nun "GUIX Hizmetlerinin Açıklaması" başlıklı 4. Bölümde açıklanmıştır.

GUIX Sistem Bileşeni

GUIX sistem bileşeni, kullanıcı arabirimi uygulaması için genel olan çeşitli hizmetler sağlar. Bu hizmetler şunlardır: başlatma, olay yönetimi, görüntü yönetimi, kaynak yönetimi, zamanlayıcı yönetimi ve pencere öğesi yönetimi. Her hizmet, uygulama programınızın organizasyonu için önemlidir ve bu hizmetler aşağıdaki alt bölümlerde daha ayrıntılı olarak açıklanmıştır.

Başlatma

GUIX başlatma işlemi, uygulama tarafından ThreadX tx_application_define yordamından (başlatma bağlamı) veya uygulama iş parçacıklarından çağrılabilen hizmet gx_system_initialize çağıran uygulama tarafından gerçekleştirilir. gx_system_initialize işlevi tüm genel GUIX veri yapılarını başlatır ve GUIX sistem mutex,olay kuyruğu, zamanlayıcı ve iş parçacığını oluşturur. gx_system_initialize döndürdüğünde uygulama GUIX kullanabilir.

İş Parçacığı İşleme

Başlatma sırasında oluşturulan iç GUIX iş parçacığı, GUIX'teki işlemlerin çoğundan sorumludur. Bu iş parçacığındaki işleme ilk olarak, temel alınan görüntü sürücüsü için gereken tüm ek başlatmaları tamamlar. Bu tamamlandıktan sonra GUIX iş parçacığı, önce GUIX olay kuyruğunda bulunan tüm olayları işleyen ve gerekirse ekranı yenileyen bir döngüye girer. Ekran yenilemesi, görünür olan ve yeniden çizilmesi gerektiği anlamına gelen kirli olarak işaretlenenlere bağlı olarak gerekli GUIX çizim işlevlerini yürütür. Hiçbir olay olmadığında ve ekranda yenilenecek hiçbir şey kalmadığında GUIX iş parçacığı askıya alınıp bir sonraki GUIX olayının gelmesini bekler.

RTOS Bağlama

GUIX sistem bileşeni varsayılan olarak iş parçacığı hizmetleri, olay kuyruğu hizmetleri ve zamanlayıcı hizmetleri gibi hizmetler için ThreadX gerçek zamanlı işletim sistemini kullanacak şekilde yapılandırılmıştır. GUIX, önişlemci yönergesi GX_DISABLE_THREADX_BINDING kullanılarak ve GUIX kitaplığını yeniden oluşturarak diğer işletim sistemlerine kolayca taşınabilir. Bu, ThreadX bağımlılıklarını GUIX kaynak kodundan kaldırır ve uygulama geliştiricisinin hedef sistem tarafından sağlanan RTOS'u kullanarak gerekli işletim sistemi hizmetlerini uygulamasına olanak tanır. Ek F - GUIX RTOS Bağlama Hizmetleri , GUIX bağlantı noktasına ThreadX işletim sistemi dışında bir işletim sistemine uygulanması gereken hizmetleri açıklar.

Çoklu İş Parçacığı Güvenliği

GUIX API'sini GUIX iş parçacığı bağlamından ve diğer uygulama iş parçacıklarından kullanabilirsiniz. Uygulama iş parçacıkları olayları gönderip alarak, paylaşılan değişkenlere erişerek ve GUIX API işlevlerini kullanarak GUIX iş parçacığıyla etkileşime geçebilir. GUIX, çok iş parçacıklı kaynak koruması için iç ThreadX mutex kullanır. Ayrıca GUIX, bir ekran yenileme işlemi başladıktan sonra görünür pencere öğelerinin iç yapısının değiştirilmesini önler. Çizim işlemleri devam ederken görünür nesnelerin ağacını değiştirecek API'ler engellenir ve ekran yenileme tamamlandıktan sonra serbest bırakılır.

Sistem Zamanlayıcıları

GUIX, uygulamaya genellikle GUIX pencerelerinde görüntülenen verilerin düzenli güncelleştirmeleri için kullanılan düzenli süreölçerler sağlar. Bu, ekran belirme/çıkma gibi GUIX sistem düzeyinde efektler gerçekleştirmek için de kullanılan ThreadX periyodik zamanlayıcı aracılığıyla gerçekleştirilir.

Uygulama zamanlayıcılar oluşturabilir ve GUIX tarafından dahili olarak kullanılan aynı zamanlayıcı tesisini kullanabilir. Tabii ki uygulama gerekirse ThreadX zamanlayıcılarını doğrudan oluşturabilir ve kullanabilir. GUIX zamanlayıcılarının avantajı, kullanımı çok kolay olmaları ve GUIX olay odaklı işleme sistemi içinde çalışacak şekilde önceden yapılandırılmış olmalarıdır.

GuiX zamanlayıcısını oluşturmak ve başlatmak için uygulamanın gx_system_timer_start işlevini çağırması gerekir. Bu işlevin parametreleri arasında çağıran pencere öğesinin işaretçisi, zamanlayıcı kimliği (bir pencere öğesinin birçok zamanlayıcı başlatmasına izin verir) ve ilk ve yeniden zaman aşımı değerleri bulunur. Yeniden zaman aşımı değeri 0 ise zamanlayıcı yalnızca bir kez çalışır ve süresi dolduğunda etkin zamanlayıcı listesinden silinir.

Başlatıldıktan sonra GUIX zamanlayıcı, zamanlayıcının yeniden zamanlanan değerine bağlı olarak zamanlayıcı sahibine bir kez veya düzenli aralıklarla GX_EVENT_TIMEOUT olayları gönderir. GUIX zamanlayıcı gx_system_timer_stop API işlevi çağrılarak durdurulabilir.

Kalem Hızı Yapılandırması

GUIX sistem bileşeni, kalem hızı izleme ile ilgili yapılandırma bilgilerini barındırır. GUIX, varsa dokunmatik giriş sürücüsü tarafından oluşturulan PEN_DOWN olayların hızına ve mesafesine bağlı olarak dahili olarak oluşturulan GX_EVENT_VERTICAL_FLICK ve GX_EVENT_HORIZONTAL_FLICK olaylarıdır. Uygulama, gx_system_pen_configure API işlevini kullanarak dahili olarak oluşturulan bu olayları tetikleyebilmek için gereken minimum uzaklığı ve hızı yapılandırabilir.

Ekran Yığını

GUIX sistem bileşeni, uygulama tarafından çalışma zamanında ekranların gönderilebildiği, açıldığı ve alınabildiği sanal pencere öğesi yığınını destekleyen isteğe bağlı bir işlev olan GUIX ekran yığınıyla ilgili hizmetler sağlar. Ekran yığını, kullanıcının menü sistemindeki çeşitli durumlara ulaşabileceği yolun çeşitli olduğu karmaşık menü sistemlerini yönetmek için kullanışlıdır. Menü sisteminde önceki duruma geri dönmek için önce önceki ekran durumunun itilmesi, ardından yeni ekranın görüntülenmesi ve geçerli ekran kapatıldığında yeni ekranın ekran yığınından önceki durumu açmasına izin vererek kolayca yapılabilir.

Pano Bakımı

GUIX, çalışma zamanı yürütmesi sırasında metin kopyalamak ve yapıştırmak için bir pano destekler. Bu destek GUIX Sistem bileşeni tarafından sağlanır.

Kirli Liste Bakımı

GUIX kirli pencere öğelerinin bir listesini tutar, yani durum değişiklikleri nedeniyle görünür olan ve yeniden çizilmesi gereken veya yeni görünür hale gelen pencere öğeleri. Bu kirli liste, GUIX'in her kullanıcı arabirimi değişikliği yapılırken tuval yenilemesi yapmak yerine ui durumundaki tüm geçerli değişiklikleri yansıtmak için bir tuval yenileme işlemi gerçekleştirmesine izin vererek çizim performansını geliştirir. Bu kirli liste GUIX sistem bileşeni tarafından da korunur.

Animasyon Denetimi Blok Havuzu

Uygulamalar genellikle birden çok animasyon dizisini, genellikle paralel olarak yürütmek ister. GUIX, uygulamanın ayırabileceği ve kullanabileceği animasyon denetim blokları havuzunu tutar. Bu, uygulamanın bu denetim bloklarını statik olarak tanımlamasını engeller ve uygulamanın tanımlayabileceği her animasyon için benzersiz bir animasyon denetim bloğu tanımlamak yerine farklı zamanlarda yeniden kullanılmasına izin verir. Animasyon denetimi blok havuzu da GUIX sistem bileşeni tarafından korunur.

Sistem Hatası İşleme

GUIX sistem hata işleyicisi, API açısından belirlenmesi daha zor olabilecek GUIX'te iç sistem hatalarını bulma konusunda uygulamaya yardımcı olmak için tasarlanmıştır. GUIX içinde bir sistem hatası oluştuğunda iç _gx_system_error_process işlevi çağrılır. Bu işlev sağlanan hata kodunu kaydeder ve algılanan toplam sistem hatası sayısını artırır. Sistem hata değişkenleri aşağıdaki gibi tanımlanır:

UINT _gx_system_last_error;

ULONG _gx_system_error_count;

GUIX uygulaması garip davranıyorsa hata ayıklayıcıdaki hata sayısı değişkenine bakmak yararlıdır. Ayarlandıysa, sorunu gidermenin iyi bir yolu _gx_system_error_process işlevinde bir kesme noktası ayarlamak ve ne zaman/nereden çağrıldığını görmektir.

GUIX Tuval Bileşeni

Tuval bileşeni, tuvalle ilgili tüm işlemden sorumludur. Tuval, etkili bir şekilde sanal çerçeve arabelleğidir. Uygulamanızın grafik çıktı üretmek için en az bir tuval oluşturması gerekir. Normalde, sisteminiz tarafından desteklenen her fiziksel ekran için en az bir tuval oluşturursunuz.

Tüm GUIX çizimleri tuval üzerinde gerçekleştirilir. Daha basit veya bellek kısıtlanmış sistemlerde, görünür çerçeve arabelleğine doğrudan bağlı olabilecek tek bir tuval olabilirken, daha fazla bellek ve daha gelişmiş grafik gereksinimlerine sahip sistemler birden çok tuval gerektirebilir. Bir ekranda birden çok tuvalin kullanılabilir duruma getirilmesi, ekran ve pencere belirme ve belirme efektleri gibi özellikleri etkinleştirir. Tuvaller basit veya yönetilen iki ana türden biri olabilir.

Basit bir tuval, uygulama tarafından kullanılan ekran dışı bir çizim alanıdır. GUIX basit bir tuvalle doğrudan hiçbir şey yapmaz, ancak uygulama karmaşık çizimi ekran dışı arabelleğe işlemek için basit bir tuval kullanabilir ve ardından gerektiğinde görünür tuvali yenilemek için bu ekran dışı arabelleği kullanabilir.

Yönetilen tuval, GUIX tarafından donanım çerçevesi arabelleği içinde otomatik olarak görüntülenir. Yönetilen tuval, birden çok yönetilen tuvali desteklemek için yeterli belleğe sahip sistemler için bileşik bir tuval oluşturmaya dahil edilir. Yönetilen tuvallerde GUIX tarafından tutulan bir Z sırası vardır ve görünüm kırpması tüm yönetilen tuvallerde zorunlu tutulur.

Tuval, daha genel olması bakımından çerçeve arabelleğinden farklıdır. Bellek kısıtlanmış sistemlerde yalnızca bir tuval olabilir ve bu tuvalin belleği görünür çerçeve arabellek belleği olabilir. Ancak, daha gelişmiş grafik katmanlarını ve birden çok tuvali destekleyen daha karmaşık sistemler için, yönetilen tuvallerin her birine donanım çerçevesi arabellek belleğinden farklı olan kendi bellek alanları ayrılır. Bu yönetilen tuvaller, çerçeve arabelleği yenileme veya geçiş işlemi sırasında görünür çerçeve arabelleğine işlenir.

Birden çok grafik katmanını destekleyen donanımlar (birden çok yer paylaşımlı çerçeve arabelleği) için uygulama, gx_canvas_hardware_layer_bind API'sini kullanarak donanım grafik katmanlarına bir veya daha fazla tuval bağlayabilir. Bu hizmet tuvale belirli bir donanım grafik katmanına bağlandığını bildirir ve bu tuval bağlandıktan sonra tuval görünürlüğü (gx_canvas_show, gx_canvas_hide), tuval alfa harmanlama ( gx_canvas_alpha_set) ve görüntü içindeki tuval uzaklığı (gx_canvas_offset_set) için donanım desteğini kullanmayı dener.

En basit tek tuval/tek çerçeve arabelleği kuruluşu dışındaki mimarilerde tuvalin boyutu uygulama tarafından belirlenir ve çerçeve arabelleğinin sabit boyutundan farklı olabilir. Uygulama tarafından seçilen bir uzaklıkta da olabilir. Z düzeni gibi diğer bilgiler tuval içinde tutulur. Tuval çizimi tamamlandığında, tuvalin içeriği görüntü sürücüsü tarafından fiziksel ekrana aktarılır. Ayrı bir tuval ve çerçeve arabelleği bellek alanları için yeterli belleği olmayan bazı sistemlerde, tuval güncelleştirmesi aslında görüntü sürücüsü aracılığıyla doğrudan fiziksel ekrana yapılır.

Tuval Oluşturma

Tuval nesnesi başlatma sırasında veya uygulama iş parçacıklarının yürütülmesi sırasında herhangi bir zamanda oluşturulabilir. Bir uygulama tarafından oluşturulabilecek tuval nesnelerinin sayısıyla ilgili bir sınır yoktur. Ancak çoğu uygulama, tüm GUIX çizimleri için yalnızca bir tuval nesnesi oluşturur.

Tuval Denetim Bloğu

Her tuval nesnesinin özellikleri, denetim bloğu GX_CANVAS bulunur ve gx_api.h içinde tanımlanır. Tuval nesnesi için gereken bellek uygulama tarafından sağlanır ve bellekte herhangi bir yerde bulunabilir. Ancak, tuval nesnesi denetim bloğunu ve çizim alanını herhangi bir işlevin kapsamı dışında tanımlayarak genel bir yapı haline getirmek en yaygın olanıdır.

Tuval Alfa Kanalı

GUIX, piksel başına karıştırma oranını belirten bit eşlem alfa kanalı, 16 bpp ve daha yüksek renk derinliklerinde fırçanın karıştırma oranını belirten fırça alfası ve katman tuvali için harmanlama oranını belirten tuval alfa dahil olmak üzere birçok düzeyde ön plan ve arka plan renklerinin alfa karışımını destekler.

Bir tuvalin alfa değeri, çerçeve arabelleği içinde görüntülenmek üzere birlikte birleştirilmiş birden çok tuval olduğunda kullanılır. Tuval Z düzeni bir tuvalin diğer tuvallerin üzerinde olacak şekildeyse, tuval alfa değeri tuvali geride kalanlarla harmanlanacak şekilde ayarlanabilir. Bir tuvalin alfa değerini hızla değiştirmek, ekran geçişi efektlerini "soluklaştırmak" için kullanılır, ancak tuval alfası birçok şekilde kullanılabilir.

Tuval gx_canvas_hardware_layer_bind() kullanan bir donanım grafik katmanına bağlıysa GUIX, donanım desteğini kullanarak tuval alfa harmanlama uygulamayı dener ve katman tuvalinin harmanlanmasıyla ilişkili yazılım ek yükünü en aza indirir.

Alfa değerleri 0 ile 255 arasında değişir; burada 0 değeri pikselin tamamen saydam olduğu ve 0'dan büyük değerlerin daha az saydam tuval alfa değerini artırdığı anlamına gelir, tuval karıştırma için donanım yardımı sağlanmadığı sürece yalnızca 16-bpp ve üzeri sürümlerde çalışan ekran sürücüleri için desteklenebilir.

Tuval Uzaklığı

Tuval, gx_canvas_offset_set API hizmeti çağrılarak görünür çerçeve arabelleği içinde kaydırılabilir. Tuval uzaklıkları genellikle sprite animasyonları uygulamak için kullanılır. Bir tuval gx_canvas_hardware_layer_bind API işlevini çağırarak bir donanım grafik katmanına bağlıysa, GUIX donanım desteğini kullanarak tuval uzaklığı değişikliklerini uygulamaya çalışır ve tuval konumunu kaydırmayla ilişkili yazılım ek yükünü en aza indirir.

Tuval Çizimi

GUIX tuval bileşeni, uygulamaya tam çizim API'sini sağlar. gx_canvas_line_draw veya gx_canvas_pixelmap_draw gibi çizim API'lerinin çağrılabilmesi için önce hedef tuvalin gx_canvas_drawing_initiate API işlevi çağrılarak çizim için açılması gerekir. Bu işlev, çizim için bir tuval hazırlar ve bir çizim bağlamı oluşturur.

gx_canvas_line_draw veya gx_canvas_text_draw gibi tuvale işlenen çizim API'leri, çizgi stilini, genişliğini ve renklerini tanımlamak için geçerli çizim bağlamı fırçasında bulunan parametreleri kullanır. Bu fırça parametreleri, gx_canvas_drawing_initiate çağrılarak bir çizim bağlamı oluşturulduktan sonra gx_context_brush_define, gx_context_brush_set, gx_context_brush_style_set ve benzer API işlevleri çağrılarak değiştirilir.

GUIX, ertelenen tuval yenileme işleminin bir parçası olarak pencere ve pencere öğesi çizim işlevlerini çağırdığında, hedef tuval pencere öğesi çizim işlevlerini çağırmadan önce çizim için açılır. Bu nedenle, hedef tuvali açmak için standart pencere öğesi çizim işlevleri gerekli değildir, bu onlar için yapılmıştır.

Bazı durumlarda uygulama bir tuvale hemen çizim yapmaya zorlayabilir. Bu durumda, uygulama aşağıdaki adımları gerçekleştirebilir.

  1. Uygulamanın çizmek istediği tuvalin içindeki hedef tuvali ve dikdörtgeni geçirerek gx_canvas_drawing_initiate API işlevini çağırın.

  2. İstenen çizimi gerçekleştirmek için istediğiniz sayıda tuval çizim API'sini çağırın.

  3. Çizimin tamamlandığını işaret etmek için gx_canvas_drawing_complete API işlevini çağırın. Bu, tuvali görünür çerçeve arabelleğine temizler ve/veya sistem bellek mimarisine bağlı olarak bir arabellek geçiş işlemi tetikler.

Çizim API'leri

GUIX tarafından ekrandaki tüm görsel öğeleri çizmek için gereken birkaç temel çizim temel öğesi vardır. Bu çizim API'leri genellikle özel pencere öğesi çizim işlevinin bir parçası olarak uygulama yazılımı tarafından da çağrılabilir. Bu GUIX tuval çizim API'leri parametre doğrulama ve kırpma gerçekleştirir ve ardından kırpılmış çizim koordinatlarını donanım ve renk biçimine özgü çizim uygulamaları için görüntü sürücüsüne geçirir. Bu çizim API'leri işlevleri aşağıdaki gibi tanımlanır.

  • gx_canvas_alpha_set
  • gx_canvas_arc_draw
  • gx_canvas_block_move
  • gx_canvas_circle_draw
  • gx_canvas_ellipse_draw
  • gx_canvas_glyphs_draw
  • gx_canvas_hardware_layer_bind
  • gx_canvas_hide
  • gx_canvas_line_draw
  • gx_canvas_offset_set
  • gx_canvas_pie_draw
  • gx_canvas_pixel_draw
  • gx_canvas_pixelmap_blend
  • gx_canvas_pixelmap_rotate
  • gx_canvas_pixelmap_tile
  • gx_canvas_polygon_draw
  • gx_canvas_rectangle_draw
  • gx_canvas_rotated_text_draw
  • gx_canvas_shift
  • gx_canvas_show
  • gx_canvas_text_draw

Çizim API'si GUIX Tuval API'si aracılığıyla çağrılır ve tüm çizimler gx_canvas_* API işlevleri kullanılarak yapılır. Çizim, geçerli çizim bağlamındaki geçerli fırça kullanılarak yapılır. Yukarıdaki şekil çizim işlevlerinden herhangi biri ana hatlarıyla, düz renkle doldurulabilir veya geçerli fırça tarafından tanımlandığı şekilde piksel haritası doldurulabilir. Şekil ana hattı genişliğini, rengini veya dolgusunu değiştirmek için fırçayı geçerli çizim bağlamında tanımlamak üzere gx_context_brush_* API işlevlerini kullanın.

Yukarıdaki uygulama düzeyi çizim API'leri tuvale gerçek çizim yapmaz, bunun yerine görüntü sürücüsü düzeyi çizim işlevini çağırmadan önce çağıranın parametrelerini doğrulayın. Sürücü düzeyi çizim işlevi aslında piksel verilerini tuval belleğine yazar.

GUIX, piksel başına 1, 2, 4, 8, 16, 24 ve 32 bit (bpp) dahil olmak üzere çeşitli renk derinlikleri için stok veya genel ekran sürücüsü çizim işlevleri sağlar. Bazı durumlarda, varsayılan yazılım çizim uygulaması, 2B çizim hızlandırıcısı sağlayan donanım hedefleri için donanım hızlandırmalı uygulamalarla değiştirilir.

Renk Derinliği

GUIX, 32 bpp'ye kadar renk derinliklerinin yanı sıra tek renkli ve gri tonlama desteği sunar. Renk derinliği desteğinin türü, temel alınan fiziksel ekranın özellikleri tarafından büyük ölçüde belirlenir ve tuval çizim alanı için gereken bellek miktarı üzerinde de bir etkiye sahiptir. Aşağıda renk derinliği desteğinin bir listesi ve bu renk derinliği içindeki varyasyonların kısa bir açıklaması yer alır.

Renk Biçimi Description
1 bit tek renkli Piksel başına 1 bit dolu biçim.
2 bit gri tonlamalı Bayt başına dört piksel dolu 4 gri düzey.
4 bit gri tonlamalı Bayt başına iki piksel dolu 16 gri düzey.
4 bit renk VGA biçiminde planlı bellek düzenlemesi.
8 bit gri tonlamalı 256 gri düzey
8 bit palet modu Palet dizini olarak kullanılan piksel başına 1 bayt
8 bit r:g:b modu Daha az kullanılan 2:3:2 r:g:b biçimi.
16 bit Her piksel için iki bayt gerekir. r:g:b veya b:g:r bayt sırası olabilir. Normalde 5:6:5 yapısı, ancak 5:5:5 yapısı veya 4:4:4:4 a:r:g:b yapısı da olabilir.
24 bit Her piksel için 3 (paketlenmiş biçim) veya 4 (paketlenmemiş biçim) bayt gerekir. Donanım gereği r:g:b veya b:g:r bayt sırasına göre olabilir.
32 bit Her piksel için alfa kanalına sahip 4 bayt gerekir. Bir:r:g:b veya b:g:r:bayt sırası olabilir ve donanım tarafından belirlenebilir.

Fare Desteği

GUIX, istenen herhangi bir tuvale fare imleci çizmeyi destekler. Fare imleci yazılım içinde çizim yapabilir veya donanım imleci katmanı tarafından desteklenebilir. Her iki durumda da, yazılım veya donanım fare imleci çizimi kullanılsa da fare imleci desteğiyle ilgili uygulamaya sağlanan API aynıdır.

GUIX fare desteği yalnızca GUIX kitaplığını oluşturmadan önce gx_user.h üst bilgi dosyasında tanımlandığında etkinleştirilir #define GX_MOUSE_SUPPORT .

Uygulamanın gx_canvas_mouse_define API işlevini kullanarak fare imlecini ve etkin noktayı tanımlaması gerekir. Bu API, üzerinde imleç görüntüsünün çizilmesi gereken tuvalin işaretçisini ve fare imleci görüntüsünü ve fare görüntüsünün etkin noktasını sol üst köşeye göre tanımlayan GX_MOUSE_CURSOR_INFO bir yapıya yönelik işaretçiyi kabul eder.

GUIX Görüntü Bileşeni

Görüntü bileşeni GUIX'te temeldir, çünkü kendi içinde bir veya daha fazla tuval, pencere öğesi ve pencere içeren tüm görüntüleme nesnelerinin işlenmesini yönetir. Görüntü bileşeni, bir dizi işlev işaretçisi aracılığıyla her bir ekranla ilişkili temel donanım ekranı sürücüsüyle de etkileşim kurar.

Görüntüleme Oluşturma

Başlatma sırasında veya uygulama iş parçacıklarının yürütülmesi sırasında bir görüntüleme nesnesi oluşturulabilir. Genellikle bir uygulama, her fiziksel ekranı yönetmek için bir görüntüleme nesnesi oluşturur. Uygulamanızı ve kullanılabilir fiziksel ekranları tanımlamak için GUIX Studio kullandıysanız, ekranlarınızın her birini oluşturmak ve başlatmak için gx_studio_display_configure API işlevini kullanırsınız.

Denetim Bloğunu Görüntüle

Her görüntüleme nesnesinin özellikleri, denetim bloğu GX_DISPLAY bulunur ve gx_api.h içinde tanımlanır. Görüntüleme nesnesi için gereken bellek uygulama tarafından sağlanır ve bellekte herhangi bir yerde bulunabilir. Ancak, görüntüleme denetiminin herhangi bir işlevin kapsamı dışında tanımlayarak genel bir yapıyı engellemesi en yaygın olanıdır.

Kaynak Yönetimi

Kaynaklar, uygulamanın ihtiyaç duyduğu kullanıcı arabirimi bileşenleridir, ancak uygulama kodu değildir. Kaynaklar uygulama verileridir ve genellikle statik olarak tanımlanır. Kaynak türleri piksel haritalarını, yazı tiplerini, renkleri ve dizeleri içerir. Bu kaynaklar, genellikle herhangi bir uygulama yazılımı değiştirilmeden herhangi bir zamanda değiştirilebilir. Uygulama yazılımında yapılan değişiklikler genellikle ilgili yazılımın yeniden test edilmesi ve doğrulanmasını gerektirdiğinden, uygulama kodunu değiştirmeden kullanıcı arabirimi görünümünün değiştirilmesine izin vermek için ve kaynak başvurularının uygulama yazılımından ayrı tutulması önemlidir.

GUIX ekran modülü, ekranın renk derinliğine ve biçimine bağlı olan tüm kaynaklar için kaynak yönetimi olanakları sağlar. Bu özellikler etkin piksel haritası tablosunu, etkin yazı tipi tablosunu ve etkin renk tablosunu korumayı içerir. Dize tablosu kaynağı GUIX sistem modülü tarafından korunur, çünkü dize kaynaklarının normalde renk derinliğine ve biçimine göre değiştirilmesi gerekmez.

Uygulama yazılımı, kaynaklara karşılık gelen kaynak tablosunun dizini olan kaynak kimliğine göre başvurur. Bu, tablonun değiştirilmesini sağlar; örneğin, bir ürün "gün modundan" "gece moduna" değiştiğinde renk tablosu değiştirilebilir, ancak renk kimliği değerleri aynı kalır.

Uygulama kaynaklarınız GUIX Studio uygulaması tarafından bir kaynak dosyasına (veya kaynak dosyaları kümesine) yazılır. Yeni bir GUIX Studio projesi oluşturduğunuzda varsayılan renkler, piksel haritaları ve yazı tipleri otomatik olarak sağlanır, ancak uygulamanızın genel görünümünü tanımladıkça bu varsayılanlar kolayca değiştirilebilir.

Etkin Görüntü bileşeni bilinene kadar renkler, yazı tipleri ve piksel haritaları için Kaynak Kimliklerinin gerçek renk, yazı tipi veya piksel haritası değerlerine çözümlenemeyeceğini unutmayın. GUIX mimarisi birden çok etkin ekranı desteklediğinden, Kaynak Kimlikleri yalnızca bir pencere öğesi ve ilişkili Kaynak Kimliği belirli bir ekrana çözümlenebildiğinde kaynak değerlerine çözümlenebilir. Bu özellik dinamik bağlama olarak bilinir. Metin rengi gibi bir özelliğin Kaynak Kimliği( örneğin kaynak kimliği GX_COLOR_ID_TEXT) bir ekranda kullanıldığında beyaz için 16 bit R:G:B değerine çözümlenebilir, ancak aynı renk kimliği başka bir ekranda kullanıldığında tek renkli siyah renk değerine çözümlenebilir.

Pratikte, Kaynak Kimliklerinin kaynak değerlerine bu dinamik bağlaması, uygulama yazılımının ve GUIX iç bileşenlerinin genellikle kaynak kimliklerini yalnızca etkin bir çizim bağlamındaki kaynak değerlerine çözümlemesi gerektiği anlamına gelir. Etkin bir çizim bağlamı, GUIX'in her Kaynak Kimliğini belirli bir kaynak değerine çözümlemesine olanak tanıyan etkin ekranı belirtir. Uygulama yazılımının çizim bağlamının dışında belirli bir kaynak değerini bulması gerekiyorsa, bu işlem görünür pencere öğeleri için de yapılabilir. Görünür pencere öğeleri, bu pencere öğesinin etkin tuvalini ve görünümünü çözümlemek için de kullanılabilecek bir kök pencereye bağlanır.

Bir pencere öğesi oluşturulduysa ancak henüz görüntülenmediyse (başka bir deyişle, herhangi bir kök pencereye veya diğer görünür üst öğeye bağlanmadıysa), bu pencere öğesiyle ilişkili kaynak kimlikleri, belirli bir ekrana atanan kaynak tablosuna doğrudan dizin oluşturma dışında belirli bir kaynak değerine çözümlenemez. Belirli bir kaynak tablosuna doğrudan erişim uygulama yazılımı tarafından güvenli bir şekilde yapılabilir, ancak hiçbir zaman iç GUIX kitaplık yazılımında yapılmaz.

Pencere Öğesi Varsayılanları

GUIX görüntü bileşeni ayrıca çeşitli pencere öğesi öznitelikleri için varsayılan tanımlar sağlar. Uygulama tarafından aksi belirtilmedikçe, pencere öğeleri/pencereler bu sistem öznitelikleriyle oluşturulur. Bu sistem öznitelikleri çoğunlukla sistem kaynak tablolarında tutulan yazı tiplerinden, renklerden ve bit eşlemlerden oluşur. Varsayılan kaydırma çubuğu görünümü için ek öznitelikler de GUIX görüntü bileşeni tarafından korunur.

Varsayılan renk ayarları, her ekrana atanan renk tablosu ve önceden tanımlanmış varsayılan renk kimlikleri tarafından tanımlanır. Bu varsayılan renk kimlikleri aşağıdakileri içerir.

Renk Kimliği Description
GX_COLOR_ID_CANVAS Varsayılan tuval (yani arka planı görüntüle) rengi
GX_COLOR_ID_WIDGET_FILL Varsayılan pencere öğesi dolgu rengi
GX_COLOR_ID_WINDOW_FILL Varsayılan pencere dolgu rengi
GX_COLOR_ID_DISABLED_FILL Varsayılan devre dışı pencere öğesi dolgu rengi
GX_COLOR_ID_DEFAULT_BORDER Varsayılan pencere öğesi kenarlık rengi
GX_COLOR_ID_WINDOW_BORDER Varsayılan pencere kenarlık rengi
GX_COLOR_ID_TEXT Varsayılan metin rengi
GX_COLOR_ID_SELECTED_TEXT Varsayılan seçili metin rengi
GX_COLOR_ID_DISABLED_TEXT Varsayılan devre dışı bırakılmış metin rengi
GX_COLOR_ID_SELECTED_TEXT_FILL Varsayılan seçili metin dolgu rengi
GX_COLOR_ID_READONLY_TEXT Varsayılan salt okunur metin rengi
GX_COLOR_ID_READONLY_FILL Varsayılan salt okunur metin dolgu rengi
GX_COLOR_ID_SCROLL_FILL Kaydırma çubuğu dolgu rengi
GX_COLOR_ID_SCROLL_BUTTON Kaydırma çubuğu düğmesi dolgu rengi
GX_COLOR_ID_SHADOW Varsayılan gölge rengi
GX_COLOR_ID_SHINE Varsayılan vurgu rengi
GX_COLOR_ID_BUTTON_BORDER Düğme pencere öğesi kenarlık rengi
GX_COLOR_ID_BUTTON_UPPER Düğme pencere öğesi üst dolgu rengi
GX_COLOR_ID_BUTTON_LOWER Düğme pencere öğesi alt dolgu rengi
GX_COLOR_ID_BUTTON_TEXT Düğme pencere öğesi metin rengi
GX_COLOR_ID_TEXT_INPUT_TEXT Metin girişi pencere öğesi metin rengi
GX_COLOR_ID_TEXT_INPUT_FILL Metin girişi dolgu rengi
GX_COLOR_ID_SLIDER_TICK Kaydırıcı değer çizgileri çizmek için kullanılan renk.
GX_COLOR_ID_SLIDER_GROOVE_BOTTOM Kaydırıcı oluğu çizmek için kullanılan renk
GX_COLOR_ID_SLIDER_NEEDLE_OUTLINE İğne ana hattı çizmek için kullanılan renk
GX_COLOR_ID_SLIDER_NEEDLE_FILL Kaydırıcı iğnesini doldurmak için kullanılan renk
GX_COLOR_ID_SLIDER_NEEDLE_LINE1 İğne vurgusu çizmek için kullanılan renk
GX_COLOR_ID_SLIDER_NEEDLE_LINE2 İğne gölgesi çizmek için kullanılan renk

Bu renk kimliği değerleri, her ekrana atanan renk tablosu tarafından tanımlanan belirli bir renk değerine eşlenir. Bu varsayılanlar , gx_display_color_table_set API işlevi çağrılarak tek bir görüntü için grup olarak değiştirilebilir. GUIX Studio kullanıyorsanız, uygulamanız gx_studio_display_configure işlevini çağırdığında görüntü rengi tablosu otomatik olarak başlatılır.

GUIX görüntüleme bileşeni de varsayılan bir yazı tipi tablosu tutar. Varsayılan yazı tipi tablosu, uygulama tarafından özel olarak belirtilmediği sürece her pencere öğesi türü tarafından kullanılan yazı tipini tanımlar. Önceden tanımlanmış görüntü yazı tipi tablosu kimlikleri aşağıdaki değerleri içerir.

Yazı Tipi Kimliği Description
GX_FONT_ID_DEFAULT Belirli bir yazı tipi tanımlanmadığında kullanılan varsayılan yazı tipi
GX_FONT_ID_BUTTON Düğmelerde tüm metinler için kullanılan varsayılan yazı tipi
GX_FONT_ID_TEXT_INPUT Metin düzenleme alanları için kullanılan varsayılan yazı tipi

Herhangi bir metin türü pencere öğesi tarafından kullanılan yazı tipi kimliği, metinle ilgili her pencere öğesi türü için sağlanan gx_<widget_type>_font_set API'si kullanılarak yeniden atanabilir. Yazı tipi tablosunun tamamı , gx_display_font_table_set API işlevi çağrılarak yeniden atanabilir.

Kaydırma Çubuğu Görünümü

GUIX Ekranı, bu ekran için varsayılan kaydırma çubuğu görünümü ayarlarını da korur. Bu ayarlar aşağıda tanımlanan GX_SCROLLBAR_APPEARANCE yapısıyla tanımlanır. GUIX Display, dikey kaydırma çubukları için bir kaydırma çubuğu görünüm yapısını ve yatay kaydırma çubukları için ikinci bir yapıyı korur. Uygulama, GX_SCROLLBAR_APPEARANCE bir yapı başlatıp API işlevinigx_display_scroll_appearance_set çağırarak herhangi bir görüntü için varsayılan kaydırma çubuğu görünümünü değiştirebilir.

typedef struct GX_SCROLLBAR_APPEARANCE_STRUCT
{
    GX_VALUE       gx_scroll_width;
    GX_VALUE       gx_scroll_thumb_width;
    GX_VALUE       gx_scroll_thumb_travel_min;
    GX_VALUE       gx_scroll_thumb_travel_max;
    GX_UBYTE       gx_scroll_thumb_border_style;
    GX_RESOURCE_ID gx_scroll_fill_pixelmap;
    GX_RESOURCE_ID gx_scroll_thumb_pixelmap;
    GX_RESOURCE_ID gx_scroll_up_pixelmap;
    GX_RESOURCE_ID gx_scroll_down_pixelmap;
    GX_RESOURCE_ID gx_scroll_thumb_color;
    GX_RESOURCE_ID gx_scroll_thumb_border_color;
    GX_RESOURCE_ID gx_scroll_button_color;
} GX_SCROLLBAR_APPEARANCE;
GX_SCROLLBAR_APPEARANCE Yapısı Üyesi Description
gx_scroll_width Dikey kaydırma çubuğunun genişliği veya yatay kaydırma çubuğunun piksel cinsinden yüksekliği.
gx_scroll_thumb_width Piksel cinsinden asansör ve uç düğmelerinin genişliği.
gx_scroll_thumb_travel_max Kaydırma çubuğunun sonundan başparmak düğmesi seyahat noktasına uzaklık.
gx_scroll_fill_pixelmap Kaydırma arka planını doldurmak için kullanılan piksel haritası.
gx_scroll_thumb_pixelmap Kaydırma başparmak düğmesini çizmek için kullanılan pixelmap.
gx_scroll_up_pixelmap Yukarı kaydırma düğmesi çizmek için kullanılan piksel haritası.
gx_scroll_down_pixelmap Aşağı kaydırma düğmesini çizmek için kullanılan pixelmap.
gx_scroll_fill_color Kaydırma çubuğu arka planını doldurmak için kullanılan rengin renk kimliği.
gx_scroll_button_color Kaydırma çubuğu başparmak düğmesini doldurmak için kullanılan rengin renk kimliği.

Uygulama, yazı tipleri, renkler ve stiller için bu varsayılan ayarlara ek olarak, her pencere öğesi türü tarafından sağlanan API'yi kullanarak istenen şekilde büyük/küçük harf temelinde herhangi bir parametre belirtebilir.

Kaplama ve Temalar

Kaplama, GUIX pencere öğelerinin ve pencerelerinin temel görünümlerini kolayca değiştirmesine olanak tanır; örneğin, bir yerdeki "cilt"in değiştirilmesi, ilişkili tüm pencere öğelerinin ve pencerelerin temel görünümünü değiştirir.

GUIX uygulamanızı yeniden kaplamak için GUIX Display kaynak tablolarına yeni bir renk, yazı tipi ve pixelmap tablosu sağlamanız gerekir. Tüm GUIX pencere öğeleri renk, bit eşlem veya yazı tipine kaynak kimliğine göre başvurduğundan, yeni bir kaynak tablosu sağlamak otomatik olarak tüm GUIX pencere öğelerinin istenen ekrana çizildiğinde yeni renklerinizi ve piksel haritalarınızı kullanmaya başlamasına neden olur.

Çekici bir görünüm sağlamak için birlikte çalışacak şekilde tasarlanmış yeni yazı tipleri, renkler ve piksel haritaları kümesine tema adı verilir. Tema, bir kaynak tabloları kümesini ve her kaynak tablosunun boyutunu tanımlar. GUIX Studio uygulaması kullanılarak herhangi bir ekran için herhangi bir sayıda tema tanımlanabilir. Başlangıç teması dizinini, oluşturulan ekrana ilk temayı yükleyen GUIX Studio tarafından oluşturulan işlev gx_studio_display_configure geçirmelisiniz. İşlev gx_display_theme_install çağrılarak herhangi bir görüntüleme için etkin tema istediğiniz zaman değiştirilebilir.

Kök Pencere

Bir uygulama tarafından oluşturulan her görünür tuval için, uygulamanın bu tuval için bir Kök Pencere de oluşturması gerekir. Bu özel pencere temel olarak tüm üst düzey uygulama pencereleri ve pencere öğeleri için bir kapsayıcı görevi görür. Kök pencere tuval arka planını çizer ve kök pencere GX_WINDOW sınıfından türetildiğinden kök pencerede de duvar kağıdı bulunabilir. Ekranınızın veya tuvalinizin arka plan rengini değiştirmek için, bu tuvale iliştirilmiş kök pencerenin dolgu rengini değiştirmeniz yeterlidir.

Ekranlarınızı yapılandırmak için gx_studio_display_configure adlı GUIX Studio tarafından oluşturulan işlevi kullanırsanız, her ekranın tuvali ve kök penceresi sizin için bu başlatma işlevinin bir parçası olarak oluşturulur.

Diğer Ad Önleme

Kenar Yumuşatma, GUIX'te çizgileri, eğrileri ve yazı tiplerini yumuşatmak için kullanılan isteğe bağlı bir özelliktir. Diğer ad önleme yalnızca 16-bpp veya daha yüksek renk derinliği kullanan bir görüntü sürücüsüyle çalışırken desteklenir.

Kenar yumuşatılmış çizgi çizimi, etkin fırçadaki GX_BRUSH_ALIAS yanıp sönme ayarıyla etkinleştirilir. Bu, hem doğrudan çizilen çizgiler hem de çokgen veya dairenin kenarlıkları olarak çizilen çizgiler için geçerlidir.

Diğer ad kullanmayan metin çizimi, GUIX studio uygulaması tarafından üretilen bir diğer addan koruma yazı tipi kullanılarak etkinleştirilir. Yazı tipini oluştururken yazı tipinin düzgün değil mi yoksa ikili olarak mı oluşturulacağını belirtirsiniz. GUIX'teki diğer adsız yazı tipleri her piksel için 16 saydamlık düzeyi kullanır.

Kırpma

Kırpma, GUIX görüntü bileşeni tarafından dahili olarak ve GUIX pencere öğeleri tarafından tutulan üst-alt mimari tarafından pencere ve pencere öğesi katmanlarında desteklenir. Hiçbir pencere veya pencere öğesinin bu pencere öğesinin alanının dışında çizim yapmaya izin verilmez ve bir pencere öğesinin bu pencere öğesinin üst öğesinin alanının dışına çizmesine asla izin verilmez.

Bu ayrıca pencere öğelerinin, büyük olasılıkla bellek bozulmasına veya sistem hatasına yol açan tuval belleğinin dışında yer alan piksel koordinatlarında çizim yapmasını önler. Pencere öğelerinin pencere öğesinin alanının, pencere öğesinin üst alanının dışına veya tuval kapsamının dışına çizilmelerine izin verilmez.

Buna ek olarak, pencere öğeleri yalnızca daha önce kirli olarak işaretlenmiş alanlara çizim yapabilir. Bu, örneğin pencerenin yalnızca bir köşesi ortaya çıktığında tüm pencerenin çizilmesini önler. Pencerenin yalnızca gerçekten yenilenmesi gereken kısmı kirli olarak işaretlenir ve bu nedenle pencere çizim işlevi yalnızca kirli alandaki pikselleri gerçekten yeniler.

GUIX görüntü bileşeni, sürücü düzeyi çizim işlevlerini çağırmadan önce bu kırpma algoritmalarını zorlar.

Görünümler

GUIX, her kök pencere ve kök pencerenin her alt penceresi için her zaman bir görünüm kümesi tutar. Görünümler, pencere konumu olarak değişen ve Z düzeni değiştirilen dinamik, çalışma zamanı belirlenmiş bir kırpma alanıdır. GUIX, arka plandaki bir pencere veya pencere öğesinin ön plandaki bir pencere veya pencere öğesinin üzerine çizim yapmasını önlemek için görünümleri kullanır. Görünümler Z düzeni disiplinini zorlar. Ayrıca görünümler, arka planda bir pencerenin tuvalin görülemeyen herhangi bir alanına çizilmesini engellemeleri açısından verimlilik açısından önemlidir. Bir pencere tamamen başka bir pencereyle kaplanıyorsa, kapsanan pencerenin, bunu yapmaya çalışsa bile tuvale çizilmesine hiç izin verilmez.

Görüntü Sürücüsü Arabirimi

GUIX görüntü sürücüleri, temel alınan fiziksel ekranla tüm etkileşimden sorumludur. Görüntü sürücülerinin üç temel işlevi vardır: başlatma, çizim ve çerçeve arabelleği ekranı. Başlatma, fiziksel görüntü donanımını hazırlamak, GUIX'i fiziksel görüntü donanımının özellikleri hakkında bilgilendirmek ve GUIX'e hangi belirli çizim işlevlerinin kullanılması gerektiğini bildirmekten sorumludur. Ana görüntü sürücüsü başlatma, GUIX gx_display_create işlevinden çağrılır. Ayrıca GUIX iş parçacığı, iş parçacığı bağlamından ikincil görüntü sürücüsü başlatmayı da çağırır. Bu ikincil görüntü sürücüsü yalnızca başlatma sırasında RTOS hizmetlerini gerektiriyorsa (örneğin, cihaz kesmeleri veya başlatma işlemindeki adımlar arasındaki gecikme isteklerini tx_thread_sleep ) gereklidir.

Başlatma tamamlandıktan sonra, fiziksel görüntü donanımında yapılabilecek tüm doğrudan çizimler görüntü sürücüsü tarafından gerçekleştirilir. Son olarak, görüntü sürücüsü çerçeve arabelleğinin görüntülenmesinden sorumludur.

GUIX Pencere Öğesi Bileşeni

GUIX pencere öğesi görünür bir grafik öğesidir. Zamanlayıcılar ve matematik yardımcı programı işlevleri gibi görünür olmayan GUIX bileşenleri vardır. Ancak tüm görünür bileşenler temel GUIX pencere öğesi bileşeninden türetilir. GUIX pencere öğesi GUIX ekranının birincil yapı taşıdır; diğer tüm grafik öğeleri temel pencere öğesi işlevinden türetilir.

GUIX pencere öğeleri, devralmayı tam olarak destekleyen nesne odaklı bir şekilde uygulanır. Bu, mümkün olan en küçük bellek ve işleme gereksinimlerine neden olan ANSI C kullanılarak gerçekleştirilir. temel GX_WIDGET gibi başka bir pencere öğesinden türetilen GX_BUTTON gibi belirli bir pencere öğesinden söz ettiğimizde,GX_BUTTON denetim yapısının GX_BUTTON özgü bazı ek değişkenlerle GX_WIDGET tüm üye değişkenlerini ve işlev işaretçilerini içerdiği anlamına gelir. GUIX, pencere öğelerinin katmanlarını bu şekilde oluşturur, böylece daha karmaşık pencere öğeleri her zaman onlardan önce daha basit bir pencere öğesini temel alır. Bu hiyerarşik türetme modeli, pencere öğesi parametrelerini değiştirmek için kullanılan API'leri öğrenmeyi kolaylaştırır. Bir düğmenin rengini değiştirmek istiyorsanız, pencere öğesinin rengini değiştirmek için kullandığınız API'yi ( gx_widget_fill_color_set) kullanırsınız.

Görünür pencere öğelerinin organizasyonu, alt pencere öğelerini üst öğelerine bağlayan ağaç yapılandırılmış listeler kullanılarak üst-alt öğe şeklinde tutulur. Çocuklar, ebeveynlerinden, çizebilecekleri görünümler ve çizdikleri tuval gibi özellikleri devralır. Alt pencere öğeleri, yine üst öğeden çeşitli özellikleri devralan kendi alt pencere öğelerine sahip olabilir. Herhangi bir pencere öğesinin özellikleri çeşitli GUIX API çağrıları aracılığıyla açıkça yeniden tanımlanabilir.

Pencere Öğesi Oluşturma

Pencere öğesi nesnesi başlatma sırasında veya uygulama iş parçacıklarının yürütülmesi sırasında herhangi bir zamanda oluşturulabilir. Bir uygulama tarafından oluşturulabilecek pencere öğesi nesnelerinin sayısında bir sınır yoktur. Ayrıca hedef donanımınızın bellek sınırları içinde herhangi bir pencere öğesinin sahip olabileceği alt öğe sayısıyla ilgili bir sınır yoktur.

Her pencere öğesi türünün gx_button_create veya gx_prompt_create gibi kendi oluşturma işlevi vardır. Bu işlevlerin ilk üç parametresi her zaman aynıdır; yani pencere öğesi denetim yapısının işaretçisi, pencere öğesi adına yönelik bir dize işaretçisi ve pencere öğesinin üst öğesinin işaretçisi. Her create işlevinin belirli pencere öğesi türünün gereksinimlerine bağlı olarak herhangi bir sayıda ek parametresi olabilir.

Pencere Öğesi Denetim Bloğu

Her pencere öğesi nesnesinin özellikleri, denetim bloğu GX_WIDGET bulunur ve gx_api.h içinde tanımlanır. Pencere öğesi nesnesi için gereken bellek uygulama tarafından sağlanır ve bellekte herhangi bir yerde bulunabilir. Ancak, pencere öğesi nesne denetiminin herhangi bir işlevin kapsamı dışında tanımlayarak genel bir yapıyı engellemesi en yaygın olanıdır. GUIX Studio kullanıyorsanız, pencere öğesi denetim bloklarınız Studio tarafından oluşturulan belirtimler dosyanızda statik olarak ayrılabileceği gibi, uygulamanız tarafından dinamik olarak da atanabilir.

Dinamik Pencere Öğesi Denetimi Blok Ayırma ve Ayırmayı Kaldırma

Dinamik denetim bloğu ayırma kullanıyorsanız GUIX'in pencere öğesi denetim bloklarınız için gereken belleği ayırmak ve boşaltmak için kullanacağı iki işlev tanımlamanız gerekir. Bellek yönetimi işlevleriniz , gx_system_memory_allocator_set API işlevi aracılığıyla GUIX sistem bileşenine geçirilir. Bu işlev GUIX'e iki işlev işaretçisi geçirmenize olanak tanır: birincisi bellek ayırma işlevinin işaretçisi, ikincisi ise belleksiz bir işlevin işaretçisidir. Çoğu zaman bu işlevleri ThreadX bayt havuzlarını kullanarak uygulayacaksınız, ancak GUIX'in tasarımı dinamik bellek yönetimini istediğiniz şekilde uygulamanıza olanak tanır.

Dinamik pencere öğesi ayırma, Studio pencere öğesi özellikleri alanında "dinamik olarak ayrılan" seçeneğini belirlediğinizde çoğunlukla Studio tarafından oluşturulan uygulama belirtimleri dosyanızda kullanılır. Ancak, uygulamanız içinde dinamik denetim bloğu ayırmayı da kullanabilirsiniz. Uygulamanız içinde dinamik denetim bloğu ayırma kullanıyorsanız, pencere öğesi denetim bloğunu ayırmak için gx_widget_allocate API işlevini çağırmanız gerekir. Ardından, pencere öğesini oluşturduğunuzda, pencere öğesi oluşturma işlevine GX_WIDGET_STYLE_DYNAMICALLY_ALLOCATED stil bayrağını (diğer gerekli stil bayraklarıyla birlikte) geçtiğinden emin olun. Bu bayrak, pencere öğesini pencere öğesi durum alanında dinamik olarak ayrılmış olarak işaretlemek için kullanılır. Pencere öğesi daha sonra gx_widget_delete kullanılarak silindiğinde ve silindiğinde, GUIX bu durum alanını denetler ve bellek sızıntısı olmadığından emin olmak için bellek ayırıcı işlevinizi otomatik olarak çağırır.

Önemli

Bellek kaybını önlemek için dinamik olarak ayrılmış bir denetim bloğu kullanılarak oluşturulan bir pencere öğesi GX_WIDGET_STYLE_DYNAMICALLY_ALLOCATED stil bayrağıyla oluşturulmalıdır.

Türler

GUIX, yerleşik pencere öğelerinin zengin, tam işlevsel bir kümesini sağlar. Daha önce belirtildiği gibi, tüm özelleştirilmiş pencere öğeleri temel pencere öğesinden türetilir. GUIX'teki yerleşik pencere öğelerinin listesi aşağıdadır:

GX_TYPE_WIDGET

GX_TYPE_BUTTON

GX_TYPE_TEXT_BUTTON

GX_TYPE_MULTI_LINE_TEXT_BUTTON

GX_TYPE_RADIO_BUTTON

GX_TYPE_CHECKBOX

GX_TYPE_PIXELMAP_BUTTON

GX_TYPE_ICON_BUTTON

GX_TYPE_ICON

GX_TYPE_SPRITE

GX_TYPE_SLIDER

GX_TYPE_PIXELMAP_SLIDER

GX_TYPE_VERTICAL_SCROLL

GX_TYPE_HORIZONTAL_SCROLL

GX_TYPE_PROGRESS_BAR

GX_TYPE_PROMPT

GX_TYPE_NUMERIC_PROMPT

GX_TYPE_PIXELMAP_PROMPT

GX_TYPE_NUMERIC_PIXELMAP_PROMPT

GX_TYPE_SINGLE_LINE_TEXT_INPUT

GX_TYPE_MULTI_LINE_TEXT_VIEW

GX_TYPE_MULTI_LINE_TEXT_INPUT

GX_TYPE_WINDOW

GX_TYPE_ROOT_WINDOW

GX_TYPE_VERTICAL_LIST

GX_TYPE_HORIZONTAL_LIST

GX_TYPE_POPUP_LIST

GX_TYPE_DROP_LIST

GX_TYPE_LINE_CHART

GX_TYPE_DIALOG

GX_TYPE_KEYBOARD

GX_TYPE_SCROLL_WHEEL

GX_TYPE_TEXT_SCROLL_WHEEL

GX_TYPE_STRING_SCROLL_WHEEL

GX_TYPE_NUMERIC_SCROLL_WHEEL

GX_TYPE_CIRCULAR_GAUGE

GX_TYPE_RADIAL_PROGRESS_BAR

GX_TYPE_RADIAL_SLIDER

GX_TYPE_MENU_LIST

GX_TYPE_MENU

GX_TYPE_ACCORDION_MENU

GX_TYPE_TREE_VIEW

Stiller

Pencere öğesi stilleri kenarlık özellikleri (yükseltilmiş, girintili, ince, kalın veya hiç binişsiz) gibi öğelerin yanı sıra daha önce listelendiği gibi belirli pencere öğesi türlerinin özelliklerinden oluşur. Pencere öğesi stili bayrakları, herhangi bir pencere öğesinin görünümünü değiştirmek için en basit yöntemi sunar. İlk pencere öğesi stili her zaman pencere öğesi türüne özgü oluşturma işlevine geçirilen bir parametredir.

Renkler

Pencere öğeleri, sistem renk tablosunda tanımlanan renkleri kullanarak kendilerini çizer. Tuval arka planı, varsayılan pencere öğesi dolgu rengi, düğme dolgu rengi, metin pencere öğesi dolgu rengi, pencere dolgu rengi ve diğer birkaç varsayılan renk değeri için renk kimlikleri tanımlanır. Buna ek olarak, GX_WINDOW nesneler pencere istemcisi doldurulduğunda bit eşlem veya duvar kağıdı görüntülemeyi destekler.

Varsayılan renk düzenini değiştirmenin en basit yöntemi GUIX Studio'yu kullanmak ve gereksinimlerinizi karşılayan bir renk düzeni oluşturmak veya tanımlamaktır. Renk düzeninizi el ile tanımlamak için bir dizi GX_COLOR değeri oluşturabilir ve gx_system_color_table_set API işlevini çağırabilirsiniz.

Olay Bildirimi

GUIX olayları, kullanıcı girişi ve iç sistem durumu değişikliklerini pencere öğelerine bildirmek üzere belirli bir eylemi ve bildirimleri gerçekleştirmek için bir veya daha fazla pencere öğesine yapılan isteklerdir. Örneğin, bir pencere öğesi odaklandığında GX_EVENT_FOCUS_GAINEDgx_system_event_send API hizmeti aracılığıyla pencere öğesine gönderilir.

Olaylar GUIX olay kuyruğundan geçirilir ve her olay GX_EVENT veri yapısının bir örneğidir. GX_EVENT veri yapısı gx_api.h içinde tanımlanır, ancak yapının en önemli alanları gx_event_type, gx_event_sender, gx_event_target ve gx_event_payload'dir.

gx_event_type alanı, belirli olay sınıfını tanımlamak için kullanılır. Olay türü bunun bir GX_EVENT_PEN_DOWN olayı mı yoksa GX_EVENT_TIMER olayı mı olduğunu gösterir. gx_event_payload, çeşitli veri alanlarının birleşimidir ve bunların tümü her olay türü için geçerli değildir. Diğer olay verileri alanlarını incelemeden önce olay türü alanını kullanırsınız.

gx_event_sender alanı, olay bir alt pencere öğesi bildirimiyse olayı oluşturan pencere öğesinin kimliğini içerir.

gx_event_target alanı, kullanıcı tanımlı olayları belirli bir pencereye veya pencere öğesine yönlendirmek için kullanılabilir. Belirli bir pencereye olay göndermek istiyorsanız, pencereye benzersiz bir kimlik değeri vermelisiniz (pozitif olarak tanımlanabilmesi için) ve olay oluşturulurken pencere kimliği değeri gx_event_target alanına yerleştirilmelidir. Hedef kimliği bilmiyorsanız veya olayın yalnızca giriş odağı olan pencere öğesine yönlendirilmesi istiyorsanız , gx_event_target alanını 0 olarak ayarladığınızdan emin olun.

Son olarak , gx_event_payload alanı çeşitli veri türlerinin birleşimidir. GX_EVENT_PEN_DOWN ve GX_EVENT_PEN_UP olayları için, gx_event_pointdata alanı kalem konumunun x,y piksel koordinatını içerir. Zamanlayıcı olayları için gx_event_timer_id alanı süresi dolan zamanlayıcının kimliğini içerir. Diğer olay türleri için diğer yük veri alanları kullanılır. Önceden tanımlanmış olay türlerinin ve yük alanlarının tam listesi Ek E - GUIX Olay Açıklamaları bölümünde tanımlanır.

Uygulama, sabit GX_FIRST_APP_EVENT sonra sayısal olarak başlayarak kendi özel olaylarını da ekleyebilir. Bu sabitin ardından gelen tüm olay numaraları uygulamanın kullanımı için ayrılmıştır. Elbette, uygulamanın pencere öğesi olay işleyicisi bu tür uygulama olayları için işlemeye sahip olmalıdır.

Olay İşleme

Her pencere öğesi için gx_widget-type>_event_process adlı< varsayılan bir pencere öğesi olay işleme işlevi vardır. Çoğu durumda uygulamanın belirli bir pencere öğesinin olay işlemesi konusunda endişelenmesi gerekmez. Ancak, uygulamanın özel veya ek olay işleme gerektirdiği durumlarda, uygulama GUIX API gx_widget_event_process_set aracılığıyla varsayılan işleme işlevini kendi işleviyle geçersiz kılabilir. Bu işlev, varsayılan olay işleme işlevini API'de belirtilen olay işlevi işleme işleviyle geçersiz kılar.

Önemli

Uygulama olay işleme işlevleri, doğrudan varsayılan gx_widget_event_process işlemeyi çağırarak varsayılan işlemenin avantajlarından yararlanabilir (örneğin, işlemeyi çoğaltmayabilir).

Olay işleme yalnızca iç GUIX sistem iş parçacığı bağlamından çağrılır. Bu şekilde, olay işlemeyi işlemek için yığın gereksinimleri yalnızca GUIX iş parçacığı için geçerlidir.

Özel Olay İşleme Uygulama (örnek)

GUIX sistemindeki herhangi bir pencere öğesi veya pencere için kendi olay işleme işlevinizi sağlayabilirsiniz. Kendi özel pencere öğesi türünüzü oluşturuyorsanız, normalde özel olay işleyicinizi pencere öğesi oluşturma işlevine yüklersiniz. Var olan bir pencere öğesinin veya pencerenin çalışmasını yalnızca genişletiyor veya değiştiriyorsanız, pencere öğesi veya pencere oluşturulduktan sonra gx_widget_event_process_set API işlevini çağırabilirsiniz. Alt denetimleriniz tarafından oluşturulan olayları işlemek için üst düzey pencereleriniz (Ekranlar olarak da adlandırılır) için neredeyse her zaman kendi olay işlemenizi sağlayacaksınız. Bir ekranın alt denetimleri tarafından oluşturulan işleme olayı, GUIX uygulamanıza işlevsellik eklemenin ana yoludur.

Örnek olarak, "main_menu" adlı bir üst düzey ekran tanımladığınızdan varsayabilirsiniz. Bu ekran GUIX Studio kullanılarak tanımlanabilir veya bu ekranı uygulama kodunuzda oluşturabilirsiniz. Ekranı GUIX Studio içinde tanımlarsanız, olay işleyicinizin adını o ekranın Studio özellikleri alanına yazarsınız ve Studio tarafından oluşturulan belirtimler kodu olay işleyicinizi otomatik olarak yükler. Bu durumda, özel olay işleyicisini main_menu_event_handler çağıracağız ve şu şekilde kodlanmalıdır:

int main_menu_item; /* example: variable to keep track of selected item */

UINT main_menu_event_handler(GX_WINDOW *main_screen, GX_EVENT *event_ptr)
{
    UINT status = GX_SUCCESS;

    switch(event_ptr->gx_event_type)
    {
    /* this is an example for catching events from a child button */
    case GX_SIGNAL(IDB_CHILD_BUTTON, GX_EVENT_CLICKED):
        /* insert your button handler code here */
        break;

    case GX_EVENT_SHOW:
        /* add functionality to the show event handler */
        /* first, do default processing */
        status = gx_window_event_process(main_screen, event_ptr); /* note 1 */

        /* now add my own processing */
        main_menu_item = 0;
        break;

    default:
        /* pass all other events to base processing function */
        status = gx_window_event_process(main_screen, event_ptr); /* note 1 */
        break;
    }
    return status;
}

Yukarıdaki örnekte, GX_EVENT_SHOW gibi sistem olaylarında (bir pencere öğesinin durum değişikliğini bildirmesi için dahili olarak oluşturulan olaylar) uygulamanın bu olayları temel pencere öğesi olay işleme işlevine geçirerek normal işlemin gerçekleştiğini güvenceye alması gerektiğini fark etmek önemlidir. Uygulama daha sonra istenen şekilde ek mantık ekleyebilir. Uygulama tarafından işlenmeyen tüm olaylar (yukarıdaki varsayılan durum) temel olay işleme işlevine de geçirilmelidir. Bu örnek GX_WINDOW temel alan üst düzey bir ekran için olduğundan, varsayılan olay işleme işlevi gx_window_event_process.

Çizim İşlevi

Tüm pencere öğesi çizimi, olay işlemeden ayrı olarak gerçekleştirilir. Çizim genellikle CPU döngüleri açısından pahalı olduğundan bu daha verimlidir. Ertelenmiş çizim algoritması uygulanarak, bekleyen olayların ve ilişkili görüntü değişikliklerinin tümü herhangi bir çizim yapılmadan önce tamamlanabilir ve böylece boşa harcanan çizim ortadan kaldırılabilir. Olay işlemeye benzer şekilde, çoğu pencere öğesi için gx_widget-type>_draw adlı< varsayılan bir pencere öğesi çizim işlevi vardır; burada xxx pencere öğesi türüdür. Çoğu durumda, uygulamanın belirli bir pencere öğesinin çizim işlevi konusunda endişelenmesi gerekmez. Ancak, uygulamanın özel veya ek çizim gerektirdiği durumlarda, uygulama GUIX API gx_widget_draw_set aracılığıyla varsayılan çizim işlevini kendi çizimiyle geçersiz kılabilir. Bu işlev, uygulamanın herhangi bir pencere öğesi için kendi özelleştirilmiş çizim işlevini sağlamasına olanak tanır. Bu, uygulamanın yeni pencere öğesi türlerinin tamamını tanımlamasına da olanak tanır.

Önemli

Uygulama çizim işlevleri, doğrudan geçersiz kılınan çizim işlevinden çağırarak varsayılan çizimin avantajlarından yararlanabilir (kodlamayı yinelemez).

Pencere öğesi çizimi yalnızca iç GUIX sistem iş parçacığı bağlamından çağrılır. Bu şekilde, çizimi gerçekleştirmek için zamanlama ve yığın gereksinimleri yalnızca GUIX iş parçacığı için geçerlidir.

Özel Çizim Uygulama (örnek)

Herhangi bir pencere öğesinin çizim işlevine, GX_WIDGET denetim bloğunun üyesi olan dolaylı işlev işaretçisi aracılığıyla başvurulur. Pencere öğesinizi tanımlamak için GUIX Studio kullanıyorsanız, pencere öğesi özelliklerinin "Çizim İşlevi" parametresine işlevinizin adını yazarak kendi işlev işaretçinizi yükleyebilirsiniz ve Studio pencere öğesi oluşturulduğunda işlev işaretçinizi sizin için yükler. Pencere öğesini uygulama kodunuzda oluşturursanız, pencere öğesi oluşturulduktan sonra özel çizim işlevinizi yüklemek için gx_widget_draw_set API işlevini kullanmanız gerekir.

Bu örnekte, bir düğmenin görünümünü özelleştirmek istediğinizi varsayalım. Düğme bir GX_TEXT_BUTTON çok benzer olacaktır, ancak düğmeye basıldığında düğmenin sağ orta kısmına küçük yeşil bir "LED_ON" bit eşlem ve düğmeye basılmadığında küçük bir "LED_OFF" bit eşlem ekleyeceğiz. Aşağıdaki çizimlere benzeyen bir düğme oluşturmak istiyoruz.

Açık için yeşil düğmenin ekran görüntüsü. özel düğme "açık"

Kapalı için kırmızı düğmenin ekran görüntüsü. özel düğme "kapalı"

Bu durumda, aşağıdakine benzer bir düğme çizim işlevi yazacağız.

UINT my_button_draw(GX_TEXT_BUTTON *button)
{
    GX_PIXELMAP *map;
    ULONG button_style;
    INT xpos;
    INT ypos;

    /* first, do the normal text button drawing */
    gx_text_button_draw(button);

    /* now add our extra pixelmap */

    gx_widget_style_get(button, &button_style);

    if (button_style & GX_STYLE_BUTTON_PUSHED)
    {
        /* use the ON pixelmap */
        gx_context_pixelmap_get(GX_PIXELMAP_ID_LED_ON, &map);
    }
    else
    {
        /* use the OFF pixelmap */
        gx_context_pixelmap_get(GX_PIXELMAP_ID_LED_OFF, &map);
    }
    if (map)
    {
        /* draw it 20 pixels in from right edge */
        xpos = button->gx_widget_size.gx_rectangle_right;
        xpos -= map->gx_pixelmap_width + 20;

        /* and draw 10 pixels from the top edge */
        ypos = button->gx_widget_size.gx_rectangle_top + 10;

        /* draw the extra pixelmap on top of the button */
        gx_canvas_pixelmap_draw(xpos, ypos, map);
    }
}

GUIX Çizim Bağlamı Bileşeni

Çizim bağlamı, GUIX her tuval yenileme işlemini gerçekleştirirken çalışma zamanında dinamik olarak oluşturulur. Çizim bağlamı, geçerli çizim işlemlerini gerçekleştirmek için kullanılan tuvali, ekran sürücüsünü ve fırçayı birbirine bağlar.

Çizim bağlamı GX_DRAW_CONTEXT yapısı tarafından tanımlanır. Bu yapı, geçerli çizim işleminin kırpmasını ve görünümünü tanımlayan, geçerli tuvali tanımlayan ve kullanımdaki geçerli ekran sürücüsünü tanımlayan değişkenler içerir. GX_DRAW_CONTEXT yapısı, çizim için kullanılan fırçayı da tutar. Çizim bağlam fırçası, özel çizim işlevlerinizde doğrudan birlikte çalışacağınız üyedir. Fırça yapısı aşağıdaki kodda gösterildiği gibi tanımlanır.

typedef struct GX_BRUSH_STRUCT
{
    GX_PIXELMAP *gx_brush_pixelmap;
    GX_FONT     *gx_brush_font;
    ULONG        gx_brush_line_pattern;
    ULONG        gx_brush_pattern_mask;
    GX_COLOR     gx_brush_fill_color;  
    GX_COLOR     gx_brush_line_color;  
    UINT         gx_brush_style;
    GX_VALUE     gx_brush_width;
    UCHAR        gx_brush_alpha;  
} GX_BRUSH;

gx_brush_pixelmap alanı, dikdörtgen ve çokgen dolgular için kullanılacak bir piksel haritası tanımlar. gx_brush_style GX_BRUSH_PIXELMAP stilini içermediği sürece bu üye kullanılmaz.

gx_brush_font üyesi, metin çizimi için kullanılan yazı tipini tanımlar. gx_brush_line_pattern üyesi kesikli çizgiler için kullanılan deseni tanımlar. gx_brush_style üyesi, fırça özniteliklerini tam olarak tanımlamak için BIRLIKTE VEYA olabilecek bir stil bayrakları kümesidir. Kullanılabilir fırça stili bayrakları aşağıdakileri içerir.

GX_BRUSH_OUTLINE
GX_BRUSH_SOLID_FILL
GX_BRUSH_PIXELMAP_FILL
GX_BRUSH_ALIAS
GX_BRUSH_UNDERLINE
GX_BRUSH_ROUND

gx_brush_width üyesi, çizgi çizimi için ile çizgiyi veya ana hatlı şekil çizimi için ana hat genişliğini tanımlar.

gx_brush_line_color üyesi, çizgi çizimi ve metin çizimi için ön plan rengini tanımlar.

gx_brush_fill_color üyesi, şekil dolgusu için kullanılan düz dolgu rengini tanımlar. GUIX bağlam bileşeni, etkin bağlam içinde geçerli fırçayı değiştirmeyi çok kolaylaştırmak için tasarlanmış bir dizi API sağlar. Bu API'ler gx_context_brush_define, gx_context_line_color_set, gx_context_fill_color_set, gx_context_font_set ve daha birçok api'yi içerir.

Üst nesnenin çizim bağlamı nesne alt öğeleri tarafından devralınır. Aslında, üst çizim bağlamının bir kopyası, çizim işlevleri çağrıldığında alt nesneler tarafından devralınır. Alt öğe, üst çizimi etkilemeden bağlamı değiştirebilir, ancak isterseniz üst öğeden fırça rengi ve stil gibi bilgileri de devralabilir.

GUIX Pencere Bileşeni

Pencere bileşeni GUIX'teki tüm pencere işleme işlemlerinde sorumludur. GUIX penceresi temelde bir veya daha fazla alt pencere öğesi içerebilen ayrı bir görüntüleme alanıdır. GUIX'te pencere aslında temel pencere öğesi nesnesinin yalnızca özel bir biçimidir.

GUIX pencereleri, devralma desteğiyle nesne odaklı bir şekilde uygulanır. Bu, mümkün olan en küçük bellek ve işleme gereksinimlerine neden olan ANSI C kullanılarak gerçekleştirilir.

GUIX pencereleri, yatay ve dikey kaydırma desteği ekleyerek GUIX pencere öğesinin işlevselliğini genişletir. GUIX pencere nesneleri otomatik olarak kaydırma çubukları oluşturup görüntüleyebilir ve kaydırma çubuğu girişine yanıt verebilir. Taşınabilir pencereler ayrıca, pencerenin kalem giriş olaylarına göre taşınmasına veya sürüklenebilmesine olanak sağlayan yerleşik olay işleme özelliğine sahiptir. Son olarak GUIX penceresi, pencereyi pencerenin önüne Z-order taşıyarak giriş odağını almaya yanıt verir.

GUIX penceresi, pencere kenarlıkları ve kaydırma çubukları gibi istemci olmayan nesneler kullanılabilir alandan kaldırıldıktan sonra pencerenin iç kısmı olan istemci alanı kavramını korur. İstemci alanı alt pencere öğeleri pencere istemci alanına kırpılırken, kaydırma çubukları gibi istemci olmayan alt öğelerinin istemci alanının dışına çizim yapmalarına izin verilir, ancak yine de pencerenin dış boyutlarına kırpılır.

Windows, çocukların üst öğeden özellikleri devraldığı bir üst-alt düzende tutulur. Alt pencerelerin kendi alt pencereleri olabilir ve yine üst öğeden çeşitli özellikleri devralabilir. Herhangi bir pencerenin özellikleri çeşitli GUIX API çağrıları aracılığıyla açıkça yeniden tanımlanabilir.

Pencere Oluşturma

Başlatma sırasında veya uygulama iş parçacıklarının yürütülmesi sırasında bir pencere nesnesi oluşturulabilir. Bir uygulama tarafından oluşturulabilecek pencere nesnelerinin sayısında bir sınır yoktur. Ayrıca, herhangi bir pencerenin sahip olabileceği alt öğe sayısında da bir sınır yoktur.

Pencere Denetim Bloğu

Her pencere nesnesinin özellikleri denetim bloğunda GX_WINDOW bulunur ve gx_api.h içinde tanımlanır. Pencere nesnesi için gereken bellek uygulama tarafından sağlanır ve bellekte herhangi bir yerde bulunabilir. Ancak, pencere nesnesi denetiminin herhangi bir işlevin kapsamı dışında tanımlayarak genel bir yapıyı engellemesi en yaygın olanıdır.

Kök Pencere

GUIX, her tuval için kök pencere olarak adlandırılan bir pencere gerektirir. Kök pencere kenarlıksızdır ve eklendiği tuvalle aynı boyutlara sahiptir. Birincil olarak tüm birinci düzey pencere öğeleri ve pencereler için bir kapsayıcı olarak kullanılır. Kök pencere genellikle uygulama tarafından, ekranın ve tuvalin oluşturulmasından kısa süre sonra API işlevi gx_window_root_create oluşturulur. Studio tarafından oluşturulan işlevi gx_studio_display_configure kullanırsanız, kök pencerenin adresi bu işleve son parametre olarak geçirilen konumda döndürülebilir.

Kök pencere varsayılan olarak taşınamaz duruma gelir ve en basit durumda kök pencere tuvalin boyutudur. Etkin kök pencere, ekran arka planını çizer, bu nedenle ekran arka plan rengini değiştirmek veya arka plan duvar kağıdını görüntülemek için kök pencereye bir renk veya duvar kağıdı atarsınız.

Kök pencere taşınabilirse, alt pencere gibi tuvaldeki konumunu değiştirerek değil, tuvalin kendisini taşıyarak taşınır. Bu özellik GUIX kök penceresinin, donanım uzaklığı yazmaçlarıyla birden çok çerçeve arabelleği destekleyen donanımlardan yararlanmasını sağlar.

Arka Plan

Pencere arka planları düz renkler veya bit eşlem görüntüleridir. İlk pencere kümesi için varsayılanı sağlayan sistem düzeyinde varsayılan bir pencere arka planı vardır. Elbette, herhangi bir pencere arka planı GUIX API'siyle değiştirilebilir.

Pencerenin düz renk arka planını değiştirmek için gx_widget_fill_color_set API'sini kullanın. Pencereye arka plan duvar kağıdı atamak için gx_window_wallpaper_set API'sini kullanın.

Kaydırma

GUIX, pencere alt öğelerini görüntülemek için gereken alan pencerenin geçerli boyutunu (yatay ve/veya dikey) aştığında standart pencere kaydırmayı destekler. Kaydırmayı etkinleştirmek için uygulamanın istenen kaydırma çubuklarını oluşturması ve bunları pencereye eklemesi gerekir.

GUIX pencere bileşeni, pencere istemci alanının boyutuna ve tüm alt pencere öğelerinin kapsamına göre varsayılan bir kaydırma uygulaması sağlar. Uygulamalar ayrıca belirli bir pencere için gx_window_scroll_info_get işlevini geçersiz kılarak kendi kaydırma uygulamasını ve yorumlamasını sağlayabilir.

Olay Bildirimi

Varsayılan pencere olay işleme işlevi, öncelikle kaydırma ve boyutlandırma olaylarının işlenmesinde GX_WIDGET olay işlemeden farklıdır. GX_WINDOW, olayları kaydırma ve boyutlandırma için varsayılan işleyiciler sağladı.

Uygulama, sabit GX_FIRST_APP_EVENT sonra sayısal olarak başlayarak kendi özel olaylarını da ekleyebilir. Bu sabitin ardından gelen tüm olay numaraları uygulamanın kullanımı için ayrılmıştır. Elbette, uygulamanın pencere olay işleyicisi bu tür uygulama olayları için işlemeye sahip olmalıdır.

Olay İşleme

Diğer tüm pencere öğesi türlerinde olduğu gibi, her pencere için gx_window_event_process adlı varsayılan bir pencere olayı işleme işlevi vardır. Bu olay işleme işlevini genellikle oluşturduğunuz pencerelerde kendi olay işleyicinizle geçersiz kılarsınız. Olaylara bu şekilde yanıt verir ve pencere alt denetimleri tarafından oluşturulan olaylara göre eylemde bulunursunuz.

Bu olay işleyicisini geçersiz kılarsanız, olay işleyicisine eklediğiniz eyleme ek olarak varsayılan olay işlemenin gerçekleşmesine izin vermek için GUIX sistem olayları için temel gx_window_event_process işlevini çağırmayı unutmayın. Örneğin , GX_EVENT_SHOW olayı için özel bir işleyici sağlarsanız ve bu olayı gx_window_event_process geçirmezseniz, pencereniz hiçbir zaman görünür olmaz. Bir pencere için özel olay işleyicisi sağlamak üzere gx_widget_event_process_set işlevini kullanarak olay işleyicinizin adresini tanımlayın. Bu işlev, varsayılan olay işleme işlevini API'de belirtilen olay işlevi işleme işleviyle geçersiz kılar.

Önemli

Uygulama olay işleme işlevleri, doğrudan varsayılan gx_window_event_process çağırarak varsayılan işlemenin avantajlarından yararlanabilir (örneğin, işlemeyi yinelemez).

Olay işleme yalnızca iç GUIX sistem iş parçacığı bağlamından çağrılır. Bu şekilde, olay işlemeyi işlemek için yığın gereksinimleri yalnızca GUIX iş parçacığı için geçerlidir.

GUIX Görüntü Okuyucu Bileşeni

Görüntü okuyucu bileşeni, ham sıkıştırılmış görüntüleri GUIX piksel haritası biçiminde açmak için yardımcı programlar ve API işlevleri sağlar. JPEG ve PNG biçiminde ham görüntü verileri, gelecek sürümler için ayrılmış ek biçimlerle desteklenir.

GUIX uygulamalarının büyük çoğunluğu için GUIX Görüntü Okuyucu bileşeninin gerekli olmadığını unutmayın. Çoğu uygulama JPEG ve PNG biçimindeki grafik varlıklarını GUIX uyumlu GX_PIXELMAP kaynaklarına dönüştürmek için GUIX Studio uygulamasını kullanır. GUIX görüntü okuyucu bileşeni, ham grafik varlıkları yalnızca çalışma zamanında bilindiğinde veya sistem depolama kısıtlamaları kaynakları GX_PIXELMAP biçimde depolamayı engellediğinde kullanılır. JPEG ve PNG biçimli görüntü verileri genellikle GX_PIXELMAP biçimden daha kompakttır, ancak bu görüntü türlerinin dinamik olarak sıkıştırma ve renk alanı dönüştürme işlemlerinin gerçekleştirilmesiyle ilgili önemli bir çalışma zamanı yükü vardır.

ham biçimli JPEG veya PNG görüntüleri gx_canvas_pixelmap_draw API işlevine geçirilirse, GUIX JPEG veya PNG verilerini dinamik olarak açıp çizer. Bunun çalışma zamanı çizim hızı üzerinde önemli bir olumsuz etkisi olacağını ve donanım destekli JPEG veya PNG sıkıştırmayı destekleyen bir donanım hedefi kullanmadığınız sürece RAW biçimindeki görüntü verilerinin gx_canvas_pixelmap_draw işlevine geçirilmesi önerilmez.

Önemli

ham JPEG veya PNG biçimli görüntülerin gx_canvas_pixelmap_draw API'sine geçirilmesi, çoğu hedef donanım için önemli çalışma zamanı yüküne neden olur.

Alternatif olarak ham JPEG ve PNG verileri, Görüntü Okuyucu bileşeni kullanılarak çalışma zamanında GX_PIXELMAP biçimine dönüştürülebilir. Bu şekilde üretilen pixelmap'ler, Studio tarafından üretilen ve kaynak dosyanızın içinde yer alan piksel haritaları gibi kullanılabilir ve çizilebilir. Bu, uygulamanızın görüntü her çizildiğinde bu işlemleri gerçekleştirmek yerine görüntü açma, titreme ve renk alanı dönüştürme işlemlerini bir kez (genellikle program başlatılırken) gerçekleştirmesini sağlar.

Görüntü Okuyucu bileşen işlevleri şunlardır:

gx_image_reader_create
gx_image_reader_palette_set
gx_image_reader_start

GUIX Animasyon Bileşeni

GUIX Animasyon bileşeni, ekran ve pencere öğesi geçiş otomasyonlarını otomatikleştirmek için kullanılan bir dizi işlev ve hizmettir. GUIX Animasyon bileşeni, herhangi bir pencere öğesi türünde soldurma, solma ve hareket veya slayt türü animasyonlarını destekler.

Soldurma türü animasyonları, sönen pencere öğelerinin iç alfa değerini değiştirerek ( GX_BRUSH_ALPHA_SUPPORT etkinse) veya arka planla karıştırıldığında pencere öğesi koleksiyonunu ayrı bir bellek tuvaline çizerek desteklenebilir. Birden çok donanım grafik katmanını destekleyen donanım hedefleri için düzgün solma efektleri desteği en iyi şekilde bu tuval karıştırma yaklaşımı kullanılarak ve genellikle çok az çekirdek CPU bant genişliği gerektiğinde gerçekleştirilir. Birden çok grafik katmanını desteklemeyen donanım hedefleri için, 16 bpp ve daha yüksek renk derinliklerinde çalışırken GUIX fırça alfa değeri kullanılarak karıştırma desteklenir.

Animasyonda ayrı bir çizim tuvali kullanılması gerekiyorsa, GUIX Animasyon bileşeni bu amaçla API hizmeti gx_animation_canvas_define sağlar. Diğer animasyon türleri ayrı bir tuval gerektirmez, ancak varsa bunu kullanırlar. Bu, birden çok donanım yüzeyi için temel alınan donanım desteğinin mümkün olan en iyi şekilde kullanılmasını sağlar.

Animasyonu denetleen değişkenler iki denetim bloğu tarafından tanımlanır. İlk olarak, animasyon denetleyicisini tanımlayan GX_ANIMATION denetim bloğu. Animasyon denetleyicisi, tanımladığınız animasyon dizisini yürüten sürüş motorudur. Tek bir animasyon denetleyicisi birçok farklı animasyon dizisini çalıştırmak için birçok kez yeniden kullanılabilir. Aynı anda birden çok animasyon dizisi çalıştırmanız gerekiyorsa, birden çok GX_ANIMATION animasyon denetleyicisi oluşturabilirsiniz.

GUIX sistem bileşeni, GX_ANIMATION denetim yapılarının yeniden kullanılabilir bir bloğunu sağlayabilir. Bu blok, ve animasyon gerektiğinde uygulama tarafından istenebilir ve animasyon dizisi tamamlandığında otomatik olarak sistem havuzuna döndürülür. Bu, uygulamanın uygulanabilecek her animasyon için statik olarak bir GX_ANIMATION yapısı tanımlamasını engeller. bu GX_ANIMATION yapı havuzunun boyutu sabit GX_ANIMATION_POOL_SIZE tarafından tanımlanır ve varsayılan değer 6'dır; bu da varsayılan olarak sistem havuzundan 6 eşzamanlı animasyonun ayrılabileceği anlamına gelir. Bu sabit elbette gx_user.h üst bilgi dosyasında yeniden tanımlanabilir daha fazla eşzamanlı animasyon gereklidir. GX_ANIMATION_POOL_SIZE sıfır olarak ayarlanırsa GUIX sistem bileşeni bir animasyon havuzu veya ilgili hizmetler sağlamaz.

Animasyon tanımlamak için kullanılan ikinci denetim bloğu veya yapısı GX_ANIMATION_INFO yapısıdır. Bu yapı, belirli bir animasyon dizisini tanımlamak için kullanılır. gx_animation_start API hizmetini kullanarak bir animasyon dizisi başlatmak için bu bilgi yapısını animasyon denetleyicinize geçirirsiniz. GX_ANIMATION_INFO yapısı aşağıdaki alanları içerir:

typedef struct GX_ANIMATION_INFO_STRUCT
{
    GX_WIDGET *gx_animation_target;
    GX_WIDGET *gx_animation_parent;
    GX_WIDGET *gx_animation_screen_list;
    USHORT gx_animation_style;
    USHORT gx_animation_id;
    USHORT gx_animation_start_delay;
    USHORT gx_animation_frame_interval;
    GX_POINT gx_animation_start_position;
    GX_POINT gx_animation_end_position;
    GX_UBYTE gx_animation_start_alpha;
    GX_UBYTE gx_animation_end_alpha;
    GX_UBYTE gx_animation_steps;
} GX_ANIMATION_INFO;

gx_animation_target üyesi, animasyon denetleyicisinin işlem yapacağı hedef pencere öğesini tanımlar.

gx_animation_parent üyesi, animasyon dizisi tamamlandığında hedef pencere öğesinin eklendiği üst pencere öğesini (varsa) tanımlar. gx_animation_parent, animasyon tamamlandığında oluşturulan GX_ANIMATION_COMPLETE olayının da alıcısıdır.

gx_animation_screen_list üyesi, kalem girişi temelli ekran slayt animasyonları için bir pencere öğesi listesi tanımlar. Widge listesi GX_NULL işaretçisiyle sonlandırılmalı ve listedeki her pencere öğesi gx_animation_parent aynı x,y boyutlarına sahip olmalıdır.

gx_animation_style, gerçekleştirilecek animasyon türünü ve ilişkili seçenekleri tanımlayan bir bit maskesidir. Animasyon stili bayrakları aşağıdakileri içerir.

Animasyon Stili Bayrağı Description
GX_ANIMATION_TRANSLATE Slayt veya soldurma türü animasyonu isteyin.
GX_ANIMATION_SCREEN_DRAG Kalem girişi temelli ekran sürükleme animasyonu isteyin.

Aşağıdaki bayraklar SCREEN_DRAG tür animasyonlarıyla birlikte kullanılabilir.

Ekran Sürükleme Bayrakları Description
GX_ANIMATION_WRAP Ekran listesi baştan sona kaydırılmalıdır.
GX_ANIMATION_HORIZONTAL Yatay yönde ekran sürüklemeye izin verilir.
GX_ANIMATION_VERTICAL Dikey yönde ekran sürüklemeye izin verilir.

Aşağıdaki bayrak çeviri animasyonlarıyla birlikte kullanılabilir.

Animasyon bayraklarını çevirme Description
GX_ANIMATION_DETACH Animasyon tamamlandığında animasyon hedefini animasyon üst öğesinden ayırma. Hedef, GUIX Studio tarafından oluşturulan otomatik olay işleme tarafından dinamik olarak ayrılmış ve oluşturulmuşsa, hedef ayrıldıktan sonra silinir.
GX_ANIMATION_TRANSLATE Animasyon türleri zamanlayıcı temelli animasyonlardır. Uygulama, hedef pencere öğesi için başlangıç ve bitiş konumu ile başlangıç ve bitiş alfa değerini tanımlar ve animasyon yöneticisi, animasyonu yürütmek için ve itici güç olarak görev yapmak için bir zamanlayıcı oluşturur.
GX_ANIMATION_SCREEN_DRAG Bu animasyon türünün kalem giriş olayları tarafından yönlendirildiğinden TRANSLATE animasyonlarından farklıdır. Bu animasyon türü, kullanıcı giriş dokunmatik ekranında bir kalem veya ekran kalemi sürüklerken hedef pencere öğesini kaydırmak için dokunmatik ekran girişiyle birlikte izler. Bu animasyon türünü kullanmak için uygulamanın gx_animation_drag_enable API'sini çağırarak bu animasyonu etkinleştirmesi gerekir.

gx_animation_id değeri, GX_ANIMATION_COMPLETE olayının event.gx_event_sender alanındaki animasyon üst öğesine geri geçirilir. Bu değer, animasyon üst öğesi tarafından, büyük olasılıkla birkaç alt animasyondan hangisinin tamamlandığı bildirdiğini belirlemek için kullanılır. Bu değer 0 olabilir ve kimlik değeri 0 olan bir animasyon ANIMATION_COMPLETE olayı oluşturmaz.

gx_animation_start_delay değeri, animasyonu yürütmeden önce gx_animation_start çağrıldıktan sonra gecikmeye neden olacak zamanlayıcı işaretlerinin sayısını gösteren bir GUIX değer çizgisi sayısıdır. gx_animation_start çağrıldıkten hemen sonra animasyonu başlatmak için değer 0 olabilir.

gx_animation_frame_interval alanı, animasyon dizisinin her karesi arasında gecikmeye neden olacak GUIX zamanlayıcı işaretlerinin sayısını (temel alınan işletim sistemi değer çizgisi hızının bir katı) tanımlar. En düşük değer 1'dir.

gx_animation_start_position, çeviri animasyonları için hedef pencere öğesinin sol üst başlangıç noktasını tanımlar.

gx_animation_end_position, çeviri türü animasyonları için hedef pencere öğesinin sol üst bitiş konumunu tanımlar.

gx_animation_start_alpha alanı, çeviri türü animasyonları için başlangıç tuvali alfa değerini tanımlar.

gx_animation_end_alpha alanı, çeviri türü animasyonları için bitiş tuval alfa değerini tanımlar.

gx_animation_steps alanı, denetleyicinin çeviri animasyonları için kaç adım veya çerçeve yürütmesi gerektiğini tanımlar. Daha fazla sayıda adım daha yumuşak bir slayt ve/veya soluk görünüm oluşturur, ancak aynı zamanda daha fazla sistem bant genişliği gerektirir.

Uygulamanızda animasyon efektleri uygulamak için, önce animasyon denetleyicinizi başlatmak için gx_animation_create çağırmanız gerekir. Animasyonunuz ikincil bir tuval kullanacaksa, gx_animation_canvas_define çağırarak bu tuvali başlatın. Ardından, gerçekleştirilecek belirli animasyon türünü ve diğer animasyon parametrelerini tanımlamak için GX_ANIMATION_INFO yapısını başlatmanız gerekir. Son olarak, animasyon sırasını tetiklemek için gx_animation_start çağırın.

Animasyon denetleyicisi bir animasyon dizisini tamamladığında, üst pencere öğesine bir GX_ANIMATION_COMPLETE olayı gönderir ve animasyon tuvalinin istenen temizleme işleminin o anda yapılmasını sağlar.

GUIX Yardımcı Programı Bileşeni

Yardımcı program bileşeni GUIX'teki tüm ortak yardımcı program işlevlerinde sorumludur. Bunlar yararlı yardımcı programlar olan ve uygulamanın veya iç GUIX kodunun herhangi bir yerinden çağrılabilen yaygın işlevlerdir. Yardımcı program bileşeni işlevleri aşağıdakileri içerir.

gx_utility_canvas_to_bmp

gx_utility_circle_point_get

gx_utility_alphamap_create

gx_utility_gradient_create

gx_utility_gradient_delete

gx_utlity_ltoa

gx_utility_math_acos

gx_utility_math_asin

gx_utility_math_cos

gx_utility_math_sin

gx_utility_math_sqrt

gx_utility_pixelmap_resize

gx_utility_pixelmap_rotate

gx_utility_pixelmap_simple_rotate

gx_utility_rectangle_center

gx_utility_rectangle_center_find

gx_utility_rectangle_combine

gx_utility_rectangle_compare

gx_utility_rectangle_define

gx_utility_rectangle_overlap_detect

gx_utility_rectangle_point_detect

gx_utility_rectangle_resize

gx_utility_rectangle_shift

gx_utility_string_to_alphamap