home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 7 / 07.iso / c / c100 / 1.ddi / OOPWLD.ZIP / SHAPES / SHAPE.CPP < prev    next >
Encoding:
C/C++ Source or Header  |  1990-06-08  |  2.3 KB  |  78 lines

  1. // SHAPE.CPP : methods for generic shape class
  2. #include "shape.hpp"
  3. #include <conio.h>
  4.  
  5. const size_step = 5;  // step value for increasing or decreasing size
  6.  
  7. shape::shape(int xc, int yc, int xscale, int yscale,
  8.              COLORS fc, fill_patterns fp, COLORS lc)
  9.     : xcoord(xc), ycoord(yc),
  10.       x_proportion(xscale), y_proportion(yscale),
  11.       line_color(lc),  fill_color(fc), fill_pattern(fp)
  12.   {}
  13.  
  14. void shape::draw() {
  15.   // call this, then your specific drawing function
  16.   setcolor(line_color);
  17.   setfillstyle(fill_pattern, fill_color);
  18. }
  19.  
  20. void shape::erase() {
  21.   // call this, then your specific drawing function
  22.   setcolor(BLACK);
  23.   setfillstyle(SOLID_FILL, BLACK);
  24. }
  25.  
  26. void shape::moverelative(int x, int y) {
  27.   erase();
  28.   xcoord += x;
  29.   ycoord += y;
  30. }
  31.  
  32. void shape::edit() {  // change characteristics
  33.   while(1) {
  34.     bgi_graphics::bottomprompt(
  35.     "p: pattern, c: color, s: size, q to quit");
  36.     switch(getch()) {
  37.       case 'p' : fillpattern((fill_patterns)++fill_pattern);
  38.                  break;
  39.       case 'c' : fillcolor((COLORS)++fill_color);
  40.                  break;
  41.       case 's' : bgi_graphics::bottomprompt(
  42.                  "X for larger xval, x for smaller,"
  43.                  "Y for larger yval, y for smaller, q to quit");
  44.                  for(int rsp = getch(); rsp != 'q'; rsp = getch()) {
  45.                    switch(rsp) {
  46.                      case 'X': x_proportion += size_step; break;
  47.                      case 'Y': y_proportion += size_step; break;
  48.                      case 'x': x_proportion -= size_step; break;
  49.                      case 'y': y_proportion -= size_step; break;
  50.                    }
  51.                    if(x_proportion <= 0) x_proportion = 1;
  52.                    if(y_proportion <= 0) y_proportion = 1;
  53.                    // virtual function calls:
  54.                    erase();
  55.                    setsize();
  56.                    draw();
  57.                  }
  58.                  break;
  59.       case 'q' : return;
  60.       default  : break;
  61.     }
  62.   }
  63. }
  64.  
  65. void shape::fillcolor(COLORS fc) {
  66.   fill_color = fc;
  67.   if(fill_color > bgi_graphics::maxcolor)
  68.     fill_color = BLACK;  // wrap around "corner"
  69.   draw();
  70. }
  71.  
  72. void shape::fillpattern(fill_patterns fp) {
  73.   fill_pattern = fp;
  74.   if(fill_pattern >= USER_FILL)
  75.     fill_pattern = EMPTY_FILL;  // wrap around "corner"
  76.   draw();
  77. }
  78.