void FormPlugin::drawText(ANPCanvas* canvas, TextInput textInput) { // get font metrics ANPFontMetrics fontMetrics; gPaintI.getFontMetrics(m_paintText, &fontMetrics); gCanvasI.drawText(canvas, textInput.text, textInput.charPtr, textInput.rect.left + 5, textInput.rect.bottom - fontMetrics.fBottom, m_paintText); }
void BackgroundPlugin::drawPlugin(int surfaceWidth, int surfaceHeight) { // get the plugin's dimensions according to the DOM PluginObject *obj = (PluginObject*) inst()->pdata; const int W = obj->window->width; const int H = obj->window->height; // compute the current zoom level const float zoomFactorW = static_cast<float>(surfaceWidth) / W; const float zoomFactorH = static_cast<float>(surfaceHeight) / H; // check to make sure the zoom level is uniform if (zoomFactorW + .01 < zoomFactorH && zoomFactorW - .01 > zoomFactorH) gLogI.log(kError_ANPLogType, " ------ %p zoom is out of sync (%f,%f)", inst(), zoomFactorW, zoomFactorH); // scale the variables based on the zoom level const int fontSize = (int)(zoomFactorW * 16); const int leftMargin = (int)(zoomFactorW * 10); // lock the surface ANPBitmap bitmap; JNIEnv* env = NULL; if (!m_surface || gVM->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK || !gSurfaceI.lock(env, m_surface, &bitmap, NULL)) { gLogI.log(kError_ANPLogType, " ------ %p unable to lock the plugin", inst()); return; } // create a canvas ANPCanvas* canvas = gCanvasI.newCanvas(&bitmap); gCanvasI.drawColor(canvas, 0xFFFFFFFF); ANPPaint* paint = gPaintI.newPaint(); gPaintI.setFlags(paint, gPaintI.getFlags(paint) | kAntiAlias_ANPPaintFlag); gPaintI.setColor(paint, 0xFFFF0000); gPaintI.setTextSize(paint, fontSize); ANPTypeface* tf = gTypefaceI.createFromName("serif", kItalic_ANPTypefaceStyle); gPaintI.setTypeface(paint, tf); gTypefaceI.unref(tf); ANPFontMetrics fm; gPaintI.getFontMetrics(paint, &fm); gPaintI.setColor(paint, 0xFF0000FF); const char c[] = "This is a background plugin."; gCanvasI.drawText(canvas, c, sizeof(c)-1, leftMargin, -fm.fTop, paint); // clean up variables and unlock the surface gPaintI.deletePaint(paint); gCanvasI.deleteCanvas(canvas); gSurfaceI.unlock(env, m_surface); }
void AudioPlugin::draw(ANPCanvas* canvas) { NPP instance = this->inst(); PluginObject *obj = (PluginObject*) instance->pdata; gLogI.log(instance, kError_ANPLogType, "Drawing"); const float trackHeight = 30; const float buttonWidth = 60; const float buttonHeight = 30; const int W = obj->window->width; const int H = obj->window->height; // color the plugin canvas gCanvasI.drawColor(canvas, 0xFFCDCDCD); // get font metrics ANPFontMetrics fontMetrics; gPaintI.getFontMetrics(m_paintText, &fontMetrics); // draw the track box (1 px from the edge) m_trackRect.left = 1; m_trackRect.top = 1; m_trackRect.right = W - 2; m_trackRect.bottom = 1 + trackHeight; gCanvasI.drawRect(canvas, &m_trackRect, m_paintTrack); // draw the progress bar if (m_soundPlay->progress > 0) { // TODO need to draw progress bar to cover the proper percentage of the track bar gCanvasI.drawRect(canvas, &m_trackRect, m_paintTrackProgress); } // draw the play box (under track box) m_playRect.left = m_trackRect.left + 5; m_playRect.top = m_trackRect.bottom + 10; m_playRect.right = m_playRect.left + buttonWidth; m_playRect.bottom = m_playRect.top + buttonHeight; gCanvasI.drawRect(canvas, &m_playRect, getPaint(&m_playRect)); // draw the play box (under track box) const char playText[] = "Play"; gCanvasI.drawText(canvas, playText, sizeof(playText)-1, m_playRect.left + 5, m_playRect.top - fontMetrics.fTop, m_paintText); // draw the pause box (under track box) m_pauseRect.left = m_playRect.right + 20; m_pauseRect.top = m_trackRect.bottom + 10; m_pauseRect.right = m_pauseRect.left + buttonWidth; m_pauseRect.bottom = m_pauseRect.top + buttonHeight; gCanvasI.drawRect(canvas, &m_pauseRect, getPaint(&m_pauseRect)); // draw the text in the pause box const char pauseText[] = "Pause"; gCanvasI.drawText(canvas, pauseText, sizeof(pauseText)-1, m_pauseRect.left + 5, m_pauseRect.top - fontMetrics.fTop, m_paintText); // draw the stop box (under track box) m_stopRect.left = m_pauseRect.right + 20; m_stopRect.top = m_trackRect.bottom + 10; m_stopRect.right = m_stopRect.left + buttonWidth; m_stopRect.bottom = m_stopRect.top + buttonHeight; gCanvasI.drawRect(canvas, &m_stopRect, getPaint(&m_stopRect)); // draw the text in the pause box const char stopText[] = "Stop"; gCanvasI.drawText(canvas, stopText, sizeof(stopText)-1, m_stopRect.left + 5, m_stopRect.top - fontMetrics.fTop, m_paintText); }
void PaintPlugin::drawCleanPlugin(ANPCanvas* canvas) { NPP instance = this->inst(); PluginObject *obj = (PluginObject*) instance->pdata; // if no canvas get a locked canvas if (!canvas) canvas = getCanvas(); if (!canvas) return; const float buttonWidth = 60; const float buttonHeight = 30; const int W = obj->window->width; const int H = obj->window->height; // color the plugin canvas gCanvasI.drawColor(canvas, 0xFFCDCDCD); // get font metrics ANPFontMetrics fontMetrics; gPaintI.getFontMetrics(m_paintSurface, &fontMetrics); // draw the input toggle button m_inputToggle.left = 5; m_inputToggle.top = H - buttonHeight - 5; m_inputToggle.right = m_inputToggle.left + buttonWidth; m_inputToggle.bottom = m_inputToggle.top + buttonHeight; gCanvasI.drawRect(canvas, &m_inputToggle, m_paintButton); const char* inputText = m_isTouchCurrentInput ? "Touch" : "Mouse"; gCanvasI.drawText(canvas, inputText, strlen(inputText), m_inputToggle.left + 5, m_inputToggle.top - fontMetrics.fTop, m_paintSurface); // draw the color selector button m_colorToggle.left = (W/3) - (buttonWidth/2); m_colorToggle.top = H - buttonHeight - 5; m_colorToggle.right = m_colorToggle.left + buttonWidth; m_colorToggle.bottom = m_colorToggle.top + buttonHeight; gCanvasI.drawRect(canvas, &m_colorToggle, m_paintButton); const char* colorText = getColorText(); gCanvasI.drawText(canvas, colorText, strlen(colorText), m_colorToggle.left + 5, m_colorToggle.top - fontMetrics.fTop, m_paintSurface); // draw the full-screen toggle button m_fullScreenToggle.left = ((W*2)/3) - (buttonWidth/2); m_fullScreenToggle.top = H - buttonHeight - 5; m_fullScreenToggle.right = m_fullScreenToggle.left + buttonWidth; m_fullScreenToggle.bottom = m_fullScreenToggle.top + buttonHeight; gCanvasI.drawRect(canvas, &m_fullScreenToggle, m_paintButton); const char* fullScreenText = "Full"; gCanvasI.drawText(canvas, fullScreenText, strlen(fullScreenText), m_fullScreenToggle.left + 5, m_fullScreenToggle.top - fontMetrics.fTop, m_paintSurface); // draw the clear canvas button m_clearSurface.left = W - buttonWidth - 5; m_clearSurface.top = H - buttonHeight - 5; m_clearSurface.right = m_clearSurface.left + buttonWidth; m_clearSurface.bottom = m_clearSurface.top + buttonHeight; gCanvasI.drawRect(canvas, &m_clearSurface, m_paintButton); const char* clearText = "Clear"; gCanvasI.drawText(canvas, clearText, strlen(clearText), m_clearSurface.left + 5, m_clearSurface.top - fontMetrics.fTop, m_paintSurface); // draw the drawing surface box (5 px from the edge) m_drawingSurface.left = 5; m_drawingSurface.top = 5; m_drawingSurface.right = W - 5; m_drawingSurface.bottom = m_colorToggle.top - 5; gCanvasI.drawRect(canvas, &m_drawingSurface, m_paintSurface); // release the canvas releaseCanvas(canvas); }