//
// Copyright 2015 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//

// X11Pixmap.cpp: Implementation of OSPixmap for X11

#include "util/x11/X11Pixmap.h"

X11Pixmap::X11Pixmap() : mPixmap(0), mDisplay(nullptr) {}

X11Pixmap::~X11Pixmap()
{
    if (mPixmap)
    {
        XFreePixmap(mDisplay, mPixmap);
    }
}

bool X11Pixmap::initialize(EGLNativeDisplayType display, size_t width, size_t height, int depth)
{
    mDisplay = display;

    int screen  = DefaultScreen(mDisplay);
    Window root = RootWindow(mDisplay, screen);

    mPixmap = XCreatePixmap(mDisplay, root, static_cast<unsigned int>(width),
                            static_cast<unsigned int>(height), depth);

    return mPixmap != 0;
}

EGLNativePixmapType X11Pixmap::getNativePixmap() const
{
    return mPixmap;
}

OSPixmap *CreateOSPixmap()
{
    return new X11Pixmap();
}
