LinuxForum.Fans
Тема

Программирование в GTK

Автор: YUKLA 17 сообщений 8974 просмотров
#3430

Получив высокое благословение, начинаю данную тему.

Готов отвечать на все вопросы, касающиеся трудностей в программировании под GTK. Флуд и религиозные войны (класса QT vs GTK) прошу тут не устраивать!

#3517

Поддерживаю тему, давно хотел узнать как реализовать графическую оболочку под тот же самый bash скрипт. Накидайте ссылок или объясните как это вообще реализовать.

#4073

zenity конечно хороша, но сложные интерфейсы с помощью неё не построишь. Для таких целей на мой взгляд больше подходят различные скриптовые языки имеющие биндинг к GTK. Я бы выбрал что-то из этого: Python, Perl, Ruby. У каждого есть страничка в интернете с описанием особенностей биндинга GTK, хотя принцип у всех очень похожий.

#4084

elve, про zenity я конечно почитаю, но:
мб кто либо подкинет ссылку как всё-же реализовать bash скрипт с интерфейсом? Ну хоть самый элементарный будь то пингер или whois. Просто хочу понять как же это устроенно.

#4098

Bash скрипт с интерфейсом это zenity или ему подобные. Соответственно про них и читайте.
Ну вот Вам пример пингера небольшой с zenity:

text

#!/bin/sh

while [ 1 ] do host=`zenity --title="Ping" --text="ip/host to ping:" --entry` || exit ping -c 5 "$host" 2>&1 | zenity --title="Ping" --width=700 --height=300 --text-info done

#4106

Раз уж зашла речь о bash, то вот еще есть такая забавная либа/программа. Несколько напоминает хорошо известные dialog и X-dialog. Но только в плане философии...

#12243

Здравствуйте! Я програмирую в Лазарусе с использованием OpenGL, у меня возникла проблема, дело в том что мне не удается подключить АнтиАлиазинг.
Создав окно средствами XWindow и подключив OpenGL, антиалиазинг заработал, однако повторив тоже самое с GDK смазанность так и не появилась, полагаю GDK контролирует операции связанные с OpenGL, так же GDK не дает создать на своем окне поверхность glxWindow можно ли както это дело обойти?
Насколько я знаю у GDK есть свои надстроки вида GDK_FBConfig..., и прочее, и там есть строчечка что антиалиазинг еще не поддержывается, мне GDK нужен лишь для создания окошек, все остальное что связано с OpenGL я создаю своими руками.

#12244

Гм...

GDK "окошки" не создает. GDK - библиотека для рисования графических примитивов. "Окошки" cоздает GTK+.

Покажите код создания окна, или напишите, хотя бы, как и какое окно вы создаете?

Пока что ничего не понятно.

#12252

Ваще сам лазарус основан на GDK ну или GTK я всех тонкостей не знаю, просто создаем проект и в FromCreate вписываем код связанный с Opengl.
Могу привести 2 демки в одном случае используется консоль и окна создаются при помощи XWindow во втором создается проект Lazarusа и в FormCreate все прописывается, хотя согласно GLXInfo можно создавать антиалиазиг и аппаратно все впорядке.

А как сюда можно выложыть файл?

Демка с консолью и XWindow находится тут http://glscene.ru/download.php?view.528
а через GDK я вывожу так

text

PGLXFBConfigArray = array of GLXFBConfig;

var Form1: TForm1; attr: Array [0..38] of integer = ( GLX_X_RENDERABLE , gl_True, GLX_RENDER_TYPE, GLX_RGBA_BIT, GLX_DRAWABLE_TYPE, GLX_WINDOW_BIT, GLX_X_VISUAL_TYPE,GLX_TRUE_COLOR, GLX_BUFFER_SIZE, 32, GLX_RED_SIZE, 8, GLX_GREEN_SIZE, 8, GLX_BLUE_SIZE, 8, GLX_ALPHA_SIZE, 0, GLX_AUX_BUFFERS, 4, GLX_DOUBLEBUFFER, gl_True, GLX_DEPTH_SIZE, 24, GLX_STENCIL_SIZE, 8, GLX_ACCUM_RED_SIZE, 16, GLX_ACCUM_GREEN_SIZE, 16, GLX_ACCUM_BLUE_SIZE, 16, GLX_SAMPLE_BUFFERS, GL_TRUE, GLX_SAMPLES, 4, //glxinfo GLX_CONFIG_CAVEAT,GLX_NON_CONFORMANT_CONFIG, none);

AttrRC:array [0..4] of Integer= ( GLX_CONTEXT_MAJOR_VERSION_ARB, 3, GLX_CONTEXT_MINOR_VERSION_ARB, 0, // GLX_CONTEXT_FLAGS_ARB , GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB, // GLX_CONTEXT_PROFILE_MASK_ARB, GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB, 0); visinfo: PXVisualInfo; cm: TColormap; winAttr: TXSetWindowAttributes; glXCont: GLXContext; dpy: PDisplay; win: TWindow; fbConfigs : PGLXFBConfigArray; glxWin:GLXWindow; implementation

{ TForm1 } procedure redraw(); begin glClear(GL_COLOR_BUFFER_BIT); glEnable(GL_LINE_SMOOTH); glTranslatef(-0.5,-0.5,-2); glRotatef(20,0,0.5,0); glBegin(GL_QUADS); glColor3f(1,0,0); glVertex3f(0,0,0); glColor3f(0,1,0); glVertex3f(1,0,0); glColor3f(0,0,1); glVertex3f(1,1,0); glColor3f(1,1,1); glVertex3f(0,1,0); glEnd(); glXSwapBuffers(dpy, win); //Swap the buffers end;

procedure resize1(width,height: integer); begin glViewport(0,0,width,height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45,width/height,0.1,200); glMatrixMode(GL_MODELVIEW); end;

procedure TForm1.FormCreate(Sender: TObject); var numReturned,i: Integer; FGTKWidget : PGTKWidget; begin InitOpenGL; ReadExtensions; ReadImplementationProperties; //dpy := XOpenDisplay(nil); fGTKWidget := GetFixedWidget(pgtkwidget(Handle)); // Dirty workaround: force realize gtk_widget_realize(FGTKWidget); gtk_widget_set_double_buffered(FGTKWidget, false); Win:=GDK_WINDOW_XWINDOW (PGdkDrawable(fGTKWidget^.window)); dpy:=GDK_WINDOW_XDISPLAY (PGdkDrawable(fGTKWidget^.window)); fbConfigs := glXChooseFBConfig( dpy, DefaultScreen(dpy), Attr, @numReturned ); glxWin := glXCreateWindow(dpy,fbConfigs[0],Win,0); glXCont := glXCreateContextAttribsARB(dpy,fbConfigs[0], nil, True,AttrRC ); glXMakeCurrent(dpy,glxWin,glXCont); end;

procedure TForm1.FormDestroy(Sender: TObject); begin glXMakeCurrent(dpy,0,glXCont); glXDestroyContext(dpy,glXCont); //glXDestroyWindow(dpy,glxWin); end;

procedure TForm1.FormPaint(Sender: TObject); begin redraw(); end;

procedure TForm1.FormResize(Sender: TObject); begin resize1(Width,Height); end;

Я было хотел написать про эту проблему в багрепорт лазаруса да токо плохое знание языка + письмо с регистрацей не пришло, и это мне помешало.
А на различных сайтах типа GameDev FreePascal.ru либо не отвечают либо посмеиваюца. Полагаю если проблема не решытся следует папробовать с другими виджетами или перейти на SDL.

#12263

Вы используйте библиотеку GLScene?

Ну, так стоит почитать документацию к пакету. Что там написано по Антиалиасинг?

ИМХО. Это не вопрос данной ветки. Он не имеет отношения к программированию в GTK.

#12268

В GLScene под линуксом используется GLX 1.1 я хочу подключить 1.4, в GLScene нету как таковой документации тем более по данной теме.
Просто сейчас GLScene претерпевает серьезные изменения производится переход на OpenGL 3x и что бы в линуксе небыло отставания я решыл тоже поднять планку поддержки.

#118734

Столкнулся с такой вот проблемой - допустим пользователь выбирает язык ввода ( например в комбобоксе ), после чего необходимо сменить input locale (то бишь установить этот язык ввода ) в text input виджете . Как прогграммным способом менять язык ввода в определенном виджете или во всем приложении ? не подскажете - в какую сторону глядеть, куда копать ?

#118969

посоветуйте книжку - сборник манов - сайтег на русском или членораздельном англицком smile

#118976
.snif написал:
мб кто либо подкинет ссылку как всё-же реализовать bash скрипт с интерфейсом? Ну хоть самый элементарный будь то пингер или whois. Просто хочу понять как же это устроенно.

Правда, не Gtk, но, думаю, принцип тот же.
Так я монтирую шифрованный файл.

Показать

#!/bin/sh
# EXAMPLE:
# ./mountsafe.sh /home/users/lost-doc ~/doc
#
# Mounts/unmounts encFS path
# Source (encFS encrypted path)
SRC=$1
# Destination (mount point for encrypted path)
DST=$2
KDIALOG=$(which kdialog)
FUSERMOUNT=$(which fusermount)
ENCFS=$(which encfs)
#KONQUEROR=$(which konqueror)
KONQUEROR=$(which dolphin)
if [ "$(cat /proc/mounts | grep encfs | grep $DST)" != "" ];
then
$(${KDIALOG} --title "encFS: unmount $DST..." --warningyesno "encFS: should $DST be unmounted?")
if [ $? == 0 ]
then
${FUSERMOUNT} -u $DST &
else
${KONQUEROR} $DST &
fi
else
$(${KDIALOG} --title "encFS: mount $DST..." --warningyesno "encFS: should $DST be mounted?")
if [ $? == 0 ]
then
${KDIALOG} --title "encFS: Enter passphase..." --password "Enter passphrase for [$DST]" | ${ENCFS} -S $SRC $DST && ${KONQUEROR} $DST
fi
fi

Так выхожу из awesome:

Показать

#!/bin/sh
ACTION=$(kdialog --radiolist "Опции выхода:" quit "Выйти" on halt "Выключить" off reboot "Перегрузить" off sleep "Усыпить" off)
if [ -n "${ACTION}" ];then
case $ACTION in
quit)
# pkill awesome
echo "awesome.quit()" | awesome-client
;;
halt)
sudo halt
;;
reboot)
sudo reboot
;;
sleep)
sudo pm-suspend
;;
esac
fi
#119308

можно для тупых пример встраивания графики cairo в дровинАрею ? Ато везде примеры с созданием своего виджета.. а там куча наследований и прочего... захламлено всё и ничего не ясно..

Войдите или зарегистрируйтесь, чтобы ответить.