青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Cpper
C/C++高級(jí)工程師 Android高級(jí)軟件工程師 IT集成工程師 音頻工程師 熟悉c,c++,java,c#,py,js,asp等多種語(yǔ)言 程序猿

給BGE加上了富文本顯示功能
相關(guān)代碼如下:
void GLTextRenderer::render(const Color& color,const String& string,const FloatRect& area,bool isMultiLine,
        Horizontal hAlignment,Vertical vAlignment,
bool rich)
{
    
if(typeFace_ != 0 && !rich)
    {
        typeFace_
->setColor(color);
        
if(isMultiLine)
        {
            renderMultiline(color,
string,area,hAlignment);
        }
        
else
        {
            Vector2f position(typeFace_
->penX(string,area,hAlignment),baseLineY(area,vAlignment));
            typeFace_
->render(string,position);
        }
    }
    
else if(typeFace_)
    {
        
if(!isMultiLine)
        {
            auto cmdlist 
= parseString(string);
            Vector2f position(typeFace_
->penX(string,area,hAlignment),baseLineY(area,vAlignment));
            typeFace_
->render(String(),position,cmdlist);
        }
        
else
        {
            auto cmdlist 
= parseString(string);
            renderMultiline(color,cmdlist,area,hAlignment);
        }
    }
}
這里的parseString用于解析類似html的問(wèn)題
函數(shù)實(shí)現(xiàn)如下:
std::list<textRenderCmdUnit> TextRenderer::parseString(const String& content)
{
    String text(content);
    std::list
<textRenderCmdUnit> cmdList;

    String current;
    auto list 
= text.split('<');
    
for(int i=0;i<list.size();i++)
    {
        current 
= list[i];
        
if(current.startWith(L"/>"))
        {
            textRenderCmdUnit unit;
            unit.undo 
= true;
            cmdList.push_back(unit);

            String remain 
= current.substr(2);
            
if(!remain.empty())
            {
                unit.text 
= remain;
                unit.undo 
= false;
                cmdList.push_back(unit);
            }
        }
        
else if(current.find('>'!= String::InvalidPos)
        {
            textRenderCmdUnit unit;
            unit.tag 
= current.substr(0,current.find('>'));
            unit.undo 
= false;
            cmdList.push_back(unit);

            int32_t find 
= current.find('>');
            
if(find < current.size()-1)
            {
                unit.tag.clear();
                unit.text 
= current.substr(find+1);
                cmdList.push_back(unit);
            }
        }
        
else
        {
            textRenderCmdUnit unit;
            unit.text 
= current;
            unit.undo 
= false;
            cmdList.push_back(unit);
        }
    }

    
return cmdList;
}
以下用于渲染富文本

void TypeFace::render(const FloatRect& area,const std::list<textRenderCmdUnit>& queue,Horizontal hAlignment,float vpos)
{
    
const float availableWidth = area.width_ - 2.0f;

    textRenderCmdUnit unit;

    String line,lineRemain;

    String tag;
    std::queue
<String> cmdStack;

    
float y = vpos;
    
float x = penX(String(),area,hAlignment);

    auto itr 
= queue.begin();
    
while(itr != queue.end())
    {
        unit 
= *itr;
        
if(unit.undo)
        {
            
if(!cmdStack.empty())
            {
                tag 
= cmdStack.front();
                cmdStack.pop();

                
if(tag == "bold")
                    bold_ 
= false;
                
else if(tag == "italic")
                    italic_ 
= false;
                
else if(tag == "underline")
                    underline_ 
= false;
                
else
                    applyColor(tag);
            }
        }
        
else if(!unit.tag.empty())
        {
            tag 
= unit.tag;
            cmdStack.push(tag);

            
if(tag == "bold")
                bold_ 
= true;
            
else if(tag == "italic")
                italic_ 
= true;
            
else if(tag == "underline")
                underline_ 
= true;
            
else
                applyColor(tag);
        }
        
else
        {
            line 
+= unit.text;

            
while(true)
            {
                size_t pos 
= hitCharacterIndex(line,availableWidth-x);
                
if(pos == 0)
                {
                    x 
= penX(String(),area,hAlignment);
                    y 
+= lineHeight();
                    
continue;
                }

                
if(pos == String::InvalidPos)
                    pos 
= line.size();

                String current 
= line.substr(0,pos);
                lineRemain 
= line.substr(pos);
                line 
= current;

                auto linefeed 
= line.get().find_first_of('\n');
                
if(linefeed != std::basic_string<uint32_t>::npos)
                {
                    line 
= line.substr(0,linefeed);
                    lineRemain 
= line.substr(linefeed+1+ lineRemain;
                }

                render(line,Vector2f(x,y),std::list
<textRenderCmdUnit>());
                x 
+= width(line);

                
if(linefeed != String::InvalidPos)
                {
                    x 
= penX(String(),area,hAlignment);
                    y 
+= lineHeight();
                }
                line 
= lineRemain;

                
if(lineRemain.empty())
                    
break;
            }
        }
        itr 
++;
    }
}
以下渲染單色文本
void TypeFace::renderGlyphs(const std::list<textRenderCmdUnit>& cmd)
{
    Vector2f position(
0.0f,0.0f);
    size_t leftChar 
= 0;

    textRenderCmdUnit unit;

    String tag;
    std::queue
<String> cmdStack;

    std::list
<textRenderCmdUnit>::const_iterator itr = cmd.begin();
    
while(itr != cmd.end())
    {
        unit 
= *itr;
        
if(unit.tag.empty() && !unit.undo)
        {
            position 
= renderGlyphs(unit.text,position);
        }
        
else if(!unit.tag.empty())
        {
            tag 
= unit.tag;
            cmdStack.push(tag);

            
if(tag == "bold")
                bold_ 
= true;
            
else if(tag == "italic")
                italic_ 
= true;
            
else if(tag == "underline")
                underline_ 
= true;
            
else
                applyColor(tag);
        }
        
else if(unit.undo)
        {
            
if(!cmdStack.empty())
            {
                tag 
= cmdStack.front();
                cmdStack.pop();

                
if(tag == "bold")
                    bold_ 
= false;
                
else if(tag == "italic")
                    italic_ 
= false;
                
else if(tag == "underline")
                    underline_ 
= false;
                
else
                    applyColor(tag);
            }
        }

        itr 
++;
    }
}
可以看出 支持的文本格式為<Tag>Text</>
一個(gè)例子是:
<Blue>這段代碼主要測(cè)試BGE的富文本顯示功能\n</Blue><Red>需要指出的是當(dāng)前只要能支持多行顯示和多顏色顯示功能即可(不考慮下劃線斜體以及加粗顯示)。</Red><White>這句話將被顯示為白色</><Blue>這句話應(yīng)該被藍(lán)色字體</Blue><Green>綠色字體</><Cyan>Cyan色</>";
最終顯示如下:
posted @ 2016-02-22 17:46 ccsdu2009 閱讀(807) | 評(píng)論 (0)編輯 收藏
 
解釋:
GraphicsItem 重載 mousePressEvent(QGraphicsSceneMouseEvent* event)后處理完之后需要執(zhí)行event->accpet().
posted @ 2016-02-05 09:18 ccsdu2009 閱讀(1344) | 評(píng)論 (0)編輯 收藏
 
推薦一款開(kāi)源庫(kù)glc
glc是一款基于Qt和opengl的3D仿真程序,可以是用來(lái)渲染3ds,obj,stl等模型以及常見(jiàn)幾何體對(duì)象
支持對(duì)象拾取等功能
學(xué)習(xí)了一天感覺(jué)基本還行.
主頁(yè):http://www.glc-lib.net/
posted @ 2016-01-29 17:11 ccsdu2009 閱讀(717) | 評(píng)論 (0)編輯 收藏
 
算是基本完成了,先上一個(gè)截圖


可以說(shuō)GUI所需要的當(dāng)前基本都是實(shí)現(xiàn)了

再上一個(gè)使用例子:
#include <BGE/All>

using namespace bge;

int main(int argc, char* argv[])
{
    FileSystem::instance().initial(argv[0]);
    FileSystem::instance().setResourcePackage("data.zip");
    WindowManager::instance().initialize("simkai.ttf",true);

    Device* device = Device::create();
    device->initial();
    device->createWindow(640,480,bge::String("BGE Window"));

    WindowManager::instance().propertyScheme()->load(":skin1.xml");

    Window* window = WindowManager::instance().createWindow(":grid-layout-window.xml");
    WindowManager::instance().addWindow(window);

    while(device->isRunning())
    {
        device->preRender();
        WindowManager::instance().update();
        device->swapBuffers();
        device->pollEvents();
    }

    WindowManager::instance().terminate();
    device->closeWindow();
    device->terminate();
    device->deleteLater();
    return 0;
}

個(gè)人感覺(jué)寫的還是比較清晰,沒(méi)什么需要特別說(shuō)明的
使用的開(kāi)源庫(kù)有l(wèi)ibpng,glfw,freetype,sigslot,physfs
不過(guò)代碼有點(diǎn)大,有興趣的可以留個(gè)郵箱

posted @ 2016-01-22 15:41 ccsdu2009 閱讀(4163) | 評(píng)論 (10)編輯 收藏
 
先上一個(gè)使用例子
#include <BGE/All>

using namespace bge;

Window
* createButton(const std::string& name,const String& text)
{
    Button
* button = new Button(0,text);
    button
->setName(name);
    button
->setSize(Vector2f(92,42));
    
return button;
}

int main(int argc, char* argv[])
{
    FileSystem::instance().initial(argv[
0]);
    FileSystem::instance().setResourcePackage(
"data.zip");
    WindowManager::instance().initialize(
"simkai.ttf",false);

    Device
* device = Device::create();
    device
->initial();
    device
->createWindow(640,480,bge::String("BGE Window"));

    Panel
* panel = new Panel(FloatRect(30,30,192,180),0);
    GridLayout
* layout = new GridLayout();
    panel
->setLayout(layout);
    std::vector
<float> widths;
    widths.push_back(
0.0f);
    layout
->setColumnWidths(widths);

    std::vector
<float> heights;
    
for(int k = 0; k < 3++k)
        heights.push_back(
48.0f);
    heights.push_back(
0.0f);
    layout
->setRowHeights(heights);

    GridCellInfo info;
    info.columnIndex_ 
= 0; info.rowIndex_ = 0; layout->addWindow(createButton("button1",L"按鍵"),info);
    info.columnIndex_ 
= 1; info.rowIndex_ = 0; layout->addWindow(createButton("button2",L"按鍵"),info);
    info.columnIndex_ 
= 0; info.rowIndex_ = 1; layout->addWindow(createButton("button3",L"按鍵"),info);
    info.columnIndex_ 
= 1; info.rowIndex_ = 1; layout->addWindow(createButton("button4",L"按鍵"),info);
    info.columnIndex_ 
= 0;
    info.rowIndex_ 
= 2;
    info.horizontalSpan_ 
= 2;
    Window
* edit = new EditField(NULL,L"Edit Text");
    edit
->setSize(Vector2f(196,36));
    layout
->addWindow(edit,info);
    info.columnIndex_ 
= 0;
    info.rowIndex_ 
= 3;
    info.horizontalSpan_ 
= 3;
    layout
->arrangeWithin();

    FrameWindow
* window = new FrameWindow();
    window
->enableMovement();
    window
->setText(L"BGE窗體");
    window
->setClientPanel(panel);

    WindowManager::instance().addWindow(window);

    
while(device->isRunning())
    {
        device
->preRender();
        WindowManager::instance().update();
        device
->swapBuffers();
        device
->pollEvents();
    }

    WindowManager::instance().terminate();
    device
->closeWindow();
    device
->terminate();
    device
->deleteLater();
    
return 0;
}

在開(kāi)發(fā)上參考了Qt等軟件,當(dāng)前支持常見(jiàn)控件 支持控件序列化 整體換膚 控件換膚
上面的代碼顯示的截圖如下:
http://images2015.cnblogs.com/blog/676118/201601/676118-20160120092402484-466039328.png
不過(guò)當(dāng)前還有一點(diǎn)小問(wèn)題 修改完了再上代碼
做這個(gè)不為什么 就是幾年前一直想做個(gè)
posted @ 2016-01-20 09:34 ccsdu2009 閱讀(2077) | 評(píng)論 (3)編輯 收藏
 
#include <BGE/all>

using namespace bge;

int main(int argc,char* argv[])
{
    
//!初始化文件系統(tǒng)
    FileSystem::instance()->initial(argv[0]);
    
//!加載壓縮包
    FileSystem::instance()->setResourcePackage("data.zip");
    
//!初始化UI管理器,設(shè)定默認(rèn)字體,并設(shè)定自動(dòng)刪除控件
    WindowManager::instance().initialize("simkai.ttf",true);

    
//!生成和初始化窗口設(shè)備
    Device* device = bgeCreateDevice();
    device
->initial();
    device
->createWindow(640,480,bge::String("BGE Window"));
    
    
//!從資源文件加載控件包含子控件和控件屬性
    Window* window = WindowManager::instance().create("window.xml");
    bge::WindowManager::instance().addWindow(listbox);

    
while(device->isRunning())
    {
        
//!預(yù)渲染設(shè)備
        device->perRender();
        
//!窗體更新
        bge::WindowManager::instance().update();
        
        device
->swapBuffers();
        device
->pollEvents();
    }

    
//!銷毀窗體管理器
    bge::WindowManager::instance().terminate();
    
//!關(guān)閉并銷毀設(shè)備
    device->closeWindow();
    device
->terminate();
    device
->deleteLater();

    system(
"pause");
    
return 0;
}

還沒(méi)做完,用法如上,很簡(jiǎn)練吧:D

什么?對(duì)整體視效不滿意?
試下這個(gè):
WindowManager::instance().propertyScheme()->load("skin.xml");
想定制某個(gè)控件的視效?
Button* button = window->findChild("ok");
button->loadAppearance("button.xml","blue");

posted @ 2016-01-07 16:20 ccsdu2009 閱讀(787) | 評(píng)論 (0)編輯 收藏
 
libpng比較另類,解碼方式比較奇特,這里記錄下
以下代碼為使用虛擬IOReader的方式,稍做修改就基于FILE使用
代碼很詳細(xì),不需額外解釋
PNGImage::PNGImage(const std::string& filename):
    ReferenceCountedImage(filename),
    data_(
0)
{
    IOReader
* reader = FileSystem::instance()->readFile(filename);
    
if(reader == 0)
        
return;

    png_structp png_ptr 
= png_create_read_struct(PNG_LIBPNG_VER_STRING, 000);
    
if(png_ptr == 0)
    {
        reader
->close();
        reader
->deleteLater();
    }

    png_infop info_ptr 
= png_create_info_struct(png_ptr);
    
if(info_ptr == 0)
    {
        png_destroy_read_struct(
&png_ptr, png_infopp(0), png_infopp(0));
        reader
->close();
        reader
->deleteLater();
    }

    
if(setjmp(png_jmpbuf(png_ptr)))
    {
        png_destroy_read_struct(
&png_ptr,png_infopp(0),png_infopp(0));
        reader
->close();
        reader
->deleteLater();
    }

    png_set_read_fn( png_ptr,reader,(png_rw_ptr)user_read_data);

    png_set_sig_bytes(png_ptr,
0);

    png_read_png(png_ptr,info_ptr,PNG_TRANSFORM_IDENTITY,
0);
    
const unsigned int width = png_get_image_width(png_ptr,info_ptr);
    
const unsigned int height = png_get_image_height(png_ptr,info_ptr);
    
const unsigned int bit_depth = png_get_bit_depth(png_ptr,info_ptr);
    
if(bit_depth != 8)
    {
        reader
->close();
        reader
->deleteLater();
        png_destroy_info_struct(png_ptr,png_infopp(
&info_ptr));
        png_destroy_read_struct(
&png_ptr,png_infopp(0), png_infopp(0));
    }

    
const png_byte colorType = png_get_color_type(png_ptr, info_ptr);
    
if((colorType != PNG_COLOR_TYPE_RGB) && (colorType != PNG_COLOR_TYPE_RGB_ALPHA))
    {
        reader
->close();
        reader
->deleteLater();
        png_destroy_info_struct(png_ptr, png_infopp(
&info_ptr));
        png_destroy_read_struct(
&png_ptr, png_infopp(0), png_infopp(0));
    }

    
const int bytesPerPixel = (colorType == PNG_COLOR_TYPE_RGB) ? 3 : 4;
    
const int stride = bytesPerPixel * width;

    unsigned 
char* data = new unsigned char[stride * height];
    png_bytep
* row_pointers = png_get_rows(png_ptr, info_ptr);
    
for(unsigned int i = 0; i < height; ++i)
    {
        
const unsigned int row = height - i - 1;
        memcpy(data 
+ (row * stride), row_pointers[i], stride);
    }

    size_.x_ 
= width;
    size_.y_ 
= height;
    numberOfBitsPerPixel_ 
= bytesPerPixel * 8;
    data_ 
= data;

    reader
->close();
    reader
->deleteLater();
    png_destroy_info_struct(png_ptr, png_infopp(
&info_ptr));
    png_destroy_read_struct(
&png_ptr, png_infopp(0), png_infopp(0));
}
posted @ 2015-12-29 11:12 ccsdu2009 閱讀(3874) | 評(píng)論 (0)編輯 收藏
 
代碼如下:
class ArrowItem : public QGraphicsItem
{
public:
    
const static float LINE_WIDTH;
    
const static float ARROW_SIZE;
public:
    ArrowItem(QGraphicsItem
* parent = 0);
    
~ArrowItem();
    
void setData(const QPointF& from,const QRectF& rect);
public:
    QRectF boundingRect()
const;
    
void paint(QPainter* painter,const QStyleOptionGraphicsItem* style,QWidget* widget);
private:
    QPointF computeTo(
const QPointF& from,const QRectF& to);
private:
    
bool mValid;
    QPointF mFrom;
    QPointF mTo;
    QPointF mP1;
    QPointF mP2;
    QRectF  mRect;
};

const float ArrowItem::LINE_WIDTH = 1.5f;
const float ArrowItem::ARROW_SIZE = 8.0f;

ArrowItem::ArrowItem(QGraphicsItem
* parent):
QGraphicsItem(parent),
mValid(
false)
{
}

ArrowItem::
~ArrowItem()
{
}

QPointF ArrowItem::computeTo(
const QPointF& from,const QRectF& to)
{
    QPointF center(to.center());
    QPointF top(center.x(),to.top());
    QPointF right(to.right(),center.y());
    QPointF bottom(center.x(),to.bottom());
    QPointF left(to.left(),center.y());

    
//left
    if(from.x() < to.left())
    {
        
if(from.y() < to.top())
        {
            QLineF line1(from,top);
            QLineF line2(from,left);
            
return line1.length() > line2.length() ? left : top;
        }
        
else if(from.y() > to.bottom())
        {
            QLineF line1(from,left);
            QLineF line2(from,bottom);
            
return line1.length() > line2.length() ? bottom : left;
        }
        
return left;
    }
    
//right
    if(from.x() > to.right())
    {
        
if(from.y() < to.top())
        {
            QLineF line1(from,top);
            QLineF line2(from,right);
            
return line1.length() > line2.length() ? right : top;
        }
        
else if(from.y() > to.bottom())
        {
            QLineF line1(from,bottom);
            QLineF line2(from,right);
            
return line1.length() > line2.length() ? right : bottom;
        }
        
return right;
    }

    
if(from.y() < to.top())
        
return top;
    
else if(from.y() > to.bottom())
        
return bottom;

    Q_ASSERT(
0);
    
return QPointF();
}

void ArrowItem::setData(const QPointF& from,const QRectF& rect)
{
    mValid 
= true;
    mFrom 
= from;
    mRect 
= rect;

    
if(rect.contains(from))
    {
        mValid 
= false;
        
return;
    }

    mTo 
= computeTo(mFrom,mRect);

    QLineF line(mFrom,mTo);
    qreal angle 
= ::acos(line.dx()/line.length());

    
if(line.dy() >= 0)
        angle 
= 3.14159*2 - angle;

    mP1 
= mTo + QPointF(sin(angle-PI/3)*ARROW_SIZE,cos(angle-PI/3)*ARROW_SIZE);
    mP2 
= mTo + QPointF(sin(angle-PI+PI/3)*ARROW_SIZE,cos(angle-PI+PI/3)*ARROW_SIZE);
}

QRectF ArrowItem::boundingRect()
const
{
    qreal extra 
= (LINE_WIDTH + ARROW_SIZE)/2.0;
    QRectF rect
= QRectF(mFrom,QSizeF(mTo.x()-mFrom.x(),mTo.y()-mFrom.y())).normalized().
        adjusted(
-extra,-extra,extra,extra);
    
return rect;
}

void ArrowItem::paint(QPainter* painter,const QStyleOptionGraphicsItem* style,QWidget* widget)
{
    
if(!mValid)
        
return;
    painter
->setRenderHint(QPainter::Antialiasing);
    QPen p(QColor::fromRgb(
79,136,187));
    painter
->setBrush(QBrush(p.color()));
    p.setWidthF(LINE_WIDTH);
    painter
->setPen(p);
    painter
->drawLine(mFrom,mTo);
    painter
->drawPolygon(QPolygonF()<<mTo<<mP1<<mP2);
}

void ArrowItem::setData(const QPointF& from,const QRectF& rect)
該函數(shù)第一個(gè)參數(shù)為箭頭起點(diǎn),rect為箭頭指向的矩形框,該函數(shù)會(huì)自動(dòng)計(jì)算箭頭終點(diǎn)和箭頭相關(guān)參數(shù)
該代碼經(jīng)過(guò)測(cè)試 - 完全可以使用
參考:
http://www.cnblogs.com/liulun/p/3833006.html
posted @ 2015-12-15 13:10 ccsdu2009 閱讀(9923) | 評(píng)論 (0)編輯 收藏
 
    QFont font;
    font.setPointSize(
15);
    
    
for(int i=0;i<15;i++)
    {
        
for(int j=0;j<18;j++)
        {
            QPointF p(
-2400+20+(RECT_WIDTH+30)*i,-1500+20+(RECT_HEIGHT+30)*j);
            QGraphicsRectItem
* item = new QGraphicsRectItem(p.x(),p.y(),RECT_WIDTH,RECT_HEIGHT);
            item
->setToolTip("click me");
            item
->setBrush(QColor(79,136,187,255));
            scene
->addItem(item);

            QGraphicsTextItem
* text = new QGraphicsTextItem(item);
            text
->setPlainText(QString("%1,%2").arg(i).arg(j));
            QRectF rect 
= text->boundingRect();
            text
->setDefaultTextColor(QColor(255,255,255));
            p.setX(p.x() 
+ RECT_WIDTH/2 - rect.width()/2);
            text
->setPos(p);
            text
->setFont(font);
        }
    }
按照經(jīng)驗(yàn)以為
QGraphicsRectItem會(huì)有setText接口,之后覺(jué)得應(yīng)該定制一個(gè)QGraphicsItem
搜了下原來(lái)
QGraphicsRectItem是樹(shù)狀結(jié)構(gòu)可以增加子項(xiàng)
因此就好辦多了,代碼如上
posted @ 2015-12-10 17:12 ccsdu2009 閱讀(3016) | 評(píng)論 (0)編輯 收藏
 
更新不多,主要是取消了插接結(jié)構(gòu),把所有的編解碼和音效都合入了主庫(kù)
dll合計(jì)不超過(guò)1M

支持常見(jiàn)音頻格式和音效,使用超級(jí)方便
下載在這里:/Files/gaimor/gaudio-sdk-2.2.1.0.zip
posted @ 2015-12-10 16:37 ccsdu2009 閱讀(496) | 評(píng)論 (0)編輯 收藏
僅列出標(biāo)題
共38頁(yè): First 4 5 6 7 8 9 10 11 12 Last 
 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美一区二区三区日韩视频| 亚洲一区三区视频在线观看| 欧美影片第一页| 亚洲永久免费视频| 午夜国产精品影院在线观看| 欧美亚洲视频| 国产欧美亚洲精品| 国产精品盗摄一区二区三区| 国产精品久久午夜夜伦鲁鲁| 国产日韩欧美高清| 韩国一区电影| 亚洲激情在线| 亚洲视频一区二区| 欧美影院成年免费版| 久久夜色精品一区| 亚洲国产影院| 亚洲精品影视在线观看| 亚洲——在线| 久久精品盗摄| 亚洲国产一区二区在线| 最新亚洲激情| av成人免费| 先锋影音久久久| 久久久久在线观看| 欧美精品一区在线播放| 欧美日韩高清免费| 国产精品一区二区在线观看| 一区二区在线免费观看| 99国产精品久久久久久久成人热| 亚洲综合日韩在线| 久久亚洲午夜电影| 亚洲激情精品| 先锋影音网一区二区| 欧美va日韩va| 国产精品伊人日日| 91久久精品网| 亚洲欧美日韩国产一区二区| 女生裸体视频一区二区三区| 一区二区三区精品| 久久综合久色欧美综合狠狠| 国产精品大全| 久久久五月婷婷| 久久久久久久一区| 久久精彩视频| 欧美日韩国产综合久久| 欧美14一18处毛片| 欧美xxx在线观看| 国产精品视频999| 亚洲黄色一区| 欧美中文字幕在线观看| 亚洲欧洲精品一区二区三区不卡 | 久久激情婷婷| 欧美日韩黄色大片| 激情av一区| 亚洲欧美日韩国产综合| 欧美激情亚洲国产| 欧美一区二区三区精品| 欧美日韩一级大片网址| 亚洲大片一区二区三区| 亚洲欧美综合精品久久成人| 亚洲国产毛片完整版 | 国产精品亚洲产品| 亚洲高清在线精品| 性欧美暴力猛交另类hd| 亚洲韩国青草视频| 免费观看亚洲视频大全| 99精品视频网| 欧美成人国产va精品日本一级| 国产欧美激情| 亚洲一区二区成人| 亚洲激情av| 久久综合狠狠综合久久综合88 | 欧美在线一二三区| 亚洲免费成人av| 欧美chengren| 在线观看亚洲精品| 久久精品国产69国产精品亚洲| 一区二区冒白浆视频| 欧美人在线视频| 亚洲国产三级| 麻豆91精品| 久久aⅴ国产欧美74aaa| 国产精品三上| 亚洲欧美日韩在线播放| 在线亚洲欧美| 欧美日韩系列| 伊人久久亚洲热| 久久精品国产v日韩v亚洲 | 久久精品国产综合| 亚洲欧美www| 国产精品捆绑调教| 亚洲一区二区在线看| 99pao成人国产永久免费视频| 欧美激情亚洲另类| 亚洲免费观看视频| 亚洲精品久久久久久久久久久久| 欧美成人免费大片| 亚洲精品欧洲| 亚洲激情在线| 欧美国产日韩一区二区在线观看| 91久久亚洲| 亚洲福利视频网站| 欧美激情偷拍| 亚洲视频一区| 亚洲一区尤物| 国产午夜亚洲精品羞羞网站| 久久久www成人免费无遮挡大片 | 国产一区二区三区四区老人| 久久精品日韩欧美| 久久动漫亚洲| 亚洲电影下载| 欧美激情bt| 欧美精品国产精品日韩精品| 一区二区三区av| 一区二区不卡在线视频 午夜欧美不卡'| 欧美日韩综合在线| 午夜一区在线| 久久成人免费| 亚洲国产另类久久久精品极度| 一区二区免费看| 一本色道久久88亚洲综合88| 国产精品久久久久久av福利软件| 国产乱肥老妇国产一区二| 欧美主播一区二区三区| 久久久精品国产一区二区三区| 亚洲电影天堂av| 亚洲欧洲日产国码二区| 国产精品成人一区二区| 欧美激情第一页xxx| 久久伊人精品天天| 久久国产精品色婷婷| 亚洲国产裸拍裸体视频在线观看乱了中文 | 国产精品美女久久久免费 | 欧美人成在线| 香蕉成人久久| 久久天天躁狠狠躁夜夜爽蜜月| 亚洲精选中文字幕| 亚洲无线视频| 一色屋精品视频在线观看网站| 亚洲高清视频一区二区| 国产精品久久| 美女性感视频久久久| 欧美日本成人| 久久久女女女女999久久| 欧美国产综合一区二区| 性色一区二区| 母乳一区在线观看| 亚洲欧美电影院| 久久在线免费观看视频| 亚洲婷婷国产精品电影人久久| 欧美一区二区三区在线观看| 久久久久久一区二区| 欧美在线视频一区| 亚洲国产成人精品视频| 亚洲日本欧美| 国产精品欧美精品| 免费国产一区二区| 欧美日韩国产欧美日美国产精品| 欧美亚洲综合在线| 欧美v亚洲v综合ⅴ国产v| 午夜亚洲福利在线老司机| 久久免费偷拍视频| 亚洲男人的天堂在线aⅴ视频| 久久久综合激的五月天| 亚洲在线一区二区三区| 久久夜色精品国产| 亚洲男人第一av网站| 免费在线看成人av| 久久精品成人| 欧美日韩在线免费观看| 蜜桃精品一区二区三区| 国产精品第十页| 亚洲丶国产丶欧美一区二区三区| 国产精品女主播| 日韩午夜三级在线| 欧美一区二区三区在线播放| 99视频精品全国免费| 久久精品中文字幕一区| 亚洲制服少妇| 欧美高清视频一区| 久久在线视频在线| 国产精品视频精品| 亚洲乱码国产乱码精品精| 在线精品视频免费观看| 欧美一区二区三区在线免费观看 | 美日韩精品免费观看视频| 国产精品狼人久久影院观看方式| 亚洲第一在线| 今天的高清视频免费播放成人| 中日韩美女免费视频网址在线观看 | 亚洲香蕉网站| 一本大道久久a久久综合婷婷| 另类专区欧美制服同性| 久久久999国产| 国产精品视频九色porn| 亚洲人体1000| 一区二区三区精品国产| 亚洲免费视频在线观看| 国产精品一区免费在线观看| 久久午夜电影网|