void Viewport::drawPolygon(Object* obj){ auto coords = obj->getNCoords(); Coordinates nCoords; if(coords.size() == 1){// Usuario quer um ponto? drawPoint(obj); return; }else if(coords.size() == 2){// Usuario quer uma linha? drawLine(obj); return; } transformCoordinates(coords, nCoords); prepareContext(obj); cairo_move_to(m_cairo, nCoords[0].x, nCoords[0].y); for(unsigned int i = 0; i<nCoords.size(); i++) cairo_line_to(m_cairo, nCoords[i].x, nCoords[i].y); cairo_close_path(m_cairo); Polygon* p = (Polygon*) obj; if(p->filled()){ cairo_stroke_preserve(m_cairo); cairo_fill(m_cairo); }else cairo_stroke(m_cairo); }
void Viewport::drawPoint(Object* obj){ Coordinate coord = transformCoordinate(obj->getCoord(0)); prepareContext(); cairo_move_to(_cairo, coord.x, coord.y); cairo_arc(_cairo, coord.x, coord.y, 1.0, 0.0, (2*PI) );//pnt deveria ir diminuindo, nao? cairo_fill(_cairo); }
void Viewport::drawPoint(Object* obj){ Coordinate coord = transformCoordinate(obj->getNCoord(0)); prepareContext(obj); float size = (m_width/m_window.getWidth())/2; size = size < 0.7 ? 0.7 : (size > 2 ? 2 : size);//Limita entre 0.7 e 2 cairo_move_to(m_cairo, coord.x, coord.y); cairo_arc(m_cairo, coord.x, coord.y, size, 0.0, (2*PI) );//pnt deveria ir diminuindo, nao? cairo_fill(m_cairo); }
void Viewport::drawCurve(Object* obj){ auto coords = obj->getNCoords(); Coordinates nCoords; transformCoordinates(coords, nCoords); prepareContext(obj); cairo_move_to(m_cairo, nCoords[0].x, nCoords[0].y); for(unsigned int i = 0; i<nCoords.size(); i++) cairo_line_to(m_cairo, nCoords[i].x, nCoords[i].y); cairo_stroke(m_cairo); }
void Viewport::drawLine(Object* obj){ auto coords = obj->getCoords(); if(coords[0] == coords[1]){// Usuario quer um ponto? drawPoint(obj); return; } coords = transformCoordinates(coords); prepareContext(); cairo_move_to(_cairo, coords[0].x, coords[0].y); cairo_line_to(_cairo, coords[1].x, coords[1].y); cairo_stroke(_cairo); }
void LayerAndroid::onDraw(SkCanvas* canvas, SkScalar opacity) { if (m_haveClip) { SkRect r; r.set(0, 0, getSize().width(), getSize().height()); canvas->clipRect(r); } if (!prepareContext()) return; // we just have this save/restore for opacity... SkAutoCanvasRestore restore(canvas, true); int canvasOpacity = SkScalarRound(opacity * 255); if (canvasOpacity < 255) canvas->setDrawFilter(new OpacityDrawFilter(canvasOpacity)); canvas->drawPicture(*m_recordingPicture); #if ENABLE(WEBGL) if (m_context.get()) { m_context->paint(canvas); } #endif if (m_extra) m_extra->draw(canvas, this); #ifdef LAYER_DEBUG float w = getSize().width(); float h = getSize().height(); SkPaint paint; paint.setARGB(128, 255, 0, 0); canvas->drawLine(0, 0, w, h, paint); canvas->drawLine(0, h, w, 0, paint); paint.setARGB(128, 0, 255, 0); canvas->drawLine(0, 0, 0, h, paint); canvas->drawLine(0, h, w, h, paint); canvas->drawLine(w, h, w, 0, paint); canvas->drawLine(w, 0, 0, 0, paint); if (m_isFixed) { SkRect layerRect = computeLayerRect(this); SkPaint paint; paint.setARGB(128, 0, 0, 255); canvas->drawRect(layerRect, paint); } #endif }
SkPicture* LayerAndroid::recordContext() { if (prepareContext(true)) return m_recordingPicture; return 0; }