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

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

給BGE加上了富文本顯示功能
相關代碼如下:
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的問題
函數實現如下:
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</>
一個例子是:
<Blue>這段代碼主要測試BGE的富文本顯示功能\n</Blue><Red>需要指出的是當前只要能支持多行顯示和多顏色顯示功能即可(不考慮下劃線斜體以及加粗顯示)。</Red><White>這句話將被顯示為白色</><Blue>這句話應該被藍色字體</Blue><Green>綠色字體</><Cyan>Cyan色</>";
最終顯示如下:
posted @ 2016-02-22 17:46 ccsdu2009 閱讀(805) | 評論 (0)編輯 收藏
 
解釋:
GraphicsItem 重載 mousePressEvent(QGraphicsSceneMouseEvent* event)后處理完之后需要執行event->accpet().
posted @ 2016-02-05 09:18 ccsdu2009 閱讀(1344) | 評論 (0)編輯 收藏
 
推薦一款開源庫glc
glc是一款基于Qt和opengl的3D仿真程序,可以是用來渲染3ds,obj,stl等模型以及常見幾何體對象
支持對象拾取等功能
學習了一天感覺基本還行.
主頁:http://www.glc-lib.net/
posted @ 2016-01-29 17:11 ccsdu2009 閱讀(716) | 評論 (0)編輯 收藏
 
算是基本完成了,先上一個截圖


可以說GUI所需要的當前基本都是實現了

再上一個使用例子:
#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;
}

個人感覺寫的還是比較清晰,沒什么需要特別說明的
使用的開源庫有libpng,glfw,freetype,sigslot,physfs
不過代碼有點大,有興趣的可以留個郵箱

posted @ 2016-01-22 15:41 ccsdu2009 閱讀(4161) | 評論 (10)編輯 收藏
 
先上一個使用例子
#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;
}

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

using namespace bge;

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

    
//!生成和初始化窗口設備
    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())
    {
        
//!預渲染設備
        device->perRender();
        
//!窗體更新
        bge::WindowManager::instance().update();
        
        device
->swapBuffers();
        device
->pollEvents();
    }

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

    system(
"pause");
    
return 0;
}

還沒做完,用法如上,很簡練吧:D

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

posted @ 2016-01-07 16:20 ccsdu2009 閱讀(785) | 評論 (0)編輯 收藏
 
libpng比較另類,解碼方式比較奇特,這里記錄下
以下代碼為使用虛擬IOReader的方式,稍做修改就基于FILE使用
代碼很詳細,不需額外解釋
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 閱讀(3873) | 評論 (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)
該函數第一個參數為箭頭起點,rect為箭頭指向的矩形框,該函數會自動計算箭頭終點和箭頭相關參數
該代碼經過測試 - 完全可以使用
參考:
http://www.cnblogs.com/liulun/p/3833006.html
posted @ 2015-12-15 13:10 ccsdu2009 閱讀(9922) | 評論 (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);
        }
    }
按照經驗以為
QGraphicsRectItem會有setText接口,之后覺得應該定制一個QGraphicsItem
搜了下原來
QGraphicsRectItem是樹狀結構可以增加子項
因此就好辦多了,代碼如上
posted @ 2015-12-10 17:12 ccsdu2009 閱讀(3016) | 評論 (0)編輯 收藏
 
更新不多,主要是取消了插接結構,把所有的編解碼和音效都合入了主庫
dll合計不超過1M

支持常見音頻格式和音效,使用超級方便
下載在這里:/Files/gaimor/gaudio-sdk-2.2.1.0.zip
posted @ 2015-12-10 16:37 ccsdu2009 閱讀(495) | 評論 (0)編輯 收藏
僅列出標題
共38頁: 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>
            亚洲国产精品va| 一区二区三区国产精品| 好看不卡的中文字幕| 久久久水蜜桃| 亚洲一区二区三区精品动漫| 亚洲国产成人精品久久| 久久国产婷婷国产香蕉| 欧美极品在线视频| 欧美中文字幕视频在线观看| 久久精品视频在线看| 午夜精品久久久久久久久| 亚洲免费在线观看视频| 久久成人国产精品| 欧美1区免费| 国产精品v欧美精品v日韩| 国产精品区一区二区三区| 国产伦精品一区二区三区免费| 国产日韩在线看片| 亚洲国产女人aaa毛片在线| 中日韩高清电影网| 久久综合一区| 中日韩高清电影网| 久久裸体视频| 欧美午夜片在线免费观看| 国产日韩欧美自拍| 亚洲人成人77777线观看| 亚洲免费视频一区二区| 猛男gaygay欧美视频| 中文在线不卡视频| 欧美国产极速在线| 在线免费精品视频| 久久这里有精品15一区二区三区| 久久在线免费观看视频| 一本久久青青| 欧美日韩综合不卡| 99国产成+人+综合+亚洲欧美| 久久天堂国产精品| 欧美亚洲免费电影| 国产精品亚洲欧美| 欧美中日韩免费视频| 亚洲色图自拍| 99re8这里有精品热视频免费 | 亚洲人成在线播放| 欧美一区二区三区在线观看| aa国产精品| 国产亚洲福利社区一区| 久久一区免费| 欧美成人国产| 亚洲一区一卡| 久久久久九九九九| 亚洲一区欧美一区| 亚洲欧美日韩国产成人精品影院| 亚洲电影在线免费观看| 午夜精品久久久久| 久久久.com| 亚洲欧美日韩国产成人| 欧美在线视频免费| 亚洲桃花岛网站| 麻豆久久婷婷| 久久影视三级福利片| 欧美午夜精品伦理| 你懂的国产精品| 国产精品高潮久久| 日韩视频在线一区二区| 亚洲国产天堂久久综合| 欧美日韩一区二区视频在线| 精东粉嫩av免费一区二区三区| 欧美三级黄美女| 欧美乱人伦中文字幕在线| 国产精品人成在线观看免费| 亚洲欧洲三级| 老司机一区二区三区| 欧美激情第二页| 欧美亚洲一区二区三区| 亚洲午夜未删减在线观看| 亚洲二区在线| 久久午夜国产精品| 亚洲成色www8888| 欧美午夜精品理论片a级大开眼界 欧美午夜精品理论片a级按摩 | 久久国产精品一区二区| 美女诱惑黄网站一区| 亚洲视频视频在线| 欧美日韩一区二区三区| 免费观看日韩av| 国产欧美在线播放| 夜夜嗨av一区二区三区四季av| 国产精品久久久久9999高清| 久久久欧美精品sm网站| 国产农村妇女精品| 亚洲少妇自拍| 久久精品一区二区三区中文字幕| 国产在线一区二区三区四区| 久久国产一区| 亚洲国产91精品在线观看| 国产精品热久久久久夜色精品三区| 欧美成熟视频| 激情欧美丁香| 美女图片一区二区| 久久综合狠狠综合久久激情| 国产精品一区二区三区观看| 亚洲无限av看| 亚洲第一精品福利| 久久精品国产第一区二区三区最新章节 | 国产精品嫩草99a| 亚洲视频综合在线| 亚洲免费视频在线观看| 国产精品xxxav免费视频| 亚洲一区日韩| 欧美国产日韩一二三区| 正在播放欧美一区| 国内精品久久久久影院 日本资源| 久久伊人精品天天| 久久国内精品视频| 在线视频欧美精品| 亚洲特级毛片| 亚洲精品字幕| 欧美.www| 久久一区二区三区超碰国产精品| 亚洲人在线视频| 亚洲国产成人午夜在线一区| 国产日韩欧美亚洲| 国产人成精品一区二区三| 国产农村妇女毛片精品久久麻豆| 国产在线国偷精品产拍免费yy| 欧美日韩精品一区视频| 久久av红桃一区二区小说| 亚洲天堂久久| 一区二区三区视频在线观看| 亚洲人体一区| 一区二区三区精品视频| 亚洲一区在线免费| 久久精品国产v日韩v亚洲 | 国产精品久久久久久久午夜片| 久久国产99| 久久精品综合网| 久久国产免费| 欧美国产激情二区三区| 国产亚洲va综合人人澡精品| 一本久道久久综合狠狠爱| 亚洲尤物精选| 欧美日韩国产大片| 久久亚洲精品欧美| 国产精品成人午夜| 欧美激情影院| 亚洲福利在线观看| 午夜精品久久久久| 香蕉尹人综合在线观看| 欧美日韩国产一区二区| 亚洲国产精品t66y| 国内精品久久久久久| 亚洲欧美清纯在线制服| 亚洲欧美经典视频| 国产精品人成在线观看免费| 一区二区91| 欧美日韩一级黄| 亚洲视频在线视频| 午夜精品成人在线视频| 国产精品亚洲成人| 性欧美video另类hd性玩具| 欧美一区二区久久久| 国产婷婷色一区二区三区| 欧美自拍丝袜亚洲| 久久综合网hezyo| 亚洲精品一区二区三区av| 欧美人与禽猛交乱配视频| 99热免费精品| 欧美一区网站| 在线精品福利| 欧美乱妇高清无乱码| 一区二区三区欧美激情| 欧美一区二区三区免费看| 狠狠综合久久av一区二区小说| 久久天天综合| 99天天综合性| 久久久久久9999| 99热这里只有精品8| 国产精品女主播| 久久一区二区三区av| 日韩一本二本av| 久久久久国产成人精品亚洲午夜| 亚洲国产一区二区三区高清 | 久久久久看片| 亚洲日本va在线观看| 久久成人精品视频| 最近中文字幕日韩精品| 国产精品久久久久免费a∨大胸 | 国产精品久久久亚洲一区| 久久国产精品一区二区| 日韩视频欧美视频| 美女网站久久| 亚洲欧美一区二区三区久久 | 久久精品1区| 日韩午夜黄色| 欧美成人在线网站| 欧美与黑人午夜性猛交久久久| 亚洲国产成人精品视频| 国产精品激情偷乱一区二区∴| 免费不卡欧美自拍视频| 亚洲私人黄色宅男| 亚洲国产一区在线|