File: FXIcon.h

package info (click to toggle)
gogglesmm 1.2.5-6
  • links: PTS
  • area: main
  • in suites: forky, sid
  • size: 16,812 kB
  • sloc: cpp: 231,960; ansic: 893; xml: 222; makefile: 33
file content (131 lines) | stat: -rw-r--r-- 5,235 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
/********************************************************************************
*                                                                               *
*                               I c o n - O b j e c t                           *
*                                                                               *
*********************************************************************************
* Copyright (C) 1997,2022 by Jeroen van der Zijp.   All Rights Reserved.        *
*********************************************************************************
* This library is free software; you can redistribute it and/or modify          *
* it under the terms of the GNU Lesser General Public License as published by   *
* the Free Software Foundation; either version 3 of the License, or             *
* (at your option) any later version.                                           *
*                                                                               *
* This library 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 Lesser General Public License for more details.                           *
*                                                                               *
* You should have received a copy of the GNU Lesser General Public License      *
* along with this program.  If not, see <http://www.gnu.org/licenses/>          *
********************************************************************************/
#ifndef FXICON_H
#define FXICON_H

#ifndef FXIMAGE_H
#include "FXImage.h"
#endif

namespace FX {

class FXDC;
class FXDCWindow;
class FXDrawable;
class FXTopWindow;


/**
* An Icon is an image with two additional server-side resources: a shape
* bitmap, which is used to mask those pixels where the background should
* be preserved during the drawing, and a etch bitmap, which is used to
* draw the icon when it is disabled.
*/
class FXAPI FXIcon : public FXImage {
  FXDECLARE(FXIcon)
  friend class FXDC;
  friend class FXWindow;
  friend class FXDCWindow;
  friend class FXDrawable;
  friend class FXTopWindow;
protected:
  FXID     shape;             // Shape pixmap
  FXID     etch;              // Etch pixmap
  FXColor  transp;            // Transparency color
  FXshort  thresh;            // Treshold for etch mask
protected:
  FXIcon();
  FXColor guesstransp() const;
  FXshort guessthresh() const;
private:
  FXIcon(const FXIcon&);
  FXIcon &operator=(const FXIcon&);
public:

  /**
  * Create an icon with an initial pixel buffer pix, a transparent color clr,
  * and options as in FXImage.  The transparent color is used to determine which
  * pixel values are transparent, i.e. need to be masked out in the absence of
  * a true alpha channel.
  * If the flag IMAGE_OPAQUE is passed, the shape and etch bitmaps are generated
  * as if the image is fully opaque, even if it has an alpha channel or transparancy
  * color.  The flag IMAGE_ALPHACOLOR is used to force a specific alpha color instead
  * of the alpha channel obtained from the image file.
  * Specifying IMAGE_ALPHAGUESS causes Icon to obtain the alpha color from the background
  * color of the image; it has the same effect as IMAGE_ALPHACOLOR in the sense that
  * the icon will be transparent for those colors matching the alpha color.
  */
  FXIcon(FXApp* a,const FXColor *pix=nullptr,FXColor clr=0,FXuint opts=0,FXint w=1,FXint h=1);

  /**
  * Create the server side pixmap, the shape bitmap, and the etch bitmap, then
  * call render() to fill it with the pixel data from the client-side buffer.  After
  * the server-side pixmap and bitmaps have been created, the client-side pixel
  * buffer will be deleted unless IMAGE_KEEP has been specified. If the pixel buffer
  * is not owned, i.e. the flag IMAGE_OWNED is not set, the pixel buffer will not
  * be deleted; however the pixel buffer will be set to NULL.
  */
  virtual void create();

  /**
  * Detach the server side pixmap, shape bitmap, and etch bitmap from the Icon.
  * Afterwards, the Icon is left as if it never had a server-side resources.
  */
  virtual void detach();

  /**
  * Destroy the server-side pixmap and the shape bitmap and etch bitmap.
  * The client-side pixel buffer is not affected.
  */
  virtual void destroy();

  /**
  * Render the server-side pixmap, shape bitmap and etch bitmap for the icon
  * from the client-side pixel buffer.
  */
  virtual void render();

  /**
  * Resize both client-side and server-side representations (if any) to the
  * given width and height.  The new representations typically contain garbage
  * after this operation and need to be re-filled.
  */
  virtual void resize(FXint w,FXint h);

  /// Get transparency color
  FXColor getTransparentColor() const { return transp; }

  /// Change transparency color
  void setTransparentColor(FXColor color){ transp=color; }

  /// Get threshold value
  FXshort getThresholdValue() const { return thresh; }

  /// Change threshold value
  void setThresholdValue(FXshort value){ thresh=value; }

  /// Destructor
  virtual ~FXIcon();
  };

}

#endif