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

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

偶爾來避難的地方~

  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 飯中淹 閱讀(2170) 評論(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>
            久久久久久有精品国产| 一区二区三区精品国产| 久久久综合网| 亚洲第一色中文字幕| 亚洲第一中文字幕在线观看| 麻豆精品在线视频| 日韩午夜中文字幕| 亚洲欧美精品在线观看| 国产日韩欧美麻豆| 久热精品视频在线观看| 亚洲激情一区二区三区| 亚洲私人黄色宅男| 国产午夜精品久久久| 久久综合久久久| 亚洲免费成人av| 久久精品30| 日韩视频永久免费观看| 欧美午夜片在线观看| 欧美一级久久久久久久大片| 欧美福利电影在线观看| 亚洲午夜国产一区99re久久| 国产亚洲欧美一区二区| 欧美大片在线影院| 亚洲午夜伦理| 欧美国产乱视频| 亚洲一区欧美二区| 在线观看国产欧美| 欧美日韩一区三区| 久久国产乱子精品免费女| 亚洲国产精品久久久久| 欧美在线影院在线视频| 亚洲三级国产| 国产日韩亚洲欧美综合| 欧美精品一区二区三区高清aⅴ| 亚洲一区二区三区四区五区黄| 另类亚洲自拍| 亚洲一区美女视频在线观看免费| 在线观看日韩专区| 国产精品国产三级国产普通话三级| 久久精品亚洲乱码伦伦中文 | 欧美大片在线观看一区| 亚洲欧美日产图| 亚洲精品少妇| 国产主播一区二区| 国产精品福利在线观看| 欧美电影在线观看完整版| 欧美在线国产精品| 亚洲四色影视在线观看| 亚洲第一在线综合网站| 久久久久久网站| 亚洲欧美视频| 一区二区三区日韩欧美| 亚洲国产精品福利| 国产午夜精品在线| 国产精品无码永久免费888| 欧美精品久久99| 免费在线观看精品| 久久激情综合| 欧美在线视频观看| 亚洲免费一在线| 亚洲伊人网站| 亚洲一本视频| 正在播放欧美一区| 一本色道久久99精品综合| 91久久精品国产91久久性色tv| 久久午夜电影| 久久久免费精品视频| 欧美在线视频日韩| 欧美亚洲一级| 久久精品一区二区三区不卡牛牛| 亚洲欧美日韩精品久久亚洲区| 一区二区三区国产| 一区二区日韩| 亚洲一区二区精品在线| 亚洲最新合集| 亚洲一二三区视频在线观看| 99国内精品久久| 夜夜躁日日躁狠狠久久88av| av成人免费在线| 亚洲资源av| 欧美在线黄色| 久久免费视频网站| 欧美国产综合一区二区| 亚洲国产高清自拍| 亚洲精品乱码久久久久久久久 | 蜜桃久久av| 欧美风情在线观看| 国产精品v亚洲精品v日韩精品| 国产精品第十页| 国产在线精品一区二区夜色| 黄色成人免费网站| 亚洲精品久久7777| 亚洲一区二区网站| 久久精品一区蜜桃臀影院| 麻豆精品精华液| 91久久香蕉国产日韩欧美9色| 亚洲欧洲日产国产网站| 亚洲精品午夜| a91a精品视频在线观看| 亚洲欧美一区二区三区久久| 亚洲免费在线看| 性欧美video另类hd性玩具| 欧美一级黄色网| 久久这里只有| 欧美一区二区三区男人的天堂| 久久午夜电影网| 欧美黄色一区二区| 国产精品都在这里| 国产亚洲精品综合一区91| 红桃视频国产一区| 国产一区二区三区在线观看精品 | 久久精品国产一区二区三| 久久精品国产亚洲一区二区| 老司机精品视频一区二区三区| 午夜亚洲福利| 亚洲高清在线视频| 日韩一区二区免费高清| 亚洲在线观看| 久久久国产精品一区| 欧美国产精品中文字幕| 国产精品天美传媒入口| 国产尤物精品| 亚洲一级片在线观看| 久久国产日本精品| 亚洲二区在线视频| 亚洲伊人伊色伊影伊综合网| 久久一二三四| 国产日韩1区| 亚洲免费成人av电影| 欧美一区二区三区四区夜夜大片| 免费看亚洲片| 欧美高清hd18日本| 一本色道久久综合亚洲91| 久久激情综合| 国产精品mm| 99国产精品99久久久久久| 国产麻豆精品视频| 国产亚洲毛片| 亚洲精品在线二区| 蜜桃精品久久久久久久免费影院| 亚洲国产婷婷| 久久久噜噜噜久久中文字幕色伊伊| 欧美精品一区二区三区蜜桃| 黄色亚洲网站| av成人激情| 亚洲精品久久久蜜桃| 久久精品视频99| 国产精品爱久久久久久久| 亚洲国产婷婷香蕉久久久久久99 | 老司机aⅴ在线精品导航| 国产精品久久国产三级国电话系列| 在线成人免费视频| 欧美在线视频一区二区| 9久草视频在线视频精品| 久久综合久久综合九色| 禁断一区二区三区在线| 亚洲综合首页| 亚洲区国产区| 欧美不卡高清| 在线精品亚洲| 久久久国产91| 亚洲一区二区三区乱码aⅴ| 欧美激情亚洲另类| 在线观看视频一区二区欧美日韩| 欧美一区二区福利在线| 免费日韩av| 老司机一区二区三区| 狠狠久久综合婷婷不卡| 欧美亚洲综合久久| 亚洲午夜精品福利| 美脚丝袜一区二区三区在线观看 | 亚洲激情不卡| 欧美 日韩 国产一区二区在线视频 | 欧美一级片一区| 国产精品一区久久久| 亚洲影院高清在线| 99热免费精品| 欧美日韩少妇| 欧美一级视频| 午夜日韩激情| 国产亚洲a∨片在线观看| 欧美在线观看你懂的| 久久国产精品黑丝| 激情成人av| 久久综合成人精品亚洲另类欧美| 欧美中文字幕第一页| 国产综合色产在线精品| 久久影院亚洲| 久久综合久色欧美综合狠狠 | 亚洲欧洲在线播放| 欧美成人精品1314www| 欧美精品在线一区| 中文日韩电影网站| 亚洲天堂偷拍| 国产亚洲一区二区三区在线播放| 欧美一级夜夜爽| 乱码第一页成人| 99视频有精品| 亚洲视频一区在线观看| 国产一区二区高清|