Ebru Akagündüz: Ruby & GTK-3

Ebru Akagündüz: Ruby & GTK-3

Mesajgönderen fortran » 28 Eyl 2013, 16:09

Bu dönem Gtk ve Ruby kullanarak proje yapacağım. Aslında Gtk ve Ruby kullanma konusunda biraz tereddüt ettik. Gtk-3 sürümünün Ruby bağlayıcısı (binding) mevcut, gtk3 gemi ile kurulumunu sağlayabiliriz, ancak belgesi yok. Projeye karar verirken olan tereddütümüz de bundan kaynaklıydı.

Gtk kullanırken buradan oldukça yararlanmıştım. Gtk-3'ün belgesi olmadığından kullanmaya pek sıcak bakmıyordum. Sonra Gtk-3 ile arasındaki söz dizim farklarını görmek için buradan yararlandım. Burada Gtk-2 ile yazılmış olan örneklerin Gtk-3 için olan karşılıklarını Github'daki depoda tutuyorum. Bu sayede proje üzerinde çalışırken Gtk-3'teki söz dizimi, fonksiyon argüman farklılıkları, kaldırılan ve eklenen özelliklerden kaynaklanan hataların çözümünü her seferinde baştan keşfetmem gerekmeyecek.

Gtk-3 kullanırken bildiğim söz dizimi olarak Gtk-2 kullanıyorum. Eğer hata alırsam bunu çözmeye çalışıyorum. Karşılaştığım söz diziminden kaynaklanan bazı hata çıktıkları "bunun yerine şunu kullanın" gibi net bir biçiminde belirtilmiş. Ancak her hata çıktısı bu kadar yardımcı olmuyor ve bazı durumlarda Gtk-2'de kullanılan fonksiyon yerine Gtk-3'deki fonksiyon adı tamamen farklı olup, argüman sayısı gibi bir çok etken bir arada değiştiğinde işler biraz karışabiliyor. Bunun için Irb'den daha yetenekli bir etkileşimli kabuk kullanırsam işim kolaylaşır diye düşündüm. Bu yüzden PRY kullanmaya başladım ve beğendim.

Gtk2'den Gtk3'e değişen bazı fonksiyonlar şu şekilde:

Yatay ve Dikey Ölçekleme:
Kod: Tümünü seç
# deprecated -> scale = Gtk::HScale.new
# use Gtk::Scale.new(:horizontal, *args)

scale = Gtk::Scale.new(:horizontal)


Butonlar:
Kod: Tümünü seç
# deprecated -> button = Gtk::Button.new "About"
button = Gtk::Button.new(:label => "About")


Renk Seçim Penceresi:
Kod: Tümünü seç
# deprecated -> cdia = Gtk::ColorSelectionDialog.new "Select color"
cdia = Gtk::ColorSelectionDialog.new(:title => "Select color")

colorsel = cdia.color_selection
# color = colorsel.current_color, .current_color returns Gtk::Color but it should return Gdk::RGBA
color = colorsel.current_rgba


Font Seçim Penceresi:
Kod: Tümünü seç
# deprecated fdia = Gtk::FontSelectionDialog.new "Select font name"
fdia = Gtk::FontChooserDialog.new(:title => "Select font name", :parent => nil)

# deprecated if response == Gtk::Dialog::RESPONSE_OK, you can use Gtk::ResponseType::OK
if response == Gtk::ResponseType::OK

# deprecated -> font_desc = Pango::FontDescription.new fdia.font_name
font_desc_ = Pango::FontDescription.new fdia.font_desc

@label = Gtk::Label.new "The only victory over love is flight."
# deprecated -> @label.modify_font font_desc
@label.override_font(font_desc_)


Bilgilendirme Mesaj Pencereleri:
Kod: Tümünü seç
# deprecated ->  md = Gtk::MessageDialog.new(self, Gtk::Dialog::MODAL |
# Gtk::Dialog::DESTROY_WITH_PARENT, Gtk::MessageDialog::ERROR,
# Gtk::MessageDialog::BUTTONS_CLOSE, "Error loading file")
md = Gtk::MessageDialog.new(:parent => self, :flags => :destroy_with_parent,
                            :type => :info, :buttons_type => :close,
                            :message => "Download completed")
                           
# deprecated -> Gtk::MessageDialog::ERROR, you should use :error
# deprecated -> Gtk::MessageDialog::QUESTION, you should use :question
# deprecated -> Gtk::MessageDialog::WARNING, you should use :warning


Pencere:
Kod: Tümünü seç
window = Gtk::Window.new
# deprecated -> window.set_window_position Gtk::Window::POS_CENTER
# you can use :center or Gtk::Window::Position::CENTER
window.set_window_position(Gtk::Window::Position::CENTER)


# deprecated -> window.modify_bg Gtk::STATE_NORMAL, Gdk::Color.new(6400, 6400, 6440)
window.override_background_color = :normal, Gdk::Color.new(6400, 6400, 6440)


Yatay ve Dikey Kutular:
Kod: Tümünü seç
# deprecated -> vbox = Gtk::VBox.new false, 5
vbox = Gtk::Box.new(:vertical, 5)
# deprecated -> hbox = Gtk::HBox.new true, 3

# deprecated -> vbox.pack_start halign, false, false, 3
# 'Gtk::Box#pack_start(child, :expand => true, :fill => true, :padding => 0)'
vbox.pack_start(halign, :expand => false, :fill => false, :padding => 3)


Tablo Yapısı:
Kod: Tümünü seç
# deprecated -> table.attach Gtk::Button.new("Cls"), 0, 1, 0, 1
table.attach Gtk::Button.new(:label => "Cls"), 0, 1, 0, 1

# use Gtk::AttachOptions::FILL instead of Gtk::FILL
table.attach(halign, 0, 1, 0, 1, Gtk::AttachOptions::FILL,
             Gtk::AttachOptions::FILL, 0, 0)

# use Gtk::AttachOptions::EXPAND instead of Gtk::EXPAND
# use Gtk::AttachOptions::SHRINK instead of Gtk::SHRINK


Resimler:
Kod: Tümünü seç
bardejov = Gdk::Pixbuf.new(:file => "sample_image.jpg")
# deprecated -> image1 = Gtk::Image.new bardejov
# all options
# image1 = Gtk::Image.new(:stock => nil, :icon_name => nil, :icon_set => nil,
# :gicon => nil, :file => nil, :pixbuf => bardejov, :animation => nil, :size => nil)
image1 = Gtk::Image.new(:pixbuf => bardejov)

# deprecated ->  newi = Gtk::ImageMenuItem.new Gtk::Stock::NEW, agr
newi = Gtk::ImageMenuItem.new(:stock_id => Gtk::Stock::NEW, :accel_group => agr)

# deprecated -> newi.add_accelerator("activate", agr, key,
#                                    mod, Gtk::ACCEL_VISIBLE)
# you can use ":visible" instead of Gtk::AccelFlags::VISIBLE
newi.add_accelerator("activate", agr, key,
                     mod, Gtk::AccelFlags::VISIBLE)


Araç Çubuğu ve Butonu:
Kod: Tümünü seç
# deprecated -> newtb = Gtk::ToolButton.new Gtk::Stock::NEW
newtb = Gtk::ToolButton.new(:stock_id => Gtk::Stock::NEW)

# deprecated -> toolbar.insert 0, newtb
toolbar.insert(newtb, 0)


Çizim:
Kod: Tümünü seç
darea = Gtk::DrawingArea.new 
# deprecated -> @darea.signal_connect("expose-event"){..}
darea.signal_connect('draw'){...}


Seçmeli Düşen Menü:
Kod: Tümünü seç
# deprecated -> cb = Gtk::ComboBox.new
cb = Gtk::ComboBoxText.new


Gtk-3'ü daha fazla kullandıkça gördüğüm değişiklikleri Github'a eklemeye devam edeceğim.

ebruakagunduz.com
Kullanıcı avatarı
fortran
Forum Gurusu
Forum Gurusu
 
Mesajlar: 4406
Kayıt: 26 Kas 2006, 01:00

Dön Glade / Anjuta, GTK

Kimler çevrimiçi

Bu forumu gezen kullanıcılar: Hiç bir kayıtlı kullanıcı yok ve 1 misafir