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

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

?? widget.c

?? ucgui源碼3.32
?? 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一区二区三区免费野_久草精品视频
午夜av一区二区三区| 国产区在线观看成人精品| 亚洲另类在线制服丝袜| 91老师片黄在线观看| 中文字幕一区二| 91蝌蚪porny| 亚洲人一二三区| 欧美人狂配大交3d怪物一区| 日韩有码一区二区三区| 欧美成人国产一区二区| 国产一区91精品张津瑜| 亚洲婷婷综合色高清在线| 91美女片黄在线观看91美女| 亚洲成av人片在线| 久久综合一区二区| 色综合色狠狠综合色| 亚洲国产精品尤物yw在线观看| 日韩欧美一级在线播放| 成人午夜精品在线| 香蕉久久一区二区不卡无毒影院| 日韩精品一区二区三区视频| 成人午夜av电影| 五月天欧美精品| 国产亚洲一区二区三区在线观看| 91视视频在线观看入口直接观看www | 欧美在线小视频| 国内精品久久久久影院色 | 欧美亚洲尤物久久| 激情五月婷婷综合| 一区二区三区精品视频| 久久亚洲春色中文字幕久久久| 色88888久久久久久影院按摩| 久久精品国产77777蜜臀| 亚洲色图制服诱惑| 久久午夜国产精品| 777午夜精品视频在线播放| 成人av一区二区三区| 精品无码三级在线观看视频| 亚洲制服丝袜av| 国产目拍亚洲精品99久久精品| 欧美人牲a欧美精品| 91视视频在线观看入口直接观看www | 日韩一二三区视频| 色一情一伦一子一伦一区| 国产真实乱子伦精品视频| 亚洲成人av资源| 国产精品久久久久精k8| 精品不卡在线视频| 宅男在线国产精品| 欧美亚洲动漫精品| 91在线免费视频观看| 国产乱理伦片在线观看夜一区| 日韩精品成人一区二区三区| 亚洲色图欧美在线| 国产欧美一区视频| 日韩免费一区二区| 欧美日韩在线综合| 色狠狠色狠狠综合| 91浏览器在线视频| 99re热这里只有精品视频| 国产成人免费高清| 国产成人免费高清| 国产91在线观看| 国产黄人亚洲片| 黄色日韩网站视频| 美腿丝袜亚洲色图| 久久精品国产99久久6| 琪琪久久久久日韩精品| 五月天激情小说综合| 亚洲h在线观看| 亚洲成av人**亚洲成av**| 亚洲综合成人在线| 婷婷激情综合网| 日本中文在线一区| 麻豆精品视频在线观看免费| 奇米色一区二区三区四区| 麻豆精品一二三| 国产在线看一区| 国产精品夜夜嗨| jizzjizzjizz欧美| 一本色道亚洲精品aⅴ| 91久久精品日日躁夜夜躁欧美| 色8久久精品久久久久久蜜| 欧美午夜精品一区二区三区| 欧美日韩国产另类一区| 欧美一区二区在线视频| 精品国产伦一区二区三区观看体验| 精品国产亚洲一区二区三区在线观看 | 精品国产乱码久久久久久老虎 | 国产精品私房写真福利视频| 亚洲国产精品精华液ab| 中文字幕日本乱码精品影院| 亚洲激情自拍视频| 三级欧美韩日大片在线看| 日本aⅴ免费视频一区二区三区| 激情都市一区二区| 国产一区二区三区四 | 99久久精品国产网站| 91视频免费看| 777亚洲妇女| 国产日韩精品一区二区三区| 中文字幕一区二区三| 天天色 色综合| 久久国产精品99久久久久久老狼| 国产乱码精品一区二区三| 色偷偷成人一区二区三区91| 欧美精品视频www在线观看 | 欧美—级在线免费片| 伊人性伊人情综合网| 日韩av在线播放中文字幕| 风间由美中文字幕在线看视频国产欧美 | 日韩你懂的在线观看| 国产精品高潮久久久久无| 午夜欧美大尺度福利影院在线看 | 国产精品嫩草影院com| 一二三区精品福利视频| 精品一区二区国语对白| 91性感美女视频| 亚洲精品一区二区三区福利| 亚洲丝袜制服诱惑| 精品一区二区三区免费观看| 97精品久久久午夜一区二区三区 | 久久国产精品一区二区| 色噜噜狠狠成人中文综合 | 国产精品五月天| 水蜜桃久久夜色精品一区的特点| 大桥未久av一区二区三区中文| 在线播放/欧美激情| 亚洲人亚洲人成电影网站色| 久久精品国产成人一区二区三区| 欧洲一区二区三区在线| 国产丝袜美腿一区二区三区| 午夜亚洲国产au精品一区二区| 不卡的av电影在线观看| 精品国产一二三| 天天综合色天天| 在线观看国产日韩| 欧美国产丝袜视频| 韩国v欧美v亚洲v日本v| 欧美精品日韩精品| 亚洲另类在线一区| 成人av片在线观看| 久久青草欧美一区二区三区| 日韩专区中文字幕一区二区| 色婷婷av一区二区| 亚洲欧美色一区| caoporn国产精品| 久久精品一区二区| 理论电影国产精品| 日韩欧美一区二区免费| 亚洲综合免费观看高清完整版| 91一区一区三区| 国产精品激情偷乱一区二区∴| 国产福利一区二区三区| 精品对白一区国产伦| 久久精品国产在热久久| 日韩免费观看2025年上映的电影| 三级不卡在线观看| 91麻豆精品国产91久久久久久 | 国产一区二区三区精品视频| 日韩一级完整毛片| 裸体歌舞表演一区二区| 日韩一区二区三区在线观看| 青青青爽久久午夜综合久久午夜 | 久久99精品网久久| 精品国产乱码91久久久久久网站| 日韩av电影免费观看高清完整版在线观看| 欧美亚日韩国产aⅴ精品中极品| 亚洲摸摸操操av| 在线一区二区三区| 亚洲韩国精品一区| 欧美一区二区三区四区在线观看| 香蕉影视欧美成人| 日韩欧美中文字幕公布| 理论片日本一区| 国产欧美日韩精品a在线观看| 国产成人午夜高潮毛片| 国产精品久久久久天堂| 色偷偷久久人人79超碰人人澡| 亚洲一级二级在线| 欧美一卡二卡三卡| 国产盗摄女厕一区二区三区| 国产精品情趣视频| 日本高清不卡aⅴ免费网站| 亚洲不卡av一区二区三区| 欧美精品乱码久久久久久 | 成人亚洲一区二区一| 亚洲欧洲制服丝袜| 欧美日韩成人综合在线一区二区| 美女网站色91| 国产精品三级电影| 欧美日韩一区精品| 精品影视av免费| 日韩毛片视频在线看| 欧美军同video69gay| 国产毛片精品国产一区二区三区| 国产精品国产三级国产aⅴ原创| 欧美日韩一区二区在线观看| 国内精品伊人久久久久av一坑| 日韩伦理av电影|