LINUX.ORG.RU

Ответ на: комментарий от Selecter

xlib!!!

вот код:

Window rootWindow;

XSetWindowAttributes xWindowAttr;

DWORD dwMask;

XSizeHints xSizeHint;

m_pDisplay = XOpenDisplay(NULL);

m_iScreen = DefaultScreen(m_pDisplay);

rootWindow = RootWindow(m_pDisplay, m_iScreen);

m_dwAppWidth = DisplayWidth(m_pDisplay, m_iScreen);

m_dwAppHeight = DisplayHeight(m_pDisplay, m_iScreen);

int pAttribs[] =

{

GLX_RGBA,

GLX_DOUBLEBUFFER,

GLX_RED_SIZE, 8,

GLX_GREEN_SIZE, 8,

GLX_BLUE_SIZE, 8,

GLX_ALPHA_SIZE, 8,

GLX_DEPTH_SIZE, 24,

GLX_STENCIL_SIZE, 8,

0

};

m_pXVisualInfo = glXChooseVisual(m_pDisplay, m_iScreen, pAttribs);

if(!m_pXVisualInfo)

{

return E_FAIL;

}

xWindowAttr.background_pixel = 0;

xWindowAttr.border_pixel = 0;

xWindowAttr.colormap = XCreateColormap(m_pDisplay, rootWindow, m_pXVisualInfo->visual, AllocNone);

xWindowAttr.event_mask = StructureNotifyMask | KeyPressMask | KeyReleaseMask

| PointerMotionMask | ButtonPressMask | ButtonReleaseMask; dwMask = CWBackPixel | CWBorderPixel | CWColormap | CWEventMask;

xSizeHint.x = 0;

xSizeHint.y = 0;

xSizeHint.flags = PPosition | PSize;

xSizeHint.width = m_dwAppWidth;

xSizeHint.height = m_dwAppHeight;

m_Window = XCreateWindow(m_pDisplay,

rootWindow,

xSizeHint.x, xSizeHint.y, xSizeHint.width, xSizeHint.height,

0,

m_pXVisualInfo->depth,

InputOutput,

m_pXVisualInfo->visual,

dwMask,

&xWindowAttr);

XMapWindow(m_pDisplay, m_Window);

XStoreName(m_pDisplay, m_Window, "...");

XSetIconName(m_pDisplay, m_Window, "...");

m_aWmDeleteWindow = XInternAtom(m_pDisplay, "WM_DELETE_WINDOW", False);

XSetWMProtocols(m_pDisplay, m_Window, &m_aWmDeleteWindow, 1);

XFlush(m_pDisplay);

//XSizeHints hints;

//long supplied_return;

//Atom property;

//XGetWMSizeHints(m_pDisplay, m_Window, &hints, &supplied_return, property);

m_glxContext = glXCreateContext(m_pDisplay, m_pXVisualInfo, NULL, True);

if(!m_glxContext)

{

return E_FAIL;

}

char data[] = {0};

Pixmap blank;

XColor dummy;

Cursor cursor;

blank = XCreateBitmapFromData(m_pDisplay, m_Window, data, 1, 1);

cursor = XCreatePixmapCursor(m_pDisplay, blank, blank, &dummy, &dummy, 0, 0);

XFreePixmap(m_pDisplay, blank);

XDefineCursor(m_pDisplay, m_Window, cursor);

glXMakeCurrent(m_pDisplay, m_Window, m_glxContext);

glViewport(0, 0, m_dwAppWidth, m_dwAppHeight);

ну вот, получается что окошко я делаю на весь экран, но оно разворачивается не на весь. какой код надо добавить чтобы на весь эран развернуться? вразумительного мануала я не нашел пока

anonymous
()

Посмотри, например, в сырцах wmctrl. Для NetWM-совместимых WM должно быть
что-то вроде:

XEvent event;
long mask = SubstructureRedirectMask | SubstructureNotifyMask;

event.xclient.type = ClientMessage;
event.xclient.serial = 0;
event.xclient.send_event = True;
event.xclient.message_type = XInternAtom(m_pDisplay, "_NET_WM_STATE", False);
event.xclient.window = m_Window;
event.xclient.format = 32;
event.xclient.data.l[0] = _NET_WM_STATE_TOGGLE;
event.xclient.data.l[1] = XInternAtom(m_pDisplay, "_NET_WM_STATE_FULLSCREEN", False);
event.xclient.data.l[2] = 0;
event.xclient.data.l[3] = 0;
event.xclient.data.l[4] = 0;

XSendEvent(m_pDisplay, DefaultRootWindow(m_pDisplay), False, mask, &event);

anonymous
()

почитал, но что то не понятно.

пример тоже не помогает.

все таки, как сделать opengl x окно полноэкранным

anonymous
()
Ответ на: комментарий от Die-Hard

Atom atomMotifHints = None; struct { int flags; int functions; int decorations; int input_mode; } hints;

atomMotifHints = XInternAtom(m_pDisplay, "_MOTIF_WM_HINTS", 0); if(atomMotifHints != None) { hints.flags = 2; hints.decorations = 0; XChangeProperty(m_pDisplay, m_Window, atomMotifHints, atomMotifHints, 32, PropModeReplace, (unsigned char*)&hints, 4); }

copyright frustum.org

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

твое решение зависит от Windows Managera, как он эти
_MOTIF_WM_HINTS hints.decorations отрабатывает.
кoгда-то смотрел как это делается в KDE -
там это равнозначно OverrideRedirect

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

а как тогда сделать портируемо для всех вм? на чисто иксовом коде?

anonymous
()
Ответ на: комментарий от Valeriy_Onuchin

(не автор)

QT делает через атом мотифа.
2Valeriy_Onuchin: как это сделать через OverrideRedirect?
это же только флаг в конфигурации окна, обозначающий, будет ли вм посылать события окну.
например, без установки этого флага окно не получит от вм-а декораций и не получит сигнала о попытке пользователя закрыть окно.

в указанной вами ссылки к сожалению не хватило, что бы внести ясность и понять предложенный вами метод.

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