void test_chooser_torture() {
    const int numItems = 100;
    GChooser *chooser = new GChooser();
    Vector<string> items;
    for (int i=0; i<numItems; i++) {
        string item = randomString(8);
        items.add(item);
        chooser->addItem(item);
    }
    chooser->setLocation(gw->getWidth()/2 - chooser->getSize().getWidth()/2, gw->getHeight()/2);
    gw->addToRegion(chooser, "north");
    for (int i = 0; i < 10000; i++) {
        int index = randomInteger(0, numItems-1);
        chooser->setSelectedItem(items[index]);
        string item = chooser->getSelectedItem();
        if (item != items[index]) {
            cout << "oops" << endl;
            break;
        }
    }
}
コード例 #2
0
/*
 * Runs and tests your floodFill function.
 */
void test_floodFill() {
    GObject::setAntiAliasing(false);
    floodFillWindow = new GWindow(FLOOD_WINDOW_WIDTH, FLOOD_WINDOW_HEIGHT);
    floodFillWindow->setWindowTitle("CS 106X Flood Fill");
    // floodFillWindow->center();
    // floodFillWindow->setRepaintImmediately(false);

    Map<string, int> colorMap;
    colorMap["Red"]    = 0x8c1515;   // Stanford red
    colorMap["Yellow"] = 0xeeee00;   // yellow
    colorMap["Blue"]   = 0x0000cc;   // blue
    colorMap["Green"]  = 0x00cc00;   // green
    colorMap["Purple"] = 0xcc00cc;   // purple
    colorMap["Orange"] = 0xff8800;   // orange
    Vector<string> colorVector = colorMap.keys();

    GLabel* fillLabel = new GLabel("Fill color:");
    GChooser* colorList = new GChooser();
    for (string key : colorMap) {
        colorList->addItem(key);
    }
    floodFillWindow->addToRegion(fillLabel, "SOUTH");
    floodFillWindow->addToRegion(colorList, "SOUTH");

    // use buffered image to store individual pixels
    if (floodFillPixels) {
        delete floodFillPixels;
        floodFillPixels = NULL;
    }
    floodFillPixels = new GBufferedImage(
                /* x */ 0,
                /* y */ 0,
                /* width */ FLOOD_WINDOW_WIDTH,
                /* height */ FLOOD_WINDOW_HEIGHT,
                /* rgb fill */ 0xffffff);

    // draw several random shapes
#ifdef FLOOD_FILL_RANDOM_SEED
    setRandomSeed(FLOOD_FILL_RANDOM_SEED);
#endif // FLOOD_FILL_RANDOM_SEED

    for (int i = 0; i < FLOOD_FILL_NUM_SHAPES; i++) {
        double x = randomInteger(0, FLOOD_WINDOW_WIDTH  - 100);
        double y = randomInteger(0, FLOOD_WINDOW_HEIGHT - 100);
        double w = randomInteger(20, 100);
        double h = randomInteger(20, 100);
        int color = colorMap[colorVector[randomInteger(0, colorVector.size() - 1)]];
        floodFillPixels->fillRegion(x, y, w, h, color);
    }
    floodFillWindow->add(floodFillPixels);

    // main event loop to process events as they happen
    while (true) {
        GEvent e = waitForEvent(MOUSE_EVENT | WINDOW_EVENT);
        if (e.getEventClass() == MOUSE_EVENT) {
            if (e.getEventType() != MOUSE_CLICKED) { continue; }
            colorList->setEnabled(false);
            GMouseEvent mouseEvent(e);
            string colorStr = colorList->getSelectedItem();
            int color = colorMap[colorStr];
            int mx = (int) mouseEvent.getX();
            int my = (int) mouseEvent.getY();
            cout << "Flood fill at (x=" << dec << mx << ", y=" << my << ")"
                 << " with color " << hex << setw(6) << setfill('0') << color
                 << dec << endl;
            floodFill(*floodFillPixels, mx, my, color);
            colorList->setEnabled(true);
            // floodFillWindow->repaint();
        } else if (e.getEventClass() == WINDOW_EVENT) {
            if (e.getEventType() == WINDOW_CLOSED) {
                // make sure that it was the flood fill window that got closed
                if (!floodFillWindow->isOpen() || !floodFillWindow->isVisible()) {
                    break;
                }
            }
        }
    }
    cout << resetiosflags(ios::fixed | ios::floatfield);
}
コード例 #3
0
/*
 * Runs and tests your floodFill function.
 */
void test_floodFill() {
    GObject::setAntiAliasing(false);
    GWindow floodFillWindow(FLOOD_FILL_WINDOW_WIDTH, FLOOD_FILL_WINDOW_HEIGHT);
    floodFillWindow.setWindowTitle(FLOOD_FILL_WINDOW_TITLE);

    Map<string, int> colorMap;
    colorMap["Red"]    = 0x8c1515;   // Stanford red
    colorMap["Yellow"] = 0xeeee00;   // yellow
    colorMap["Blue"]   = 0x0000cc;   // blue
    colorMap["Green"]  = 0x00cc00;   // green
    colorMap["Purple"] = 0xcc00cc;   // purple
    colorMap["Orange"] = 0xff8800;   // orange
    Vector<string> colorVector = colorMap.keys();

    GLabel fillLabel("Fill color:");
    GChooser colorList;
    for (string key : colorMap) {
        colorList.addItem(key);
    }
    floodFillWindow.addToRegion(&fillLabel, "SOUTH");
    floodFillWindow.addToRegion(&colorList, "SOUTH");

    // use buffered image to store individual pixels
    GBufferedImage floodFillPixels(
                /* x */ 0,
                /* y */ 0,
                /* width */ FLOOD_FILL_WINDOW_WIDTH,
                /* height */ FLOOD_FILL_WINDOW_HEIGHT,
                /* rgb fill */ 0xffffff);
    
    // draw several random shapes
#ifdef FLOOD_FILL_RANDOM_SEED
    setRandomSeed(FLOOD_FILL_RANDOM_SEED);
#endif // FLOOD_FILL_RANDOM_SEED

    for (int i = 0; i < FLOOD_FILL_NUM_SHAPES; i++) {
        double w = randomInteger(FLOOD_FILL_MIN_RECT_SIZE, FLOOD_FILL_MAX_RECT_SIZE);
        double h = randomInteger(FLOOD_FILL_MIN_RECT_SIZE, FLOOD_FILL_MAX_RECT_SIZE);
        double x = randomInteger(0, FLOOD_FILL_WINDOW_WIDTH  - w);
        double y = randomInteger(0, FLOOD_FILL_WINDOW_HEIGHT - h - colorList.getHeight());
        int color = colorMap[colorVector[randomInteger(0, colorVector.size() - 1)]];
        floodFillPixels.fillRegion(x, y, w, h, color);
    }
    floodFillWindow.add(&floodFillPixels);

    // main event loop to process events as they happen
    while (true) {
        GEvent e = waitForEvent(MOUSE_EVENT | WINDOW_EVENT);
        if (e.getEventClass() == MOUSE_EVENT) {
            if (e.getEventType() != MOUSE_CLICKED) { continue; }
            colorList.setEnabled(false);
            GMouseEvent mouseEvent(e);
            string colorStr = colorList.getSelectedItem();
            int color = colorMap[colorStr];
            int mx = (int) mouseEvent.getX();
            int my = (int) mouseEvent.getY();
            cout << "Flood fill (x=" << dec << mx << ", y=" << my << "),"
                 << " color " << hex << setw(6) << setfill('0') << color
                 << dec << ": ";
            cout.flush();
            int pixelsColored = floodFill(floodFillPixels, mx, my, color);
            cout << pixelsColored << " pixels colored." << endl;
            colorList.setEnabled(true);
        } else if (e.getEventClass() == WINDOW_EVENT) {
            if (e.getEventType() == WINDOW_CLOSED) {
                // make sure that it was the flood fill window that got closed
                if (!floodFillWindow.isOpen() || !floodFillWindow.isVisible()) {
                    break;
                }
            }
        }
    }
    cout << resetiosflags(ios::fixed | ios::floatfield);
    
    cout << endl;
    cout << "Going to test flood fill exception handling." << endl;
    try {
        floodFill(floodFillPixels, -1, -2, 0x0);
        cout << "Fill (-1, -2) did not throw a proper exception." << endl;
    } catch (string) {
        cout << "Fill (-1, -2) threw an exception!" << endl;
    } catch (const char*) {
        cout << "Fill (-1, -2) threw an exception!" << endl;
    } catch (ErrorException) {
        cout << "Fill (-1, -2) threw an exception!" << endl;
    }
    try {
        floodFill(floodFillPixels, 3210, 4567, 0x0);
        cout << "Fill (3210, 4567) did not throw a proper exception." << endl;
    } catch (string) {
        cout << "Fill (3210, 4567) threw an exception!" << endl;
    } catch (const char*) {
        cout << "Fill (3210, 4567) threw an exception!" << endl;
    } catch (ErrorException) {
        cout << "Fill (3210, 4567) threw an exception!" << endl;
    }
}
void test_contains_and_getBounds() {
    bool useCompounds = false;
    int x0 = 350;
    int y0 = 300;
    Map<string, GObject*> shapeMap;
    GOval *oval = new GOval(x0, y0, 200, 100);
    GRoundRect *roundRect = new GRoundRect(x0, y0, 200, 100, 300);
    roundRect->setLineWidth(20);
    G3DRect *rect3d = new G3DRect(x0, y0, 200, 100, true);
    //rect3d->setLineWidth(5);
    rect3d->setFillColor("green");
    rect3d->setFilled(true);
    GPolygon *poly = new GPolygon;
    poly->addVertex(0, 0);
    poly->addEdge(200, 100);
    poly->addEdge(-200, 0);
    poly->setLocation(x0, y0);
    GPolygon *cpoly = new GPolygon;
    cpoly->addVertex(0, 0);
    cpoly->addEdge(200, 100);
    cpoly->addEdge(0, -100);
    cpoly->addEdge(-200, 100);
    cpoly->setLocation(x0, y0);
    GRect *rect = new GRect(x0, y0, 200, 100);
    GLine *line = new GLine(x0, y0, x0 + 200, y0 + 100);
    GLabel *label = new GLabel("Ostromantus", x0, y0);
    GArc *arc = new GArc(x0, y0, 350, 350, 0, 90);
    //arc->setLineWidth(5);
    arc->setColor("#44000000");
    GArc *filledArc = new GArc(x0, y0, 350, 100, 45, 225);
    filledArc->setFillColor("#88e0e0e0");
    filledArc->setFilled(true);
    GCompound *comp1 = new GCompound;
    comp1->setLocation(x0, y0);
    comp1->add(new GLabel("compound", 0, 15));
    GRect *bgRect1 = new GRect(0, 0);
    gw->add(bgRect1);
    bgRect1->setFillColor("#55dddddd");
    bgRect1->setFilled(true);
    GImage *image = new GImage("homer-transparent.png");
    image->setLocation(x0, y0);
    GCompound *comp = new GCompound;
    comp->setLocation(x0, y0);
    GRect *compRect = new GRect(20, 20, 100, 100);
    GOval *compOval = new GOval(90, 90, 150, 70);
    comp->add(compRect);
    comp->add(compOval);
    GButton *button = new GButton("Testo");
    button->setSize(200, 100);
    button->setLocation(x0, y0);
    shapeMap.put("oval", oval);
    shapeMap.put("rounded rectangle", roundRect);
    shapeMap.put("3D rectangle", rect3d);
    shapeMap.put("polygon", poly);
    shapeMap.put("crazy polygon", cpoly);
    shapeMap.put("rectangle", rect);
    shapeMap.put("line", line);
    shapeMap.put("arc", arc);
    shapeMap.put("filled arc", filledArc);
    shapeMap.put("label", label);
    shapeMap.put("image", image);
    shapeMap.put("compound", comp);
    shapeMap.put("button", button);

    GObject *currObj;
    GChooser *ch = new GChooser;
    ch->setActionCommand("chooser");
    ch->addItem("oval");
    ch->addItem("rounded rectangle");
    ch->addItem(("3D rectangle"));
    ch->addItem("polygon");
    ch->addItem("crazy polygon");
    ch->addItem("rectangle");
    ch->addItem("line");
    ch->addItem("arc");
    ch->addItem("filled arc");
    ch->addItem("label");
    ch->addItem("image");
    ch->addItem("compound");
    ch->addItem("button");
    ch->setSelectedItem("rectangle");
    currObj = rect;

    GButton *endButton = new GButton("End test");
    GButton *fillButton = new GButton("Auto-fill");
    GButton *rotateButton = new GButton("Rotate");
    GButton *scaleButton = new GButton("Scale");

    GCheckBox *compCheckbox = new GCheckBox("compounds");
    compCheckbox->setActionCommand("compounds");
    gw->addToRegion(compCheckbox, "north");
    gw->addToRegion(ch, "north");
    gw->addToRegion(rotateButton, "north");
    gw->addToRegion(scaleButton, "north");
    gw->addToRegion(fillButton, "north");
    gw->addToRegion(endButton, "north");

    while (true) {
        GEvent e = waitForEvent(ACTION_EVENT | MOUSE_EVENT);
        if (!e.isValid())
            continue;
        if (e.getEventClass() == ACTION_EVENT) {
            if (((GActionEvent) e).getActionCommand() == "End test")
                break;
            if (((GActionEvent) e).getActionCommand() == "compounds") {
                bgRect1->setVisible(compCheckbox->isSelected());
                useCompounds = compCheckbox->isSelected();
            }
            if (((GActionEvent) e).getActionCommand() == "Testo") {
                GPoint pt = button->getLocation();
                button->setLocation(pt.getX()-button->getWidth()-10, pt.getY());
                pause(1000);
                button->setLocation(pt);
            }
            if (((GActionEvent) e).getActionCommand() == "Auto-fill") {
                GRectangle bds = currObj->getBounds();
                int xmin = bds.getX();
                int ymin = bds.getY();
                int xmax = bds.getX() + bds.getWidth();
                int ymax = bds.getY() + bds.getHeight();
                int dx = useCompounds ? comp1->getX(): 0;
                int dy = useCompounds ? comp1->getY(): 0;
                for (int y = ymin; y < ymax; y+=1)
                    for (int x = xmin; x < xmax; x+=1) {
                        if (currObj->contains(x, y)) {
                            gw->setColor("red");
                            gw->fillOval(x + dx, y + dy, 1, 1);
                        } else {
                            gw->setColor("green");
                            gw->fillOval(x + dx, y + dy, 1, 1);
                        }
                    }
            }

            if (((GActionEvent) e).getActionCommand() == "Rotate") {
                currObj->rotate(45);
                if (useCompounds) {
                    bgRect1->setBounds(comp1->getBounds());
                }
            }
            if (((GActionEvent) e).getActionCommand() == "Scale") {
                currObj->scale(1.2, 0.8);
                if (useCompounds) {
                    bgRect1->setBounds(comp1->getBounds());
                }
            }
            if (((GActionEvent) e).getActionCommand() == "chooser") {
                string shape = ch->getSelectedItem();
                if (useCompounds) {
                    comp1->remove(currObj);
                    gw->remove(comp1);
                } else {
                    gw->remove(currObj);
                }
                gw->setColor("white");
                gw->fillRect(0, 0, gw->getCanvasWidth(), gw->getCanvasHeight());
                //drawGrid();
                gw->setColor("black");
                currObj = shapeMap.get(shape);
                if (useCompounds) {
                    gw->add(comp1);
                    comp1->add(currObj, 50, 50);
                    bgRect1->setBounds(comp1->getBounds());
                } else {
                    gw->add(currObj);
                }
                gw->drawOval(currObj->getX()-2, currObj->getY()-2, 4, 4);
            }
        } else if (e.getEventType() == MOUSE_CLICKED) {
            double x = ((GMouseEvent) e).getX();
            double y = ((GMouseEvent) e).getY();
            if (currObj->contains(x, y)) {
                gw->setColor("red");
                gw->fillOval(x, y, 1, 1);
            }
        }
    }
}
void test_interactors_as_objects() {
    GButton *b = new GButton("button");
    b->rotate(90);
    b->scale(2);
    b->setColor("red");
    b->setSize(100, 100);
    b->setLineWidth(20);
    gw->add(b, 10, 10);
    gw->drawRect(b->getBounds());

    GSlider *s = new GSlider(5, 40, 20);
    s->rotate(90);
    s->scale(2);
    s->setColor("red");
    s->setSize(100, 100);
    s->setLineWidth(20);
    gw->add(s, 120, 10);
    gw->drawRect(s->getBounds());

    GCheckBox *c = new GCheckBox("checkbox");
    c->rotate(90);
    c->scale(2);
    c->setColor("red");
    c->setSize(100, 100);
    c->setLineWidth(20);
    gw->add(c, 230, 10);
    gw->drawRect(c->getBounds());

    GChooser *ch = new GChooser;
    ch->addItem("beef");
    ch->addItem("veal");
    ch->rotate(90);
    ch->scale(2);
    ch->setColor("red");
    ch->setSize(100, 100);
    ch->setLineWidth(20);
    gw->add(ch, 340, 10);
    gw->drawRect(ch->getBounds());

    GTextField *t = new GTextField(40);
    t->rotate(90);
    t->scale(2);
    t->setColor("red");
    t->setSize(100, 100);
    t->setLineWidth(20);
    t->setText("text field");
    gw->add(t, 450, 10);
    gw->drawRect(t->getBounds());

    GButton *b2 = new GButton("button");
    b2->rotate(90);
    b2->scale(2);
    b2->setColor("red");
    b2->setSize(100, 100);
    b2->setLineWidth(20);
    gw->addToRegion(b2, "SOUTH");

    GSlider *s2 = new GSlider(5, 40, 20);
    s2->rotate(90);
    s2->scale(2);
    s2->setColor("red");
    s2->setSize(100, 100);
    s2->setLineWidth(20);
    gw->addToRegion(s2, "SOUTH");

    GCheckBox *c2 = new GCheckBox("checkbox");
    c2->rotate(90);
    c2->scale(2);
    c2->setColor("red");
    c2->setSize(100, 100);
    c2->setLineWidth(20);
    gw->addToRegion(c2, "SOUTH");

    GChooser *ch2 = new GChooser;
    ch2->addItem("beef");
    ch2->addItem("veal");
    ch2->rotate(90);
    ch2->scale(2);
    ch2->setColor("red");
    ch2->setSize(100, 100);
    ch2->setLineWidth(20);
    gw->addToRegion(ch2, "SOUTH");

    GTextField *t2 = new GTextField;
    t2->rotate(90);
    t2->scale(2);
    t2->setColor("red");
    t2->setSize(100, 100);
    t2->setLineWidth(20);
    t2->setText("text field");
    gw->addToRegion(t2, "SOUTH");
}
コード例 #6
0
int main()
{
    int consoleX = 10;
    int consoleY = 10;
    setConsoleSize(600, 400);
    setConsoleFont("Monospaced-14");
    setConsoleExitProgramOnClose(true);
    setConsolePrintExceptions(true);

    extern int _mainFlags;
    if (_mainFlags & CONSOLE_FLAG) cout << "CONSOLE_FLAG set" << endl;
    if (_mainFlags & GRAPHICS_FLAG) cout << "GRAPHICS_FLAG set" << endl;
    if (_mainFlags & JBEMISC_FLAG) cout << "JBEMISC_FLAG set" << endl;

    GWindow gw(800, 300);

    setConsoleLocation(0, 300 + 50);
    gw.setColor("red");
    double winWidth = gw.getWidth();
    double winHeight = gw.getHeight();
    for (int i = 0; i < winWidth; i += 100)
        gw.drawLine(i, 0, i, winHeight);
    for (int j = 0; j < winHeight; j += 100)
        gw.drawLine(0, j, winWidth, j);
    gw.setColor("black");

    cout << "Screen size: " << getScreenWidth() << "x" << getScreenHeight() << endl;
    cout << "GWindow size: " << gw.getWidth() << "x" << gw.getHeight() << endl;
    cout << "Canvas size before adding interactors: " << gw.getCanvasWidth()
         << "x" << gw.getCanvasHeight() << endl;

    gw.setWindowTitle("Silly GUI Events Tester");

    GButton *button = new GButton("Shift Rectangle and Console");
    GButton *quitButton = new GButton("Quit");
    GCheckBox *cb = new GCheckBox("check here");
    GChooser *chooser = new GChooser();
    GSlider *slider = new GSlider(0, 100, 30);
    GTextField *textField = new GTextField();
    chooser->addItem("Up");
    chooser->addItem("Down");
    chooser->setSelectedItem("Up");
    chooser->setActionCommand("choosey");
    cb->setActionCommand("gurgle");
    slider->setActionCommand("slidey");
    textField->setActionCommand("texty");
    gw.setColor("red");

    GRect rect = GRect(40, 40, 60, 30);
    rect.setColor("#aa00cc98");
    cout << "rect.getColor(): " << rect.getColor() << endl;
    cout << "2309667788: " << convertRGBToColor(2309667788) << endl;
    cout << "magenta: " << hex << (unsigned) convertColorToRGB("gray") << endl;
    cout << "convertColorToRGB(#66ffc800): " << convertColorToRGB("#66ffc800") << endl;
    cout << "convertColorToRGB(#ffc800): " << convertColorToRGB("#ffc800") << endl;
    rect.setLineWidth(10);
    gw.add(&rect);

    gw.addToRegion(textField, "NORTH");
    gw.addToRegion(button, "SOUTH");
    gw.addToRegion(cb, "EAST");
    gw.addToRegion(chooser, "SOUTH");
    gw.addToRegion(quitButton, "south");
    gw.addToRegion(slider, "WEST");

    cout << "Canvas size after adding interactors: " << gw.getCanvasWidth()
         << "x" << gw.getCanvasHeight() << endl;

    gw.add(new GLabel("Click in here and type!", 300, 20));

    // Draw background grid for calibration
    for (int i = 0; i < winWidth; i += 100)
        gw.drawLine(i, 0, i, winHeight);
    for (int j = 0; j < winHeight; j += 100)
        gw.drawLine(0, j, winWidth, j);

    double cx = gw.getCanvasWidth() / 2;
    double cy = gw.getCanvasHeight() / 2;
    double r = 25;
    GArc *pacman = new GArc(cx - r, cy - r, 2 * r, 2 * r, 45, 270);
    pacman->setFilled(true);
    pacman->setFillColor(0x20cccccc); // fairly transparent gray
    gw.add(pacman);

    string ans = getLine("remove checkbox? (y/n) ");
    if (startsWith(ans, "y"))
        gw.removeFromRegion(cb, "EAST");

    ans = getLine("Clear console? (y/n) ");
    if (startsWith(ans, "y"))
        clearConsole();

    GButton *naked = new GButton("naked");
    gw.add(naked, 200, 180);

    cout.setf(ios::fixed);
    cout << dec;
    while (true)
    {
        GEvent e = waitForEvent();
        EventType type = e.getEventType();
        if (type == KEY_RELEASED || type == MOUSE_MOVED
                ||type == MOUSE_PRESSED||type == MOUSE_RELEASED)
            continue; // ignore these
        int eclass = e.getEventClass();
        int mods = e.getModifiers();
        string modstr = "";
        if (mods & SHIFT_DOWN) modstr += "SHIFT ";
        if (mods & CTRL_DOWN) modstr += "CTRL ";
        if (mods & META_DOWN) modstr += "META ";
        if (mods & ALT_DOWN) modstr += "ALT ";
        if (mods & ALT_GRAPH_DOWN) modstr += "ALTGRAPH ";
        if (mods & BUTTON1_DOWN) modstr += "BUT1 ";
        if (mods & BUTTON2_DOWN) modstr += "BUT2 ";
        if (mods & BUTTON3_DOWN) modstr += "BUT3 ";

        cout << e.toString() << endl;
        cout << "\tTime: " << setprecision(0) << e.getEventTime() << endl;
        cout << "\tModifiers: " << modstr << endl;

        if (eclass==ACTION_EVENT)
        {
            GActionEvent ae(e);
            string cmd = ae.getActionCommand();
            if (ae.getSource() == quitButton)
                exitGraphics();
            cout << "\tSource: " << ae.getSource()->toString() << " @ " << ae.getSource() << endl;
            cout << "\tActionCommand: " << cmd << endl;
            if (cmd == "choosey")
            {
                cout << "\tItem Selected: " << chooser->getSelectedItem() << endl;
            }
            if (cmd == "slidey")
            {
                cout << "\tCurrent Value: " << slider->getValue() << endl;
            }
            if (cmd == "texty")
            {
                cout << "\tText: " << textField->getText() << endl;
            }
            if (cmd == "gurgle")
            {
                cout << "\tSelected: " << boolToString(cb->isSelected()) << endl;
            }
            if (ae.getSource() == button)
            {
                GPoint p = rect.getLocation();
                if (chooser->getSelectedItem()=="Up")
                {
                    rect.setLocation(p.getX(), p.getY() - 5);
                    consoleX -= 10;
                    consoleY -= 10;
                    setConsoleLocation(consoleX, consoleY);
                    cout << "up" << endl;
                }
                else
                {
                    rect.setLocation(p.getX(), p.getY() + 5);
                    consoleX += 10;
                    consoleY += 10;
                    setConsoleLocation(consoleX, consoleY);
                    cout << "down" << endl;
                }
            }
        }
        if (eclass==WINDOW_EVENT)
        {
            GWindowEvent we(e);
            cout << "\tTitle: " << we.getGWindow().getWindowTitle() << endl;
            if (we.getEventType() == WINDOW_CLOSED) {
                break;
            }
        }
        if (eclass==MOUSE_EVENT)
        {
            GMouseEvent me(e);
            cout << "\tWindow Title: " << me.getGWindow().getWindowTitle() << endl;
            cout << "\t(x, y): " << "(" << me.getX() << ", " << me.getY() << ")" << endl;
        }
        if (eclass==KEY_EVENT)
        {
            GKeyEvent ke(e);
            cout << "\tWindow Title: " << ke.getGWindow().getWindowTitle() << endl;
            char keyChar = ke.getKeyChar();
            int keyCode = ke.getKeyCode();
            ostringstream oss;
            oss << "'";
            if (isprint(keyChar)) oss << keyChar;
            else oss << '\\' << oct << int(keyChar);
            oss << "'";
            cout << "\tKeyChar: " << oss.str() << endl;

            oss.str("");
            switch(keyCode)
            {
            case BACKSPACE_KEY:
                oss << "BACKSPACE_KEY";
                break;
            case TAB_KEY:
                oss << "TAB_KEY";
                break;
            case ENTER_KEY:
                oss << "ENTER_KEY";
                break;
            case CLEAR_KEY:
                oss << "CLEAR_KEY";
                break;
            case ESCAPE_KEY:
                oss << "ESCAPE_KEY";
                break;
            case PAGE_UP_KEY:
                oss << "PAGE_UP_KEY";
                break;
            case PAGE_DOWN_KEY:
                oss << "PAGE_DOWN_KEY";
                break;
            case END_KEY:
                oss << "END_KEY";
                break;
            case HOME_KEY:
                oss << "HOME_KEY";
                break;
            case LEFT_ARROW_KEY:
                oss << "LEFT_ARROW_KEY";
                break;
            case UP_ARROW_KEY:
                oss << "UP_ARROW_KEY";
                break;
            case RIGHT_ARROW_KEY:
                oss << "RIGHT_ARROW_KEY";
                break;
            case DOWN_ARROW_KEY:
                oss << "DOWN_ARROW_KEY";
                break;
            case F1_KEY:
                oss << "F1_KEY";
                break;
            case F2_KEY:
                oss << "F2_KEY";
                break;
            case F3_KEY:
                oss << "F3_KEY";
                break;
            case F4_KEY:
                oss << "F4_KEY";
                break;
            case F5_KEY:
                oss << "F5_KEY";
                break;
            case F6_KEY:
                oss << "F6_KEY";
                break;
            case F7_KEY:
                oss << "F7_KEY";
                break;
            case F8_KEY:
                oss << "F8_KEY";
                break;
            case F9_KEY:
                oss << "F9_KEY";
                break;
            case F10_KEY:
                oss << "F10_KEY";
                break;
            case F11_KEY:
                oss << "F11_KEY";
                break;
            case F12_KEY:
                oss << "F12_KEY";
                break;
            case DELETE_KEY:
                oss << "DELETE_KEY";
                break;
            case HELP_KEY:
                oss << "HELP_KEY";
                break;
            default:
                oss << "'";
                if (isprint(keyCode)) oss << char(keyCode);
                else oss << '\\' << oct << keyCode;
                oss << "'";
            }
            cout << "\tKeyCode: " << oss.str() << endl;
        }
    }
    return 0;
}
コード例 #7
0
ファイル: AutoPicasso.cpp プロジェクト: pquiggles/AutoPicasso
int main() {
	GWindow gw(width, height);
    
     while(true){
         
         /*Button Setup*/
         
         GButton *button = new GButton("Draw");
         gw.addToRegion(button, "South");
    
         GChooser *timeChooser = new GChooser();
         timeChooser->addItem("Dusk");
         timeChooser->addItem("Day");
         timeChooser->addItem("Night");
         gw.addToRegion(timeChooser, "South");
    
         GCheckBox *fg = new GCheckBox("Terrain");
         gw.addToRegion(fg, "West");
    
         GCheckBox *sun = new GCheckBox("Sun/Moon");
         gw.addToRegion(sun, "West");
    
         GCheckBox *bg = new GCheckBox("Mountain");
         gw.addToRegion(bg, "West");
    
    
         GCheckBox *lightning = new GCheckBox("Lightning");
         gw.addToRegion(lightning, "West");
         
         GCheckBox *tree = new GCheckBox("Tree");
         gw.addToRegion(tree, "West");
    
        /*Listen for click*/
         while(true){
            GEvent e = waitForEvent(ACTION_EVENT | CLICK_EVENT);
            if(e.getEventClass() == ACTION_EVENT) break;
        }
        string selectedTime = timeChooser->getSelectedItem();
         if(selectedTime=="Dusk"){
             dusk=true;
             day=false;
             night=false;
         }
         if(selectedTime=="Day"){
            day=true;
            dusk=false;
            night=false;
        }
        if(selectedTime=="Night"){
            night=true;
            dusk=false;
            day=false;
        }
         /*Drawing selected items*/
        gw.clear();
        closePoints.clear();
        drawSky(gw);
        if(sun->isSelected()) drawSun(gw,MAX_SUN_RADIUS,(dusk?DUSK_SUN_COLOR:DAY_SUN_COLOR));
        if(bg->isSelected()) drawBackGroundMountain(gw);
        if(lightning->isSelected()) drawLightning(gw, GPoint(width*randomReal(.2, .8), 0), GPoint(width*randomReal(.2, .8), height));
        if(tree->isSelected()) drawTree(gw);
        if(fg->isSelected()) drawTerrain(gw);
        }

	return 0;
}