当前位置: 首页>>代码示例>>C++>>正文


C++ Workspace::root方法代码示例

本文整理汇总了C++中Workspace::root方法的典型用法代码示例。如果您正苦于以下问题:C++ Workspace::root方法的具体用法?C++ Workspace::root怎么用?C++ Workspace::root使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Workspace的用法示例。


在下文中一共展示了Workspace::root方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: runResizeMode

void Kernel::runResizeMode(Thing *thing, XButtonEvent *buttonEvent,
                           Direction dir, bool resize)
{
    Window window = thing->window();
    if (!window) {
        return;
    }

    Monitor *monitor = thing->monitor();
    Window rootWindow = monitor->rootWindow();
    Thing::Type type = thing->type();
    Workspace *workspace = (type == Thing::CLIENT) ?
        ((Client *)thing)->attached() : ((Frame *)thing)->attached();

    if (!workspace) {
        return;
    }

    int origX, origY, lastX, lastY, newX, newY, dx, dy;
    Rectangle rect(*thing);

    XCORE->translateCoordinates(window, rootWindow,
                                 buttonEvent->x, buttonEvent->y,
                                 &lastX, &lastY);
    newX = newY = 0;
    origX = lastX;
    origY = lastY;

    XCORE->grabPointer(window,
                       ButtonMotionMask | ButtonReleaseMask,
                       buttonEvent->time);

    XEvent event;
    bool done = false, found = false, firstMotion = true;

    XCORE->grabServer();
    while (!done) {
        found = false;

        while (XCORE->checkMaskEvent(
                    ButtonReleaseMask | ButtonMotionMask, &event))
        {
            found = true;

            if (event.type != MotionNotify) {
                break;
            }
        }

        if (!found) {
            usleep(20000);
            continue;
        }

        switch (event.type) {
        case ButtonRelease:
            if (!firstMotion) {
                monitor->illuminateTransRect(&rect, thing->titleBarHeight());

                dx = newX - origX;
                dy = newY - origY;

                if ((dir == LEFT) || (dir == UP)) {
                    // normalization
                    dx *= -1;
                    dy *= -1;
                }

                if (type == Thing::FRAME) {
                    Split::resize(workspace->root(),
                                  ((Frame *)thing)->tree(),
                                  dir, dx, dy);
                }
                else {
                    thing->copy(&rect);
                    thing->resize();
                    thing->illuminate();
                }
                XCORE->sync();
            }
            XCORE->ungrabPointer(event.xbutton.time);
            XCORE->ungrabServer();
            done = true;
            break; // ButtonRelease
        case MotionNotify:
            XCORE->translateCoordinates(event.xmotion.window,
                    rootWindow, event.xmotion.x, event.xmotion.y,
                    &newX, &newY);

            dx = newX - lastX;
            dy = newY - lastY;

            lastX = newX;
            lastY = newY;

            if (firstMotion) {
                firstMotion = false;
            }
            else {
                monitor->illuminateTransRect(&rect, thing->titleBarHeight());
//.........这里部分代码省略.........
开发者ID:edmondas,项目名称:ncwm,代码行数:101,代码来源:kernel.cpp


注:本文中的Workspace::root方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。