void test_checkbox_selected_torture() { GCheckBox *cb = new GCheckBox("checky"); cb->setLocation(gw->getWidth()/2, gw->getHeight()/2); gw->add(cb); for (int i = 0; i < 4000; i++) { bool state = i % 2; cb->setSelected(state); bool gotState = cb->isSelected(); if (state != gotState) { cout << "oops" << endl; break; } } }
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"); }
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; }
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; }