Programımda KDE simgeleri kullanmak?

Başlatan mthnzbk, 21 Mayıs 2015 - 04:08:44

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

mthnzbk

RSS okuyucu bir uygulama geliştiriyorum. KDE uygulamalarının yanı sıra bazı yazılımlarda da simgeler sistem simgelerinden kullanılıyor. Bu nasıl yapılır? KDE şart değil. Unity olsun, Gnome olsun fark etmez.

heartsmagic

Çok anladığımdan değil ama bu olay dile bağımlı değil mi biraz? Kısacası masaüstü taraflı araştırmak yerine dil taraflı araştırmak daha doğru olmaz mı?
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.

mthnzbk

İngilizce olarak pek bir sonuç alamadım. Gerçi yazdıklarım doğru muydu onu da bilmiyorum :)

mhmtkrktr

@heartsmagic 'in dediği gibi bu konu az da olsa dile bağlı uygulama  değişkenliği gösterebilir. Qt hakkında bilgi sahibi değilim fakat gtk için bir örnek verecek olursak,
.fonksiyon_tanımı:butonun_durumu {
    background-image: url("butonun_bulunduğu_dizin/butonun_adı.png");
}


Butonun_tanımı = program içinde tanımlanmış olmalı,
Butonun_durumu = Butonun pencere değişkenlerine göre hareket kazanmasını sağlar. Örn: active = pencerenin, diğer pencerelerin üzerinde bulunduğu zamanki şekli veya rengi. hover = örn: fare ile aynı buton üzerine geldiğinde, butonun hareketlenmesi veya renk değiştirmesi.
Butonun_dizini = Program için özel bir simge teması kullanılacaksa, dizin yolu girilmeli. Kullanıcı tarafından tanımlanmış, genel bir simge teması kullanılacaksa, ( simgenin adı, bu simge temasının içinde olması şartıyla ) dizin adı girilmeden, doğrudan simge adı girilebilir. Bu şekilde sistemin geneli için, hangi simge teması seçilmişse, program o temadaki simgeyi kullanacaktır.
Butonun_adı = Buton için tanımlanmış isim ve uzantısı. Uzantı tema motorunun desteklediği, png , svg vb. bir format olabilir.

Şu şekilde bir örnek daha açıklayıcı olacaktır;
Program, diğer pencerelerin üzerindeyken kapatma butonu,
 
.titlebar .titlebutton.close:active {
   color: transparent;
    border-image: none;
    box-shadow: none;
    background-size: 31px 23px;
    background-position: center;
    background-repeat: no-repeat;
    background-image: url('window-controls/close_focused.png'), -gtk-gradient (linear, left top, left bottom,
                                     from (#6c6c72),
                                     color-stop (0.8,#37383d),
                                     color-stop (0.51,#3b3c41),
                                     color-stop (0.9,#45454b),
                                     to (#6c6c72));
        border-radius: 12px;
}


Fare ile kapatma butonunun üzerine gelince, hover durumu,

.titlebar .titlebutton.close:hover {
   color: transparent;
    border-image: none;
    box-shadow: none;
    background-size: 31px 23px;
    background-position: center;
    background-repeat: no-repeat;
    border-radius: 12px;
    background-image: url('window-controls/close_focused.png'), -gtk-gradient (linear,  left top, left bottom, 
                                     from (#db5757),
                                     color-stop (0.4,#7c1818),
                                     color-stop (0.55,#6d0303),
                                     color-stop (0.7,#961c1c),
                                     to (#ae5f5f));
}


Burada color, border-image, box-shadow, background-size, her buton için ayrı ayrı verilebileceği gibi, en başa bir kez tanımlanarak, tüm simgeler için aynı standart geçerli yapılabilir.

if

Qt için sanırım şu: http://doc.qt.io/qt-5/qicon.html

mthnzbk

Bunu biliyorum, demek istediğim anlaşılmadı sanırım. Programlamayı geçersek konsol komutuyla bir masaüstü ortamının adını, kullanılan simge setinin adını/yolunu nasıl öğrenebilirim?

kaansef

# 28065

htaslan

GUI programlama yaklaşımına pek ilgim olduğunu söyleyemem. Ancak programlamaya giriş dersinde hoca problemlere anlık çözümler üretmek yerine kendinizi tekrarlamayacak şekilde uzun vadeli çözümler üretmemizi sürekli söylerdi. Buradan hareketle icon setleri bir yapılandırma dosyasında tutabilirsin. Peki nasıl mı ? Programı kullanacak kişinin kullanıcı kaynaklı problemleri olabilir. Yani sen masaüstü ortamının adını bilip sürekli program çalıştığında bunu döndürmek yerine bunu program kurulurken bir kere çalıştırıp bir konfigürasyon dosyasında tutup oradan alabilirsin. Bu durum maliyeti düşürür. Benim nacizane tavsiyem bunu bash ile halledebilirsin. Bash kodlarını C içerisinde unistd ile çalıştırabilirsin. Araman gereken anahtar kelimelerden execvp olabilir.  Peki konfigürasyon dosyası nedir dersen örneğin dil bazında çalışmak istersen Python, Ruby için yaml, C/C++ için libyaml modülleri sana yol gösterebilir.

mthnzbk

Alıntı yapılan: kaansef - 22 Mayıs 2015 - 01:42:19
Bu *bağlantıda masaüstü ortamının adını nasıl alacağınızı göstermiş.

http://askubuntu.com/questions/125062/how-can-i-find-which-desktop-enviroment-i-am-using

os.environ ile masaüstü ortamını buldum -> XDG_CURRENT_DESKTOP = KDE konsolda python yazıp entera bastıktan sonra şu kodu dener misin? KDE dışındaysa masaüstün:

import os
print os.environ["XDG_CURRENT_DESKTOP"]

sem

Fikir vermesi açısından;

https://forum.ubuntu-tr.net/index.php?topic=24750.0
Bağlantısındaki 

Kısayol Oluşturucu programının ikon tanımlaması?
başlığına bakabilirsiniz. QT ile de benzer bir yol vardır diye tahmin ediyorum.
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

mthnzbk

Malesef. Ben kullanılan simge setinin hangisi olduğunu tespit edir onun ikonlarını kullanacağım. Open, Save, Exit ikonları gibi.

sem

".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

unixmania

#12
meraba.Şöyle yapacan:)QIcon undoicon = QIcon::fromTheme("edit-undo");

Farzedelim yukardaki kodun çalıştığı sistemde geçerli tema 'breeze' olsun.İkonu "/usr/share/icons/breeze"  içinde arar.

Temalar Freedesktop'un belirlediği  standarda uyar. Standart belirlenmiş ekşınlar için değişmez isimler sunar, Mesela 'edit-undo'.

Ayrıca icon arama path'larınıda bir standarda kavuşturur.QIcon::themeName() //geçerli temanın adını döndürür.
QIcon::themeSearchPaths()  //ikon arama path'larını döndürür.
Standart isimler burda.

http://standards.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html

NOT: qt ile alakalı çalışıyorsan dokumantasyonu ('qt5-doc'  arch'taki paketin adı) kursan iyi olur. Onda herşey yazar:İngilizce ama;)

mthnzbk

İnternet üzerinde Qt belgelerine zaten bakıyorumda bu QIcon'un themeName() i falan dikkatimi çekmemişti. Deniyeceğim. Olursa sonraki sürüme göre uyarlarım.