diff options
-rw-r--r-- | src/FbTk/TextureRender.cc | 130 |
1 files changed, 60 insertions, 70 deletions
diff --git a/src/FbTk/TextureRender.cc b/src/FbTk/TextureRender.cc index f1f1103..669f067 100644 --- a/src/FbTk/TextureRender.cc +++ b/src/FbTk/TextureRender.cc | |||
@@ -22,12 +22,14 @@ | |||
22 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | 22 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
23 | // DEALINGS IN THE SOFTWARE. | 23 | // DEALINGS IN THE SOFTWARE. |
24 | 24 | ||
25 | // $Id: TextureRender.cc,v 1.5 2003/10/02 16:14:41 rathnor Exp $ | 25 | // $Id: TextureRender.cc,v 1.6 2004/01/11 12:52:37 fluxgen Exp $ |
26 | 26 | ||
27 | #include "TextureRender.hh" | 27 | #include "TextureRender.hh" |
28 | 28 | ||
29 | #include "ImageControl.hh" | 29 | #include "ImageControl.hh" |
30 | #include "App.hh" | 30 | #include "App.hh" |
31 | #include "FbPixmap.hh" | ||
32 | #include "GContext.hh" | ||
31 | 33 | ||
32 | #include <iostream> | 34 | #include <iostream> |
33 | #include <string> | 35 | #include <string> |
@@ -114,94 +116,85 @@ Pixmap TextureRender::renderSolid(const FbTk::Texture &texture) { | |||
114 | 116 | ||
115 | Display *disp = FbTk::App::instance()->display(); | 117 | Display *disp = FbTk::App::instance()->display(); |
116 | 118 | ||
117 | Pixmap pixmap = XCreatePixmap(disp, | 119 | FbPixmap pixmap(RootWindow(disp, control.screenNum()), |
118 | RootWindow(disp, control.screenNum()), width, | 120 | width, height, |
119 | height, control.depth()); | 121 | control.depth()); |
120 | if (pixmap == None) { | 122 | |
123 | if (pixmap.drawable() == None) { | ||
121 | cerr<<"FbTk::TextureRender::render_solid(): error creating pixmap"<<endl; | 124 | cerr<<"FbTk::TextureRender::render_solid(): error creating pixmap"<<endl; |
122 | return None; | 125 | return None; |
123 | } | 126 | } |
124 | 127 | ||
125 | XGCValues gcv; | ||
126 | GC gc, hgc, lgc; | ||
127 | 128 | ||
128 | gcv.foreground = texture.color().pixel(); | 129 | FbTk::GContext gc(pixmap), |
129 | gcv.fill_style = FillSolid; | 130 | hgc(pixmap), lgc(pixmap); |
130 | gc = XCreateGC(disp, pixmap, GCForeground | GCFillStyle, &gcv); | ||
131 | 131 | ||
132 | gcv.foreground = texture.hiColor().pixel(); | 132 | gc.setForeground(texture.color()); |
133 | hgc = XCreateGC(disp, pixmap, GCForeground, &gcv); | 133 | gc.setFillStyle(FillSolid); |
134 | 134 | ||
135 | gcv.foreground = texture.loColor().pixel(); | 135 | hgc.setForeground(texture.hiColor()); |
136 | lgc = XCreateGC(disp, pixmap, GCForeground, &gcv); | ||
137 | 136 | ||
138 | XFillRectangle(disp, pixmap, gc, 0, 0, width, height); | 137 | pixmap.fillRectangle(gc.gc(), 0, 0, width, height); |
139 | 138 | ||
140 | using namespace FbTk; | 139 | using namespace FbTk; |
141 | 140 | ||
142 | if (texture.type() & Texture::INTERLACED) { | 141 | if (texture.type() & Texture::INTERLACED) { |
143 | gcv.foreground = texture.colorTo().pixel(); | 142 | lgc.setForeground(texture.colorTo()); |
144 | GC igc = XCreateGC(disp, pixmap, | ||
145 | GCForeground, &gcv); | ||
146 | |||
147 | register unsigned int i = 0; | 143 | register unsigned int i = 0; |
148 | for (; i < height; i += 2) | 144 | for (; i < height; i += 2) |
149 | XDrawLine(disp, pixmap, igc, 0, i, width, i); | 145 | pixmap.drawLine(lgc.gc(), 0, i, width, i); |
150 | 146 | ||
151 | XFreeGC(disp, igc); | ||
152 | } | 147 | } |
153 | 148 | ||
149 | lgc.setForeground(texture.loColor()); | ||
150 | |||
154 | if (texture.type() & Texture::BEVEL1) { | 151 | if (texture.type() & Texture::BEVEL1) { |
155 | if (texture.type() & Texture::RAISED) { | 152 | if (texture.type() & Texture::RAISED) { |
156 | XDrawLine(disp, pixmap, lgc, | 153 | pixmap.drawLine(lgc.gc(), |
157 | 0, height - 1, width - 1, height - 1); | 154 | 0, height - 1, width - 1, height - 1); |
158 | XDrawLine(disp, pixmap, lgc, | 155 | pixmap.drawLine(lgc.gc(), |
159 | width - 1, height - 1, width - 1, 0); | 156 | width - 1, height - 1, width - 1, 0); |
160 | 157 | ||
161 | XDrawLine(disp, pixmap, hgc, | 158 | pixmap.drawLine(hgc.gc(), |
162 | 0, 0, width - 1, 0); | 159 | 0, 0, width - 1, 0); |
163 | XDrawLine(disp, pixmap, hgc, | 160 | pixmap.drawLine(hgc.gc(), |
164 | 0, height - 1, 0, 0); | 161 | 0, height - 1, 0, 0); |
165 | } else if (texture.type() & Texture::SUNKEN) { | 162 | } else if (texture.type() & Texture::SUNKEN) { |
166 | XDrawLine(disp, pixmap, hgc, | 163 | pixmap.drawLine(hgc.gc(), |
167 | 0, height - 1, width - 1, height - 1); | 164 | 0, height - 1, width - 1, height - 1); |
168 | XDrawLine(disp, pixmap, hgc, | 165 | pixmap.drawLine(hgc.gc(), |
169 | width - 1, height - 1, width - 1, 0); | 166 | width - 1, height - 1, width - 1, 0); |
170 | 167 | ||
171 | XDrawLine(disp, pixmap, lgc, | 168 | pixmap.drawLine(lgc.gc(), |
172 | 0, 0, width - 1, 0); | 169 | 0, 0, width - 1, 0); |
173 | XDrawLine(disp, pixmap, lgc, | 170 | pixmap.drawLine(lgc.gc(), |
174 | 0, height - 1, 0, 0); | 171 | 0, height - 1, 0, 0); |
175 | } | 172 | } |
176 | } else if (texture.type() & Texture::BEVEL2) { | 173 | } else if (texture.type() & Texture::BEVEL2) { |
177 | if (texture.type() & Texture::RAISED) { | 174 | if (texture.type() & Texture::RAISED) { |
178 | XDrawLine(disp, pixmap, lgc, | 175 | pixmap.drawLine(lgc.gc(), |
179 | 1, height - 3, width - 3, height - 3); | 176 | 1, height - 3, width - 3, height - 3); |
180 | XDrawLine(disp, pixmap, lgc, | 177 | pixmap.drawLine(lgc.gc(), |
181 | width - 3, height - 3, width - 3, 1); | 178 | width - 3, height - 3, width - 3, 1); |
182 | 179 | ||
183 | XDrawLine(disp, pixmap, hgc, | 180 | pixmap.drawLine(hgc.gc(), |
184 | 1, 1, width - 3, 1); | 181 | 1, 1, width - 3, 1); |
185 | XDrawLine(disp, pixmap, hgc, | 182 | pixmap.drawLine(hgc.gc(), |
186 | 1, height - 3, 1, 1); | 183 | 1, height - 3, 1, 1); |
187 | } else if (texture.type() & Texture::SUNKEN) { | 184 | } else if (texture.type() & Texture::SUNKEN) { |
188 | XDrawLine(disp, pixmap, hgc, | 185 | pixmap.drawLine(hgc.gc(), |
189 | 1, height - 3, width - 3, height - 3); | 186 | 1, height - 3, width - 3, height - 3); |
190 | XDrawLine(disp, pixmap, hgc, | 187 | pixmap.drawLine(hgc.gc(), |
191 | width - 3, height - 3, width - 3, 1); | 188 | width - 3, height - 3, width - 3, 1); |
192 | 189 | ||
193 | XDrawLine(disp, pixmap, lgc, | 190 | pixmap.drawLine(lgc.gc(), |
194 | 1, 1, width - 3, 1); | 191 | 1, 1, width - 3, 1); |
195 | XDrawLine(disp, pixmap, lgc, | 192 | pixmap.drawLine(lgc.gc(), |
196 | 1, height - 3, 1, 1); | 193 | 1, height - 3, 1, 1); |
197 | } | 194 | } |
198 | } | 195 | } |
199 | 196 | ||
200 | XFreeGC(disp, gc); | 197 | return pixmap.release(); |
201 | XFreeGC(disp, hgc); | ||
202 | XFreeGC(disp, lgc); | ||
203 | |||
204 | return pixmap; | ||
205 | } | 198 | } |
206 | 199 | ||
207 | 200 | ||
@@ -666,11 +659,10 @@ return image; | |||
666 | 659 | ||
667 | Pixmap TextureRender::renderPixmap() { | 660 | Pixmap TextureRender::renderPixmap() { |
668 | Display *disp = FbTk::App::instance()->display(); | 661 | Display *disp = FbTk::App::instance()->display(); |
669 | Pixmap pixmap = | 662 | FbPixmap pixmap(RootWindow(disp, control.screenNum()), |
670 | XCreatePixmap(disp, | 663 | width, height, control.depth()); |
671 | RootWindow(disp, control.screenNum()), width, height, control.depth()); | ||
672 | 664 | ||
673 | if (pixmap == None) { | 665 | if (pixmap.drawable() == None) { |
674 | cerr<<"TextureRender::renderPixmap(): error creating pixmap"<<endl; | 666 | cerr<<"TextureRender::renderPixmap(): error creating pixmap"<<endl; |
675 | return None; | 667 | return None; |
676 | } | 668 | } |
@@ -678,15 +670,13 @@ Pixmap TextureRender::renderPixmap() { | |||
678 | XImage *image = renderXImage(); | 670 | XImage *image = renderXImage(); |
679 | 671 | ||
680 | if (! image) { | 672 | if (! image) { |
681 | XFreePixmap(disp, pixmap); | ||
682 | return None; | 673 | return None; |
683 | } else if (! image->data) { | 674 | } else if (! image->data) { |
684 | XDestroyImage(image); | 675 | XDestroyImage(image); |
685 | XFreePixmap(disp, pixmap); | ||
686 | return None; | 676 | return None; |
687 | } | 677 | } |
688 | 678 | ||
689 | XPutImage(disp, pixmap, | 679 | XPutImage(disp, pixmap.drawable(), |
690 | DefaultGC(disp, control.screenNum()), | 680 | DefaultGC(disp, control.screenNum()), |
691 | image, 0, 0, 0, 0, width, height); | 681 | image, 0, 0, 0, 0, width, height); |
692 | 682 | ||
@@ -697,7 +687,7 @@ Pixmap TextureRender::renderPixmap() { | |||
697 | 687 | ||
698 | XDestroyImage(image); | 688 | XDestroyImage(image); |
699 | 689 | ||
700 | return pixmap; | 690 | return pixmap.release(); |
701 | } | 691 | } |
702 | 692 | ||
703 | 693 | ||