2013-02-08 3 views
3

Мне удалось получить полосу прокрутки немного меньше, чем обычно. Однако я не могу заставить родительский виджет масштабироваться до нужного размера. Изображение ниже показывает, что я имею в виду, и показывает содержимое моего файла ~/.gtkrc-2.0 ....Размер прокрутки GTK в gvim

Что мне не хватает?

gvim image

А вот копируемая ~/.gtkrc-2,0 фрагмент:

style "neverness" { 
    GtkScrollbar::activate-slider = 1 
    GtkScrollbar::trough-border = 0 
    GtkScrollbar::slider-width = 9 
    GtkScrollbar::min-slider-length = 36 
    GtkScrollbar::has-forward-stepper = 1 
    GtkScrollbar::has-backward-stepper = 1 
} 

class "GtkScrollbar" style "neverness" 
class "GtkHScrollbar" style "neverness" 
class "GtkVScrollbar" style "neverness" 

Vim версия:

; vim --version 
VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Feb 21 2013 17:41:49) 
Included patches: 1-831 
Compiled by [email protected] 
Big version with GTK2 GUI. Features included (+) or not (-): 
+arabic   +file_in_path +mouse_sgr  +tag_binary 
+autocmd   +find_in_path -mouse_sysmouse +tag_old_static 
+balloon_eval +float   +mouse_urxvt  -tag_any_white 
+browse   +folding   +mouse_xterm  -tcl 
++builtin_terms -footer   +multi_byte  +terminfo 
+byte_offset  +fork()   +multi_lang  +termresponse 
+cindent   +gettext   -mzscheme  +textobjects 
+clientserver -hangul_input +netbeans_intg +title 
+clipboard  +iconv   +path_extra  +toolbar 
+cmdline_compl +insert_expand -perl   +user_commands 
+cmdline_hist +jumplist  +persistent_undo +vertsplit 
+cmdline_info +keymap   +postscript  +virtualedit 
+comments  +langmap   +printer   +visual 
+conceal   +libcall   -profile   +visualextra 
+cryptv   +linebreak  +python   +viminfo 
+cscope   +lispindent  -python3   +vreplace 
+cursorbind  +listcmds  +quickfix  +wildignore 
+cursorshape  +localmap  +reltime   +wildmenu 
+dialog_con_gui -lua    +rightleft  +windows 
+diff   +menu   -ruby   +writebackup 
+digraphs  +mksession  +scrollbind  +X11 
+dnd    +modify_fname +signs   -xfontset 
-ebcdic   +mouse   +smartindent  +xim 
+emacs_tags  +mouseshape  -sniff   +xsmp_interact 
+eval   +mouse_dec  +startuptime  +xterm_clipboard 
+ex_extra  +mouse_gpm  +statusline  -xterm_save 
+extra_search -mouse_jsbterm -sun_workshop  
+farsi   +mouse_netterm +syntax   
    system vimrc file: "$VIM/vimrc" 
    user vimrc file: "$HOME/.vimrc" 
     user exrc file: "$HOME/.exrc" 
    system gvimrc file: "$VIM/gvimrc" 
    user gvimrc file: "$HOME/.gvimrc" 
    system menu file: "$VIMRUNTIME/menu.vim" 
    fall-back for $VIM: "/home/yann/share/vim" 
Compilation: gcc -c -I. -Iproto -DHAVE_CONFIG_H -DFEAT_GUI_GTK -pthread -I/usr/include/gtk-2.0 -I/usr/lib64/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12 -I/usr/local/include -g -O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1  
Linking: gcc -L/usr/local/lib -Wl,--as-needed -o vim -pthread -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgio-2.0 -lpangoft2-1.0 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lcairo -lpango-1.0 -lfreetype -lfontconfig -lgobject-2.0 -lgmodule-2.0 -lgthread-2.0 -lrt -lglib-2.0 -lSM -lICE -lXpm -lXt -lX11 -lXdmcp -lSM -lICE -lm -ltinfo -lnsl -lselinux -lacl -lattr -lgpm -ldl -L/usr/lib64/python2.7/config -lpython2.7 -lpthread -ldl -lutil -lm -Xlinker -export-dynamic  
+0

Я бы подумал, что это значительно более подходит для [unix.se], чем [so]; это не вопрос программирования, это вопрос конфигурации GTK. –

+0

@ChrisMorgan: вопрос был в [Unix и Linux] (http://unix.stackexchange.com/) до, но через три дня ответов не было. В то время как * * - вопрос конфигурации, я бы не подумал, если не по теме. ** Если ** это, могут ли моды перенести его обратно? – Sardathrion

ответ

2

Это вызвано не GTK +; это вызвано vim.

См vim73/SRC/gui.c: gui_init_check():

gui.scrollbar_width = gui.scrollbar_height = SB_DEFAULT_WIDTH; 

Это значение происходит от gui.h:

#define SB_DEFAULT_WIDTH 16 

Позже gui_position_components() делает это:

gui.right_sbar_x = text_area_x + text_area_width; 

И gui_update_scrollbars() делает это:

gui_mch_set_scrollbar_pos(&wp->w_scrollbars[SBAR_RIGHT], 
          gui.right_sbar_x, y, 
          gui.scrollbar_width, h); 

, который может быть сделано, как

gtk_form_move_resize(GTK_FORM(gui.formwin), sb->id, x, y, w, h); 

Это GtkForm пользовательский виджет реализован в самом Vim; см gui_gtk_f.c:

void 
gtk_form_move_resize(GtkForm *form, GtkWidget *widget, 
        gint x, gint y, gint w, gint h) 
{ 
    widget->requisition.width = w; 
    widget->requisition.height = h; 

    gtk_form_move(form, widget, x, y); 
} 

Позже, код в gtk_form_position_child() просто захватывает widget-> реквизиции и использует его для размещения ребенка.

GtkVScrollbar видит, что ему выделяется больше горизонтального пространства, чем требуется (т. Е. SB_DEFAULT_WIDTH = 16), и центрируется на его выделение. Это дополнительное пространство, которое вы видите вокруг полосы прокрутки.

Vim не должен настраивать внутреннее поле виджетов -> заявку. Вместо этого он должен хранить нужные значения где-нибудь (возможно, в структуре GtkFormChild) и использовать их. Кроме того, он должен иметь возможность использовать собственную заявку GTK + для получения требуемой ширины полосы прокрутки.

+0

+75! Отличный, хороший точный ответ, и он решает мою проблему. Спасибо. – Sardathrion

+1

Как насчет отправки патча в [список рассылки vim_dev] (http://www.vim.org/community.php) ?! –

Смежные вопросы