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

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

?? selection.cpp

?? It is WEB browser core module with source code. Very good!
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
/*
 * 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. 
 */
  
#include "selection.h"

#include <qevent.h>
#include <qpainter.h>
#include <qrect.h>

#include "dom/dom_node.h"
#include "dom/dom_string.h"
#include "khtml_part.h"
#include "khtmlview.h"
#include "misc/htmltags.h"
#include "rendering/render_object.h"
#include "rendering/render_style.h"
#include "rendering/render_text.h"
#include "visible_position.h"
#include "visible_units.h"
#include "xml/dom_docimpl.h"
#include "xml/dom_elementimpl.h"
#include "xml/dom_nodeimpl.h"
#include "xml/dom_positioniterator.h"
#include "xml/dom_textimpl.h"
#include "xml/dom2_rangeimpl.h"

#if APPLE_CHANGES
#include "KWQAssertions.h"
#else
#define ASSERT(assertion) assert(assertion)
#endif

#define EDIT_DEBUG 0

using DOM::DOMString;
using DOM::ElementImpl;
using DOM::Node;
using DOM::NodeImpl;
using DOM::Position;
using DOM::Range;
using DOM::RangeImpl;
using DOM::StayInBlock;

namespace khtml {

Selection::Selection()
{
    init(DOWNSTREAM);
}

Selection::Selection(const Position &pos, EAffinity affinity)
    : m_base(pos), m_extent(pos)
{
    init(affinity);
    validate();
}

Selection::Selection(const Range &r, EAffinity baseAffinity, EAffinity extentAffinity)
    : m_base(startPosition(r)), m_extent(endPosition(r))
{
    init(baseAffinity);
    validate();
}

Selection::Selection(const Position &base, EAffinity baseAffinity, const Position &extent, EAffinity extentAffinity)
    : m_base(base), m_extent(extent)
{
    init(baseAffinity);
    validate();
}

Selection::Selection(const VisiblePosition &visiblePos)
    : m_base(visiblePos.position()), m_extent(visiblePos.position())
{
    init(visiblePos.affinity());
    validate();
}

Selection::Selection(const VisiblePosition &base, const VisiblePosition &extent)
    : m_base(base.position()), m_extent(extent.position())
{
    init(base.affinity());
    validate();
}

Selection::Selection(const Selection &o)
    : m_base(o.m_base), m_extent(o.m_extent)
    , m_start(o.m_start), m_end(o.m_end)
    , m_state(o.m_state), m_affinity(o.m_affinity)
    , m_baseIsStart(o.m_baseIsStart)
    , m_needsLayout(o.m_needsLayout)
    , m_modifyBiasSet(o.m_modifyBiasSet)
{
    // Only copy the coordinates over if the other object
    // has had a layout, otherwise keep the current
    // coordinates. This prevents drawing artifacts from
    // remaining when the caret is painted and then moves,
    // and the old rectangle needs to be repainted.
    if (!m_needsLayout) {
        m_caretRect = o.m_caretRect;
        m_expectedVisibleRect = o.m_expectedVisibleRect;
    }
}

void Selection::init(EAffinity affinity)
{
    // FIXME: set extentAffinity
    m_state = NONE; 
    m_baseIsStart = true;
    m_affinity = affinity;
    m_needsLayout = true;
    m_modifyBiasSet = false;
}

Selection &Selection::operator=(const Selection &o)
{
    m_base = o.m_base;
    m_extent = o.m_extent;
    m_start = o.m_start;
    m_end = o.m_end;

    m_state = o.m_state;
    m_affinity = o.m_affinity;

    m_baseIsStart = o.m_baseIsStart;
    m_needsLayout = o.m_needsLayout;
    m_modifyBiasSet = o.m_modifyBiasSet;
    
    // Only copy the coordinates over if the other object
    // has had a layout, otherwise keep the current
    // coordinates. This prevents drawing artifacts from
    // remaining when the caret is painted and then moves,
    // and the old rectangle needs to be repainted.
    if (!m_needsLayout) {
        m_caretRect = o.m_caretRect;
        m_expectedVisibleRect = o.m_expectedVisibleRect;
    }
    
    return *this;
}

void Selection::moveTo(const VisiblePosition &pos)
{
    // FIXME: use extentAffinity
    m_affinity = pos.affinity();
    m_base = pos.deepEquivalent();
    m_extent = pos.deepEquivalent();
    validate();
}

void Selection::moveTo(const VisiblePosition &base, const VisiblePosition &extent)
{
    // FIXME: use extentAffinity
    m_affinity = base.affinity();
    m_base = base.deepEquivalent();
    m_extent = extent.deepEquivalent();
    validate();
}

void Selection::moveTo(const Selection &o)
{
    // FIXME: copy extentAffinity
    m_affinity = o.m_affinity;
    m_base = o.m_start;
    m_extent = o.m_end;
    validate();
}

void Selection::moveTo(const Position &pos, EAffinity affinity)
{
    // FIXME: use extentAffinity
    m_affinity = affinity;
    m_base = pos;
    m_extent = pos;
    validate();
}

void Selection::moveTo(const Range &r, EAffinity baseAffinity, EAffinity extentAffinity)
{
    // FIXME: use extentAffinity
    m_affinity = baseAffinity;
    m_base = startPosition(r);
    m_extent = endPosition(r);
    validate();
}

void Selection::moveTo(const Position &base, EAffinity baseAffinity, const Position &extent, EAffinity extentAffinity)
{
    // FIXME: use extentAffinity
    m_affinity = baseAffinity;
    m_base = base;
    m_extent = extent;
    validate();
}

void Selection::setModifyBias(EAlter alter, EDirection direction)
{
    switch (alter) {
        case MOVE:
            m_modifyBiasSet = false;
            break;
        case EXTEND:
            if (!m_modifyBiasSet) {
                m_modifyBiasSet = true;
                switch (direction) {
                    // FIXME: right for bidi?
                    case RIGHT:
                    case FORWARD:
                        m_base = m_start;
                        m_extent = m_end;
                        break;
                    case LEFT:
                    case BACKWARD:
                        m_base = m_end;
                        m_extent = m_start;
                        break;
                }
            }
            break;
    }
}

VisiblePosition Selection::modifyExtendingRightForward(ETextGranularity granularity)
{
    VisiblePosition pos(m_extent, m_affinity);
    switch (granularity) {
        case CHARACTER:
            pos = pos.next();
            break;
        case WORD:
            pos = nextWordPosition(pos);
            break;
        case PARAGRAPH:
            pos = nextParagraphPosition(pos, xPosForVerticalArrowNavigation(EXTENT));
            break;
        case LINE:
            pos = nextLinePosition(pos, xPosForVerticalArrowNavigation(EXTENT));
            break;
        case LINE_BOUNDARY:
            pos = endOfLine(VisiblePosition(m_end, m_affinity));
            break;
        case PARAGRAPH_BOUNDARY:
            pos = endOfParagraph(VisiblePosition(m_end, m_affinity));
            break;
        case DOCUMENT_BOUNDARY:
            pos = endOfDocument(pos);
            break;
    }
    
    return pos;
}

VisiblePosition Selection::modifyMovingRightForward(ETextGranularity granularity)
{
    VisiblePosition pos;
    switch (granularity) {
        case CHARACTER:
            if (isRange()) 
                pos = VisiblePosition(m_end, m_affinity);
            else
                pos = VisiblePosition(m_extent, m_affinity).next();
            break;
        case WORD:
            pos = nextWordPosition(VisiblePosition(m_extent, m_affinity));
            break;
        case PARAGRAPH:
            pos = nextParagraphPosition(VisiblePosition(m_end, m_affinity), xPosForVerticalArrowNavigation(END, isRange()));
            break;
        case LINE: {
            // down-arrowing from a range selection that ends at the start of a line needs
            // to leave the selection at that line start (no need to call nextLinePosition!)
            pos = VisiblePosition(m_end, m_affinity);
            if (!isRange() || !isStartOfLine(pos))
                pos = nextLinePosition(pos, xPosForVerticalArrowNavigation(END, isRange()));
            break;
        }
        case LINE_BOUNDARY:
            pos = endOfLine(VisiblePosition(m_end, m_affinity));
            break;
        case PARAGRAPH_BOUNDARY:
            pos = endOfParagraph(VisiblePosition(m_end, m_affinity));
            break;
        case DOCUMENT_BOUNDARY:
            pos = endOfDocument(VisiblePosition(m_end, m_affinity));
            break;
    }
    return pos;
}

VisiblePosition Selection::modifyExtendingLeftBackward(ETextGranularity granularity)
{
    VisiblePosition pos(m_extent, m_affinity);
    switch (granularity) {
        case CHARACTER:
            pos = pos.previous();
            break;
        case WORD:
            pos = previousWordPosition(pos);
            break;
        case PARAGRAPH:
            pos = previousParagraphPosition(pos, xPosForVerticalArrowNavigation(EXTENT));
            break;
        case LINE:
            pos = previousLinePosition(pos, xPosForVerticalArrowNavigation(EXTENT));
            break;
        case LINE_BOUNDARY:
            pos = startOfLine(VisiblePosition(m_start, m_affinity));
            break;
        case PARAGRAPH_BOUNDARY:
            pos = startOfParagraph(VisiblePosition(m_start, m_affinity));
            break;
        case DOCUMENT_BOUNDARY:
            pos = startOfDocument(pos);
            break;
    }
    return pos;
}

VisiblePosition Selection::modifyMovingLeftBackward(ETextGranularity granularity)
{
    VisiblePosition pos;
    switch (granularity) {
        case CHARACTER:
            if (isRange()) 
                pos = VisiblePosition(m_start, m_affinity);
            else
                pos = VisiblePosition(m_extent, m_affinity).previous();
            break;
        case WORD:
            pos = previousWordPosition(VisiblePosition(m_extent, m_affinity));
            break;
        case PARAGRAPH:
            pos = previousParagraphPosition(VisiblePosition(m_start, m_affinity), xPosForVerticalArrowNavigation(START, isRange()));
            break;
        case LINE:
            pos = previousLinePosition(VisiblePosition(m_start, m_affinity), xPosForVerticalArrowNavigation(START, isRange()));
            break;
        case LINE_BOUNDARY:
            pos = startOfLine(VisiblePosition(m_start, m_affinity));
            break;
        case PARAGRAPH_BOUNDARY:
            pos = startOfParagraph(VisiblePosition(m_start, m_affinity));
            break;
        case DOCUMENT_BOUNDARY:
            pos = startOfDocument(VisiblePosition(m_start, m_affinity));
            break;
    }
    return pos;
}

bool Selection::modify(EAlter alter, EDirection dir, ETextGranularity granularity)
{

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区四区精品在线视频 | 精品一区二区三区蜜桃| 日本一区二区视频在线观看| 91精品综合久久久久久| 欧美日韩二区三区| 欧美午夜电影在线播放| 欧美三区在线视频| 91.com视频| 欧美成人综合网站| 国产亚洲精品中文字幕| 国产精品网曝门| 亚洲天天做日日做天天谢日日欢 | 91麻豆精品国产| 欧美福利电影网| 日韩欧美你懂的| 久久久国际精品| 国产无一区二区| 亚洲日穴在线视频| 亚洲一级不卡视频| 美女脱光内衣内裤视频久久网站 | 亚洲成人激情自拍| 午夜精品久久久久久久99樱桃| 亚洲成人av免费| 激情六月婷婷综合| 91欧美一区二区| 精品视频资源站| 亚洲精品在线一区二区| 国产精品久久精品日日| 亚洲一区二区在线免费观看视频| 亚洲五月六月丁香激情| 九色porny丨国产精品| 成人午夜伦理影院| 欧美亚洲图片小说| 国产婷婷色一区二区三区四区| 一区二区三区四区中文字幕| 婷婷成人综合网| 国产精品一区三区| 欧美性淫爽ww久久久久无| 日韩一区二区电影| 一区免费观看视频| 久久精品国产久精国产| 99国产麻豆精品| 日韩午夜精品电影| 亚洲欧美精品午睡沙发| 韩国av一区二区| 欧美人xxxx| 亚洲天天做日日做天天谢日日欢| 麻豆精品在线观看| 色婷婷综合久久久久中文一区二区| 91精品国产91热久久久做人人| 中文字幕不卡三区| 国内外成人在线| 91超碰这里只有精品国产| 国产精品国产三级国产aⅴ入口| 五月激情六月综合| 欧美综合一区二区| 亚洲人成伊人成综合网小说| 国产一区美女在线| 日韩精品一区二区三区老鸭窝| 亚洲一区二区三区在线看| 国产精品一区二区你懂的| 67194成人在线观看| 亚洲视频一区二区免费在线观看| 国产一区二区视频在线播放| 日韩亚洲欧美一区二区三区| 亚洲电影第三页| 色狠狠色狠狠综合| 最新日韩在线视频| 成人app在线观看| 久久婷婷一区二区三区| 久久精品999| 日韩一级精品视频在线观看| 午夜精品福利一区二区蜜股av| 91网站在线播放| 最新中文字幕一区二区三区| 91在线小视频| 国产精品久久福利| 99久免费精品视频在线观看| 亚洲国产精品二十页| 国产+成+人+亚洲欧洲自线| 久久精品亚洲精品国产欧美kt∨| 久久超级碰视频| 日韩免费在线观看| 国内精品伊人久久久久av影院| 精品国产伦理网| 国产乱码精品一区二区三区av| 久久日一线二线三线suv| 国产剧情一区二区三区| 久久精品亚洲精品国产欧美kt∨| 国产米奇在线777精品观看| 久久无码av三级| 成人一级视频在线观看| 亚洲色图在线看| 欧美日本韩国一区二区三区视频| 日韩精品乱码免费| 久久综合给合久久狠狠狠97色69| 国产精品99久久久久久似苏梦涵 | 一区二区激情视频| 欧美日韩一级二级| 日本vs亚洲vs韩国一区三区二区| 欧美一卡二卡三卡| 精品亚洲porn| 亚洲欧美视频一区| 337p亚洲精品色噜噜狠狠| 激情成人综合网| 国产精品国产自产拍高清av| 欧美日韩一区高清| 国产美女av一区二区三区| 中文字幕一区二区三区色视频 | 丝袜美腿亚洲综合| 2014亚洲片线观看视频免费| 成人免费福利片| 免费高清视频精品| 亚洲精选在线视频| 久久久久久久久久电影| 在线观看亚洲一区| 国产成人自拍网| 亚洲国产aⅴ天堂久久| 精品成人佐山爱一区二区| 日本韩国欧美国产| 国产精品综合在线视频| 亚洲主播在线观看| 久久久久久亚洲综合影院红桃| 色菇凉天天综合网| 国产精品1区二区.| 日本不卡免费在线视频| 最新中文字幕一区二区三区| 久久亚区不卡日本| 91麻豆精品国产91久久久资源速度 | 亚洲免费视频中文字幕| 日韩一区二区精品在线观看| 色成人在线视频| 丁香五精品蜜臀久久久久99网站| 久久精品国产亚洲高清剧情介绍| 一区二区在线观看av| 中文成人av在线| 久久久久国产精品麻豆ai换脸| 欧美精品色一区二区三区| 99久久精品国产导航| 成人一道本在线| 国产美女精品一区二区三区| 麻豆91在线播放免费| 亚洲超丰满肉感bbw| 亚洲久本草在线中文字幕| 国产精品传媒视频| 日本一区二区久久| 中文字幕av资源一区| 欧美高清在线一区二区| 国产亚洲精品中文字幕| 国产婷婷色一区二区三区| 久久综合色8888| 欧美精品一区二区三区蜜桃视频 | 国产精品中文字幕欧美| 久久99精品国产91久久来源| 男人操女人的视频在线观看欧美| 五月天丁香久久| 亚洲va天堂va国产va久| 亚洲成人av一区二区三区| 亚洲成av人片在www色猫咪| 一区二区三区日本| 亚洲成人资源网| 青草av.久久免费一区| 伦理电影国产精品| 久久精品国产77777蜜臀| 麻豆传媒一区二区三区| 麻豆成人91精品二区三区| 国产精品1区2区| av网站免费线看精品| 色婷婷狠狠综合| 欧美日韩三级一区| 4438亚洲最大| 久久久久久久久久久电影| 日韩美女视频19| 亚洲午夜视频在线| 水蜜桃久久夜色精品一区的特点| 午夜视频在线观看一区二区| 久久精品国产精品亚洲红杏| 国产精品18久久久久| 91网站视频在线观看| 欧美一级午夜免费电影| 亚洲国产精品t66y| 亚洲国产综合色| 久久99这里只有精品| 99热99精品| 91精品国产综合久久久久| 国产亚洲一区二区三区| 亚洲一区二区欧美日韩| 国产一区二区在线观看视频| 色婷婷av一区二区三区软件| 欧美一级理论性理论a| 国产日韩精品视频一区| 午夜精品爽啪视频| 国产91丝袜在线播放九色| 欧美日韩精品福利| 欧美精品一区二区三区久久久 | 欧美一区二区在线免费观看| 国产偷国产偷亚洲高清人白洁| 亚洲制服丝袜av| 成人一区在线观看| 欧美成人a∨高清免费观看|