X Window에서 테두리 없는 어플리케이션을 짜고 싶습니다.

valor의 이미지

제목 그대로 테두리 없는 GUI 어플리케이션을 만들고 싶은데요...

그 전에는 Qt로 여러가지 장난을 친 정도 수준이었습니다.

Qt에서는 방법을 알고 있습니다. setMask를 이용하는 방법이요.

그런데 이 방법을 사용하지 못할 환경에 처해있어서 이렇게 질문을 드립니다.

사실 GQMpeg 소스를 받아보기는 했는데 제가 gtk 지식도 없어서 그런지

테두리 없이 출력하는 방법을 찾지를 못하겠더군요.

혹시 Xlib이나 gtk를 이용하여 이 방법을 구현하는 방법을 아시는 분을 알려주셨으면 합니다...

사실 Qt에서 방법은 소스에서 배포되는 example에서 찾았는데 gtk에는 그런 example은 없더군요. 간단한 example을 보여주셔도 감사...

정태영의 이미지

gtk_window_set_decorated ()

void gtk_window_set_decorated (GtkWindow *window, gboolean setting);

By default, windows are decorated with a title bar, resize controls, etc. Some window managers allow GTK+ to disable these decorations, creating a borderless window. If you set the decorated property to FALSE using this function, GTK+ will do its best to convince the window manager not to decorate the window. Depending on the system, this function may not have any effect when called on a window that is already visible, so you should call it before calling gtk_window_show(). On Windows, this function always works, since there's no window manager policy involved.window :

a GtkWindow setting :TRUE to decorate the window

_-_ 아마 이거일듯 싶군요
gtk-demo와..
devhelp를 사용해보세요 ;)

오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..

feanor의 이미지

최대한 단순화한 예제입니다.

/* diamond.c */
/* Seo Sanghyeon */

#include <gtk/gtk.h>
#include <gdk/gdk.h>

int main(int argc, char **argv)
{
    GtkWidget *root;
    gint width;
    gint height;
    GdkPoint points[4];
    GdkRegion *region;
    GdkWindow *window;

    gtk_init(&argc, &argv);

    root = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_decorated(root, FALSE);
    gtk_widget_show(root);

    gtk_window_get_size(root, &width, &height);

    points[0].x = width/2;
    points[0].y = 0;
    points[1].x = 0;
    points[1].y = height/2;
    points[2].x = width/2;
    points[2].y = height;
    points[3].x = width;
    points[3].y = height/2;

    region = gdk_region_polygon(points, 4, GDK_EVEN_ODD_RULE);
    window = root->window;
    gdk_window_shape_combine_region(window, region, 0, 0);

    gtk_main();
    return 0;
}

컴파일과 실행 방법입니다.

$ gcc diamond.c -o diamond `pkg-config --cflags --libs gtk+-2.0`
$ ./diamond

gtk_widget_set_decorated를 써서 테두리와 제목줄을 없앨 수 있구요, 윈도우 모양을 바꾸려면 GtkWidget의 GdkWindow를 얻어서 gdk_window_shape_combine_region이나 gdk_window_shape_combine_mask를 쓰셔야 합니다. 윈도우 모양이 기하학적인 도형일때는 region을 쓰시면 되고, 비트맵일 경우 mask를 쓰시면 됩니다.

--feanor

valor의 이미지

감사합니다,

gtk에 관한 문서를 찾아보기가 힘들었는데 많은 도움 되었습니다. 그런데 제가 사용할 환경인 gtk+ 1.2 버전에서는 gtk_window_set_decorated가 없더군요 --;

그래서 찾아보니 gdk_window_set_decorations이 이런 기능을 하더라구요. Qt는 버전 별로 외형상 바뀌는게 많지않고, backward compatibility가 있어보이는데 gtk는 이 library를 보고 거의 안되겠다는 생각이 들었습니다.

feanor의 이미지

Gtk 1.2와 Gtk 2.0은 전혀 다른 라이브러리로 생각하시는 편이 편합니다.

Gtk 2.0 "시리즈 내에서는" backward compatibility가 잘 지켜지는 편입니다. (저는 Qt는 안 써보았는데, Qt2 코드를 Qt3와 써도 별 문제가 없나요?)

"Gtk는 안되겠다는 생각이 들었습니다" 같은 말은 함부로 할 말은 아니라고 생각합니다.

--feanor

minzkn의 이미지

오랜만에 접속했습니다. 제 글에 대해서 딴지 걸기 없기!

Xlib를 이용한 예제입니다.

http://minzkn.wowdns.com:2745/screenshot/mz3d.tar.gz

이것을 보시면
mz3dx.c 소스를 만들어 두었습니다.

그 안에 보시면 Override 관련 3줄정도의 소스를 참고하세요.

도구의 결함은 장인의 손으로 극복한다.

valor의 이미지

valor wrote:
Qt는 ... backward compatibility가 있어보이는데 gtk는 ... 거의 안되겠다는 생각이 들었습니다.

feanor wrote:
"Gtk는 안되겠다는 생각이 들었습니다" 같은 말은 함부로 할 말은 아니라고 생각합니다.

제 말뜻은 gtk는 backward compatibility가 별로 없어보인다는 의미였습니다. 1.2와 2.0를 전혀 다른 라이브러리로 생각할 정도라면 backward compatibility가 없다는 의미 아닌가요?

다른 사람 글을 논지를 흔들어놓을 정도로 편집을 해서 인용해놓은 것이 그 사람의 말이라고 볼 수 있을지 모르겠습니다.

feanor의 이미지

>제 말뜻은 gtk는 backward compatibility가 별로 없어보인다는 의미였습니다.
>1.2와 2.0를 전혀 다른 라이브러리로 생각할 정도라면 backward
>compatibility가 없다는 의미 아닌가요?

아닙니다.

* * *

1.2와 2.0은 전혀 다르지만 2.0과 2.2와 2.4는 모두 같습니다. 이게 backward compatibility가 없는 것입니까?

2.0이라고 쓰기보다 2.0 시리즈, 또는 2.x라고 썼어야 혼란이 적었을 것 같군요.

--feanor

Prentice의 이미지

Quote:
Qt는 버전 별로 외형상 바뀌는게 많지않고, backward compatibility가 있어보이는데 gtk는 이 library를 보고 거의 안되겠다는 생각이 들었습니다.

QT1, QT2, QT3는 시각적으로 봤을 때 바뀐 것이 많았다고 생각합니다. Backward compatibility 면에서도 차이가 있지 않았었나요? Major version 사이의 compatibility가 없다고 해서 "안 되겠다" 라고 하신다면 좀 문제가 있다는 의견에 저도 동의합니다.

valor의 이미지

문장이 너무 길어서 그런가요? 제가 표현을 잘못한 것인가요?

Qt는 backward compatibility가 있어보이는데, gtk는 아닌것 같다는 뜻입니다.

표현을 수정해도 문제 있다는 의견에 동의하시겠습니까?

Prentice의 이미지

valor wrote:
문장이 너무 길어서 그런가요? 제가 표현을 잘못한 것인가요?

Qt는 backward compatibility가 있어보이는데, gtk는 아닌것 같다는 뜻입니다.

표현을 수정해도 문제 있다는 의견에 동의하시겠습니까?

예, 저라면 동의하겠습니다. gtk와 gdk의 한끗차이, qt2와 qt3 사이에서도 있었을 법한 수준의 차이 단 한가지를 가지고 호들갑을 떠시는 것 같아요.

feanor의 이미지

valor wrote:

Qt는 backward compatibility가 있어보이는데, gtk는 아닌것 같다는 뜻입니다.
표현을 수정해도 문제 있다는 의견에 동의하시겠습니까?

네, 표현을 수정해도 문제 있습니다.

--feanor

feanor의 이미지

valor wrote:

그런데 제가 사용할 환경인 gtk+ 1.2 버전에서는 gtk_window_set_decorated가 없더군요 --;

그래서 찾아보니 gdk_window_set_decorations이 이런 기능을 하더라구요. Qt는 버전 별로 외형상 바뀌는게 많지않고, backward compatibility가 있어보이는데 gtk는 이 library를 보고 거의 안되겠다는 생각이 들었습니다.

감정 싸움으로 흐를 것 같으니, 구체적인 이슈에 대해 설명을 하겠습니다. valor님이 지적하신 것은 forward compatibility일지언정 backward compatibility는 아닙니다.

1.2에서 돌아가던 gdk_window_set_decorations는 2.0에서도 _여전히 정상작동합니다_. 2.0에는 이것이 gtk_window_set_decorated로도 사용할 수 있게 _기능이 새로 추가된 것입니다_. 님께서 지적하신 내용이 backward compatibility라면, 라이브러리에 새로운 기능을 추가해서는 안 된다는 뜻입니까?

따라서 이 경우만 보면, 1.2에서 돌아가던 코드는 2.0에서도 여전히 잘 돌아갑니다. 1.2에서는 gdk_window_set_decorations로 짰을 테니까요.

여전히, Gtk 1.2와 2.0은 완전히 backward compatible 하지는 않습니다. 그래서 다른 라이브러리로 생각하라고 했던 것입니다. 그리고 그정도의 차이점은 Major version 사이에서는 얼마든지 있을 수 있다고 생각합니다.

--feanor

valor의 이미지

그러고 보니 제가 완전히 헛다리를 짚고 있었군요.

2.0 소스가 1.2에서 컴파일이 안된다는 걸 backward compatibility로 보고 있었다니...

요즘 제정신이 아닌가봅니다. :?

공연히 게시판이 엉망이 되었군요. 죄송합니다.

feanor의 이미지

...너무 몰아붙인 것 같아 죄송합니다. 정말이에요. :-)

--feanor

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.