00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef _ugraph_hpp_
00022 #define _ugraph_hpp_
00023 #include <ubit/uappli.hpp>
00024 #include <ubit/ufontMetrics.hpp>
00025
00026 namespace ubit {
00027
00028
00031 class UGraph {
00032 public:
00033 virtual ~UGraph();
00034
00035 UGraph(UView&);
00036 UGraph(UMouseEvent&);
00037 UGraph(UPaintEvent&);
00066 UGraph(UHardWinImpl&);
00068
00069
00070
00071 UView* getView() const {return boxview;}
00073
00074 UDisp* getDisp() const;
00076
00077 void flush();
00079
00080
00081
00082 void setPaintMode();
00083 void setXORMode(const UColor& background_color);
00084 bool isXORMode() const;
00090 void setColor(const UColor&);
00092
00093 void setBackground(const UColor&);
00098 bool hasAlpha() const;
00104 float getAlpha() const {return alpha;}
00105 void setAlpha(float a);
00112 void setFont(const UFont&);
00113 void setFont(const UFontDesc&);
00115
00116 UFontMetrics getFontMetrics(const UFont&);
00117 UFontMetrics getFontMetrics(const UFontDesc&);
00122 float getWidth() const;
00123 void setWidth(float);
00129
00130
00131 void clearRect(float x, float y, float width, float height, bool paint = false);
00138 void clearView(bool paint = false);
00140
00141 void copyArea(int x, int y, int width, int height,
00142 int delta_x, int delta_y, bool paint_events_when_obscured);
00152
00153
00154 void draw(const UShape&);
00156
00157 void drawArc(float x, float y, float width, float height, float start_ang, float ext_ang);
00164 void drawIma(const UIma&, float x, float y, float scale = 1.);
00166
00167 void drawLine(float x1, float y1, float x2, float y2);
00169
00170 void drawPolyline(float xpoints[], float ypoints[], int card);
00171 void drawPolyline(std::vector<float> xpoints, std::vector<float> ypoints, int card);
00173
00174 void drawPolygon(float xpoints[], float ypoints[], int card);
00175 void drawPolygon(std::vector<float> xpoints, std::vector<float> ypoints, int card);
00177
00178 void drawOval(float x, float y, float width, float height);
00183 void drawRect(float x, float y, float width, float height);
00185
00186 void drawRoundRect(float x, float y, float width, float height,
00187 float arc_w, float arc_h);
00192 void drawString(const UStr& string, float x, float y);
00193 void drawString(const char* string, int length, float x, float y);
00198
00199
00200 void fillArc(float x, float y, float width, float height, float start_ang, float ext_ang);
00205 void fillOval(float x, float y, float width, float height);
00210 void fillPolygon(float xpoints[], float ypoints[], int card);
00211 void fillPolygon(std::vector<float> xpoints, std::vector<float> ypoints, int card);
00216 void fillRect(float x, float y, float width, float height);
00223 void fillRoundRect(float x, float y, float width, float height,
00224 float arc_w, float arc_h);
00229 void fillView();
00231
00232
00233
00234 int XToXwin(int x_in_view);
00235 int YToYwin(int y_in_view);
00237
00238 int XwinToX(int x_in_win);
00239 int YwintoY(int y_in_win);
00241
00242 void setClip(const URegion&);
00243 void setClip(int x, int y, int width, int height);
00245
00246 void setWinClip(const URegion&);
00247 void setWinClip(int x, int y, int width, int height);
00249
00250 void getWinClip(URegion&);
00252
00253 void getWinOffset(int& x, int& y);
00254 void setWinOffset(int x, int y);
00255
00256
00257
00258 UHardWinImpl* getHardWinImpl() const {return win;}
00259 UNatGraph* getNatGraph() const {return natgraph;}
00260 UNatDisp* getNatDisp() const;
00261 UNatWin* getNatWin() const;
00268 bool isUsing3d() const {return is_3d;}
00269
00270 void drawNatIma(const UNatIma&, float x, float y);
00271 void drawNatPix(const UNatPix&, float x, float y);
00273
00274 void drawNatGLIma(const UNatIma&, float x, float y, float scale = 1.);
00276
00277
00278 #ifndef NO_DOC
00279 template<class TAB> void DrawPoly(TAB xpoints, TAB ypoints, int card, int polytype);
00280
00281 private:
00282 friend class UGraphElem;
00283 friend class UFontMetrics;
00284 friend class UFrameView3d;
00285 UGraph(UGraph&);
00286 UGraph& operator=(const UGraph&);
00287
00288 protected:
00289 enum {OPAQUE, UNIFORM_BLEND, PSEUDO_BLEND, TRUE_BLEND};
00290 char blend_mode;
00291 bool is_3d;
00292 float alpha;
00293 UView* boxview;
00294 UHardWinImpl* win;
00295 UNatGraph* natgraph;
00296 struct UGraphElem* gelem;
00297
00298 void constructs(UView&, UGraph*);
00300
00301 void drawTexture(UGraphElem*, const UNatIma&, float x,float y,float w,float h);
00303
00304 void blendLayers(UGraphElem* layer1, UGraphElem* layer2);
00306
00307 enum GType {NONE, WIN, CLIENT, CHILDWIN, DOUBLEBUF, BLEND};
00308 void push(int gtype, UNatWin* dest, const URegion& clip, int xwin, int ywin);
00309 void push(int gtype, bool alloc, const URegion&);
00310 void pop();
00311 void popAll();
00312 UNatWin* allocBuffer(int width, int height);
00313 void releaseBuffer(UNatWin* buffer);
00314
00315 public:
00316 void begin(const URegion& clip, bool xdoublebuf);
00317 void beginChildwin(const URegion& clip, int xwin, int ywin);
00318 void beginDoublebuf(const URegion& clip);
00319 void beginSubwin(const URegion& clip, int xwin, int ywin);
00320 void end();
00326 void beginBlend(const URegion& clip, float alpha);
00327 void endBlend();
00331 void blendColor(const URegion& clip, float alpha);
00337 void setClipImpl(const URegion&);
00338 void setClipImpl(int x, int y, int width, int height);
00339 #endif
00340 };
00341
00342 }
00343 #endif
00344
00345