Eine aufbereitete Darstellung der Quelle

 
     
 
 
Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

Quelle  gtk_compat.h   Sprache: C

 

/*****************************************************************************
 * Copyright (C) 2022 VLC authors and VideoLAN
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * ( at your option ) any later version.
 *
 * 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, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
 *****************************************************************************/


#ifndef GTK_COMPAT_H
#define GTK_COMPAT_H


#ifdef HAVE_CONFIG_H
# include "config.h"
#endif

#include <vlc_common.h>
#include <vlc_picture.h>

#include <algorithm>

#include <gtk/gtk.h>

class VLCPicturePtr
{
public:
    VLCPicturePtr()
    {
    }

    VLCPicturePtr(vlc_fourcc_t i_chroma, int i_width, int i_height)
    {
        m_picture = picture_New(i_chroma, i_width, i_height, 1, 1);
    }

    VLCPicturePtr(const VLCPicturePtr& o)
        : m_picture(o.m_picture)
    {
        Ref();
    }

    VLCPicturePtr(VLCPicturePtr&& o)
        : m_picture(o.m_picture)
    {
        o.m_picture = nullptr;
    }

    VLCPicturePtr& operator=(const VLCPicturePtr& o)
    {
        Unref();
        m_picture = o.m_picture;
        Ref();
        return *this;
    }

    VLCPicturePtr& operator=(VLCPicturePtr&& o)
    {
        Unref();
        m_picture = o.m_picture;
        o.m_picture = nullptr;
        return *this;
    }

    ~VLCPicturePtr()
    {
        Unref();
    }

    picture_t* get() const
    {
        return m_picture;
    }

private:
    void Ref() {
        if (m_picture) {
            picture_Hold(m_picture);
        }
    }

    // This function is necessary so that gtk can overload it in
    // the case of T = GtkStyleContext.
    void Unref() {
        if (m_picture)
            picture_Release(m_picture);
    }

    picture_t* m_picture = nullptr;
};


namespace gtk {

//Basic geometry types

gdouble GdkRBGALightness(GdkRGBA& c1);


GdkRGBA GdkRBGABlend(GdkRGBA& c1, GdkRGBA& c2, gdouble blend);

class MySize {
public:
    MySize()
    {}

    MySize(int w, int h)
        : m_width(std::max(w, 0))
        , m_height(std::max(h, 0))
    {}

    MySize(const MySize&) = default;
    MySize(MySize&&) = default;
    MySize& operator=(const MySize&) = default;
    MySize& operator=(MySize&&) = default;

    inline bool IsEmpty() const { return !m_width  || !m_height ; }

    inline int width() const { return m_width; }
    inline int height() const { return m_height; }

    inline void set_width(int width) {
        m_width = std::max(width, 0);
    }

    inline void set_height(int height) {
        m_height = std::max(height, 0);
    }


private:
    int m_width = 0;
    int m_height = 0;
};


class MyPoint {
public:
    MyPoint(int w, int h)
        : x(w)
        , y(h)
    {}

    MyPoint(const MyPoint&) = default;
    MyPoint(MyPoint&&) = default;
    MyPoint& operator=(const MyPoint&) = default;
    MyPoint& operator=(MyPoint&&) = default;

    int x = -1;
    int y = -1;
};

class MyInset {
public:
    MyInset() {}

    MyInset(int l,int r,int t,int b)
        : m_top(t)
        , m_bottom(b)
        , m_left(l)
        , m_right(r)
    {}

    MyInset(const GtkBorder& border)
        : m_top (border.top)
        , m_bottom (border.bottom)
        , m_left (border.left)
        , m_right (border.right)
    {
    }

    MyInset(const MyInset&) = default;
    MyInset(MyInset&&) = default;
    MyInset& operator=(const MyInset&) = default;
    MyInset& operator=(MyInset&&) = default;

    inline int right() const { return m_right;  }
    inline int left() const { return m_left;  }
    inline int bottom() const { return m_bottom;  }
    inline int top() const { return m_top;  }
    int width() const { return m_left + m_right; }
    int height() const { return m_top + m_bottom; }



    MyInset operator-() const {
      return MyInset(-m_left, -m_right, -m_top, -m_bottom);
    }


private:
    int m_top = -1;
    int m_bottom = -1;
    int m_left = -1;
    int m_right = -1;
};

class MyRect {
public:
    MyRect() {}

    MyRect(const MySize& s)
        : m_top(0)
        , m_left(0)
        , m_size(s)
    {}

    MyRect(const MyPoint& p, const MySize& s)
        : m_top(p.y)
        , m_left(p.x)
        , m_size(s)
    {}

    MyRect(const MyRect&) = default;
    MyRect(MyRect&&) = default;
    MyRect& operator=(const MyRect&) = default;
    MyRect& operator=(MyRect&&) = default;

    inline void Inset(const MyInset& i)
    {
        m_top += i.top();
        m_left += i.left();
        set_width(m_size.width() - i.width());
        set_height(m_size.height() - i.height());
    }


    inline int top() const { return m_top; };
    inline int left() const { return m_left; };
    inline int width() const { return m_size.width(); };
    inline int height() const { return m_size.height(); };

    inline void set_width(int width) {
        m_size.set_width(width);
    }

    inline void set_height(int height) {
        m_size.set_height(height);
    }

    MySize size() const { return m_size; }

private:
    int m_top= 0;
    int m_left = 0;
    MySize m_size;
};


MyInset GtkStyleContextGetPadding(GtkStyleContext* context);
MyInset GtkStyleContextGetBorder(GtkStyleContext* context);
MyInset GtkStyleContextGetMargin(GtkStyleContext* context);

};


#endif // GTK_COMPAT_H

Messung
CHZG
9110010096

¤ Dauer der Verarbeitung: 0.1 Sekunden  (vorverarbeitet am  2026-11-04) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover


Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Open Source Software

     Quellcodebibliothek
     Eigene Quellcodes
     Fremde Quellcodes
     Suchen

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Statistik
#Sources=1104857
#Domains=438683