/** * Handle eraser event: "Delete Stroke" and "Standard", Whiteout is not handled here */ void EraseHandler::erase(double x, double y) { XOJ_CHECK_TYPE(EraseHandler); this->halfEraserSize = this->handler->getThickness(); GdkRectangle eraserRect = { gint(x - halfEraserSize), gint(y - halfEraserSize), gint(halfEraserSize * 2), gint(halfEraserSize * 2) }; Range* range = new Range(x, y); Layer* l = page->getSelectedLayer(); ElementVector tmp(*l->getElements()); for (Element* e : tmp) { if (e->getType() == ELEMENT_STROKE && e->intersectsArea(&eraserRect)) { eraseStroke(l, (Stroke*) e, x, y, range); } } this->view->rerenderRange(*range); delete range; }
/** * Handle eraser event: "Delete Stroke" and "Standard", Whiteout is not handled here */ void EraseHandler::erase(double x, double y) { XOJ_CHECK_TYPE(EraseHandler); ListIterator<Layer*> it = this->page.layerIterator(); int selected = page.getSelectedLayerId(); this->halfEraserSize = this->handler->getThickness(); GdkRectangle eraserRect = { x - halfEraserSize, y - halfEraserSize, halfEraserSize * 2, halfEraserSize * 2 }; Range * range = new Range(x, y); while (it.hasNext() && selected) { Layer * l = it.next(); ListIterator<Element *> eit = l->elementIterator(); eit.freeze(); while (eit.hasNext()) { Element * e = eit.next(); if (e->getType() == ELEMENT_STROKE && e->intersectsArea(&eraserRect)) { Stroke * s = (Stroke *) e; eraseStroke(l, s, x, y, range); } } selected--; } this->view->rerenderRange(*range); delete range; }