File indexing completed on 2024-04-28 05:32:09
0001 #ifndef oxygencairopattern_h 0002 #define oxygencairopattern_h 0003 /* 0004 * this file is part of the oxygen gtk engine 0005 * SPDX-FileCopyrightText: 2010 Hugo Pereira Da Costa <hugo.pereira@free.fr> 0006 * 0007 * SPDX-License-Identifier: LGPL-2.0-or-later 0008 */ 0009 0010 #include <cairo.h> 0011 #include <cassert> 0012 0013 namespace Oxygen 0014 { 0015 namespace Cairo 0016 { 0017 0018 //! wrapper class around cairo_pattern_t structure 0019 class Pattern 0020 { 0021 public: 0022 0023 //! empty constructor is private 0024 Pattern( void ): 0025 _pattern( 0L ) 0026 {} 0027 0028 //! constructor 0029 Pattern( cairo_pattern_t* pattern ): 0030 _pattern( pattern ) 0031 {} 0032 0033 //! destructor 0034 virtual ~Pattern( void ) 0035 { free(); } 0036 0037 0038 //! copy constructor is private 0039 Pattern( const Pattern& other ): 0040 _pattern( other._pattern ) 0041 { if( _pattern ) cairo_pattern_reference( _pattern ); } 0042 0043 //! equal to operator is private 0044 Pattern& operator = (const Pattern& other ) 0045 { 0046 cairo_pattern_t* old( _pattern ); 0047 _pattern = other._pattern; 0048 if( _pattern ) cairo_pattern_reference( _pattern ); 0049 if( old ) cairo_pattern_destroy( old ); 0050 return *this; 0051 } 0052 0053 //! set pattern 0054 void set( cairo_pattern_t* pattern ) 0055 { 0056 assert( !_pattern ); 0057 _pattern = pattern; 0058 } 0059 0060 //! free the pattern 0061 /*! 0062 it should not be necessary to call this method 0063 since it is already handled in destructor 0064 */ 0065 void free( void ) 0066 { 0067 if( _pattern ) 0068 { 0069 cairo_pattern_destroy( _pattern ); 0070 _pattern = 0L; 0071 } 0072 } 0073 0074 //! cast to cairo_pattern_t 0075 operator cairo_pattern_t* (void) const 0076 { return _pattern; } 0077 0078 private: 0079 0080 //! pattern 0081 cairo_pattern_t* _pattern; 0082 0083 0084 }; 0085 0086 } 0087 } 0088 #endif