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

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

偶爾來避難的地方~

  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>
            久久久在线视频| 免费久久精品视频| 欧美影视一区| 欧美午夜剧场| 亚洲另类春色国产| 亚洲国产一区在线观看| 亚洲在线不卡| 国产精品你懂得| 久久久精品国产一区二区三区| 性久久久久久久| 在线欧美福利| 亚洲三级国产| 国产精品系列在线| 久久中文字幕一区| 欧美精品久久久久a| 亚洲字幕一区二区| 久久久国产精彩视频美女艺术照福利| 国产亚洲一区二区三区在线播放| 久久久久久9| 欧美黑人国产人伦爽爽爽| 亚洲性图久久| 久热综合在线亚洲精品| 午夜精品视频在线| 免费亚洲一区| 老司机精品视频网站| 欧美日韩国产一级| 欧美电影免费观看高清| 欧美无乱码久久久免费午夜一区| 久久欧美中文字幕| 国产精品久久久久91| 欧美96在线丨欧| 国产主播一区二区三区四区| 在线观看亚洲一区| 亚洲免费在线看| 亚洲视屏在线播放| 欧美日韩美女| 亚洲人成网站777色婷婷| 伊大人香蕉综合8在线视| 午夜久久黄色| 久久高清国产| 国产伦精品一区二区三区照片91| 9色精品在线| 亚洲一区二区三区777| 欧美日韩国产不卡在线看| 欧美激情在线狂野欧美精品| 伊人久久婷婷| 老司机凹凸av亚洲导航| 久久午夜羞羞影院免费观看| 激情六月综合| 欧美国产一区视频在线观看| 亚洲欧洲另类国产综合| 欧美成人一区二区三区在线观看| 国产精品热久久久久夜色精品三区| 亚洲国产日韩一级| 一区二区三区精品久久久| 亚洲视频电影在线| 国产偷自视频区视频一区二区| 亚洲欧美在线免费| 欧美电影在线观看| 亚洲影院一区| 伊大人香蕉综合8在线视| 欧美成在线观看| 亚洲午夜视频在线观看| 老牛国产精品一区的观看方式| 最近中文字幕日韩精品| 国产精品午夜久久| 免费观看国产成人| 亚洲欧美在线网| 亚洲国产成人一区| 午夜视频一区| 亚洲国产色一区| 欧美一区免费视频| 亚洲激情视频| 国产美女精品视频免费观看| 你懂的亚洲视频| 午夜一区二区三区在线观看| 亚洲美女色禁图| 亚洲黄色一区二区三区| 久久在线视频| 久久久99免费视频| 欧美专区第一页| 亚洲欧美日韩精品久久亚洲区| 亚洲视频在线二区| 欧美激情一区二区三区在线视频| 亚洲欧美国产制服动漫| 久久成人免费网| 亚洲精品久久久蜜桃| 激情成人中文字幕| 国产一区在线视频| 激情综合五月天| 极品少妇一区二区三区精品视频| 国产伦精品一区二区三区免费 | 久久成人国产精品| 久久av二区| 欧美福利一区| 日韩视频在线观看一区二区| 一本久久精品一区二区| 亚洲网友自拍| 久久久青草青青国产亚洲免观| 久久午夜电影网| 欧美日韩精品一区视频| 国产欧美一区二区精品性色| 黄色亚洲在线| 亚洲色图自拍| 欧美第一黄色网| 性做久久久久久| 欧美精品二区| 国产亚洲激情在线| 亚洲一区二区高清| 国产欧美日韩综合一区在线观看| 国内在线观看一区二区三区| 日韩视频免费| 免费观看日韩av| 亚洲午夜激情免费视频| 久热精品在线视频| 国产一区二区三区的电影| 夜夜嗨av一区二区三区中文字幕 | 欧美va日韩va| 国产视频久久| 午夜国产精品视频免费体验区| 美女国内精品自产拍在线播放| 99热免费精品在线观看| 久久久免费观看视频| 国产精品推荐精品| 小处雏高清一区二区三区| 99成人免费视频| 欧美成人午夜影院| 日韩午夜三级在线| 国产精品九色蝌蚪自拍| 91久久久久久| 最新日韩中文字幕| 欧美日本在线观看| 在线综合亚洲| 午夜精品久久久久| 悠悠资源网久久精品| 欧美成人一区二免费视频软件| 久久亚洲精选| 亚洲欧洲精品一区二区三区不卡 | 日韩网站免费观看| 一区二区三区国产精品| 国产精品蜜臀在线观看| 久久精品91久久香蕉加勒比| 久久久爽爽爽美女图片| 亚洲日本电影| 午夜精品久久久久久久久 | 午夜精品一区二区三区在线播放| 午夜日韩在线观看| 国产精品久久久对白| 欧美激情一区二区三区成人 | 精品福利av| 欧美国产欧美亚洲国产日韩mv天天看完整 | 久久久五月婷婷| 在线亚洲免费视频| 久久精品国产96久久久香蕉| 99热精品在线| 久久天堂成人| 久久久久久网| 国产精品每日更新在线播放网址| 久久人人97超碰国产公开结果 | 欧美成人有码| 久久精品免费电影| 国产精品日韩在线| 亚洲精品人人| 久久久久九九视频| 欧美绝品在线观看成人午夜影视| 久久精品最新地址| 国产亚洲精品福利| 亚洲影音一区| 欧美有码在线视频| 国产精品久久久久久久免费软件 | 好看的av在线不卡观看| 亚洲永久免费av| 午夜精品一区二区三区四区| 国产精品爱啪在线线免费观看 | 欧美激情在线有限公司| 亚洲国产欧美日韩另类综合| 欧美日本一区二区视频在线观看| 亚洲视频在线免费观看| 欧美日本一区二区视频在线观看 | 最新国产の精品合集bt伙计| 久久五月婷婷丁香社区| 亚洲欧洲精品天堂一级| 亚洲视频碰碰| 国产精品免费观看视频| 午夜精品久久久久久久99水蜜桃| 久久久国产午夜精品| 亚洲激情在线播放| 久久爱91午夜羞羞| 一区二区三区中文在线观看| 裸体歌舞表演一区二区| 一区二区三区四区五区精品视频| 欧美一区二区日韩一区二区| 亚洲国产日韩美| 国产精品一级| 欧美日韩在线观看视频| 久久人人97超碰精品888| 一二三区精品| 亚洲激情在线观看| 久久婷婷久久| 久久久不卡网国产精品一区|