mirror of
https://github.com/fltk/fltk.git
synced 2026-06-04 15:32:12 +08:00
Reorganized all integer line and polygon drawing functions
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3-porting@11016 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
This commit is contained in:
+52
-15
@@ -250,21 +250,21 @@ protected:
|
|||||||
/** \brief see fl_line_style(int style, int width, char* dashes). */
|
/** \brief see fl_line_style(int style, int width, char* dashes). */
|
||||||
virtual void line_style(int style, int width=0, char* dashes=0);
|
virtual void line_style(int style, int width=0, char* dashes=0);
|
||||||
/** \brief see fl_xyline(int x, int y, int x1). */
|
/** \brief see fl_xyline(int x, int y, int x1). */
|
||||||
virtual void xyline(int x, int y, int x1);
|
virtual void xyline(int x, int y, int x1) = 0;
|
||||||
/** \brief see fl_xyline(int x, int y, int x1, int y2). */
|
/** \brief see fl_xyline(int x, int y, int x1, int y2). */
|
||||||
virtual void xyline(int x, int y, int x1, int y2);
|
virtual void xyline(int x, int y, int x1, int y2) = 0;
|
||||||
/** \brief see fl_xyline(int x, int y, int x1, int y2, int x3). */
|
/** \brief see fl_xyline(int x, int y, int x1, int y2, int x3). */
|
||||||
virtual void xyline(int x, int y, int x1, int y2, int x3);
|
virtual void xyline(int x, int y, int x1, int y2, int x3) = 0;
|
||||||
/** \brief see fl_yxline(int x, int y, int y1). */
|
/** \brief see fl_yxline(int x, int y, int y1). */
|
||||||
virtual void yxline(int x, int y, int y1);
|
virtual void yxline(int x, int y, int y1) = 0;
|
||||||
/** \brief see fl_yxline(int x, int y, int y1, int x2). */
|
/** \brief see fl_yxline(int x, int y, int y1, int x2). */
|
||||||
virtual void yxline(int x, int y, int y1, int x2);
|
virtual void yxline(int x, int y, int y1, int x2) = 0;
|
||||||
/** \brief see fl_yxline(int x, int y, int y1, int x2, int y3). */
|
/** \brief see fl_yxline(int x, int y, int y1, int x2, int y3). */
|
||||||
virtual void yxline(int x, int y, int y1, int x2, int y3);
|
virtual void yxline(int x, int y, int y1, int x2, int y3) = 0;
|
||||||
/** \brief see fl_line(int x, int y, int x1, int y1). */
|
/** \brief see fl_line(int x, int y, int x1, int y1). */
|
||||||
virtual void line(int x, int y, int x1, int y1);
|
virtual void line(int x, int y, int x1, int y1) = 0;
|
||||||
/** \brief see fl_line(int x, int y, int x1, int y1, int x2, int y2). */
|
/** \brief see fl_line(int x, int y, int x1, int y1, int x2, int y2). */
|
||||||
virtual void line(int x, int y, int x1, int y1, int x2, int y2);
|
virtual void line(int x, int y, int x1, int y1, int x2, int y2) = 0;
|
||||||
/** \brief see fl_draw(const char *str, int n, int x, int y). */
|
/** \brief see fl_draw(const char *str, int n, int x, int y). */
|
||||||
virtual void draw(const char *str, int n, int x, int y) {}
|
virtual void draw(const char *str, int n, int x, int y) {}
|
||||||
#ifdef __APPLE__
|
#ifdef __APPLE__
|
||||||
@@ -287,13 +287,13 @@ protected:
|
|||||||
/** \brief see fl_point(int x, int y). */
|
/** \brief see fl_point(int x, int y). */
|
||||||
virtual void point(int x, int y) = 0;
|
virtual void point(int x, int y) = 0;
|
||||||
/** \brief see fl_loop(int x0, int y0, int x1, int y1, int x2, int y2). */
|
/** \brief see fl_loop(int x0, int y0, int x1, int y1, int x2, int y2). */
|
||||||
virtual void loop(int x0, int y0, int x1, int y1, int x2, int y2);
|
virtual void loop(int x0, int y0, int x1, int y1, int x2, int y2) = 0;
|
||||||
/** \brief see fl_loop(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3). */
|
/** \brief see fl_loop(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3). */
|
||||||
virtual void loop(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3);
|
virtual void loop(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3) = 0;
|
||||||
/** \brief see fl_polygon(int x0, int y0, int x1, int y1, int x2, int y2). */
|
/** \brief see fl_polygon(int x0, int y0, int x1, int y1, int x2, int y2). */
|
||||||
virtual void polygon(int x0, int y0, int x1, int y1, int x2, int y2);
|
virtual void polygon(int x0, int y0, int x1, int y1, int x2, int y2) = 0;
|
||||||
/** \brief see fl_polygon(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3). */
|
/** \brief see fl_polygon(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3). */
|
||||||
virtual void polygon(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3);
|
virtual void polygon(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3) = 0;
|
||||||
/** \brief see fl_begin_points(). */
|
/** \brief see fl_begin_points(). */
|
||||||
virtual void begin_points();
|
virtual void begin_points();
|
||||||
/** \brief see fl_begin_line(). */
|
/** \brief see fl_begin_line(). */
|
||||||
@@ -474,10 +474,22 @@ public:
|
|||||||
static Fl_Offscreen create_offscreen_with_alpha(int w, int h);
|
static Fl_Offscreen create_offscreen_with_alpha(int w, int h);
|
||||||
#endif
|
#endif
|
||||||
void copy_offscreen(int x, int y, int w, int h, Fl_Offscreen pixmap, int srcx, int srcy);
|
void copy_offscreen(int x, int y, int w, int h, Fl_Offscreen pixmap, int srcx, int srcy);
|
||||||
// --- recently moved implementations (see FL_PORTING efforts)
|
// --- implementation is in src/fl_rect.cxx which includes src/cfg_gfx/quartz_rect.cxx
|
||||||
void point(int x, int y);
|
void point(int x, int y);
|
||||||
void rect(int x, int y, int w, int h);
|
void rect(int x, int y, int w, int h);
|
||||||
void rectf(int x, int y, int w, int h);
|
void rectf(int x, int y, int w, int h);
|
||||||
|
void line(int x, int y, int x1, int y1);
|
||||||
|
void line(int x, int y, int x1, int y1, int x2, int y2);
|
||||||
|
void xyline(int x, int y, int x1);
|
||||||
|
void xyline(int x, int y, int x1, int y2);
|
||||||
|
void xyline(int x, int y, int x1, int y2, int x3);
|
||||||
|
void yxline(int x, int y, int y1);
|
||||||
|
void yxline(int x, int y, int y1, int x2);
|
||||||
|
void yxline(int x, int y, int y1, int x2, int y3);
|
||||||
|
void loop(int x0, int y0, int x1, int y1, int x2, int y2);
|
||||||
|
void loop(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3);
|
||||||
|
void polygon(int x0, int y0, int x1, int y1, int x2, int y2);
|
||||||
|
void polygon(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3);
|
||||||
};
|
};
|
||||||
|
|
||||||
// FIXME: add Fl_Quartz_Printer_Graphics_Driver
|
// FIXME: add Fl_Quartz_Printer_Graphics_Driver
|
||||||
@@ -515,10 +527,22 @@ public:
|
|||||||
void copy_offscreen_with_alpha(int x,int y,int w,int h,HBITMAP bitmap,int srcx,int srcy);
|
void copy_offscreen_with_alpha(int x,int y,int w,int h,HBITMAP bitmap,int srcx,int srcy);
|
||||||
#endif
|
#endif
|
||||||
void copy_offscreen(int x, int y, int w, int h, Fl_Offscreen pixmap, int srcx, int srcy);
|
void copy_offscreen(int x, int y, int w, int h, Fl_Offscreen pixmap, int srcx, int srcy);
|
||||||
// --- recently moved implementations (see FL_PORTING efforts)
|
// --- implementation is in src/fl_rect.cxx which includes src/cfg_gfx/gdi_rect.cxx
|
||||||
void point(int x, int y);
|
void point(int x, int y);
|
||||||
void rect(int x, int y, int w, int h);
|
void rect(int x, int y, int w, int h);
|
||||||
void rectf(int x, int y, int w, int h);
|
void rectf(int x, int y, int w, int h);
|
||||||
|
void line(int x, int y, int x1, int y1);
|
||||||
|
void line(int x, int y, int x1, int y1, int x2, int y2);
|
||||||
|
void xyline(int x, int y, int x1);
|
||||||
|
void xyline(int x, int y, int x1, int y2);
|
||||||
|
void xyline(int x, int y, int x1, int y2, int x3);
|
||||||
|
void yxline(int x, int y, int y1);
|
||||||
|
void yxline(int x, int y, int y1, int x2);
|
||||||
|
void yxline(int x, int y, int y1, int x2, int y3);
|
||||||
|
void loop(int x0, int y0, int x1, int y1, int x2, int y2);
|
||||||
|
void loop(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3);
|
||||||
|
void polygon(int x0, int y0, int x1, int y1, int x2, int y2);
|
||||||
|
void polygon(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -578,10 +602,22 @@ public:
|
|||||||
#if ! defined(FL_DOXYGEN)
|
#if ! defined(FL_DOXYGEN)
|
||||||
void copy_offscreen_with_alpha(int x, int y, int w, int h, Fl_Offscreen pixmap, int srcx, int srcy);
|
void copy_offscreen_with_alpha(int x, int y, int w, int h, Fl_Offscreen pixmap, int srcx, int srcy);
|
||||||
#endif
|
#endif
|
||||||
// --- recently moved implementations (see FL_PORTING efforts)
|
// --- implementation is in src/fl_rect.cxx which includes src/cfg_gfx/xlib_rect.cxx
|
||||||
void point(int x, int y);
|
void point(int x, int y);
|
||||||
void rect(int x, int y, int w, int h);
|
void rect(int x, int y, int w, int h);
|
||||||
void rectf(int x, int y, int w, int h);
|
void rectf(int x, int y, int w, int h);
|
||||||
|
void line(int x, int y, int x1, int y1);
|
||||||
|
void line(int x, int y, int x1, int y1, int x2, int y2);
|
||||||
|
void xyline(int x, int y, int x1);
|
||||||
|
void xyline(int x, int y, int x1, int y2);
|
||||||
|
void xyline(int x, int y, int x1, int y2, int x3);
|
||||||
|
void yxline(int x, int y, int y1);
|
||||||
|
void yxline(int x, int y, int y1, int x2);
|
||||||
|
void yxline(int x, int y, int y1, int x2, int y3);
|
||||||
|
void loop(int x0, int y0, int x1, int y1, int x2, int y2);
|
||||||
|
void loop(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3);
|
||||||
|
void polygon(int x0, int y0, int x1, int y1, int x2, int y2);
|
||||||
|
void polygon(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -637,6 +673,7 @@ public:
|
|||||||
There is no need to create any other object of this class.
|
There is no need to create any other object of this class.
|
||||||
*/
|
*/
|
||||||
class FL_EXPORT Fl_Display_Device : public Fl_Surface_Device {
|
class FL_EXPORT Fl_Display_Device : public Fl_Surface_Device {
|
||||||
|
friend class Fl_Quartz_Graphics_Driver;
|
||||||
static Fl_Display_Device *_display; // the platform display device
|
static Fl_Display_Device *_display; // the platform display device
|
||||||
#ifdef __APPLE__
|
#ifdef __APPLE__
|
||||||
friend class Fl_X;
|
friend class Fl_X;
|
||||||
|
|||||||
+60
-19
@@ -66,6 +66,32 @@ public:
|
|||||||
unsigned int c = (r<<24)|(g<<16)|(b<<8);
|
unsigned int c = (r<<24)|(g<<16)|(b<<8);
|
||||||
gl_color(c);
|
gl_color(c);
|
||||||
}
|
}
|
||||||
|
// --- implementation will eventually be in src/fl_rect.cxx which includes src/cfg_gfx/xlib_rect.cxx
|
||||||
|
// --- line and polygon drawing with integer coordinates
|
||||||
|
void point(int x, int y) {
|
||||||
|
glBegin(GL_POINTS);
|
||||||
|
glVertex2i(x, y);
|
||||||
|
glEnd();
|
||||||
|
}
|
||||||
|
void rect(int x, int y, int w, int h) {
|
||||||
|
glBegin(GL_LINE_LOOP);
|
||||||
|
glVertex2i(x, y);
|
||||||
|
glVertex2i(x+w, y);
|
||||||
|
glVertex2i(x+w, y+h);
|
||||||
|
glVertex2i(x, y+h);
|
||||||
|
glEnd();
|
||||||
|
}
|
||||||
|
void rectf(int x, int y, int w, int h) {
|
||||||
|
if (w<=0 || h<=0) return;
|
||||||
|
// OpenGL has the natural origin at the bottom left. Drawing in FLTK
|
||||||
|
// coordinates requires that we shift the rectangle one pixel up.
|
||||||
|
glBegin(GL_POLYGON);
|
||||||
|
glVertex2i(x, y-1);
|
||||||
|
glVertex2i(x+w, y-1);
|
||||||
|
glVertex2i(x+w, y+h-1);
|
||||||
|
glVertex2i(x, y+h-1);
|
||||||
|
glEnd();
|
||||||
|
}
|
||||||
void line(int x, int y, int x1, int y1) {
|
void line(int x, int y, int x1, int y1) {
|
||||||
glBegin(GL_LINE_STRIP);
|
glBegin(GL_LINE_STRIP);
|
||||||
glVertex2i(x, y);
|
glVertex2i(x, y);
|
||||||
@@ -73,6 +99,14 @@ public:
|
|||||||
glEnd();
|
glEnd();
|
||||||
point(x1, y1);
|
point(x1, y1);
|
||||||
}
|
}
|
||||||
|
void line(int x, int y, int x1, int y1, int x2, int y2) {
|
||||||
|
glBegin(GL_LINE_STRIP);
|
||||||
|
glVertex2i(x, y);
|
||||||
|
glVertex2i(x1, y1);
|
||||||
|
glVertex2i(x2, y2);
|
||||||
|
glEnd();
|
||||||
|
point(x2, y2);
|
||||||
|
}
|
||||||
void xyline(int x, int y, int x1) {
|
void xyline(int x, int y, int x1) {
|
||||||
glBegin(GL_LINE_STRIP);
|
glBegin(GL_LINE_STRIP);
|
||||||
glVertex2i(x, y);
|
glVertex2i(x, y);
|
||||||
@@ -121,29 +155,34 @@ public:
|
|||||||
glEnd();
|
glEnd();
|
||||||
point(x2, y3);
|
point(x2, y3);
|
||||||
}
|
}
|
||||||
// --- recently moved implementations (see FL_PORTING efforts)
|
void loop(int x0, int y0, int x1, int y1, int x2, int y2) {
|
||||||
void point(int x, int y) {
|
|
||||||
glBegin(GL_POINTS);
|
|
||||||
glVertex2i(x, y);
|
|
||||||
glEnd();
|
|
||||||
}
|
|
||||||
void rect(int x, int y, int w, int h) {
|
|
||||||
glBegin(GL_LINE_LOOP);
|
glBegin(GL_LINE_LOOP);
|
||||||
glVertex2i(x, y);
|
glVertex2i(x0, y0);
|
||||||
glVertex2i(x+w, y);
|
glVertex2i(x1, y1);
|
||||||
glVertex2i(x+w, y+h);
|
glVertex2i(x2, y2);
|
||||||
glVertex2i(x, y+h);
|
|
||||||
glEnd();
|
glEnd();
|
||||||
}
|
}
|
||||||
void rectf(int x, int y, int w, int h) {
|
void loop(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3) {
|
||||||
if (w<=0 || h<=0) return;
|
glBegin(GL_LINE_LOOP);
|
||||||
// OpenGL has the natural origin at the bottom left. Drawing in FLTK
|
glVertex2i(x0, y0);
|
||||||
// coordinates requires that we shift the rectangle one pixel up.
|
glVertex2i(x1, y1);
|
||||||
|
glVertex2i(x2, y2);
|
||||||
|
glVertex2i(x3, y3);
|
||||||
|
glEnd();
|
||||||
|
}
|
||||||
|
void polygon(int x0, int y0, int x1, int y1, int x2, int y2) {
|
||||||
glBegin(GL_POLYGON);
|
glBegin(GL_POLYGON);
|
||||||
glVertex2i(x, y-1);
|
glVertex2i(x0, y0);
|
||||||
glVertex2i(x+w, y-1);
|
glVertex2i(x1, y1);
|
||||||
glVertex2i(x+w, y+h-1);
|
glVertex2i(x2, y2);
|
||||||
glVertex2i(x, y+h-1);
|
glEnd();
|
||||||
|
}
|
||||||
|
void polygon(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3) {
|
||||||
|
glBegin(GL_POLYGON);
|
||||||
|
glVertex2i(x0, y0);
|
||||||
|
glVertex2i(x1, y1);
|
||||||
|
glVertex2i(x2, y2);
|
||||||
|
glVertex2i(x3, y3);
|
||||||
glEnd();
|
glEnd();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -681,6 +720,8 @@ void Fl_Gl_Window::draw() {
|
|||||||
glOrtho(-0.5, w()-0.5, h()-0.5, -0.5, -1, 1);
|
glOrtho(-0.5, w()-0.5, h()-0.5, -0.5, -1, 1);
|
||||||
// glOrtho(0, w(), h(), 0, -1, 1);
|
// glOrtho(0, w(), h(), 0, -1, 1);
|
||||||
glLineWidth(pixels_per_unit()); // should be 1 or 2 (2 if highres OpenGL)
|
glLineWidth(pixels_per_unit()); // should be 1 or 2 (2 if highres OpenGL)
|
||||||
|
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // FIXME: push on state stack
|
||||||
|
glEnable(GL_BLEND); // FIXME: push on state stack
|
||||||
|
|
||||||
Fl_Window::draw();
|
Fl_Window::draw();
|
||||||
|
|
||||||
|
|||||||
+330
-341
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user