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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? widget.c

?? 一種可移植系統
?? C
字號:
/***********************************************************************************************************                                                uC/GUI*                        Universal graphic software for embedded applications**                       (c) Copyright 2002, Micrium Inc., Weston, FL*                       (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH**              礐/GUI is protected by international copyright laws. Knowledge of the*              source code may not be used to write a similar product. This file may*              only be used in accordance with a license and should not be redistributed*              in any way. We appreciate your understanding and fairness.*----------------------------------------------------------------------
File        : BUTTON.c
Purpose     : emWin GSC button widget
---------------------------END-OF-HEADER------------------------------
*/

#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 */




?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久福利资源站| 亚洲国产视频网站| 欧美精品在线观看播放| 久久99深爱久久99精品| 夜夜精品浪潮av一区二区三区| 久久久91精品国产一区二区精品| 欧美日韩亚洲另类| 91蜜桃在线观看| 一本一道久久a久久精品| 国产精品夜夜爽| 国产一区日韩二区欧美三区| 首页综合国产亚洲丝袜| 亚洲第一电影网| 午夜视频在线观看一区二区| 亚洲成人av一区二区三区| 亚洲成人免费观看| 亚洲成a人片在线不卡一二三区| 亚洲精品国产视频| 亚洲男人的天堂av| 亚洲国产精品久久久久秋霞影院| 洋洋av久久久久久久一区| 一区二区三区中文字幕| 亚洲乱码国产乱码精品精小说| 91精品国产综合久久福利软件| 91在线看国产| 日本电影欧美片| 欧美日韩一级片在线观看| 欧美精品久久99| 精品福利在线导航| 国产精品久久久久久久裸模 | 同产精品九九九| 天天色天天爱天天射综合| 日韩二区在线观看| 国产一区欧美二区| 色婷婷av一区二区三区gif| 欧美三级电影网| 欧美精品一区二区三区高清aⅴ | 亚洲成a人片在线不卡一二三区 | 国产精品中文字幕一区二区三区| 91一区二区在线| 日韩欧美在线1卡| 国产精品美女久久久久久久久 | 美女久久久精品| 色综合色综合色综合色综合色综合| 欧美日韩亚洲综合一区| 国产午夜精品在线观看| 夜夜精品视频一区二区 | 日韩高清不卡一区二区三区| 国产一区二区调教| 欧美日韩国产中文| 国产精品传媒入口麻豆| 久久精品国产久精国产| 欧美日本国产一区| 亚洲三级在线观看| 99久久国产综合色|国产精品| 56国语精品自产拍在线观看| 国产精品黄色在线观看| 国产1区2区3区精品美女| 欧美成人精品福利| 麻豆一区二区三| 日韩欧美一级二级三级 | 美女一区二区在线观看| 欧美曰成人黄网| 亚洲视频一区二区免费在线观看| 国产精品 欧美精品| 国产女人aaa级久久久级| 国产一区二区三区免费在线观看 | 精品国产自在久精品国产| 日韩精品欧美精品| 欧美成人女星排行榜| ●精品国产综合乱码久久久久| 日韩激情视频在线观看| 91精品91久久久中77777| 国产精品白丝在线| 99国产精品国产精品久久| 中文字幕精品一区二区三区精品| 韩国午夜理伦三级不卡影院| 26uuu国产一区二区三区| 精品一区二区三区的国产在线播放| 在线播放中文一区| 激情文学综合插| 国产人伦精品一区二区| 成人av中文字幕| 一区二区三区四区在线免费观看 | 免费成人av在线播放| 日韩视频一区二区三区| 国产99久久精品| 视频一区视频二区中文字幕| 国产亚洲短视频| 欧美午夜不卡在线观看免费| 偷拍一区二区三区四区| 国产精品免费aⅴ片在线观看| 欧美性大战久久久久久久| 国产一区啦啦啦在线观看| 一区二区三区四区激情| 日韩一级片在线观看| 成人精品鲁一区一区二区| 日本美女视频一区二区| 亚洲女人****多毛耸耸8| 欧美一级久久久久久久大片| 不卡一区在线观看| 久久国产精品色婷婷| 中文字幕在线观看不卡视频| 欧美一区二区三区免费视频 | 亚洲欧美一区二区三区久本道91| 欧美一级专区免费大片| 色综合咪咪久久| 成人ar影院免费观看视频| 韩国一区二区三区| 麻豆一区二区在线| 免费看欧美美女黄的网站| 一区二区三区四区激情| 亚洲日本va午夜在线影院| 国产亚洲午夜高清国产拍精品| 91精品国产入口在线| 在线影视一区二区三区| 99久久免费视频.com| 国产精品中文字幕一区二区三区| 蜜臀久久99精品久久久画质超高清| 日韩伦理免费电影| 亚洲视频一二区| 亚洲欧美国产77777| 亚洲一区二区在线免费看| 亚洲精品第1页| 亚洲h精品动漫在线观看| 天堂一区二区在线免费观看| 亚洲线精品一区二区三区| 亚洲国产精品一区二区www在线 | 日韩av电影天堂| 蜜臀av性久久久久蜜臀aⅴ| 蜜桃av一区二区| 国产美女娇喘av呻吟久久| 91麻豆文化传媒在线观看| 666欧美在线视频| 国产精品激情偷乱一区二区∴| 亚洲一区二区三区自拍| 日韩精品乱码免费| 成人h动漫精品一区二| 制服丝袜亚洲精品中文字幕| 久久久亚洲欧洲日产国码αv| 中文字幕中文字幕中文字幕亚洲无线 | 亚洲色欲色欲www| 免费日韩伦理电影| 在线观看免费视频综合| 欧美变态tickling挠脚心| 亚洲国产精华液网站w| 1000精品久久久久久久久| 日精品一区二区三区| jlzzjlzz亚洲日本少妇| 欧美成人精品二区三区99精品| 日本一二三四高清不卡| 日韩精彩视频在线观看| 欧美午夜片在线看| 欧美激情中文字幕一区二区| 午夜激情一区二区三区| 成人av片在线观看| 久久精品在这里| 日本在线观看不卡视频| 在线视频中文字幕一区二区| 久久女同互慰一区二区三区| 日本中文一区二区三区| 91精品国产综合久久国产大片| 亚洲午夜av在线| 欧美亚洲综合久久| 亚洲欧美激情视频在线观看一区二区三区 | 欧美一级高清片在线观看| 亚洲亚洲精品在线观看| 91美女视频网站| 一区二区在线看| 欧美日韩一区不卡| 亚洲卡通欧美制服中文| 99精品视频在线免费观看| 中文字幕在线一区| 99热国产精品| 亚洲卡通欧美制服中文| 在线不卡免费av| 久久疯狂做爰流白浆xx| 国产日韩精品一区二区三区| 不卡av在线网| 亚洲国产精品久久人人爱蜜臀| 欧美视频日韩视频在线观看| 国产三级精品在线| 91成人在线精品| 亚洲午夜久久久久久久久电影院| 91亚洲大成网污www| 日本欧美韩国一区三区| 亚洲男同性视频| 国产欧美日韩综合| 91福利社在线观看| 免费在线成人网| 国产精品久久久久久久蜜臀 | 亚洲男同1069视频| 欧美日韩免费在线视频| 久久精品国产999大香线蕉| 亚洲精品水蜜桃| 久久色视频免费观看| 在线国产亚洲欧美| 国产suv精品一区二区883| 亚洲一区二区成人在线观看| 久久久久久久久久看片|