/**
 * 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;
}
Example #2
0
/**
 * 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;
}