亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? render_canvasimage.cpp

?? It is WEB browser core module with source code. Very good!
?? CPP
字號:
/*
 * Copyright (C) 2004 Apple Computer, Inc.  All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
 */

//#define DEBUG_LAYOUT

#include "render_canvasimage.h"
#include "render_canvas.h"

#include <qdrawutil.h>
#include <qpainter.h>

#include <kapplication.h>
#include <kdebug.h>

#include "css/csshelper.h"
#include "misc/helper.h"
#include "misc/htmlattrs.h"
#include "misc/htmltags.h"
#include "html/html_formimpl.h"
#include "html/html_canvasimpl.h"
#include "html/dtd.h"
#include "xml/dom2_eventsimpl.h"
#include "html/html_documentimpl.h"
#include <math.h>



// To be public in Tiger.  Test on tiger and add conditional.
#if BUILDING_ON_PANTHER
CG_EXTERN_C_BEGIN
CG_EXTERN CGImageRef CGBitmapContextCreateImage(CGContextRef c);
CG_EXTERN_C_END
#endif

using namespace DOM;
using namespace khtml;

// -------------------------------------------------------------------------

RenderCanvasImage::RenderCanvasImage(NodeImpl *_node)
    : RenderImage(_node), _drawingContext(0), _drawingContextData(0), _drawnImage(0), _needsImageUpdate(0)
{
}

RenderCanvasImage::~RenderCanvasImage()
{
    if (_drawingContext) {
        CFRelease (_drawingContext);
        _drawingContext = 0;
    }
    
    free (_drawingContextData);
    _drawingContextData = 0;
    
    if (_drawnImage) {
        CFRelease (_drawnImage);
        _drawnImage = 0;
    }
}

#define BITS_PER_COMPONENT 8
#define BYTES_PER_ROW(width,bitsPerComponent,numComponents) ((width * bitsPerComponent * numComponents + 7)/8)

void RenderCanvasImage::createDrawingContext()
{
    if (_drawingContext) {
        CFRelease (_drawingContext);
        _drawingContext = 0;
    }
    free (_drawingContextData);
    CGColorSpaceRef colorSpace = QPainter::rgbColorSpace();

    int cWidth = contentWidth();
    int cHeight = contentHeight();
    size_t numComponents = CGColorSpaceGetNumberOfComponents(colorSpace);
    size_t bytesPerRow = BYTES_PER_ROW(cWidth,BITS_PER_COMPONENT,(numComponents+1)); // + 1 for alpha
    _drawingContextData = malloc(height() * bytesPerRow);
    _drawingContext = CGBitmapContextCreate(_drawingContextData, cWidth, cHeight, BITS_PER_COMPONENT, bytesPerRow, colorSpace, kCGImageAlphaPremultipliedLast);
    
#ifdef DEBUG_CANVAS_BACKGROUND
    CGContextSetRGBFillColor(_drawingContext, 1.0, 0., 0., 1.);
    CGContextFillRect (_drawingContext, CGRectMake (0, 0, width(), height()));
    CGContextFlush (_drawingContext);
#endif
    
    updateDrawnImage();
    
    CFRelease (colorSpace);
}

CGContextRef RenderCanvasImage::drawingContext()
{
    if (!_drawingContext) {
        document()->updateLayout();
        createDrawingContext();
    }
    
    return _drawingContext;
}

void RenderCanvasImage::setNeedsImageUpdate()
{
    _needsImageUpdate = true;
    repaint();
}


void RenderCanvasImage::updateDrawnImage()
{
    if (_drawnImage)
        CFRelease (_drawnImage);
    CGContextFlush (_drawingContext);
    _drawnImage = CGBitmapContextCreateImage (_drawingContext);
}

CGImageRef RenderCanvasImage::drawnImage()
{
    return _drawnImage;
}

void RenderCanvasImage::paint(PaintInfo& i, int _tx, int _ty)
{
    if (!shouldPaint(i, _tx, _ty))
        return;

    int x = _tx + m_x;
    int y = _ty + m_y;

    if (shouldPaintBackgroundOrBorder() && i.phase != PaintActionOutline) 
        paintBoxDecorations(i, x, y);

    QPainter* p = i.p;
    
    if (i.phase == PaintActionOutline && style()->outlineWidth() && style()->visibility() == VISIBLE)
        paintOutline(p, x, y, width(), height(), style());
    
    if (i.phase != PaintActionForeground && i.phase != PaintActionSelection)
        return;

    if (!shouldPaintWithinRoot(i))
        return;

    bool drawSelectionTint = selectionState() != SelectionNone;
    if (i.phase == PaintActionSelection) {
        if (selectionState() == SelectionNone) {
            return;
        }
        drawSelectionTint = false;
    }

    int cWidth = contentWidth();
    int cHeight = contentHeight();
    int leftBorder = borderLeft();
    int topBorder = borderTop();
    int leftPad = paddingLeft();
    int topPad = paddingTop();

    x += leftBorder + leftPad;
    y += topBorder + topPad;
    
    if (_needsImageUpdate) {
        updateDrawnImage();
        _needsImageUpdate = false;
    }
    
    if (drawnImage()) {
        HTMLCanvasElementImpl* i = (element() && element()->id() == ID_CANVAS) ? static_cast<HTMLCanvasElementImpl*>(element()) : 0;
        int oldOperation = 0;
        if (i && !i->compositeOperator().isNull()){
            oldOperation = QPainter::getCompositeOperation(p->currentContext());
            QPainter::setCompositeOperation (p->currentContext(),i->compositeOperator());
        }
        CGContextDrawImage (p->currentContext(), CGRectMake (x, y, cWidth, cHeight), drawnImage());
        if (i && !i->compositeOperator().isNull()) {
            QPainter::setCompositeOperation (p->currentContext(),oldOperation);
        }
    }

    if (drawSelectionTint) {
        QBrush brush(selectionColor(p));
        QRect selRect(selectionRect());
        p->fillRect(selRect.x(), selRect.y(), selRect.width(), selRect.height(), brush);
    }
}

void RenderCanvasImage::layout()
{
    KHTMLAssert(needsLayout());
    KHTMLAssert(minMaxKnown());

    QRect oldBounds;
    bool checkForRepaint = checkForRepaintDuringLayout();
    if (checkForRepaint)
        oldBounds = getAbsoluteRepaintRect();

    int oldwidth = m_width;
    int oldheight = m_height;
    
    calcWidth();
    calcHeight();

    if ( m_width != oldwidth || m_height != oldheight ) {
        createDrawingContext();
    }

    if (checkForRepaint)
        repaintAfterLayoutIfNeeded(oldBounds, oldBounds);
    
    setNeedsLayout(false);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91蝌蚪porny九色| 日韩一区和二区| 国产人成亚洲第一网站在线播放| 美女视频黄久久| 色悠悠久久综合| 久久精品欧美一区二区三区麻豆| 欧美一级xxx| 日韩在线卡一卡二| 欧美吻胸吃奶大尺度电影| 最近日韩中文字幕| 色狠狠综合天天综合综合| 亚洲欧洲色图综合| 色偷偷成人一区二区三区91| 亚洲丝袜另类动漫二区| 91麻豆精品一区二区三区| 日本一区二区动态图| 不卡视频一二三四| 亚洲美女淫视频| 欧美三级乱人伦电影| 色综合久久综合网| 欧美日韩日日夜夜| 偷偷要91色婷婷| 日韩欧美中文字幕公布| 美女在线观看视频一区二区| 精品国产凹凸成av人网站| 国产一区二区三区蝌蚪| 国产精品久久久久婷婷| 欧美在线一区二区三区| 免费人成精品欧美精品| 欧美国产禁国产网站cc| 97精品久久久久中文字幕| 亚洲午夜一区二区三区| 日韩视频123| 成人美女视频在线观看18| 亚洲日本一区二区| 91精品国产美女浴室洗澡无遮挡| 欧美大片日本大片免费观看| 国产精品综合久久| 亚洲丝袜自拍清纯另类| 884aa四虎影成人精品一区| 亚洲成人免费看| 午夜精品久久久久| 国产精品2024| 中文字幕第一区第二区| 欧美亚洲丝袜传媒另类| 男女激情视频一区| 亚洲欧美怡红院| 777奇米成人网| 成人黄色在线网站| 奇米精品一区二区三区在线观看一| 久久99精品视频| 国产精品嫩草久久久久| 91精品国产91综合久久蜜臀| 福利视频网站一区二区三区| 亚洲制服丝袜一区| 国产午夜精品一区二区三区视频 | 亚洲图片有声小说| 日韩一区二区三区四区| 一区二区三区欧美日| 国产成人日日夜夜| 国产麻豆精品95视频| 亚洲午夜av在线| 国产欧美日本一区二区三区| 在线免费观看日本欧美| 国产一区二区三区蝌蚪| 亚洲综合在线电影| 欧美国产精品一区二区三区| 在线不卡一区二区| 91麻豆国产福利精品| 极品少妇xxxx偷拍精品少妇| 亚洲成人动漫在线观看| 综合分类小说区另类春色亚洲小说欧美| 蜜臀av性久久久久蜜臀aⅴ流畅| 日本韩国欧美在线| 国产成人综合在线观看| 婷婷成人综合网| 亚洲免费色视频| 国产精品毛片高清在线完整版| 久久精品国产久精国产爱| 一区二区三区在线高清| 99久久婷婷国产综合精品| 1区2区3区精品视频| 欧美群妇大交群的观看方式| 不卡电影一区二区三区| 国产福利精品一区| 激情小说欧美图片| 久久99精品久久久久久久久久久久| av网站免费线看精品| 黑人巨大精品欧美一区| 日韩—二三区免费观看av| 亚洲va在线va天堂| 亚洲综合无码一区二区| 一卡二卡三卡日韩欧美| 亚洲免费观看高清在线观看| 国产精品久久久久影院亚瑟| 亚洲国产精品二十页| 国产欧美日产一区| 国产精品久久久久精k8| 最近中文字幕一区二区三区| 久久久噜噜噜久久人人看 | 国产午夜精品久久久久久久| 免费成人美女在线观看| 天堂资源在线中文精品| 亚洲一二三区在线观看| 亚洲成人动漫av| 亚洲18色成人| 日韩1区2区日韩1区2区| 在线免费观看一区| 欧美日韩国产bt| 日韩一本二本av| 久久综合九色欧美综合狠狠| 久久久久国产精品麻豆| 国产精品水嫩水嫩| 亚洲精品久久久久久国产精华液| 欧美在线免费视屏| 欧美日免费三级在线| 日韩一级精品视频在线观看| 久久亚洲春色中文字幕久久久| 成人在线综合网| 99re成人精品视频| 欧美视频一区二区| 精品国产精品一区二区夜夜嗨| 99久久伊人久久99| 欧美色图第一页| 精品国产sm最大网站免费看| 国产精品欧美久久久久一区二区| 欧美日韩一区在线观看| 91精品婷婷国产综合久久| 精品国产一区二区亚洲人成毛片| 欧美午夜电影在线播放| 日韩精品一区二区三区在线观看| 九九**精品视频免费播放| 亚洲精品在线三区| 亚洲欧美日韩电影| 日韩影院在线观看| 日韩午夜av一区| 蜜臀久久久久久久| 欧美一区二区啪啪| 欧美精品一区二区三区在线播放| 日韩美女啊v在线免费观看| 欧美日本在线观看| 国产精品美女一区二区三区 | 91网页版在线| 久久综合999| 偷拍亚洲欧洲综合| 色噜噜久久综合| 国产精品久久久久久久久晋中 | 8v天堂国产在线一区二区| 亚洲视频在线一区| 福利一区二区在线观看| 精品裸体舞一区二区三区| 亚洲福利视频一区| 91免费观看视频在线| 中文字幕免费在线观看视频一区| 欧美美女一区二区在线观看| 91麻豆免费观看| 日韩欧美一级二级三级久久久| 欧美午夜寂寞影院| 亚洲色图.com| 成人av午夜电影| 国产日韩欧美电影| 国产凹凸在线观看一区二区| 精品国产乱子伦一区| 精品一区二区三区日韩| 日韩欧美成人午夜| 寂寞少妇一区二区三区| 欧美成人性战久久| 久久国产精品露脸对白| 日韩三级在线免费观看| 精品在线观看视频| 精品国产网站在线观看| 国产在线精品免费| 国产视频一区二区三区在线观看| 亚洲夂夂婷婷色拍ww47| 欧美伊人精品成人久久综合97| 日韩欧美国产系列| 日本va欧美va精品| 26uuu精品一区二区 | 国产欧美日韩另类视频免费观看| 亚洲精品成a人| 国产日产精品一区| 亚洲亚洲人成综合网络| 欧美日韩午夜在线| 蜜乳av一区二区三区| 26uuu亚洲| av成人动漫在线观看| 亚洲综合精品自拍| 日韩三级视频在线看| 国产精品18久久久久久久久| 久久久精品免费网站| www.亚洲人| 亚洲国产日韩精品| 日韩欧美黄色影院| 成人精品小蝌蚪| 午夜激情久久久| 久久精品亚洲精品国产欧美| 91蝌蚪porny九色| 蜜臀久久99精品久久久久宅男| www.亚洲在线| 三级欧美在线一区|