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

飯中淹的避難所~~~~~

偶爾來避難的地方~

  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
  94 隨筆 :: 0 文章 :: 257 評論 :: 0 Trackbacks
  1 #pragma once
  2 
  3 #include "Define.h"
  4 
  5 UICORE_NS_BEGIN
  6 
  7 //    UI核心接口的版本號
  8 //    0.1.0.0
  9 #define    UICORE_VERSION    0x00010000
 10 
 11 //    UI點坐標
 12 template<typename tcoordinate>
 13 struct TUIPoint
 14 {
 15     tcoordinate x;
 16     tcoordinate y;
 17 };
 18 
 19 //    整數型的點坐標
 20 typedef TUIPoint<long> UIPointL;
 21 //    浮點型的點坐標
 22 typedef TUIPoint<float> UIPointF;
 23 
 24 //    前置接口聲明
 25 class IUIFont;    //    字體接口
 26 class IUISoundEffect;    //    音效接口
 27 class IUITexture;        //    貼圖接口
 28 class IUIDataSource;    //    數據源
 29 class IUISoundContext;    //    聲音上下文
 30 class IUIDrawContext;    //    繪圖上下文
 31 class IUIInputContext;    //    輸入上下文
 32 class IUIResourceManager;    //    資源管理器 
 33 
 34 class IUIRoot;                //    UI的根接口
 35 class IUIElementEventListener;    //    UI事件監聽者接口
 36 class IUIElementDataProvider;    //    UI數據提供者接口
 37 
 38 
 39 class IUIElement;            //    UI元素接口 
 40 
 41 
 42 //    UI元素的控制器
 43 class IUIElementController
 44 {
 45 public:
 46     virtual ~IUIElementController() {}
 47     virtual IUIElement * GetTarget() const = 0;
 48 };
 49 
 50 //    UI元素的容器
 51 class IUIElementContainer
 52 {
 53 public:
 54     virtual ~IUIElementContainer() {}
 55 
 56     virtual void Release() = 0;
 57 
 58     virtual bool IsEmpty() const = 0;
 59 
 60     virtual IUIElement * GetFirstElement() const = 0;
 61     virtual IUIElement * GetLastElement() const = 0;
 62     virtual IUIElement * GetElementByPath( const wchar_t * pszPath ) const = 0;
 63     virtual IUIElement * GetElementById( unsigned long ulId ) const = 0;
 64     virtual IUIElement * GetElementByName( const wchar_t * pszName, unsigned int iLen ) const = 0;
 65     virtual IUIElement * GetElementByPosition( long x, long y, IUIElement ** ppTopParentElement = 0 ) const = 0;
 66 
 67     virtual void AddFirst( IUIElement * pElement ) = 0;
 68     virtual void AddLast( IUIElement * pElement ) = 0;
 69     virtual void InsertAfter( IUIElement * pPrev, IUIElement * pElement ) = 0;
 70     virtual void InsertBefore( IUIElement * pNext, IUIElement * pElement ) = 0;
 71     virtual void Remove( IUIElement * pElement ) = 0;
 72 
 73     virtual void UpdateLayout() = 0;
 74     virtual void Render( IUIDrawContext * pDC ) = 0;
 75     virtual void Update(unsigned long ulMilliSeconds) = 0;
 76 
 77 };
 78 
 79 //    UI元素
 80 //    因為原本希望UI元素也可以存在多種實現
 81 //    后來發現這個沒必要。
 82 //    
 83 class IUIElement
 84 {
 85 public:
 86     virtual ~IUIElement() {}
 87 
 88     virtual void Release() = 0;
 89 
 90     virtual IUIElementContainer * GetContainer() const = 0;
 91 
 92     virtual IUIElementController * GetController() const = 0;
 93     template <class TController>
 94     inline TController * GetController() const {
 95         return dynamic_cast<TController*>( GetController() );
 96     }
 97 
 98     virtual IUIElement * GetNext() const = 0;
 99     virtual IUIElement * GetPrev() const = 0;
100     virtual IUIElement * GetParent() const = 0;
101     virtual IUIRoot * GetRoot() const = 0;
102 
103     virtual void Render( IUIDrawContext * pDC ) = 0;
104     virtual void Update( unsigned long ulMilliSeconds ) = 0;
105 
106     virtual void UpdateLayout() = 0;
107 
108     virtual unsigned long GetId() const = 0;
109     virtual const wchar_t * GetName() const = 0;
110     virtual long GetGlobalX() const = 0;
111     virtual long GetGlobalY() const = 0;
112     virtual long GetX() const = 0;
113     virtual long GetY() const = 0;
114     virtual long GetWidth() const = 0;
115     virtual long GetHeight() const = 0;
116     virtual const wchar_t * GetClassName() const = 0;
117 
118     virtual void SetPosition( long lX, long lY ) = 0;
119     virtual void SetSize( long lWidth, long lHeight ) = 0;
120 
121     virtual bool IsEnable() const = 0;
122     virtual void SetEnable( bool bEnable ) = 0;
123     virtual bool IsVisible() const = 0;
124     virtual void SetVisible( bool bVisible ) = 0;
125     virtual bool IsClipChildren() const = 0;
126     virtual void SetClipChildren( bool bClip ) = 0;
127     virtual bool IsTabStop() const = 0;
128     virtual void SetTabStop( bool bStop ) = 0;
129 
130     virtual int GetTabStopIndex() const = 0;
131 
132     virtual IUIElementEventListener * GetEventListener() const = 0;
133     virtual void SetEventListener( IUIElementEventListener * pEventListener ) = 0;
134     virtual IUIElementDataProvider * GetDataProvider() const = 0;
135     virtual void SetDataProvider( IUIElementDataProvider * pDataProvider ) = 0;
136 public:
137     virtual void OnEnableChanging( bool * pEnable ) = 0;
138     virtual void OnEnableChanged() = 0;
139     virtual void OnVisibleChanging( bool * pVisible ) = 0;
140     virtual void OnVisibleChanged() = 0;
141     virtual void OnClipChildrenChanging( bool * pClip ) = 0;
142     virtual void OnClipChildrenChanged() = 0;
143 
144     virtual void OnPositionChanging( long * pNewX, long * pNewY ) = 0;
145     virtual void OnPositionChanged() = 0;
146     virtual void OnSizeChanging( long * pNewWidth, long * pNewHeight ) = 0;
147     virtual void OnSizeChanged() = 0;
148 
149     virtual void OnInputEvent( int iEventId, void * pParam, int iParam ) = 0;
150 
151 public:
152     virtual void _SetNext( IUIElement * pNext ) = 0;
153     virtual void _SetPrev( IUIElement * pPrev ) = 0;
154     virtual void _SetParent( IUIElement * pParent ) = 0;
155 protected:
156     virtual bool _Init( IUIRoot * pRoot, IUIElement * pParent, IUIDataSource * pDataSource ) = 0;
157 };
158 
159 //    UI元素的普通事件
160 enum EnumUIElementStandardEvent
161 {
162     EUISE_SHOW,
163     EUISE_HIDE,
164     EUISE_LOADED,
165     EUISE_UNLOAD,
166     EUISE_MOVING,
167     EUISE_MOVED,
168 };
169 
170 //    事件監聽者
171 class IUIElementEventListener
172 {
173 public:
174     virtual ~IUIElementEventListener() {}
175     virtual void OnEvent( IUIElement * pElement, int iEventId, void * pParam, int iParam ) = 0;
176 };
177 
178 //    數據提供者
179 //    對于列表框等元素容器類的UI元素
180 //    使用這個接口可以方便應用程序向UI提供數據
181 class IUIElementDataProvider
182 {
183 public:
184     virtual ~IUIElementDataProvider() {}
185     virtual void * QueryData( IUIElement * pElement, int iDataType, void * pParam, int iParam, int * iGotDataLength ) = 0;
186     virtual void FreeData( IUIElement * pElement, int iDataType, void * pData, int iDataLength ) = 0;
187 };
188 
189 //    輸入事件
190 enum EnumUIElementStandardInputEvent
191 {
192     EUISIE_MOUSE_INPUTEVENT_START,
193     EUISIE_MOUSEENTER,
194     EUISIE_MOUSELEAVE,
195     EUISIE_MOUSEMOVE,
196     EUISIE_MOUSEWHEEL,
197     EUISIE_MOUSELBUTTONDOWN,
198     EUISIE_MOUSELBUTTONUP,
199     EUISIE_MOUSERBUTTONDOWN,
200     EUISIE_MOUSERBUTTONUP,
201     EUISIE_MOUSEMBUTTONDOWN,
202     EUISIE_MOUSEMBUTTONUP,
203     EUISIE_MOUSE_INPUTEVENT_USERDEFINE_START,
204     EUISIE_KEYBORAD_INPUTEVENT_START = 1000,
205     EUISIE_KEYDOWN,
206     EUISIE_KEYUP,
207     EUISIE_CHAR,
208     EUISIE_IME_CHAR,
209     EUISIE_IME_RESULT,
210     EUISIE_KEYBORAD_INPUTEVENT_USERDEFINE_START,
211 
212     EUISIE_GOTFOCUS,    //    取得焦點
213     EUISIE_LOSTFOCUS,    //    失去焦點
214     EUISIE_ACTIVATE,    //    激活
215     EUISIE_INACTIVATE,    //    非激活
216     EUISIE_GOTTOPPOSITION,    //    獲取到最高點(用於菜單和COMBOBOX的LIST顯示)
217     EUISIE_LOSTTOPPOSITION,    //    失去最高點
218     EUISIE_POPUPCLOSE,
219 };
220 
221 
222 //    UI元素的創建函數
223 //    用于注冊到UIROOT中
224 //    以便于從數據源中根據TAG名字直接創建UI元素。
225 typedef IUIElement * (__stdcall * PFN_CREATEUIELEMENT)( IUIRoot * pRoot, IUIElement * pParent, IUIDataSource * pDataSource );
226 
227 
228 //    UI根接口
229 //    作為整個UI系統的管理中心
230 //    其中POPUP的方法,用來處理諸如combobox的彈出式列表框,彈出式菜單等TOPMOST的UI元素。
231 class IUIRoot
232 {
233 public:
234     virtual ~IUIRoot() {}
235 
236     virtual void Release() = 0;
237     virtual IUIElementContainer * GetContainer() const = 0;
238     virtual IUIElement * CreateUIElement( IUIDataSource * pDataSource ) = 0;
239     virtual bool RegisterUIElement( const wchar_t * pszClassName, PFN_CREATEUIELEMENT pfnCreateUIElement ) = 0;
240     virtual void UnregisterUIElement( const wchar_t * pszClassName ) = 0;
241     virtual PFN_CREATEUIELEMENT GetUIElementCreator( const wchar_t * pszClassName ) = 0;
242     virtual IUIDrawContext * GetDrawContext() const = 0;
243     virtual IUIInputContext * GetInputContext() const = 0;
244     virtual IUISoundContext * GetSoundContext() const = 0;
245     virtual IUIResourceManager * GetResourceManager() const = 0;
246 
247     virtual void Render() = 0;
248     virtual void Update(unsigned long ulMilliSeconds) = 0;
249 
250     virtual void SetFocus( IUIElement * pElement ) = 0;
251     virtual IUIElement * GetFocus() const = 0;
252     virtual void SetCapture( IUIElement * pElement ) = 0;
253 
254     virtual void OnInputEvent( int iEventId, void * pParam, int iParam ) = 0;
255 
256     virtual void PopupElement( IUIElement * pParent, IUIElement * pPopupElement, long x, long y ) = 0;
257 
258 };
259 
260 
261 
262 
263 
264 //    UI資源接口
265 //    提供了資源的共有方法
266 class IUIResource
267 {
268 public:
269     virtual ~IUIResource() {}
270     virtual void Release() = 0;
271     virtual const wchar_t * GetPath() const = 0;
272 };
273 
274 //    UI字體接口,
275 //    提供接口返回文字的橫向寬度的
276 //    以及字體的最大高度。
277 class IUIFont : public IUIResource
278 {
279 public:
280     virtual ~IUIFont() {}
281     virtual long GetCharIncX( wchar_t ch ) = 0;
282     virtual long GetHeight() const = 0;
283 };
284 
285 //    音效接口
286 //    因為在實際編碼過程中尚未涉及到
287 //    所以這里的接口是臨時的
288 //    并未經過仔細斟酌。
289 class IUISoundEffect : public IUIResource
290 {
291 public:
292     virtual ~IUISoundEffect() {}
293     virtual bool Play( bool bLoop = false ) = 0;
294     virtual void Stop() = 0;
295 };
296 
297 //    貼圖接口
298 //    提供對圖像引擎中的貼圖的使用。
299 //    因為后來決定采用4點式貼圖選取方式
300 //    從這里開始不兼容GDI了,
301 //    除非為GDI寫一套貼圖光柵化的東西。
302 class IUITexture : public IUIResource
303 {
304 public:
305     virtual ~IUITexture() {}
306     virtual long GetWidth() const = 0;
307     virtual long GetHeight() const = 0;
308     virtual void UpdateCoordinate( UIPointL ptTable[4] ) = 0;
309     virtual IUITexture * Clone() = 0;
310 };
311 
312 //    數據源接口
313 //    提供了對數據源的訪問接口
314 //    讓元素內部可以根據數據源進行各種屬性的初始化
315 class IUIDataSource
316 {
317 public:
318     virtual ~IUIDataSource() {}
319     virtual IUIDataSource * GetFirstChild() const = 0;
320     virtual IUIDataSource * GetNext() const = 0;
321     virtual IUIDataSource * GetPrev() const = 0;
322     virtual const wchar_t * GetName() const = 0;
323     virtual const wchar_t * GetAttributeString( const wchar_t * pszAttributeName, const wchar_t * pszDefValue ) const = 0;
324     virtual long GetAttributeLong( const wchar_t * pszAttributeName, long lDefValue ) const = 0;
325     virtual unsigned long GetAttributeULong( const wchar_t * pszAttributeName, unsigned long ulDefValue ) const = 0;
326     virtual float GetAttributeFloat( const wchar_t * pszAttributeName, float fDefValue ) const = 0;
327     virtual double GetAttributeDouble( const wchar_t * pszAttributeName, double dDefValue ) const = 0;
328     virtual bool GetAttributeBool( const wchar_t * pszAttributeName, bool bDefValue ) const = 0;
329 
330     virtual IUIDataSource * CloneAlone() const = 0;
331 };
332 
333 //    UI上下文的接口,提供了上下文的共同方法
334 class IUIContext
335 {
336 public:
337     virtual ~IUIContext() {}
338     virtual bool InitWithRoot( IUIRoot * pRoot ) = 0;
339     virtual void Release() = 0;
340 };
341 
342 
343 //    繪圖上下文
344 //    提供了裁剪、繪制貼圖、繪制和填充矩形,三角形、繪制線段、繪制文字的方法
345 class IUIDrawContext : public IUIContext
346 {
347 public:
348     virtual ~IUIDrawContext() {}
349 
350     virtual int PushClipper( int x, int y, int w, int h ) = 0;
351     virtual void PopClipper( int iClipperId ) = 0;
352 
353     virtual void DrawTexture( IUITexture * pTex, int x, int y ) = 0;
354     virtual void DrawTexture( IUITexture * pTex, int x, int y, int w, int h ) = 0;
355 
356     virtual void DrawTexture( IUITexture * pTex, int x, int y, unsigned long ulColor ) = 0;
357     virtual void DrawTexture( IUITexture * pTex, int x, int y, int w, int h, unsigned long ulColor ) = 0;
358 
359     virtual void DrawBox( int x, int y, int w, int h, unsigned long ulColor ) = 0;
360     virtual void DrawLine( int x0, int y0, int x1, int y1, unsigned long ulColor ) = 0;
361     virtual void FillBox( int x, int y, int w, int h, unsigned long ulColor ) = 0;
362     virtual void DrawTriangle( int x1, int y1, int x2, int y2, int x3, int y3, unsigned long ulColor ) = 0;
363     virtual void FillTriangle( int x1, int y1, int x2, int y2, int x3, int y3, unsigned long ulColor ) = 0;
364 
365     virtual void SetFont( IUIFont * pFont ) = 0;
366     virtual IUIFont * GetFont() const = 0;
367     virtual void DrawText( const wchar_t * pszText, size_t iLen, int x, int y, unsigned long ulColor ) = 0;
368     virtual void DrawMultiLineText( const wchar_t * pszText, size_t iLen, int x, int y, int iLineWidth, unsigned long ulColor ) = 0;
369     virtual void PrintText( int x, int y, unsigned long ulColor, const wchar_t * pszText,  ) = 0;
370 
371 };
372 //    聲音上下文
373 //    因為尚未設計聲音接口
374 //    此處為臨時設計
375 class IUISoundContext : public IUIContext
376 {
377 public:
378     virtual ~IUISoundContext() {}
379     virtual void SetVolume( int iVolume ) = 0;
380 };
381 
382 //    輸入上下文中的鼠標光標
383 //    因為編輯器的需求,
384 //    鼠標光標要表現調整空間大小,拖動控件等
385 //    輸入上下文中加入了設置鼠標光標的方法
386 enum EUIINPUTMOUSECURSOR
387 {
388     EUIMC_POINTER,
389     EUIMC_HAND,
390     EUIMC_MOVE,
391     EUIMC_IBEAM,
392     EUIMC_UPDOWNRESIZER,
393     EUIMC_LEFTRIGHTRESIZER,
394     EUIMC_LEFTUPRIGHTDOWNRESIZER,
395     EUIMC_LEFTDOWNRIGHTUPRESIZER,
396     EUIMC_SYSTEMMAX,
397     EUIMC_USERCURSORINDEXBEGIN = 100,
398 };
399 
400 //    輸入上下文
401 //    提供CAPTURE的方法避免鼠標離開窗口后的事件中斷
402 //    提供了設置鼠標光標的方法
403 //  提供了鍵盤測試和取鼠標位置的方法
404 //    還為UI的FOCUS事件處理,提供了IME的一些支持。
405 class IUIInputContext : public IUIContext
406 {
407 public:
408     virtual ~IUIInputContext() {}
409     virtual void BeginCapture() = 0;
410     virtual void EndCapture() = 0;
411 
412     virtual bool RegisterMouseCursor( int iIndex, IUITexture * pCursorTex ) = 0;
413     virtual void SetMouseCursor( int iIndex ) = 0;
414     virtual int GetMouseCursor() const = 0;
415 
416     virtual bool GetMousePosition( int * px, int * py ) const = 0;
417     virtual bool IsKeyDown( int key ) const = 0;
418     //    得到輸入焦點,打開CHAR和IME消息
419     virtual void OnInputElementGotFocus( IUIElement * pInputElement, bool bRequireIme = false ) = 0;
420     //    失去輸入焦點,關閉IME等。
421     virtual void OnInputElementLostFocus( IUIElement * pInputElement ) = 0;
422 };
423 
424 
425 //    以下為腳本接口
426 //    接口只進行了設計,
427 //    并未進行實際的測試和使用
428 //    不過一些需要的功能都在接口中得到了體現。
429 enum EUISCRIPTDATATYPE
430 {
431     EUSDT_INT,
432     EUSDT_UINT,
433     EUSDT_FLOAT,
434     EUSDT_DOUBLE,
435     EUSDT_STRING,
436     EUSDT_POINTER,
437     EUSDT_SCRIPTMETHOD,
438     EUSDT_SCRIPTINSTANCE,
439 };
440 
441 class IUIScriptInstance;
442 class IUIScriptMethod;
443 
444 class IUIScriptValue
445 {
446 public:
447     virtual ~IUIScriptValue() {}
448     virtual void Release() = 0;
449     virtual EUISCRIPTDATATYPE GetType() const = 0;
450 
451     virtual IUIScriptValue * Clone() = 0;
452     virtual long ToInt() const = 0;
453     virtual unsigned long ToUInt() const = 0;
454     virtual const wchar_t * ToString() const = 0;
455     virtual float ToFloat() const = 0;
456     virtual double ToDouble() const = 0;
457     virtual void * ToPointer() const = 0;
458     virtual IUIScriptInstance * ToScriptInstance() const = 0;
459     virtual IUIScriptMethod * ToScriptMethod() const = 0;
460 
461     virtual void SetValue( IUIScriptValue * pValue ) = 0;
462     virtual void SetPointer( void * pVal ) = 0;
463     virtual void SetInt( long lVal ) = 0;
464     virtual void SetUInt( unsigned long ulVal ) = 0;
465     virtual void SetString( const wchar_t * pszVal ) = 0;
466     virtual void SetFloat( float fVal ) = 0;
467     virtual void SetDouble( double dVal ) = 0;
468     virtual void SetScriptInstance( IUIScriptInstance * pInstance ) = 0;
469     virtual void SetScriptMethod( IUIScriptMethod * pMethod ) = 0;
470 };
471 
472 
473 class IUIScriptMethod
474 {
475 public:
476     virtual ~IUIScriptMethod() {}
477     virtual void Release() = 0;
478     virtual IUIScriptInstance * GetOwner() const = 0;
479     virtual IUIScriptValue * CallWithParams( IUIScriptValue ** pParams, int iParamCount ) = 0;
480     virtual IUIScriptValue * Call() = 0;
481 };
482 
483 class IUIScriptInstance
484 {
485 public:
486     virtual ~IUIScriptInstance() {}
487     virtual void Release() = 0;
488     virtual IUIScriptMethod * GetMethod( const wchar_t * pszMethodName ) = 0;
489     virtual IUIScriptValue * GetVariableValue( const wchar_t * pszVariableName ) = 0;
490     virtual void SetVariableValue( const wchar_t * pszVariableName, IUIScriptValue * pValue ) = 0;
491 };
492 
493 class IUIScriptContext : public IUIContext
494 {
495 public:
496     virtual ~IUIScriptContext() {}
497     virtual IUIScriptInstance * GetScriptInstance( const wchar_t * pszPath ) = 0;
498     virtual IUIScriptValue * ValueFromValue( IUIScriptValue * pValue ) = 0;
499     virtual IUIScriptValue * ValueFromPointer( void * pVal ) = 0;
500     virtual IUIScriptValue * ValueFromInt( long lVal ) = 0;
501     virtual IUIScriptValue * ValueFromUInt( unsigned long ulVal ) = 0;
502     virtual IUIScriptValue * ValueFromString( const wchar_t * pszVal ) = 0;
503     virtual IUIScriptValue * ValueFromFloat( float fVal ) = 0;
504     virtual IUIScriptValue * ValueFromDouble( double dVal ) = 0;
505     virtual IUIScriptValue * ValueFromScriptInstance( IUIScriptInstance * pInstance ) = 0;
506     virtual IUIScriptValue * ValueFromScriptMethod( IUIScriptMethod * pMethod ) = 0;
507 };
508 
509 //    UI資源管理器的接口
510 //    提供了獲取資源的簡單方法
511 class IUIResourceManager : public IUIContext
512 {
513 public:
514     virtual ~IUIResourceManager() {}
515     virtual IUIFont * GetFont( const wchar_t * pszPath ) = 0;
516     virtual IUITexture * GetTexture( const wchar_t * pszPath ) = 0;
517     virtual IUISoundEffect * GetSoundEffect( const wchar_t * pszPath ) = 0;
518 };
519 
520 
521 UICORE_NS_END
522 
523 
524 
525 
posted on 2011-04-30 14:43 飯中淹 閱讀(2166) 評論(2)  編輯 收藏 引用 所屬分類: 游戲客戶端

評論

# re: 【游戲GUI】最近一個版本的UI接口 2011-04-30 23:08 so
首頁里連著三篇GUI的文章。(哈哈)  回復  更多評論
  

# re: 【游戲GUI】最近一個版本的UI接口 2011-05-04 09:57 Condor
老大還在造輪子啊  回復  更多評論
  

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            米奇777超碰欧美日韩亚洲| 欧美xart系列高清| 欧美在线视频播放| 日韩午夜视频在线观看| 欧美中文在线视频| 国产日本欧美一区二区| 99国产精品视频免费观看| 欧美一区激情| 国产精品ⅴa在线观看h| 久久久久久日产精品| 国产精品亚洲综合久久| 亚洲在线成人| av成人免费| 欧美日韩在线一二三| 亚洲精品一区中文| 亚洲第一精品电影| 亚洲欧美亚洲| 国产嫩草一区二区三区在线观看 | 欧美亚洲三区| 国产伦精品一区二区三区高清版| 亚洲女同同性videoxma| 亚洲视频狠狠| 国产亚洲成精品久久| 久久国产精品亚洲va麻豆| 午夜老司机精品| 激情欧美国产欧美| 欧美成人免费视频| 欧美精品一区二区在线观看| 一区二区三区高清不卡| 亚洲午夜激情在线| 国产在线精品自拍| 亚洲电影自拍| 欧美中文字幕第一页| 一本到12不卡视频在线dvd| 99精品国产99久久久久久福利| 欧美色一级片| 久久精品夜夜夜夜久久| 玖玖综合伊人| 亚洲午夜av电影| 久久riav二区三区| 亚洲欧洲偷拍精品| aa国产精品| 亚洲欧美日韩国产中文| 激情另类综合| 99国产一区| 亚洲高清资源| 亚洲天堂av综合网| 在线精品在线| 亚洲一区国产视频| 在线看成人片| 亚洲综合精品| 亚洲精品视频在线看| 亚洲午夜视频| 亚洲久久在线| 香蕉久久精品日日躁夜夜躁| 亚洲人体影院| 欧美一区午夜视频在线观看| 一本高清dvd不卡在线观看| 久久爱另类一区二区小说| 日韩系列在线| 久久影院亚洲| 久久福利一区| 亚洲婷婷综合久久一本伊一区| 亚洲影视九九影院在线观看| 久久久久久69| 欧美一级大片在线免费观看| 欧美成人精品在线观看| 久久精品国产一区二区三区免费看| 久久亚洲综合| 欧美在线观看一区| 欧美少妇一区二区| 亚洲第一在线视频| 一区在线观看| 性久久久久久久久| 亚洲欧美亚洲| 欧美日本乱大交xxxxx| 美女视频黄 久久| 国产亚洲成av人在线观看导航| 日韩亚洲国产欧美| 最新中文字幕亚洲| 欧美一区二区在线观看| 午夜精彩国产免费不卡不顿大片| 欧美日韩高清在线一区| 亚洲人成免费| 一本色道久久88综合亚洲精品ⅰ| 模特精品在线| 亚洲电影在线观看| 亚洲精品一区二区三区四区高清 | 欧美综合第一页| 久久久久久网址| 一本大道久久a久久综合婷婷| 最近中文字幕日韩精品| 久久亚洲图片| 欧美韩日一区二区三区| 尤物精品在线| 嫩草影视亚洲| 亚洲三级影院| 亚洲一区二区三区午夜| 欧美性猛交一区二区三区精品| 日韩午夜中文字幕| 亚洲欧美另类在线| 国产精品香蕉在线观看| 亚洲一区一卡| 激情六月婷婷久久| 久久久99国产精品免费| 免费久久99精品国产自| 亚洲福利国产精品| 欧美精品导航| 亚洲一区日韩在线| 久久久国产精品一区| 伊人久久大香线| 欧美精品激情在线观看| 中日韩美女免费视频网址在线观看 | 尤物网精品视频| 欧美福利专区| 一本色道久久综合| 欧美在线观看视频在线| 激情综合网址| 欧美大片va欧美在线播放| 亚洲免费观看高清在线观看 | 欧美jizz19性欧美| 亚洲激情av在线| 欧美久色视频| 亚洲欧美另类在线观看| 久久综合狠狠| 99精品视频一区| 国产乱码精品| 蜜臀av性久久久久蜜臀aⅴ| 99re6这里只有精品视频在线观看| 欧美伊人精品成人久久综合97| 国内成人精品2018免费看 | 国产亚洲精品aa午夜观看| 久久免费精品视频| 日韩一二三区视频| 久久香蕉精品| 亚洲欧美日韩在线| 亚洲国产清纯| 国产日韩欧美视频在线| 欧美黄在线观看| 久久精品30| 亚洲一区在线免费观看| 亚洲国产日韩一区二区| 久久久久久**毛片大全| 一区二区三区视频观看| 在线精品观看| 国产无一区二区| 欧美三级黄美女| 欧美顶级少妇做爰| 久久精品视频在线免费观看| 亚洲天堂免费观看| 亚洲国产精品尤物yw在线观看 | 免费在线观看成人av| 一区二区三区www| 亚洲成在线观看| 国产在线观看精品一区二区三区 | 伊人久久av导航| 国产欧美日韩在线播放| 欧美日韩亚洲国产精品| 麻豆精品精华液| 久久精彩视频| 先锋影音国产一区| 亚洲午夜国产成人av电影男同| 精品成人国产| 国产在线精品一区二区中文| 国产精品久久久久久影视 | 欧美日韩一区二区三区| 久久精品成人一区二区三区蜜臀| 亚洲一区二区三区视频| 99国产精品99久久久久久| 亚洲人成人99网站| 亚洲电影在线观看| 欧美国产日韩a欧美在线观看| 久久久久久夜精品精品免费| 午夜日韩在线| 性色av一区二区三区| 亚洲自拍三区| 亚洲主播在线观看| 亚洲愉拍自拍另类高清精品| 亚洲视频碰碰| 在线中文字幕日韩| 亚洲婷婷在线| 午夜精品久久久久久99热| 午夜精品免费视频| 欧美一区二区在线免费播放| 亚洲国产精品成人va在线观看| 国产欧美日韩高清| 欧美精品在线一区二区| 免费人成网站在线观看欧美高清 | 欧美日韩国产限制| 欧美视频一二三区| 欧美午夜精品久久久久久孕妇| 欧美韩日视频| 欧美体内she精视频在线观看| 欧美日韩一区二区免费在线观看| 国产精品h在线观看| 国产精品影音先锋| 伊人成人在线视频| 亚洲国产精品va在线看黑人| 亚洲作爱视频| 性视频1819p久久|