LINUX.ORG.RU

[gtk2] style property - как изменить?


0

0

Существует кнопка GTK2 с картинкой, поле по умолчанию 2 пиксела:

  btn = Gtk::Button.new
  image = Gtk::Image.new(Gtk::Stock::CLOSE, Gtk::IconSize::MENU)
  btn.add(image)
  puts btn.style_get_property('image-spacing')  # "2"

Как сделать поле равным «0» ?

Написано на ruby, но можете хоть на чем посоветовать (python, perl, php и т.д.)


Пробовал делать так:

  class ClsBtn < Gtk::Button
    type_register
      install_style_property(GLib::Param::Int.new('image-spacing',
        'image-spacing', '', 0, 10000, 5,
        GLib::Param::READABLE|GLib::Param::WRITABLE))
  end
  closebtn = ClsBtn.new
  image = Gtk::Image.new(Gtk::Stock::CLOSE, Gtk::IconSize::MENU)
  closebtn.add(image)
  p closebtn.style_get_property('image-spacing')  # "0"
Значение поля становится «0», но визуально рамка вокруг картинки по прежнему большая (равна 2).

Как я могу уменьшить кнопку? (Она используется в закладке Notebook).

robux
() автор топика
Ответ на: комментарий от robux

P.S. Цифру «5» заменить на «0», это я игрался немного ))

robux
() автор топика

Есть функция gtk_widget_modify_style. Наверное, она помогает сменить стиль. Я не думаю, что добавления своего style property решит проблему, т.к. тема перепишет свои значения.

dmitry_vk ★★★
()
Ответ на: комментарий от fat_angel

Спасибо, ребята!

Гораздо лучше стало, изменил стиль так:

  style = closebtn.modifier_style
  style.xthickness = 0
  style.ythickness = 0
  closebtn.modify_style(style)

Поле внутри кнопки уменьшилось, но все равно не нулевое.

P.S. Мне нравится как в Geany вкладки сделаны, так же хочу ;-) Там кнопка очень маленькая, не выше Label, и поле минимальное.

robux
() автор топика
Ответ на: комментарий от dmitry_vk

Кнопка вкладки блокнота а-ля Geany

Пришлось скачать исходники Geany и «подсмотреть» секреты немецких производителей (ну упрямый я, каюсь). Окончательный вариант:

    label_box = Gtk::HBox.new(false, 0)
    label = Gtk::Label.new('Page1')
    label_box.pack_start(label, false, false, 0)

    btn = Gtk::Button.new
    btn.relief = Gtk::RELIEF_NONE
    btn.focus_on_click = false
    style = btn.modifier_style
    style.xthickness = 0
    style.ythickness = 0
    btn.modify_style(style)
    btn.set_tooltip_text("Close page1")
    wim,him = Gtk::IconSize.lookup(Gtk::IconSize::MENU)
    btn.set_size_request(wim+2,him+2)
    btn.signal_connect('clicked') do
      $notebook.remove_page($notebook.children.index(treeview))
      store.clear
      label_box.destroy
      treeview.destroy
    end

    image = Gtk::Image.new(Gtk::Stock::CLOSE, Gtk::IconSize::MENU)
    btn.add(image)

    align = Gtk::Alignment.new(1.0, 0.0, 0.0, 0.0)
    align.add(btn)
    label_box.pack_start(align, false, false, 0)

    label_box.spacing = 3
    label_box.show_all

    page = $notebook.append_page(treeview, label_box)
    treeview.show_all
    $notebook.page = $notebook.n_pages-1

Ох уж мне этот ваш GTK!.. :)

robux
() автор топика

Может быть не очень в тему...
Ты можешь написать свой маленький .gtkrc, применить его к своей проге gtk.rc_parse(rc_file).
В gtkrc описываешь разные стили, потом меняешь стиль виджета с помощью widget.set_name(«NewStyle»).

Или тебе не надо динамически менять оформление?

ls-h ★★★★★
()
Ответ на: комментарий от ls-h

Динамически не надо.
К тому же я пишу на ruby, там вроде нет .gtkrc

Мне нужно как можно более проще.

robux
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.