/** * Instantiates ball in center of window. Returns ball. */ GOval initBall(GWindow window) { int size = RADIUS*2; GOval ball = newGOval(WIDTH/2, HEIGHT/2, size, size); setFilled(ball, true); setColor(ball, "#3366FF"); sendToFront(ball); return ball; }
int main() { GWindow gw = newGWindow(600, 400); GRect rect = NULL; bool dragging = false; double startX = 0.0; double startY = 0.0; while (true) { GEvent e = waitForEvent(MOUSE_EVENT | KEY_EVENT); if (getEventType(e) == MOUSE_PRESSED) { startX = getX(e); startY = getY(e); rect = getGObjectAt(gw, startX, startY); dragging = (rect != NULL); if (!dragging) { rect = newGRect(startX, startY, 0, 0); setFilled(rect, true); add(gw, rect); } } else if (getEventType(e) == MOUSE_DRAGGED) { double x = getX(e); double y = getY(e); if (dragging) { move(rect, x - startX, y - startY); startX = x; startY = y; } else { double width = fabs(x - startX); double height = fabs(y - startY); x = fmin(x, startX); y = fmin(y, startY); setBounds(rect, x, y, width, height); } } else if (getEventType(e) == MOUSE_CLICKED) { if (rect != NULL) sendToFront(rect); } else if (getEventType(e) == KEY_TYPED) { if (rect != NULL) { string color = "BLACK"; switch (getKeyChar(e)) { case 'b': color = "BLUE"; break; case 'c': color = "CYAN"; break; case 'g': color = "GREEN"; break; case 'm': color = "MAGENTA"; break; case 'o': color = "ORANGE"; break; case 'r': color = "RED"; break; case 'w': color = "WHITE"; break; case 'y': color = "YELLOW"; break; } setColor(rect, color); } } } }