Получив высокое благословение, начинаю данную тему.
Готов отвечать на все вопросы, касающиеся трудностей в программировании под GTK. Флуд и религиозные войны (класса QT vs GTK) прошу тут не устраивать!
Программирование в GTK
Поддерживаю тему, давно хотел узнать как реализовать графическую оболочку под тот же самый bash скрипт. Накидайте ссылок или объясните как это вообще реализовать.
.snif Если не ошибаюсь это можно сделать с помощью утилиты zenity
http://library.gnome.org/users/zenity/stable/
zenity конечно хороша, но сложные интерфейсы с помощью неё не построишь. Для таких целей на мой взгляд больше подходят различные скриптовые языки имеющие биндинг к GTK. Я бы выбрал что-то из этого: Python, Perl, Ruby. У каждого есть страничка в интернете с описанием особенностей биндинга GTK, хотя принцип у всех очень похожий.
elve, про zenity я конечно почитаю, но:
мб кто либо подкинет ссылку как всё-же реализовать bash скрипт с интерфейсом? Ну хоть самый элементарный будь то пингер или whois. Просто хочу понять как же это устроенно.
Bash скрипт с интерфейсом это zenity или ему подобные. Соответственно про них и читайте.
Ну вот Вам пример пингера небольшой с zenity:
#!/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
Здравствуйте! Я програмирую в Лазарусе с использованием OpenGL, у меня возникла проблема, дело в том что мне не удается подключить АнтиАлиазинг.
Создав окно средствами XWindow и подключив OpenGL, антиалиазинг заработал, однако повторив тоже самое с GDK смазанность так и не появилась, полагаю GDK контролирует операции связанные с OpenGL, так же GDK не дает создать на своем окне поверхность glxWindow можно ли както это дело обойти?
Насколько я знаю у GDK есть свои надстроки вида GDK_FBConfig..., и прочее, и там есть строчечка что антиалиазинг еще не поддержывается, мне GDK нужен лишь для создания окошек, все остальное что связано с OpenGL я создаю своими руками.
Ваще сам лазарус основан на GDK ну или GTK я всех тонкостей не знаю, просто создаем проект и в FromCreate вписываем код связанный с Opengl.
Могу привести 2 демки в одном случае используется консоль и окна создаются при помощи XWindow во втором создается проект Lazarusа и в FormCreate все прописывается, хотя согласно GLXInfo можно создавать антиалиазиг и аппаратно все впорядке.
А как сюда можно выложыть файл?
Демка с консолью и XWindow находится тут http://glscene.ru/download.php?view.528
а через GDK я вывожу так
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.
В GLScene под линуксом используется GLX 1.1 я хочу подключить 1.4, в GLScene нету как таковой документации тем более по данной теме.
Просто сейчас GLScene претерпевает серьезные изменения производится переход на OpenGL 3x и что бы в линуксе небыло отставания я решыл тоже поднять планку поддержки.
Столкнулся с такой вот проблемой - допустим пользователь выбирает язык ввода ( например в комбобоксе ), после чего необходимо сменить input locale (то бишь установить этот язык ввода ) в text input виджете . Как прогграммным способом менять язык ввода в определенном виджете или во всем приложении ? не подскажете - в какую сторону глядеть, куда копать ?
посоветуйте книжку - сборник манов - сайтег на русском или членораздельном англицком smile
мб кто либо подкинет ссылку как всё-же реализовать 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
можно для тупых пример встраивания графики cairo в дровинАрею ? Ато везде примеры с созданием своего виджета.. а там куча наследований и прочего... захламлено всё и ничего не ясно..