亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? widget.c

?? uCGUI
?? C
字號(hào):
/*************************************************************************************************************
                                                   uC/GUI
                                               嵌入式通用圖形軟件
File        : BUTTON.c
Purpose     : emWin GSC button widget
************************************************************************************************************/
#include <stdlib.h>
#include <string.h>

#include "WIDGET.h"
#include "GUIDebug.h"
#include "GUI.h"
#include "GUI_Protected.h"
#include "WM_Intern.h"

#if GUI_WINSUPPORT

/*********************************************************************
*
*       Private config defaults
*
**********************************************************************
*/


/*********************************************************************
*
*       Object definition
*
**********************************************************************
*/

/*********************************************************************
*
*       Static data
*
**********************************************************************
*/

const WIDGET_EFFECT* _pEffectDefault = &WIDGET_Effect_3D;

/*********************************************************************
*
*       Macros for internal use
*
**********************************************************************
*/

#define WIDGET_H2P(hWin)        ((WIDGET*)WM_HMEM2Ptr(hWin))

/*********************************************************************
*
*       Static routines
*
**********************************************************************
*/
static void _RotateRect90(WIDGET* pWidget, GUI_RECT* pDest, const GUI_RECT* pRect) {
  int XSize;
  XSize = pWidget->Win.Rect.x1 - pWidget->Win.Rect.x0;
  pDest->x0 = XSize - pRect->y1;
  pDest->x1 = XSize - pRect->y0;
  pDest->y0 = pRect->x0;
  pDest->y1 = pRect->x1;

}


/*********************************************************************
*
*       Public routines
*
**********************************************************************
*/

/*********************************************************************
*
*       WIDGET__GetClientRect

  Returns the logical client rectangle, which means the normal
  client rectangle for widgets with their standard orientation
  and the rotated one for rotated widgets.
*/
void WIDGET__GetClientRect(WIDGET* pWidget, GUI_RECT* pRect) {
  if (pWidget->State & WIDGET_STATE_VERTICAL) {
    GUI_RECT Rect;
    WM_GetClientRect(&Rect);
    pRect->x0 = Rect.y0;
    pRect->x1 = Rect.y1;
    pRect->y0 = Rect.x0;
    pRect->y1 = Rect.x1;
  } else {
    WM_GetClientRect(pRect);
  }
}

GUI_COLOR WIDGET__GetBkColor(WM_HWIN hObj) {
  GUI_COLOR BkColor = WM_GetBkColor(WM_GetParent(hObj));
  if (BkColor == GUI_INVALID_COLOR) {
    BkColor = DIALOG_GetBkColor();
  }
  return BkColor;
}

/*********************************************************************
*
*       WIDGET__GetInsideRect
*/
void WIDGET__GetInsideRect(WIDGET* pWidget, GUI_RECT* pRect) {
  WM__GetClientRectWin(&pWidget->Win, pRect);
  GUI__ReduceRect(pRect, pRect, pWidget->pEffect->EffectSize);
}


int WIDGET__GetXSize(const WIDGET* pWidget) {
  int r;
  if (pWidget->State & WIDGET_STATE_VERTICAL) {
    r = pWidget->Win.Rect.y1 - pWidget->Win.Rect.y0;
  } else {
    r = pWidget->Win.Rect.x1 - pWidget->Win.Rect.x0;
  }
  return r + 1;
}

int WIDGET__GetYSize(const WIDGET* pWidget) {
  int r;
  if (pWidget->State & WIDGET_STATE_VERTICAL) {
    r = pWidget->Win.Rect.x1 - pWidget->Win.Rect.x0;
  } else {
    r = pWidget->Win.Rect.y1 - pWidget->Win.Rect.y0;
  }
  return r + 1;
}

/*******************************************************************
*
*       WIDGET__GetWindowSizeX

  Return width (or height in case of rotation) of window in pixels
*/
int WIDGET__GetWindowSizeX(WM_HWIN hWin) {
  WIDGET* pWidget = WIDGET_H2P(hWin);
  if (pWidget->State & WIDGET_STATE_VERTICAL) {
    return WM_GetWindowSizeY(hWin);
  } else {
    return WM_GetWindowSizeX(hWin);
  }
}


/*********************************************************************
*
*       WIDGET_SetState
*/
void WIDGET_SetState(WM_HWIN hObj, int State) {
  WIDGET* pWidget = WIDGET_H2P(hObj);
  if (State != pWidget->State) {
    pWidget->State = State;
    WM_Invalidate(hObj);
  }
}

/*********************************************************************
*
*       WIDGET__IsEnabled

  Returns:
    1 if Widget is enabled
    0 else
*/
int WIDGET__IsEnabled(WIDGET* pWidget) {
  return pWidget->State & WIDGET_STATE_ENABLED ? 1 : 0;
}

/*********************************************************************
*
*       WIDGET_OrState
*/
void WIDGET_OrState(WM_HWIN hObj, int State) {
  WIDGET* pWidget = WIDGET_H2P(hObj);
  if (State != (pWidget->State & State)) {
    pWidget->State |= State;
    WM_Invalidate(hObj);
  }
}

/*********************************************************************
*
*       WIDGET_AndState

  Purpose:
    Clear flags in the State element of the widget.
    The bits to be cleared are set.
  Example:
    ...(..., 3);   // Clears bit 0, 1 int the state member 

*/
void WIDGET_AndState(WM_HWIN hObj, int Mask) {
  U16 StateNew;
  WIDGET* pWidget = WIDGET_H2P(hObj);
  StateNew = pWidget->State & (~Mask);
  if (pWidget->State != StateNew) {
    pWidget->State = StateNew;
    WM_Invalidate(hObj);
  }
}

/*********************************************************************
*
*       WIDGET_SetInactive
*/
void WIDGET_Disable(WM_HWIN hObj) {
  WIDGET* pWidget;
  if (hObj) {
    WM_LOCK();
    pWidget = WIDGET_H2P(hObj);
    if (pWidget->State & WIDGET_STATE_ENABLED) {
      pWidget->State &= ~WIDGET_STATE_ENABLED;
      WM_Invalidate(hObj);
    }
    WM_UNLOCK();
  }
}

/*********************************************************************
*
*       WIDGET_Enable
*/
void WIDGET_Enable(WM_HWIN hObj) {
  WIDGET* pWidget;
  if (hObj) {
    WM_LOCK();
    pWidget = WIDGET_H2P(hObj);
    if ((pWidget->State & WIDGET_STATE_ENABLED) == 0) {
      pWidget->State |= WIDGET_STATE_ENABLED;
      WM_Invalidate(hObj);
    }
    WM_UNLOCK();
  }
}


void WIDGET__Init(WIDGET* pWidget, U16 State) {
  pWidget->pEffect       = _pEffectDefault;
  pWidget->State         = State;
}


/*********************************************************************
*
*       WIDGET_HandleActive
*/
int WIDGET_HandleActive(WM_HWIN hObj, WM_MESSAGE* pMsg) {
  WM_MESSAGE Msg;
  WIDGET* pWidget = WIDGET_H2P(hObj);
  switch (pMsg->MsgId) {
    case WM_GET_ID:
      pMsg->Data.v = pWidget->Id;
      return 0;                        /* Message handled -> Return */
    case WM_SET_FOCUS:
      if (pMsg->Data.v == 1) {
        WIDGET_SetState(hObj, pWidget->State |  WIDGET_STATE_FOCUS);

      } else {
        WIDGET_SetState(hObj, pWidget->State & ~WIDGET_STATE_FOCUS);
      }
      Msg.MsgId = WM_NOTIFY_CHILD_HAS_FOCUS;
      Msg.Data.v = pMsg->Data.v;
      WM_SendToParent(hObj, &Msg);
      return 0;
    case WM_GET_HAS_FOCUS:
      pMsg->Data.v = pWidget->State & WIDGET_STATE_FOCUS;
      return 0;                         /* Message handled */
    case WM_SET_ENABLE:
      if (pMsg->Data.v) {
        WIDGET_OrState(hObj, WIDGET_STATE_ENABLED);
      } else {
        WIDGET_AndState(hObj, WIDGET_STATE_ENABLED);
      }
    case WM_GET_ACCEPT_FOCUS:
      pMsg->Data.v = (pWidget->State & WIDGET_STATE_FOCUSSABLE) ? 1 : 0;               /* Can handle focus */
      return 0;                         /* Message handled */
     case WM_GET_INSIDE_RECT:
      WIDGET__GetInsideRect(pWidget, (GUI_RECT*)pMsg->Data.p);
      return 0;                         /* Message handled */

  }
  return 1;                           /* Message NOT handled */
}



void WIDGET__SetScrollState(WM_HWIN hWin, const WM_SCROLL_STATE* pVState, const WM_SCROLL_STATE* pHState) {
  WM_HWIN hScroll;
  /* vertical scrollbar */
  hScroll = WM_GetDialogItem(hWin, GUI_ID_VSCROLL);
    WM_SetScrollState(hScroll, pVState);
  /* horizontal scrollbar */
  hScroll = WM_GetDialogItem(hWin, GUI_ID_HSCROLL);
    WM_SetScrollState(hScroll, pHState);
}



void WIDGET__DrawFocusRect(WIDGET* pWidget, const GUI_RECT* pRect, int Dist) {
  GUI_RECT Rect;
  if (pWidget->State & WIDGET_STATE_VERTICAL) {
    _RotateRect90(pWidget, &Rect, pRect);
    pRect = &Rect;
  }
  GUI_DrawFocusRect(pRect, Dist);
}

void WIDGET__DrawVLine(WIDGET* pWidget, int x, int y0, int y1) {
  if (pWidget->State & WIDGET_STATE_VERTICAL) {
    GUI_RECT r0, r1;
    r0.x0 = x;
    r0.x1 = x;
    r0.y0 = y0;
    r0.y1 = y1;
    _RotateRect90(pWidget, &r1, &r0);
    GUI_DrawHLine(r1.y0, r1.x0, r1.x1);
  } else {
    GUI_DrawVLine(x, y0, y1);
  }
}


/*********************************************************************
*
*       WIDGET_FillRectEx
*/
void WIDGET__FillRectEx(WIDGET* pWidget, const GUI_RECT* pRect) {
  if (pWidget->State & WIDGET_STATE_VERTICAL) {
    GUI_RECT r;
    _RotateRect90(pWidget, &r, pRect);
    pRect = &r;
  }
  GUI_FillRectEx(pRect);
}




/*********************************************************************
*
*       WIDGET__EFFECT_ ...
*/

void WIDGET__EFFECT_DrawDownRect(WIDGET* pWidget, GUI_RECT* pRect) {
  GUI_RECT Rect;
  if (pRect == NULL) {
    WM_GetClientRect(&Rect);
    pRect = &Rect;
  }
  if (pWidget->State & WIDGET_STATE_VERTICAL) {
    _RotateRect90(pWidget, &Rect, pRect);
    pRect = &Rect;
  }
  pWidget->pEffect->pfDrawDownRect(pRect);
}

void WIDGET__EFFECT_DrawDown(WIDGET* pWidget) {
  WIDGET__EFFECT_DrawDownRect(pWidget, NULL);
}





void WIDGET__EFFECT_DrawUpRect(WIDGET* pWidget, GUI_RECT* pRect) {
  GUI_RECT Rect;
  if (pWidget->State & WIDGET_STATE_VERTICAL) {
    _RotateRect90(pWidget, &Rect, pRect);
    pRect = &Rect;
  }
  pWidget->pEffect->pfDrawUpRect(pRect);
}




void WIDGET_SetDefaultEffect(const WIDGET_EFFECT* pEffect) {
  _pEffectDefault = pEffect;
}



#else                            /* Avoid problems with empty object modules */
  void WIDGET_C(void) {}
#endif /* GUI_WINSUPPORT */




?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
依依成人综合视频| 国产成人精品免费网站| 激情综合色播激情啊| 成人一区在线看| 欧美日韩电影一区| 1区2区3区精品视频| 精品一区二区三区免费观看| 欧美日韩一区视频| 亚洲乱码国产乱码精品精可以看| 免费观看在线色综合| 91精品1区2区| 中文字幕欧美一| 国产成人亚洲综合a∨猫咪| 91精品国产综合久久久久久久久久| 亚洲欧洲日韩女同| 成人午夜电影网站| 久久久久国产精品人| 日韩电影在线观看电影| 欧洲精品视频在线观看| 91麻豆精品国产91久久久资源速度 | 国产精品视频yy9299一区| 久久综合九色综合欧美98 | av色综合久久天堂av综合| 99热这里都是精品| 在线欧美小视频| 91精品国产aⅴ一区二区| 欧美精品一区二区三区四区| 中文字幕欧美国产| 一区二区三区在线免费播放| 午夜亚洲福利老司机| 精品午夜一区二区三区在线观看| 成人精品一区二区三区中文字幕| 99久久99久久免费精品蜜臀| 正在播放亚洲一区| 中文字幕精品一区二区三区精品| 亚洲一区二区在线免费看| 激情五月播播久久久精品| 在线日韩av片| 国产欧美一区视频| 美女一区二区视频| 91黄色免费网站| 国产三级精品三级在线专区| 午夜电影一区二区三区| 99在线热播精品免费| 日韩三级在线免费观看| 一区二区激情小说| 国产不卡视频在线观看| 日韩一级完整毛片| 久久99这里只有精品| 91麻豆精品视频| 久久久亚洲精品一区二区三区| 三级久久三级久久久| 91免费国产在线| 欧美激情在线一区二区| 精品一区二区三区视频在线观看| 精品视频免费看| 亚洲女子a中天字幕| 国产一区二区三区久久久| 91精品在线麻豆| 亚洲午夜一区二区三区| eeuss影院一区二区三区| 久久久亚洲综合| 极品少妇一区二区| 欧美电影免费观看高清完整版在线观看 | 色天天综合久久久久综合片| 久久在线免费观看| 日本美女一区二区三区| 欧美剧情片在线观看| 一区二区三区成人| 在线亚洲高清视频| 亚洲国产成人91porn| 欧美三级在线播放| 午夜影院久久久| 欧美日韩精品高清| 91蜜桃网址入口| 国产精品黄色在线观看| 成人av在线影院| ...中文天堂在线一区| 99精品视频在线观看| 自拍偷自拍亚洲精品播放| 成人动漫一区二区| 亚洲婷婷国产精品电影人久久| 大胆亚洲人体视频| 中文字幕一区二区三区不卡在线 | 成人美女在线视频| 一区在线播放视频| 色8久久精品久久久久久蜜| 亚洲精品视频免费看| 91香蕉视频在线| 亚洲欧美一区二区三区极速播放 | 国产福利一区在线| ...av二区三区久久精品| 色噜噜久久综合| 石原莉奈在线亚洲二区| 精品国产乱码久久| 91在线观看地址| 日韩黄色在线观看| 久久久精品日韩欧美| 99精品久久99久久久久| 亚洲高清中文字幕| 日韩欧美国产wwwww| 高清shemale亚洲人妖| 亚洲靠逼com| 精品剧情v国产在线观看在线| 国产福利一区二区| 亚洲一区在线免费观看| 欧美v亚洲v综合ⅴ国产v| 成人免费毛片aaaaa**| 亚洲一卡二卡三卡四卡五卡| www激情久久| 色爱区综合激月婷婷| 国产一区二区三区高清播放| 亚洲免费观看高清完整| 欧美xxx久久| 在线免费观看成人短视频| 精品综合久久久久久8888| 夜夜嗨av一区二区三区| 久久亚洲综合色一区二区三区 | 91精品国产综合久久久蜜臀粉嫩 | 亚洲 欧美综合在线网络| www精品美女久久久tv| 欧日韩精品视频| www.综合网.com| 乱一区二区av| 性做久久久久久免费观看| 国产欧美日韩卡一| 日韩一区二区精品| 欧美日韩中文一区| 91免费视频大全| 成人深夜福利app| 黑人精品欧美一区二区蜜桃| 亚洲国产精品精华液网站| 国产精品色哟哟| 久久久久久综合| 欧美一二三四在线| 欧美日韩一区二区电影| 成人免费高清视频| 国产一区二区在线影院| 久久99精品一区二区三区| 亚洲图片欧美视频| 亚洲一区在线观看免费观看电影高清| 国产三级精品视频| 久久久蜜桃精品| 久久久久9999亚洲精品| 久久你懂得1024| 亚洲精品一区二区三区99| 日韩一卡二卡三卡| 日韩欧美国产wwwww| 精品久久久久久久人人人人传媒| 欧美一区二区在线播放| 3atv一区二区三区| 91精品国产91综合久久蜜臀| 91精品国产91热久久久做人人| 欧美日韩亚洲综合| 91精品国产欧美一区二区18 | 成人av电影免费观看| 99热国产精品| 色域天天综合网| 欧洲人成人精品| 欧美日韩性生活| 日韩一二三区不卡| 欧美videofree性高清杂交| 久久久www成人免费无遮挡大片| 久久新电视剧免费观看| 日本一区二区免费在线观看视频| 中文一区二区完整视频在线观看| 国产精品人成在线观看免费| 亚洲精品老司机| 亚洲成人av中文| 久久精品国产亚洲一区二区三区| 国产美女主播视频一区| 99久久免费国产| 欧美日韩另类一区| 久久嫩草精品久久久精品一| 国产精品午夜春色av| 一区二区成人在线视频| 日韩精品视频网| 国产99久久久精品| 欧美自拍丝袜亚洲| 欧美成人精品福利| 亚洲日本va在线观看| 欧美aⅴ一区二区三区视频| 国产69精品久久99不卡| 色婷婷久久99综合精品jk白丝| 欧美人妇做爰xxxⅹ性高电影| 欧美成人video| 亚洲欧美一区二区三区久本道91| 欧美aaaaa成人免费观看视频| 成人午夜精品一区二区三区| 欧美午夜影院一区| 久久精品日韩一区二区三区| 一区二区三区成人| 国产一区二区三区免费| 欧美日韩视频在线第一区| 欧美激情中文不卡| 日韩av一区二| 在线一区二区三区四区五区 | 一区二区国产视频| 国产91丝袜在线18| 欧美一区中文字幕|