void SmudgeTool::mouseMoveEvent(QMouseEvent *event) { Layer* layer = mEditor->layers()->currentLayer(); if (layer == NULL) { return; } if (layer->type() == Layer::BITMAP || layer->type() == Layer::VECTOR) { if (event->buttons() & Qt::LeftButton) // the user is also pressing the mouse (dragging) { { if (layer->type() == Layer::BITMAP) { drawStroke(); } else if (layer->type() == Layer::VECTOR) { if (event->modifiers() != Qt::ShiftModifier) // (and the user doesn't press shift) { // transforms the selection mScribbleArea->selectionTransformation = QTransform().translate(mScribbleArea->mOffset.x(), mScribbleArea->mOffset.y()); ((LayerVector *)layer)->getLastVectorImageAtFrame( mEditor->currentFrame(), 0)->setSelectionTransformation(mScribbleArea->selectionTransformation); } } } else // the user is moving the mouse without pressing it { if (layer->type() == Layer::VECTOR) { mScribbleArea->mClosestVertices = ((LayerVector *)layer)->getLastVectorImageAtFrame(mEditor->currentFrame(), 0) ->getVerticesCloseTo( getCurrentPoint(), mScribbleArea->tol / mEditor->view()->scaling() ); } } mScribbleArea->update(); mScribbleArea->setAllDirty(); } }
void SmudgeTool::mouseReleaseEvent(QMouseEvent *event) { Layer *layer = m_pEditor->getCurrentLayer(); if (layer == NULL) { return; } if (event->button() == Qt::LeftButton) { if (layer->type == Layer::BITMAP) { drawStroke(); m_pScribbleArea->paintBitmapBuffer(); m_pScribbleArea->setAllDirty(); endStroke(); } else if (layer->type == Layer::VECTOR) { VectorImage *vectorImage = ((LayerVector *)layer)->getLastVectorImageAtFrame(m_pEditor->m_nCurrentFrameIndex, 0); vectorImage->applySelectionTransformation(); m_pScribbleArea->selectionTransformation.reset(); for (int k = 0; k < m_pScribbleArea->vectorSelection.curve.size(); k++) { int curveNumber = m_pScribbleArea->vectorSelection.curve.at(k); vectorImage->curve[curveNumber].smoothCurve(); } m_pScribbleArea->setModified(m_pEditor->m_nCurrentLayerIndex, m_pEditor->m_nCurrentFrameIndex); } } }
void EraserTool::mouseReleaseEvent(QMouseEvent *event) { Layer *layer = m_pEditor->getCurrentLayer(); if (event->button() == Qt::LeftButton) { if (m_pScribbleArea->isLayerPaintable()) { drawStroke(); } if (layer->type == Layer::BITMAP) { m_pScribbleArea->paintBitmapBuffer(); m_pScribbleArea->setAllDirty(); } else if (layer->type == Layer::VECTOR) { VectorImage *vectorImage = ((LayerVector *)layer)->getLastVectorImageAtFrame(m_pEditor->m_nCurrentFrameIndex, 0); // Clear the area containing the last point //vectorImage->removeArea(lastPoint); // Clear the temporary pixel path m_pScribbleArea->clearBitmapBuffer(); vectorImage->deleteSelectedPoints(); //update(); m_pScribbleArea->setModified(m_pEditor->m_nCurrentLayerIndex, m_pEditor->m_nCurrentFrameIndex); m_pScribbleArea->setAllDirty(); } } endStroke(); }
void PencilTool::pointerMoveEvent(PointerEvent* event) { if (event->buttons() & Qt::LeftButton) { mCurrentPressure = strokeManager()->getPressure(); drawStroke(); if (properties.stabilizerLevel != strokeManager()->getStabilizerLevel()) strokeManager()->setStabilizerLevel(properties.stabilizerLevel); } }
void BrushTool::mouseMoveEvent( QMouseEvent *event ) { Layer* layer = mEditor->layers()->currentLayer(); if ( layer->type() == Layer::BITMAP || layer->type() == Layer::VECTOR ) { if ( event->buttons() & Qt::LeftButton ) { drawStroke(); } } }
void PenTool::mouseMoveEvent( QMouseEvent *event ) { Layer* layer = mEditor->layers()->currentLayer(); if ( layer->type() == Layer::BITMAP || layer->type() == Layer::VECTOR ) { if ( event->buttons() & Qt::LeftButton ) { drawStroke(); //qDebug() << "DrawStroke" << event->pos() ; } } }
void BrushTool::mouseReleaseEvent( QMouseEvent *event ) { Layer* layer = mEditor->layers()->currentLayer(); if ( event->button() == Qt::LeftButton ) { if ( mScribbleArea->isLayerPaintable() ) { if (getCurrentPoint()==mMouseDownPoint) { paintAt(mMouseDownPoint); } else { drawStroke(); } } if ( layer->type() == Layer::BITMAP ) { mScribbleArea->paintBitmapBuffer(); mScribbleArea->setAllDirty(); mScribbleArea->clearBitmapBuffer(); } else if ( layer->type() == Layer::VECTOR && mStrokePoints.size() > -1 ) { // Clear the temporary pixel path mScribbleArea->clearBitmapBuffer(); qreal tol = mScribbleArea->getCurveSmoothing() / mEditor->view()->scaling(); BezierCurve curve( mStrokePoints, mStrokePressures, tol ); curve.setWidth( properties.width ); curve.setFeather( properties.feather ); curve.setInvisibility( false ); curve.setVariableWidth( properties.pressure ); curve.setColourNumber( mEditor->color()->frontColorNumber() ); auto pLayerVector = static_cast< LayerVector* >( layer ); VectorImage* vectorImage = pLayerVector->getLastVectorImageAtFrame( mEditor->currentFrame(), 0 ); vectorImage->insertCurve( 0, curve, mEditor->view()->scaling(), false ); mScribbleArea->setModified( mEditor->layers()->currentLayerIndex(), mEditor->currentFrame() ); mScribbleArea->setAllDirty(); } } endStroke(); }
void BucketTool::mouseMoveEvent( QMouseEvent *event ) { Layer* layer = mEditor->layers()->currentLayer(); if ( layer->type() == Layer::BITMAP) { Q_UNUSED( event ); } else if (layer->type() == Layer::VECTOR ) { if ( event->buttons() & Qt::LeftButton ) { drawStroke(); qDebug() << "DrawStroke" << event->pos() ; } } Q_UNUSED( event ); }
void PencilTool::pointerReleaseEvent(PointerEvent*) { mEditor->backup(typeName()); qreal distance = QLineF(getCurrentPoint(), mMouseDownPoint).length(); if (distance < 1) { paintAt(mMouseDownPoint); } else { drawStroke(); } Layer* layer = mEditor->layers()->currentLayer(); if (layer->type() == Layer::BITMAP) paintBitmapStroke(); else if (layer->type() == Layer::VECTOR) paintVectorStroke(layer); endStroke(); }
void DocumentView::drawElement(cairo_t* cr, Element* e) { XOJ_CHECK_TYPE(DocumentView); if (e->getType() == ELEMENT_STROKE) { drawStroke(cr, (Stroke*) e); } else if (e->getType() == ELEMENT_TEXT) { drawText(cr, (Text*) e); } else if (e->getType() == ELEMENT_IMAGE) { drawImage(cr, (Image*) e); } else if (e->getType() == ELEMENT_TEXIMAGE) { drawTexImage(cr, (TexImage*) e); } }
void BrushTool::mouseReleaseEvent(QMouseEvent *event) { Layer *layer = m_pEditor->getCurrentLayer(); if (event->button() == Qt::LeftButton) { if (m_pScribbleArea->isLayerPaintable()) { drawStroke(); } if (layer->type == Layer::BITMAP) { m_pScribbleArea->paintBitmapBuffer(); m_pScribbleArea->setAllDirty(); } else if (layer->type == Layer::VECTOR) { } } endStroke(); }
void EraserTool::mouseMoveEvent(QMouseEvent *event) { Layer *layer = m_pEditor->getCurrentLayer(); if (event->buttons() & Qt::LeftButton) { if (layer->type == Layer::BITMAP || layer->type == Layer::VECTOR) { drawStroke(); } if (layer->type == Layer::VECTOR) { qreal radius = (properties.width / 2) / m_pScribbleArea->getTempViewScaleX(); QList<VertexRef> nearbyVertices = ((LayerVector *)layer)->getLastVectorImageAtFrame(m_pEditor->m_nCurrentFrameIndex, 0) ->getVerticesCloseTo(getCurrentPoint(), radius); for (int i = 0; i < nearbyVertices.size(); i++) { ((LayerVector *)layer)->getLastVectorImageAtFrame(m_pEditor->m_nCurrentFrameIndex, 0)->setSelected(nearbyVertices.at(i), true); } //update(); m_pScribbleArea->setAllDirty(); } } }
TAM::TAM(int numTones, int numRes, Image* stroke) : images(numTones, std::vector<Image*>(numRes)) { std::vector<Image> candidates(numRes); for (int tone = 0; tone < numTones; ++tone) { int imageSize = 1; for (int resolution = 0; resolution < numRes; ++resolution) { images[tone][resolution] = new Image(imageSize, imageSize); static Pixel white = Pixel(1,1,1); images[tone][resolution]->fillImage(white); if (tone == 0) { candidates[resolution] = Image(imageSize, imageSize); } imageSize *= 2; } } double darkestTone =.9; double lightestTone = .15; double toneInterval; if (numTones == 1) { toneInterval = darkestTone - lightestTone; } else { toneInterval = (darkestTone - lightestTone) / (numTones - 1); } for (int toneLevel = 0; toneLevel < numTones; ++toneLevel) { double maxTone = lightestTone + toneInterval * toneLevel; while (fabs(maxTone - images[toneLevel][numRes-1]->getTone()) > (.1/(numRes-3))) { RandomStroke bestStroke; double bestTone = -10000; for (int i = 0; i < 25; ++i) { double toneSum = 0; bool horizontalStroke = maxTone <= .7; RandomStroke currentStroke = getRandomStroke(horizontalStroke); for (int resolution = 3; resolution < numRes; ++resolution) { if (fabs(maxTone - images[toneLevel][resolution]->getTone()) > (.1/(resolution-3+1.))) { drawStroke(stroke, currentStroke, &candidates[resolution]); // Get the effective length of the stroke, given that it might "run off" the edge double withStroke = fabs(maxTone - candidates[resolution].getTone()); double withoutStroke = fabs(maxTone - images[toneLevel][resolution]->getTone()); if (withoutStroke < withStroke) { continue; } double toneContribution = candidates[resolution].getTone() - images[toneLevel][resolution]->getTone(); // // All images are squares, side lengths are equal // const double imageSize = images[toneLevel][resolution]->getWidth(); // // double actualStrokeLength = currentStroke.length * stroke->getWidth(); // double normalizedStrokeLength; // double actualStrokeX = currentStroke.x*imageSize; // double actualStrokeY = currentStroke.y*imageSize; // if(horizontalStroke){ // normalizedStrokeLength = getActualStrokeLength(actualStrokeX, actualStrokeLength, imageSize); // } // else { // normalizedStrokeLength = getActualStrokeLength(actualStrokeY, actualStrokeLength, imageSize); // } toneContribution /= currentStroke.length; toneSum += toneContribution; candidates[resolution] = *images[toneLevel][resolution]; } } if (toneSum > bestTone) { bestTone = toneSum; bestStroke = currentStroke; } } for (int candidate = 3; candidate < numRes; ++candidate) { if (fabs(maxTone - images[toneLevel][candidate]->getTone()) > (.1/(candidate-3 + 1.))) { drawStroke(stroke, bestStroke, images[toneLevel][candidate]); candidates[candidate] = *images[toneLevel][candidate]; } } } for (int resolution=0; resolution<3; resolution++){ float greyLevel = 1-maxTone; Pixel grey(greyLevel, greyLevel, greyLevel); images[toneLevel][resolution]->fillImage(grey); } if (toneLevel != numTones - 1) { for (int resolution = 0; resolution < numRes; ++resolution) { *images[toneLevel+1][resolution] = *images[toneLevel][resolution]; candidates[resolution] = *images[toneLevel][resolution]; } } } }
void scene_resurt_draw() { //画面分割の初期化 glViewport(0, 0, width, height); /*塗られたパネルの枚数を%で保持*/ float p = (float)panel_count_player / (float)(FIELD_SIZE*FIELD_SIZE) * 100.0f; int pp = p; char str[256]; sprintf(str, "%d %%", pp); glMatrixMode(GL_PROJECTION);//GLenum mode glLoadIdentity();//射影行列の初期化 glMatrixMode(GL_MODELVIEW);//GLenum mode カメラの設定 glLoadIdentity();//初期化 setColor(TEAM_PLAYER_SHIP); glTranslatef(-.7, .5, 0);//x,y,z glScalef(0.00075, 0.00075, 0.00075); drawStroke("PLAYER1 TEAM:"); glLoadIdentity();//初期化 glTranslatef(.15, .5, 0);//x,y,z glScalef(0.00075, 0.00075, 0.00075); drawStroke(str); p = (float)panel_count_enemy / (float)(FIELD_SIZE*FIELD_SIZE) * 100.0f; pp = p; sprintf(str, "%d %%", pp); glLoadIdentity();//初期化 setColor(TEAM_ENEMY_SHIP); glTranslatef(-.7, 0, 0);//x,y,z glScalef(0.00075, 0.00075, 0.00075); drawStroke("PLAYER2 TEAM:"); glLoadIdentity(); glTranslatef(.15, 0, 0);//x,y,z glScalef(0.00075, 0.00075, 0.00075); drawStroke(str); //プレイヤー2がプレイヤー1より塗った数が多かったら if (panel_count_enemy>panel_count_player) { glLoadIdentity();//初期化 setColor(TEAM_ENEMY_SHIP); glTranslatef(0, -0.7, 0);//x,y,z glScalef(0.00075, 0.00075, 0.00075); drawStroke("PLAYER2 WIN!!!!"); }//プレイヤー1がプレイヤー2より塗った数が多かったら else if (panel_count_player>panel_count_enemy) { glLoadIdentity();//初期化 setColor(TEAM_PLAYER_SHIP); glTranslatef(0, -0.7, 0);//x,y,z glScalef(0.00075, 0.00075, 0.00075); drawStroke("PLAYER1 WIN!!!!"); } glLoadIdentity();//初期化 glColor3f(0, 1, 1); glTranslatef(0, -0.8, 0);//x,y,z glScalef(0.0005, 0.00055, 0.0005); drawStroke("push ENTER / BUTTON B"); }