void ScriptEngine::importProgram(const QScriptProgram &program, const QScriptValue &scope, QScriptValue &targetObject) { QSet<QString> globalPropertyNames; { QScriptValueIterator it(globalObject()); while (it.hasNext()) { it.next(); globalPropertyNames += it.name(); } } pushContext(); if (scope.isObject()) currentContext()->pushScope(scope); QScriptValue result = evaluate(program); QScriptValue activationObject = currentContext()->activationObject(); if (scope.isObject()) currentContext()->popScope(); popContext(); if (Q_UNLIKELY(hasErrorOrException(result))) throw ErrorInfo(tr("Error when importing '%1': %2").arg(program.fileName(), result.toString())); // If targetObject is already an object, it doesn't get overwritten but enhanced by the // contents of the .js file. // This is necessary for library imports that consist of multiple js files. if (!targetObject.isObject()) targetObject = newObject(); // Copy every property of the activation object to the target object. // We do not just save a reference to the activation object, because QScriptEngine contains // special magic for activation objects that leads to unanticipated results. { QScriptValueIterator it(activationObject); while (it.hasNext()) { it.next(); if (debugJSImports) qDebug() << "[ENGINE] Copying property " << it.name(); targetObject.setProperty(it.name(), it.value()); } } // Copy new global properties to the target object and remove them from // the global object. This is to support direct variable assignments // without the 'var' keyword in JavaScript files. QScriptValueIterator it(globalObject()); while (it.hasNext()) { it.next(); if (globalPropertyNames.contains(it.name())) continue; if (debugJSImports) { qDebug() << "[ENGINE] inserting global property " << it.name() << " " << it.value().toString(); } targetObject.setProperty(it.name(), it.value()); it.remove(); } }
bool XLIFFHandler::startElement( const QString& namespaceURI, const QString& localName, const QString& /*qName*/, const QXmlAttributes& atts ) { if (namespaceURI == m_URI || namespaceURI == m_URI12) { if (localName == QLatin1String("xliff")) { // make sure that the stack is not empty during parsing pushContext(XC_xliff); } else if (localName == QLatin1String("file")) { m_fileName = atts.value(QLatin1String("original")); m_language = atts.value(QLatin1String("target-language")); } else if (localName == QLatin1String("group")) { pushContext(XC_group); if (atts.value(QLatin1String("restype")) == QLatin1String(restypeContext)) { m_context = atts.value(QLatin1String("resname")); } else { if (atts.value(QLatin1String("restype")) == QLatin1String(restypePlurals)) { pushContext(XC_restype_plurals); } m_comment.clear(); } } else if (localName == QLatin1String("trans-unit")) { if (atts.value(QLatin1String("translate")) == QLatin1String("no")) { m_type = TranslatorMessage::Obsolete; } m_comment.clear(); } else if (localName == QLatin1String("target")) { QString state = atts.value(QLatin1String("state")); if (state == QLatin1String("new")) { m_type = TranslatorMessage::Unfinished; } else if (state == QLatin1String("final")) { m_type = TranslatorMessage::Finished; } } else if (localName == QLatin1String("context-group")) { QString purpose = atts.value(QLatin1String("purpose")); if (purpose == QLatin1String("location")) { pushContext(XC_context_group); } } else if (currentContext() == XC_context_group && localName == QLatin1String("context")) { if ( atts.value(QLatin1String("context-type")) == QLatin1String("linenumber")) pushContext(XC_context_linenumber); } else if (localName == QLatin1String("ph")) { QString ctype = atts.value(QLatin1String("ctype")); if (ctype.startsWith(QLatin1String("x-ch-"))) { m_ctype = ctype.mid(5); } pushContext(XC_ph); } if (currentContext() != XC_ph) accum.clear(); return true; } return false; }
bool QEglContext::makeCurrent(EGLSurface surface) { if (ctx == EGL_NO_CONTEXT) { qWarning() << "QEglContext::makeCurrent(): Cannot make invalid context current"; return false; } if (surface == EGL_NO_SURFACE) { qWarning() << "QEglContext::makeCurrent(): Cannot make invalid surface current"; return false; } #ifdef Q_OS_SYMBIAN apiChanged = false; if (currentContext(apiType) && currentContext(apiType)->ctx != eglGetCurrentContext()) { // some other EGL based API active. Complete its rendering eglWaitClient(); apiChanged = true; } #endif // If lazyDoneCurrent() was called on the surface, then we may be able // to assume that it is still current within the thread. if (surface == currentSurface && currentContext(apiType) == this && !apiChanged) { current = true; return true; } current = true; currentSurface = surface; setCurrentContext(apiType, this); // Force the right API to be bound before making the context current. // The EGL implementation should be able to figure this out from ctx, // but some systems require the API to be explicitly set anyway. #ifdef EGL_OPENGL_ES_API if (apiType == QEgl::OpenGL) eglBindAPI(EGL_OPENGL_ES_API); #endif #ifdef EGL_OPENVG_API if (apiType == QEgl::OpenVG) eglBindAPI(EGL_OPENVG_API); #endif bool ok = eglMakeCurrent(QEgl::display(), surface, surface, ctx); if (!ok) qWarning() << "QEglContext::makeCurrent(" << surface << "):" << QEgl::errorString(); return ok; }
// Check if the current execution context can access a target frame. // First it checks same domain policy using the lexical context // // This is equivalent to KJS::Window::allowsAccessFrom(ExecState*, String&). bool V8Proxy::canAccessPrivate(DOMWindow* targetWindow) { ASSERT(targetWindow); String message; DOMWindow* originWindow = retrieveWindow(currentContext()); if (originWindow == targetWindow) return true; if (!originWindow) return false; const SecurityOrigin* activeSecurityOrigin = originWindow->securityOrigin(); const SecurityOrigin* targetSecurityOrigin = targetWindow->securityOrigin(); // We have seen crashes were the security origin of the target has not been // initialized. Defend against that. if (!targetSecurityOrigin) return false; if (activeSecurityOrigin->canAccess(targetSecurityOrigin)) return true; // Allow access to a "about:blank" page if the dynamic context is a // detached context of the same frame as the blank page. if (targetSecurityOrigin->isEmpty() && originWindow->frame() == targetWindow->frame()) return true; return false; }
void TextureMapperImageBuffer::drawTexture(const BitmapTexture& texture, const FloatRect& targetRect, const TransformationMatrix& matrix, float opacity, const BitmapTexture* maskTexture, unsigned /* exposedEdges */) { GraphicsContext* context = currentContext(); if (!context) return; const BitmapTextureImageBuffer& textureImageBuffer = static_cast<const BitmapTextureImageBuffer&>(texture); ImageBuffer* image = textureImageBuffer.m_image.get(); OwnPtr<ImageBuffer> maskedImage; if (maskTexture && maskTexture->isValid()) { const BitmapTextureImageBuffer* mask = static_cast<const BitmapTextureImageBuffer*>(maskTexture); maskedImage = ImageBuffer::create(maskTexture->contentSize()); GraphicsContext* maskContext = maskedImage->context(); maskContext->drawImageBuffer(image, ColorSpaceDeviceRGB, IntPoint::zero(), CompositeCopy); if (opacity < 1) { maskContext->setAlpha(opacity); opacity = 1; } maskContext->drawImageBuffer(mask->m_image.get(), ColorSpaceDeviceRGB, IntPoint::zero(), CompositeDestinationIn); image = maskedImage.get(); } context->save(); context->setAlpha(opacity); #if ENABLE(3D_RENDERING) context->concat3DTransform(matrix); #else context->concatCTM(matrix.toAffineTransform()); #endif context->drawImageBuffer(image, ColorSpaceDeviceRGB, targetRect); context->restore(); }
void TextureMapperImageBuffer::beginClip(const TransformationMatrix& matrix, const FloatRect& rect) { GraphicsContext* context = currentContext(); if (!context) return; #if ENABLE(3D_RENDERING) TransformationMatrix previousTransform = context->get3DTransform(); #else AffineTransform previousTransform = context->getCTM(); #endif context->save(); #if ENABLE(3D_RENDERING) context->concat3DTransform(matrix); #else context->concatCTM(matrix.toAffineTransform()); #endif context->clip(rect); #if ENABLE(3D_RENDERING) context->set3DTransform(previousTransform); #else context->setCTM(previousTransform); #endif }
void TextureMapperImageBuffer::drawSolidColor(const FloatRect& rect, const TransformationMatrix& matrix, const Color& color) { GraphicsContext* context = currentContext(); if (!context) return; context->save(); #if ENABLE(3D_RENDERING) context->concat3DTransform(matrix); #else context->concatCTM(matrix.toAffineTransform()); #endif context->fillRect(rect, color, ColorSpaceDeviceRGB); context->restore(); }
void QQuickContext2DTexture::paint(QQuickContext2DCommandBuffer *ccb) { QQuickContext2D::mutex.lock(); if (canvasDestroyed()) { delete ccb; QQuickContext2D::mutex.unlock(); return; } QQuickContext2D::mutex.unlock(); #if QT_CONFIG(opengl) GLAcquireContext currentContext(m_gl, m_surface); #endif if (!m_tiledCanvas) { paintWithoutTiles(ccb); delete ccb; return; } QRect tiledRegion = createTiles(m_canvasWindow.intersected(QRect(QPoint(0, 0), m_canvasSize))); if (!tiledRegion.isEmpty()) { QRect dirtyRect; for (QQuickContext2DTile* tile : qAsConst(m_tiles)) { if (tile->dirty()) { if (dirtyRect.isEmpty()) dirtyRect = tile->rect(); else dirtyRect |= tile->rect(); } } if (beginPainting()) { QQuickContext2D::State oldState = m_state; for (QQuickContext2DTile* tile : qAsConst(m_tiles)) { if (tile->dirty()) { ccb->replay(tile->createPainter(m_smooth, m_antialiasing), oldState, scaleFactor()); tile->drawFinished(); tile->markDirty(false); } compositeTile(tile); } endPainting(); m_state = oldState; markDirtyTexture(); } } delete ccb; }
bool XLIFFHandler::endElement(const QString& namespaceURI, const QString& localName, const QString& /*qName*/ ) { if (namespaceURI == m_URI || namespaceURI == m_URI12) { if (localName == QLatin1String("xliff")) { popContext(XC_xliff); } else if (localName == QLatin1String("source")) { m_source = accum; } else if (localName == QLatin1String("target")) { translations.append(accum); } else if (localName == QLatin1String("context-group")) { popContext(XC_context_group); } else if (currentContext() == XC_context_linenumber && localName == QLatin1String("context")) { bool ok; m_lineNumber = accum.trimmed().toInt(&ok); if (!ok) m_lineNumber = -1; popContext(XC_context_linenumber); } else if (localName == QLatin1String("note")) { m_comment = accum; } else if (localName == QLatin1String("ph")) { m_ctype.clear(); popContext(XC_ph); } else if (localName == QLatin1String("trans-unit")) { if (!hasContext(XC_restype_plurals)) { tor->insert( TranslatorMessage(m_context.toUtf8(), m_source.toUtf8(), m_comment.toUtf8(), "", m_fileName, m_lineNumber, translations, true, m_type, false) ); translations.clear(); m_lineNumber = -1; } } else if (localName == QLatin1String("group")) { if (hasContext(XC_restype_plurals)) { tor->insert( TranslatorMessage(m_context.toUtf8(), m_source.toUtf8(), m_comment.toUtf8(), "", m_fileName, m_lineNumber, translations, true, m_type, true) ); popContext(XC_restype_plurals); translations.clear(); m_lineNumber = -1; } popContext(XC_group); } return true; } return false; }
bool XLIFFHandler::characters(const QString &ch) { if (currentContext() == XC_ph) { // handle the content of <ph> elements for (int i = 0; i < ch.count(); ++i) { QChar chr = ch.at(i); if (accum.endsWith(QLatin1Char('\\'))) accum[accum.size() - 1] = QLatin1Char(charFromEscape(chr.toAscii())); else accum.append(chr); } } else { QString t = ch; t.replace(QLatin1String("\r"), QLatin1String("")); accum.append(t); } return true; }
void TextureMapperImageBuffer::drawTexture(const BitmapTexture& texture, const FloatRect& targetRect, const TransformationMatrix& matrix, float opacity, unsigned /* exposedEdges */) { GraphicsContext* context = currentContext(); if (!context) return; const BitmapTextureImageBuffer& textureImageBuffer = static_cast<const BitmapTextureImageBuffer&>(texture); ImageBuffer* image = textureImageBuffer.m_image.get(); context->save(); context->setCompositeOperation(isInMaskMode() ? CompositeDestinationIn : CompositeSourceOver); context->setAlpha(opacity); #if ENABLE(3D_RENDERING) context->concat3DTransform(matrix); #else context->concatCTM(matrix.toAffineTransform()); #endif context->drawImageBuffer(image, ColorSpaceDeviceRGB, targetRect); context->restore(); }
// called when the keyboard is opened or closed // virtual void TextService::onKeyboardStatusChanged(bool opened) { Ime::TextService::onKeyboardStatusChanged(opened); if(client_) client_->onKeyboardStatusChanged(opened); if(opened) { // keyboard is opened } else { // keyboard is closed if(isComposing()) { // end current composition if needed ITfContext* context = currentContext(); if(context) { endComposition(context); context->Release(); } } if(showingCandidates()) // disable candidate window if it's opened hideCandidates(); hideMessage(); // hide message window, if there's any } }
/** * @brief Writes a string as an element's content (libxml2 compatibility function) * @param writer An EXIStream * @param content String * @return 0 if success, -1 if error */ static int xmlTextWriterWriteString(xmlTextWriterPtr writer, const xmlChar *content) { int ret = 0; PRINT ("CH [%s] (%d)\n", (char *)content, strlen((char *)content)); if (g_schemaPtr) { String uri = {NULL,0}; String localName = {NULL,0}; QName qname = {&uri, &localName, NULL }; ret = ExiSerialize(writer, qname, (char *)content, FALSE, currentContext()->valueType); } else { String chVal; ret += asciiToString((char *)content, &chVal, &writer->memList, FALSE); PRINT ("serialize.stringData (%s)\n", (char *)content); ret += serialize.stringData(writer, chVal); } if (ret) return -1; return 0; }
V8Proxy* V8Proxy::retrieve() { DOMWindow* window = retrieveWindow(currentContext()); ASSERT(window); return retrieve(window->frame()); }
bool XLIFFHandler::startElement(const QString& namespaceURI, const QString &localName, const QString &qName, const QXmlAttributes &atts ) { Q_UNUSED(qName); if (namespaceURI == m_URITT) goto bail; if (namespaceURI != m_URI && namespaceURI != m_URI12) return false; if (localName == QLatin1String("xliff")) { // make sure that the stack is not empty during parsing pushContext(XC_xliff); } else if (localName == QLatin1String("file")) { m_fileName = atts.value(QLatin1String("original")); m_language = atts.value(QLatin1String("target-language")); m_language.replace(QLatin1Char('-'), QLatin1Char('_')); m_sourceLanguage = atts.value(QLatin1String("source-language")); m_sourceLanguage.replace(QLatin1Char('-'), QLatin1Char('_')); if (m_sourceLanguage == QLatin1String("en")) m_sourceLanguage.clear(); } else if (localName == QLatin1String("group")) { if (atts.value(QLatin1String("restype")) == QLatin1String(restypeContext)) { m_context = atts.value(QLatin1String("resname")); pushContext(XC_restype_context); } else { if (atts.value(QLatin1String("restype")) == QLatin1String(restypePlurals)) { pushContext(XC_restype_plurals); m_id = atts.value(QLatin1String("id")); if (atts.value(QLatin1String("translate")) == QLatin1String("no")) m_type = TranslatorMessage::Obsolete; } else { pushContext(XC_group); } } } else if (localName == QLatin1String("trans-unit")) { if (!hasContext(XC_restype_plurals) || m_sources.isEmpty() /* who knows ... */) if (atts.value(QLatin1String("translate")) == QLatin1String("no")) m_type = TranslatorMessage::Obsolete; if (!hasContext(XC_restype_plurals)) { m_id = atts.value(QLatin1String("id")); if (m_id.startsWith(QLatin1String("_msg"))) m_id.clear(); } if (m_type != TranslatorMessage::Obsolete && atts.value(QLatin1String("approved")) != QLatin1String("yes")) m_type = TranslatorMessage::Unfinished; pushContext(XC_trans_unit); m_hadAlt = false; } else if (localName == QLatin1String("alt-trans")) { pushContext(XC_alt_trans); } else if (localName == QLatin1String("source")) { m_isPlural = atts.value(QLatin1String(attribPlural)) == QLatin1String("yes"); } else if (localName == QLatin1String("target")) { if (atts.value(QLatin1String("restype")) != QLatin1String(restypeDummy)) pushContext(XC_restype_translation); } else if (localName == QLatin1String("context-group")) { QString purpose = atts.value(QLatin1String("purpose")); if (purpose == QLatin1String("location")) pushContext(XC_context_group); else pushContext(XC_context_group_any); } else if (currentContext() == XC_context_group && localName == QLatin1String("context")) { QString ctxtype = atts.value(QLatin1String("context-type")); if (ctxtype == QLatin1String("linenumber")) pushContext(XC_context_linenumber); else if (ctxtype == QLatin1String("sourcefile")) pushContext(XC_context_filename); } else if (currentContext() == XC_context_group_any && localName == QLatin1String("context")) { QString ctxtype = atts.value(QLatin1String("context-type")); if (ctxtype == QLatin1String(contextMsgctxt)) pushContext(XC_context_comment); else if (ctxtype == QLatin1String(contextOldMsgctxt)) pushContext(XC_context_old_comment); } else if (localName == QLatin1String("note")) { if (atts.value(QLatin1String("annotates")) == QLatin1String("source") && atts.value(QLatin1String("from")) == QLatin1String("developer")) pushContext(XC_extra_comment); else pushContext(XC_translator_comment); } else if (localName == QLatin1String("ph")) { QString ctype = atts.value(QLatin1String("ctype")); if (ctype.startsWith(QLatin1String("x-ch-"))) m_ctype = ctype.mid(5); pushContext(XC_ph); } bail: if (currentContext() != XC_ph) accum.clear(); return true; }
GLContext* GLContext::current() { return currentContext()->context(); }
bool GLContext::makeContextCurrent() { currentContext()->setContext(this); return true; }
//---------------------------------------------------------------- // FlickableArea::onTimeout // void FlickableArea::animate() { if (p_->estimating_) { // do not interfere with velocity estimation: return; } Scrollview & scrollview = Item::ancestor<Scrollview>(); double sh = scrollview.height(); double ch = scrollview.content_->height(); double yRange = sh - ch; boost::chrono::steady_clock::time_point tNow = boost::chrono::steady_clock::now(); double secondsElapsed = boost::chrono::duration<double> (tNow - p_->tStart_).count(); double v0 = p_->v0_; double dy = v0 * secondsElapsed; double ds = dy / yRange; double s = std::min<double>(1.0, std::max<double>(0.0, scrollview.position_ + ds)); scrollview.position_ = s; p_->tStart_ = tNow; { TMakeCurrentContext currentContext(*(p_->itemView_.context())); p_->scrollbar_.uncache(); } if (s == 0.0 || s == 1.0 || v0 == 0.0) { // motion stopped, stop the animation: p_->dontAnimate(); return; } // deceleration (friction) coefficient: const double k = sh * 0.1; double v1 = v0 * (1.0 - k * secondsElapsed / fabs(v0)); if (v0 * v1 < 0.0) { // bounce detected: p_->dontAnimate(); return; } #if 0 std::cerr << "FIXME: v0: " << v0 << ", v1: " << v1 << ", dv: " << v1 - v0 << std::endl; #endif YAE_ASSERT(fabs(v1) < fabs(v0)); p_->v0_ = v1; }
GLContext::~GLContext() { if (this == currentContext()->context()) currentContext()->setContext(nullptr); }