File: FXVisual.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 (187 lines) | stat: -rw-r--r-- 6,330 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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
/********************************************************************************
*                                                                               *
*                            V i s u a l   C l a s s                            *
*                                                                               *
*********************************************************************************
* Copyright (C) 1999,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 FXVISUAL_H
#define FXVISUAL_H

#ifndef FXID_H
#include "FXId.h"
#endif

namespace FX {


class FXWindow;
class FXGLContext;
class FXGLCanvas;
class FXImage;
class FXIcon;
class FXBitmap;
class FXDCWindow;


/// Construction options for FXVisual class
enum {
  VISUAL_DEFAULT       = 0,     /// Default visual
  VISUAL_MONO          = 1,     /// Must be monochrome visual
  VISUAL_GRAY          = 2,     /// Gray scale visual
  VISUAL_INDEX         = 4,     /// Palette visual
  VISUAL_COLOR         = 8,     /// Must be true color visual
  VISUAL_BEST          = 16,    /// Best (deepest) visual
  VISUAL_FORCE         = 32,    /// Force given visual id (X11)
  VISUAL_OWN_COLORMAP  = 64,    /// Allocate private colormap
  VISUAL_DOUBLE_BUFFER = 128,   /// Double buffered [GL Visual]
  VISUAL_STEREO        = 256,   /// Stereo buffered [GL Visual]
  VISUAL_NO_ACCEL      = 512,   /// No hardware acceleration [GL Visual]
  VISUAL_SWAP_COPY     = 1024   /// Buffer swap by copying [GL Visual]
  };


/// Visual describes pixel format of a drawable
class FXAPI FXVisual : public FXId {
  FXDECLARE(FXVisual)
  friend class FXApp;
  friend class FXWindow;
  friend class FXImage;
  friend class FXIcon;
  friend class FXBitmap;
  friend class FXDCWindow;
  friend class FXGLCanvas;
  friend class FXGLContext;
protected:
  void         *visual;                 // Application visual/pixel format
  FXID          colormap;               // Color map, if any
  FXuint        maxcolors;              // Maximum number of colors
  FXuint        numcolors;              // Total number of colors
  FXuint        numred;                 // Number of reds
  FXuint        numgreen;               // Number of greens
  FXuint        numblue;                // Number of blues
  FXuint        depth;                  // Visual depth, significant bits/pixel
  FXuint        flags;                  // Visual flags
  FXuint        hint;                   // Hint value
  FXuchar       type;                   // Visual type
  FXbool        freemap;                // We allocated the map
#ifndef WIN32
protected:
  void         *scrollgc;               // Scrolling GC
  void         *gc;                     // Drawing GC
  FXPixel       rpix[16][256];          // Mapping from red -> pixel
  FXPixel       gpix[16][256];          // Mapping from green -> pixel
  FXPixel       bpix[16][256];          // Mapping from blue -> pixel
  FXPixel       lut[256];               // Color lookup table
protected:
  void setuptruecolor();
  void setupdirectcolor();
  void setuppseudocolor();
  void setupstaticcolor();
  void setupgrayscale();
  void setupstaticgray();
  void setuppixmapmono();
  void setupcolormap();
  void* setupgc(FXbool);
#endif
protected:
  FXVisual();
private:
  FXVisual(const FXVisual&);
  FXVisual &operator=(const FXVisual&);
public:

  /// Visual types
  enum {
    Unknown,    /// Undetermined visual type
    Mono,       /// Monochrome 1 bit/pixel
    Gray,       /// Gray scale color
    Index,      /// Index color
    Color       /// True color
    };

public:

  /// Construct visual
  FXVisual(FXApp* a,FXuint flgs=VISUAL_DEFAULT,FXuint hnt=32);

  /// Get visual type
  FXuchar getType() const { return type; }

  /// Get visual or pixel format
  void* getVisual() const { return visual; }

  /// Create visual
  virtual void create();

  /// Detach visual
  virtual void detach();

  /// Destroy visual
  virtual void destroy();

  /// Change option flags
  void setFlags(FXuint flgs){ flags=flgs; }

  /// Get option flags
  FXuint getFlags() const { return flags; }

  /// Change hints
  void setHint(FXuint hnt){ hint=hnt; }

  /// Get hints
  FXuint getHint() const { return hint; }

  /// Get depth, i.e. number of significant bits in color representation
  FXuint getDepth() const { return depth; }

  /// Get number of colors
  FXuint getNumColors() const { return numcolors; }

  /// Get number of reds
  FXuint getNumRed() const { return numred; }

  /// Get number of greens
  FXuint getNumGreen() const { return numgreen; }

  /// Get number of blues
  FXuint getNumBlue() const { return numblue; }

  /// Get device pixel value for color
  FXPixel getPixel(FXColor clr);

  /// Get color value for device pixel value
  FXColor getColor(FXPixel pix);

  /// Set maximum number of colors to allocate
  void setMaxColors(FXuint maxcols);

  /// Get maximum number of colors
  FXuint getMaxColors() const { return maxcolors; }

  /// Save visual information to a stream
  virtual void save(FXStream& store) const;

  /// Load visual information from a stream
  virtual void load(FXStream& store);

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

}

#endif