// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*- /* * Copyright (C) 2013 Canonical Ltd * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License version 3 as * published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authored by: Marco Trevisan */ #ifndef UNITY_COMPIZ_UTILS #define UNITY_COMPIZ_UTILS #include #include #include namespace unity { namespace compiz_utils { struct TextureQuad { CompRect box; GLTexture::Matrix matrix; }; struct SimpleTexture { typedef std::shared_ptr Ptr; SimpleTexture() = default; SimpleTexture(GLTexture::List const&); virtual ~SimpleTexture() = default; GLTexture::List const& texture_list() const { return texture_; } GLTexture* texture() const { return texture_.empty() ? nullptr : texture_[0]; } int width() const { return texture_.empty() ? 0 : texture_[0]->width(); } int height() const { return texture_.empty() ? 0 : texture_[0]->height(); } operator GLTexture*() const { return texture(); } operator GLTexture::List() const { return texture_; } protected: GLTexture::List texture_; }; struct SimpleTextureQuad { SimpleTextureQuad(); bool SetTexture(SimpleTexture::Ptr const&); bool SetScale(float scale); bool SetCoords(int x, int y); bool SetX(int x); bool SetY(int y); operator SimpleTexture::Ptr() const { return st; } operator bool() const { return st && st->texture(); } operator GLTexture*() const { return st ? st->texture() : nullptr; } operator GLTexture::List() const { return st ? st->texture_list() : GLTexture::List(); } SimpleTexture::Ptr st; TextureQuad quad; private: void UpdateMatrix(); float scale; }; struct PixmapTexture : SimpleTexture { typedef std::shared_ptr Ptr; PixmapTexture(int width, int height); ~PixmapTexture(); Pixmap pixmap() const { return pixmap_; } private: Pixmap pixmap_; }; struct CairoContext { CairoContext(int width, int height, double scale = 1.0f); ~CairoContext(); int width() const; int height() const; PixmapTexture::Ptr const& texture() const { return pixmap_texture_; } cairo_t* context() const { return cr_; } operator cairo_t*() const { return cr_; } operator PixmapTexture::Ptr() const { return pixmap_texture_; } operator SimpleTexture::Ptr() const { return pixmap_texture_; } private: PixmapTexture::Ptr pixmap_texture_; cairo_surface_t* surface_; cairo_t *cr_; }; bool IsWindowShadowDecorable(CompWindow*); bool IsWindowFullyDecorable(CompWindow*); bool WindowHasMotifDecorations(CompWindow*); } // compiz_utils namespace } // unity namespace std::ostream& operator<<(std::ostream &os, CompRect const& r); #endif // UNITY_COMPIZ_UTILS