diff options
Diffstat (limited to 'lib/glshape.cc')
| -rw-r--r-- | lib/glshape.cc | 110 | 
1 files changed, 110 insertions, 0 deletions
| diff --git a/lib/glshape.cc b/lib/glshape.cc index 6d88a15..55a02cf 100644 --- a/lib/glshape.cc +++ b/lib/glshape.cc @@ -2,6 +2,7 @@  #include "glbase.h"  #include "glshape.h"  #include "gltexture.h" +#include "glfont.h"  #define ENTER bool was2d = in2D(true)  #define ENTERT bool was2d = in2D(false) @@ -38,10 +39,38 @@ void mogltk::shape::hline(int x1, int x2, int y, ColorP c) {      box(x1, y, x2, y, c);  } +void mogltk::shape::hline3d(int x1, int x2, int y, ColorP shade1, ColorP shade2, int bevel) { +    ENTER; +     +    if (!bevel) { +	hline(x1, x2, y, shade2); +	hline(x1, x2, y + 1, shade1); +    } else { +	hline(x1, x2, y, shade1); +	hline(x1, x2, y + 1, shade2); +    } +     +    LEAVE; +} +  void mogltk::shape::vline(int x, int y1, int y2, ColorP c) {      box(x, y1, x, y2, c);  } +void mogltk::shape::vline3d(int x, int y1, int y2, ColorP shade1, ColorP shade2, int bevel) { +    ENTER; +     +    if (!bevel) { +	vline(x, y1, y2, shade2); +	vline(x + 1, y1, y2, shade1); +    } else { +	vline(x, y1, y2, shade1); +	vline(x + 1, y1, y2, shade2); +    } +     +    LEAVE; +} +  void mogltk::shape::hline(int x1, int x2, int y, ColorP c1, ColorP c2) {      box(x1, y, x2, y, c1, c2, c1, c2);  } @@ -52,19 +81,23 @@ void mogltk::shape::vline(int x, int y1, int y2, ColorP c1, ColorP c2) {  void mogltk::shape::obox(int x1, int y1, int x2, int y2, ColorP c) {      ENTER; +      hline(x1, x2, y1, c);      hline(x1, x2, y2, c);      vline(x1, y1, y2, c);      vline(x2, y1, y2, c); +      LEAVE;  }  void mogltk::shape::obox(int x1, int y1, int x2, int y2, ColorP c1, ColorP c2, ColorP c3, ColorP c4) {      ENTER; +      hline(x1, x2, y1, c1, c2);      hline(x1, x2, y2, c3, c4);      vline(x1, y1, y2, c1, c3);      vline(x2, y1, y2, c2, c4); +      LEAVE;  } @@ -105,6 +138,83 @@ void mogltk::shape::tbox(mogltk::texture * t, int x1, int y1, int x2, int y2, Co      LEAVE;  } +void mogltk::shape::box3d(int x1, int y1, int x2, int y2, ColorP face, ColorP shade1, ColorP shade2, int depth, int bevel) { +    ENTER; + +    if (!bevel) { +	shade1.Bind(); +    } else { +	shade2.Bind(); +    } +    glBegin(GL_TRIANGLE_FAN); +    glVertex2i(x1, y1); +    glVertex2i(x2 + 1, y1); +    glVertex2i(x2 + 1 - depth, y1 + depth); +    glVertex2i(x1 + depth, y2 + 1 - depth); +    glVertex2i(x1, y2 + 1); +    glEnd(); + +    if (!bevel) { +	shade2.Bind(); +    } else { +	shade1.Bind(); +    } +    glBegin(GL_TRIANGLE_FAN); +    glVertex2i(x2 + 1, y2 + 1); +    glVertex2i(x1, y2 + 1); +    glVertex2i(x1 + depth, y2 + 1 - depth); +    glVertex2i(x2 + 1 - depth, y1 + depth); +    glVertex2i(x2 + 1, y1); +    glEnd(); + +    face.Bind(); +    glBegin(GL_TRIANGLE_STRIP); +    glVertex2i(x1 + depth, y1 + depth); +    glVertex2i(x2 + 1 - depth, y1 + depth); +    glVertex2i(x1 + depth, y2 + 1 - depth); +    glVertex2i(x2 + 1 - depth, y2 + 1 - depth); +    glEnd(); +     +    LEAVE; +} + +void mogltk::shape::obox3d(int x1, int y1, int x2, int y2, ColorP shade1, ColorP shade2, int bevel) { +    ENTER; +     +    if (!bevel) { +	obox(x1 + 1, y1 + 1, x2, y2, shade1); +	obox(x1, y1, x2 - 1, y2 - 1, shade2); +    } else { +	obox(x1, y1, x2 - 1, y2 - 1, shade1); +	obox(x1 + 1, y1 + 1, x2, y2, shade2); +    } +     +    LEAVE; +} + +void mogltk::shape::window(int x1, int y1, int x2, int y2, String title, +			    ColorP titlecolor, ColorP titlebackcolor, +			    ColorP front, ColorP shade1, ColorP shade2) { +    ENTER; +     +    box3d(x1, y1, x2, y2, front, shade1, shade2); +    hline3d(x1 + 2, x2 - 2, y1 + 18, shade1, shade2, 1); +    box(x1 + 2, y1 + 2, x2 - 2, y1 + 17, titlebackcolor); +    int tsize = SystemFont->singletextsize(title); +    SystemFont->putcursor((x2 + x1 - tsize) / 2, y1 + 2); +    SystemFont->setcolor(titlecolor); +    SystemFont->setshadow(0); +    SystemFont->printf(title); +     +    LEAVE; +} + +void mogltk::shape::text3d(int x, int y, String text, ColorP textcolor, +			    ColorP shade1, ColorP shade2, +			    align_t align, int bevel) { + +} +  bool mogltk::shape::in2D(bool unbind) {      bool was2D = mogltk::glbase::is2D(); | 
