2002-05-16 15:50:41 +00:00
|
|
|
// XScreen.cc for Openbox
|
|
|
|
// Copyright (c) 2002 - 2002 Ben Janens (ben at orodu.net)
|
|
|
|
//
|
|
|
|
// Permission is hereby granted, free of charge, to any person obtaining a
|
|
|
|
// copy of this software and associated documentation files (the "Software"),
|
|
|
|
// to deal in the Software without restriction, including without limitation
|
|
|
|
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
|
|
// and/or sell copies of the Software, and to permit persons to whom the
|
|
|
|
// Software is furnished to do so, subject to the following conditions:
|
|
|
|
//
|
|
|
|
// The above copyright notice and this permission notice shall be included in
|
|
|
|
// all copies or substantial portions of the Software.
|
|
|
|
//
|
|
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
|
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
|
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
|
|
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
|
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
|
|
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|
|
|
// DEALINGS IN THE SOFTWARE.
|
|
|
|
|
2002-05-16 18:39:03 +00:00
|
|
|
#include <X11/Xutil.h>
|
2002-05-16 15:50:41 +00:00
|
|
|
#include "XScreen.h"
|
2002-05-16 18:39:03 +00:00
|
|
|
#include "XDisplay.h"
|
2002-05-16 15:50:41 +00:00
|
|
|
#include "Geometry.h"
|
|
|
|
|
2002-05-16 18:39:03 +00:00
|
|
|
XScreen::XScreen(const XDisplay *display, const unsigned int number) {
|
|
|
|
_display = display->_display;
|
2002-05-16 15:50:41 +00:00
|
|
|
_number = number;
|
|
|
|
|
|
|
|
_root = RootWindow(_display, _number);
|
|
|
|
_size = Size(WidthOfScreen(ScreenOfDisplay(_display, _number)),
|
|
|
|
HeightOfScreen(ScreenOfDisplay(_display, _number)));
|
|
|
|
setColorData();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2002-05-16 18:39:03 +00:00
|
|
|
XScreen::~XScreen() {
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2002-05-16 15:50:41 +00:00
|
|
|
/*
|
|
|
|
* This sets up the _depth, _visual, and _colormap properties.
|
|
|
|
*/
|
|
|
|
void XScreen::setColorData() {
|
|
|
|
_depth = DefaultDepth(_display, _number);
|
|
|
|
_visual = (Visual *) 0;
|
|
|
|
|
|
|
|
// search for a TrueColor Visual. If we can't find one, use the default
|
|
|
|
// visual for the screen
|
|
|
|
XVisualInfo vinfo_template, *vinfo_return;
|
|
|
|
int vinfo_nitems;
|
|
|
|
|
|
|
|
vinfo_template.screen = _number;
|
|
|
|
vinfo_template.c_class = TrueColor;
|
|
|
|
|
|
|
|
vinfo_return = XGetVisualInfo(_display, VisualScreenMask | VisualClassMask,
|
|
|
|
&vinfo_template, &vinfo_nitems);
|
|
|
|
if (vinfo_return && vinfo_nitems > 0) {
|
|
|
|
for (int i = 0; i < vinfo_nitems; i++)
|
|
|
|
if (_depth < (vinfo_return + i)->depth) {
|
|
|
|
_depth = (vinfo_return + i)->depth;
|
|
|
|
_visual = (vinfo_return + i)->visual;
|
|
|
|
}
|
|
|
|
XFree(vinfo_return);
|
|
|
|
}
|
2002-05-16 18:39:03 +00:00
|
|
|
if (_visual)
|
2002-05-16 15:50:41 +00:00
|
|
|
_colormap = XCreateColormap(_display, _root, _visual, AllocNone);
|
|
|
|
else {
|
|
|
|
_visual = DefaultVisual(_display, _number);
|
|
|
|
_colormap = DefaultColormap(_display, _number);
|
|
|
|
}
|
|
|
|
}
|
2002-05-17 02:49:26 +00:00
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Creates a window on screen.
|
|
|
|
*/
|
|
|
|
Window createWindow(Window parent, const Rect &area, int borderw,
|
|
|
|
unsigned int winclass, unsigned long attrib_mask,
|
|
|
|
XSetWindowAttributes *attrib) const {
|
|
|
|
return XCreateWindow(_display, parent,
|
|
|
|
area.x(), area.y(), area.w(), area.h(),
|
|
|
|
borderw, depth(), winclass, visual(),
|
|
|
|
attrib_mask, attrib);
|
|
|
|
}
|