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

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

偶爾來避難的地方~

  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 飯中淹 閱讀(2165) 評論(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>
            亚洲一区精品在线| 亚洲欧美日韩成人| 欧美人成在线| 欧美日韩国产综合在线| 欧美母乳在线| 欧美婷婷在线| 国产精品天天看| 国产视频一区二区三区在线观看| 国产精品免费看| 国产三级欧美三级| 在线观看欧美成人| 日韩西西人体444www| 中国成人亚色综合网站| 欧美一级视频| 免费在线成人| 国产一区在线免费观看| 一区二区三区四区五区精品| 夜夜嗨av一区二区三区网页| 亚洲小视频在线| 久久久久国产精品一区| 欧美成人精品在线观看| 国产精品av一区二区| 韩国三级电影一区二区| 亚洲精品极品| 久久久久久久999| 亚洲国产婷婷香蕉久久久久久99| 99re66热这里只有精品4| 亚洲综合成人婷婷小说| 美女脱光内衣内裤视频久久网站| 欧美日韩精品中文字幕| 国内精品国产成人| 亚洲一区二区三区免费视频| 美国成人毛片| 宅男噜噜噜66一区二区| 久久资源av| 国产伦精品一区二区三区免费 | 制服诱惑一区二区| 久久久亚洲一区| 国产欧美日韩免费| 亚洲午夜一区| 亚洲国产天堂久久国产91| 久久国产一区二区| 国产精品影音先锋| 一区二区三区免费在线观看| 久久综合九色99| 亚洲欧美日韩国产另类专区| 欧美日韩www| 亚洲日韩第九十九页| 免播放器亚洲| 久久乐国产精品| 国内精品久久国产| 欧美在线观看视频在线| 亚洲性视频网址| 国产精品国产三级欧美二区| 在线一区二区日韩| 99热精品在线| 欧美日韩中文| 一本色道久久加勒比88综合| 欧美黄色aaaa| 欧美 日韩 国产 一区| 在线成人激情视频| 久久五月婷婷丁香社区| 欧美一区二区成人6969| 国产欧美日韩中文字幕在线| 性欧美videos另类喷潮| 亚洲综合三区| 国产在线播精品第三| 久久蜜桃香蕉精品一区二区三区| 香蕉乱码成人久久天堂爱免费| 国产精品v欧美精品v日韩 | 中文精品视频一区二区在线观看| 欧美国产一区视频在线观看| 亚洲欧洲日产国码二区| 亚洲成人在线视频网站| 久久在线免费视频| 亚洲精品欧美精品| 99综合视频| 国产欧美日韩精品丝袜高跟鞋| 午夜天堂精品久久久久| 亚洲欧美经典视频| 在线欧美福利| 亚洲精品乱码久久久久久| 欧美日韩免费观看一区三区| 亚洲欧美国产三级| 欧美一区二区在线看| 亚洲国产中文字幕在线观看| 亚洲精品国精品久久99热一| 国产精品欧美久久久久无广告| 欧美综合国产| 欧美成人a∨高清免费观看| 亚洲一区在线视频| 久久久久www| 一级成人国产| 欧美在线免费视频| 99精品欧美一区二区三区综合在线| 亚洲视频第一页| 亚洲盗摄视频| 亚洲欧美日韩国产成人| 亚洲精品小视频| 亚洲欧美日韩成人高清在线一区| 亚洲国产精品高清久久久| 99精品视频免费全部在线| 伊人久久大香线蕉综合热线 | 亚洲无吗在线| 久久久久欧美精品| 亚洲一区网站| 欧美激情一区二区三区| 久久成人av少妇免费| 欧美激情一区二区三区四区| 欧美中文字幕视频| 欧美日韩午夜剧场| 欧美激情网友自拍| 国语精品中文字幕| 一区二区国产日产| 亚洲国产裸拍裸体视频在线观看乱了中文 | 欧美二区在线看| 久久精品在线观看| 国产精品qvod| 亚洲人成欧美中文字幕| 黄色日韩网站视频| 亚洲日本中文字幕| 女生裸体视频一区二区三区| 欧美调教视频| 亚洲美女av在线播放| …久久精品99久久香蕉国产| 亚洲欧美国产77777| 亚洲视频一区在线观看| 女女同性女同一区二区三区91| 久久久激情视频| 国产欧美一级| 亚洲欧美日韩一区在线| 亚洲男人第一网站| 欧美三级午夜理伦三级中视频| 亚洲福利小视频| 亚洲国产成人午夜在线一区| 欧美专区日韩专区| 久久深夜福利免费观看| 国产亚洲精品久久飘花 | 麻豆av一区二区三区| 美女露胸一区二区三区| 一区二区在线观看视频| 午夜精品久久久久| 久久精品免费电影| 激情视频一区二区三区| 久久精品久久99精品久久| 久热re这里精品视频在线6| 激情综合色丁香一区二区| 久久视频一区| 亚洲日本aⅴ片在线观看香蕉| 亚洲精品资源| 国产精品扒开腿做爽爽爽软件| 日韩一区二区精品视频| 亚洲欧美精品伊人久久| 国产午夜精品美女毛片视频| 久久不射中文字幕| 欧美激情黄色片| 亚洲视屏在线播放| 国产三区精品| 玖玖在线精品| 日韩视频免费观看高清完整版| 亚洲永久免费精品| 国内久久视频| 欧美激情二区三区| 亚洲免费在线观看视频| 免费观看成人鲁鲁鲁鲁鲁视频| 日韩一二在线观看| 国产精品影视天天线| 免费观看国产成人| 亚洲午夜在线观看| 免费在线欧美视频| 亚洲在线网站| 在线观看91精品国产入口| 欧美日韩大片一区二区三区| 亚洲淫片在线视频| 亚洲第一级黄色片| 午夜精品美女自拍福到在线| 狠狠色伊人亚洲综合成人| 欧美日韩麻豆| 久久久精品2019中文字幕神马| 亚洲国产日韩欧美| 久久久成人网| 亚洲一区二区三区高清| 精品动漫3d一区二区三区免费| 欧美人成网站| 老司机午夜精品视频| 亚洲一区二区三区在线看 | 亚洲青涩在线| 日韩视频在线一区二区三区| 国产一区二区三区视频在线观看| 男女精品视频| 午夜在线观看免费一区| 亚洲国产天堂久久综合网| 久久国产精品久久国产精品| 一本色道久久加勒比精品| 亚洲第一精品夜夜躁人人爽| 国产欧美日本一区视频| 国产精品mm| 欧美午夜不卡影院在线观看完整版免费| 久久亚洲免费| 久久一区激情|