static bool heightMediaFeatureEval(CSSValue* value, RenderStyle* style, Frame* frame, MediaFeaturePrefix op) { FrameView* view = frame->view(); RenderStyle* rootStyle = frame->document()->documentElement()->renderStyle(); if (value) return value->isPrimitiveValue() && compareValue(view->layoutHeight(), static_cast<CSSPrimitiveValue*>(value)->computeLengthInt(style, rootStyle), op); return view->layoutHeight() != 0; }
static bool heightMediaFeatureEval(CSSValue* value, RenderStyle* style, Frame* frame, MediaFeaturePrefix op) { FrameView* view = frame->view(); if (value) { int height = view->layoutHeight(); if (RenderView* renderView = frame->document()->renderView()) height = adjustForAbsoluteZoom(height, renderView); RenderStyle* rootStyle = frame->document()->documentElement()->renderStyle(); int length; return computeLength(value, !frame->document()->inQuirksMode(), style, rootStyle, length) && compareValue(height, length, op); } return view->layoutHeight() != 0; }
static bool heightMediaFeatureEval(CSSValue* value, const CSSToLengthConversionData& conversionData, Frame* frame, MediaFeaturePrefix op) { FrameView* view = frame->view(); if (!view) return false; if (value) { int height = view->layoutHeight(); if (RenderView* renderView = frame->document()->renderView()) height = adjustForAbsoluteZoom(height, *renderView); int length; return computeLength(value, !frame->document()->inQuirksMode(), conversionData, length) && compareValue(height, length, op); } return view->layoutHeight() != 0; }
static bool aspect_ratioMediaFeatureEval(CSSValue* value, RenderStyle*, Frame* frame, MediaFeaturePrefix op) { if (value) { FrameView* view = frame->view(); return compareAspectRatioValue(value, view->layoutWidth(), view->layoutHeight(), op); } // ({,min-,max-}aspect-ratio) // assume if we have a device, its aspect ratio is non-zero return true; }
static bool orientationMediaFeatureEval(CSSValue* value, RenderStyle*, Frame* frame, MediaFeaturePrefix) { // A missing parameter should fail if (!value) return false; FrameView* view = frame->view(); int width = view->layoutWidth(); int height = view->layoutHeight(); if (width > height) // Square viewport is portrait return "landscape" == static_cast<CSSPrimitiveValue*>(value)->getStringValue(); return "portrait" == static_cast<CSSPrimitiveValue*>(value)->getStringValue(); }
static bool aspect_ratioMediaFeatureEval(CSSValue* value, const CSSToLengthConversionData&, Frame* frame, MediaFeaturePrefix op) { FrameView* view = frame->view(); if (!view) return true; if (value) return compareAspectRatioValue(value, view->layoutWidth(), view->layoutHeight(), op); // ({,min-,max-}aspect-ratio) // assume if we have a device, its aspect ratio is non-zero return true; }
static bool orientationMediaFeatureEval(CSSValue* value, RenderStyle*, Frame* frame, MediaFeaturePrefix) { FrameView* view = frame->view(); int width = view->layoutWidth(); int height = view->layoutHeight(); if (value && value->isPrimitiveValue()) { const int id = static_cast<CSSPrimitiveValue*>(value)->getIdent(); if (width > height) // Square viewport is portrait. return CSSValueLandscape == id; return CSSValuePortrait == id; } // Expression (orientation) evaluates to true if width and height >= 0. return height >= 0 && width >= 0; }
static bool aspect_ratioMediaFeatureEval(CSSValue* value, RenderStyle*, Frame* frame, MediaFeaturePrefix op) { if (value) { FrameView* view = frame->view(); int width = view->layoutWidth(); int height = view->layoutHeight(); int h = 0; int v = 0; if (parseAspectRatio(value, h, v)) return v != 0 && compareValue(width * v, height * h, op); return false; } // ({,min-,max-}aspect-ratio) // assume if we have a device, its aspect ratio is non-zero return true; }
static bool orientationMediaFeatureEval(CSSValue* value, const CSSToLengthConversionData&, Frame* frame, MediaFeaturePrefix) { FrameView* view = frame->view(); if (!view) return false; int width = view->layoutWidth(); int height = view->layoutHeight(); if (value && value->isPrimitiveValue()) { const CSSValueID id = toCSSPrimitiveValue(value)->getValueID(); if (width > height) // Square viewport is portrait. return CSSValueLandscape == id; return CSSValuePortrait == id; } // Expression (orientation) evaluates to true if width and height >= 0. return height >= 0 && width >= 0; }
bool GraphicsLayerAndroid::repaint() { LOG("(%x) repaint(), gPaused(%d) m_needsRepaint(%d) m_haveContents(%d) ", this, gPaused, m_needsRepaint, m_haveContents); if (!gPaused && m_haveContents && m_needsRepaint && !m_image) { // with SkPicture, we request the entire layer's content. IntRect layerBounds(0, 0, m_size.width(), m_size.height()); RenderLayer* layer = renderLayerFromClient(m_client); if (!layer) return false; if (m_foregroundLayer) { PaintingPhase phase(this); // Paint the background into a separate context. phase.set(GraphicsLayerPaintBackground); if (!paintContext(m_contentLayer->recordContext(), layerBounds)) return false; m_contentLayer->checkTextPresence(); // Construct the foreground layer and draw. RenderBox* box = layer->renderBox(); int outline = box->view()->maximalOutlineSize(); IntRect contentsRect(0, 0, box->borderLeft() + box->borderRight() + layer->scrollWidth(), box->borderTop() + box->borderBottom() + layer->scrollHeight()); contentsRect.inflate(outline); // Update the foreground layer size. m_foregroundLayer->setSize(contentsRect.width(), contentsRect.height()); // Paint everything else into the main recording canvas. phase.clear(GraphicsLayerPaintBackground); // Paint at 0,0. IntSize scroll = layer->scrolledContentOffset(); layer->scrollToOffset(0, 0); // At this point, it doesn't matter if painting failed. (void) paintContext(m_foregroundLayer->recordContext(), contentsRect); m_foregroundLayer->checkTextPresence(); layer->scrollToOffset(scroll.width(), scroll.height()); // Construct the clip layer for masking the contents. IntRect clip = layer->renderer()->absoluteBoundingBoxRect(); // absoluteBoundingBoxRect does not include the outline so we need // to offset the position. int x = box->borderLeft() + outline; int y = box->borderTop() + outline; int width = clip.width() - box->borderLeft() - box->borderRight(); int height = clip.height() - box->borderTop() - box->borderBottom(); m_foregroundClipLayer->setPosition(x, y); m_foregroundClipLayer->setSize(width, height); // Need to offset the foreground layer by the clip layer in order // for the contents to be in the correct position. m_foregroundLayer->setPosition(-x, -y); // Set the scrollable bounds of the layer. m_foregroundLayer->setScrollLimits(-x, -y, m_size.width(), m_size.height()); // Invalidate the entire layer for now, as webkit will only send the // setNeedsDisplayInRect() for the visible (clipped) scrollable area, // offsetting the invals by the scroll position would not be enough. // TODO: have webkit send us invals even for non visible area SkRegion region; region.setRect(0, 0, contentsRect.width(), contentsRect.height()); m_foregroundLayer->markAsDirty(region); m_foregroundLayer->needsRepaint(); } else { // If there is no contents clip, we can draw everything into one // picture. if (!paintContext(m_contentLayer->recordContext(), layerBounds)) return false; m_contentLayer->checkTextPresence(); // Check for a scrollable iframe and report the scrolling // limits based on the view size. if (m_contentLayer->contentIsScrollable()) { FrameView* view = layer->renderer()->frame()->view(); static_cast<ScrollableLayerAndroid*>(m_contentLayer)->setScrollLimits( m_position.x(), m_position.y(), view->layoutWidth(), view->layoutHeight()); } } LOG("(%x) repaint() on (%.2f,%.2f) contentlayer(%.2f,%.2f,%.2f,%.2f)paintGraphicsLayer called!", this, m_size.width(), m_size.height(), m_contentLayer->getPosition().fX, m_contentLayer->getPosition().fY, m_contentLayer->getSize().width(), m_contentLayer->getSize().height()); m_contentLayer->markAsDirty(m_dirtyRegion); m_dirtyRegion.setEmpty(); m_contentLayer->needsRepaint(); m_needsRepaint = false; return true; } if (m_needsRepaint && m_image && m_newImage) { // We need to tell the GL thread that we will need to repaint the // texture. Only do so if we effectively have a new image! m_contentLayer->markAsDirty(m_dirtyRegion); m_dirtyRegion.setEmpty(); m_contentLayer->needsRepaint(); m_newImage = false; m_needsRepaint = false; return true; } return false; }