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

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

?? slider.c

?? UC_GUI開發源代碼,里面含有范例,源文件
?? C
字號:
/*
*********************************************************************************************************
*                                             uC/GUI V3.98
*                        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        : SLIDER.c
Purpose     : Implementation of slider widget
---------------------------END-OF-HEADER------------------------------
*/

#include <stdlib.h>
#include <string.h>
#include "GUI_Protected.h"
#include "SLIDER_Private.h"
#include "WIDGET.h"

#if GUI_WINSUPPORT

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

#ifndef   SLIDER_SUPPORT_TRANSPARENCY
  #define SLIDER_SUPPORT_TRANSPARENCY WM_SUPPORT_TRANSPARENCY
#endif

/* Define colors */
#ifndef   SLIDER_BKCOLOR0_DEFAULT
  #define SLIDER_BKCOLOR0_DEFAULT   0xc0c0c0
#endif

#ifndef   SLIDER_COLOR0_DEFAULT
  #define SLIDER_COLOR0_DEFAULT     0xc0c0c0
#endif

#ifndef   SLIDER_FOCUSCOLOR_DEFAULT
  #define SLIDER_FOCUSCOLOR_DEFAULT GUI_BLACK
#endif

/*********************************************************************
*
*       Public data
*
**********************************************************************
*/

SLIDER_PROPS SLIDER__DefaultProps = {
  SLIDER_BKCOLOR0_DEFAULT,
  SLIDER_COLOR0_DEFAULT,
  SLIDER_FOCUSCOLOR_DEFAULT
};

/*********************************************************************
*
*       Static routines
*
**********************************************************************
*/
/*********************************************************************
*
*       _Paint
*/
static void _Paint(SLIDER_Obj* pObj, WM_HWIN hObj) {
  GUI_RECT r, rFocus, rSlider, rSlot;
  int x0, xsize, i, Range, NumTicks;
  WIDGET__GetClientRect(&pObj->Widget, &rFocus);
  GUI__ReduceRect(&r, &rFocus, 1);
  NumTicks = pObj->NumTicks;
  xsize    = r.x1 - r.x0  + 1 - pObj->Width;
  x0       = r.x0 + pObj->Width / 2;
  Range    = pObj->Max - pObj->Min;
  if (Range == 0) {
    Range = 1;
  }
  /* Fill with parents background color */
  #if !SLIDER_SUPPORT_TRANSPARENCY   /* Not needed any more, since window is transparent*/
    if (pObj->Props.BkColor == GUI_INVALID_COLOR) {
      LCD_SetBkColor(WIDGET__GetBkColor(hObj));
    } else {
      LCD_SetBkColor(pObj->Props.BkColor);
    }
    GUI_Clear();
  #else
    if (!WM_GetHasTrans(hObj)) {
      LCD_SetBkColor(pObj->Props.BkColor);
      GUI_Clear();
    }
  #endif
  /* Calculate Slider position */
  rSlider    = r;
  rSlider.y0 = 5;
  rSlider.x0 = x0 + (U32)xsize * (U32)(pObj->v - pObj->Min) / Range - pObj->Width / 2;
  rSlider.x1 = rSlider.x0 + pObj->Width;
  /* Calculate Slot position */
  rSlot.x0 = x0;
  rSlot.x1 = x0 + xsize;
  rSlot.y0 = (rSlider.y0 + rSlider.y1) / 2 - 1;
  rSlot.y1 = rSlot.y0 + 3;
  WIDGET__EFFECT_DrawDownRect(&pObj->Widget, &rSlot);        /* Draw slot */
  /* Draw the ticks */
  if (NumTicks < 0) {
    NumTicks = Range + 1;
    if (NumTicks > (xsize / 5)) {
      NumTicks = 11;
    }
  }
  if (NumTicks > 1) {
    LCD_SetColor(GUI_BLACK);
    for (i = 0; i < NumTicks; i++) {
      int x = x0 + xsize * i / (NumTicks - 1);
      WIDGET__DrawVLine(&pObj->Widget, x, 1, 3);
    }
  }
  /* Draw the slider itself */
  LCD_SetColor(pObj->Props.Color);
  WIDGET__FillRectEx(&pObj->Widget, &rSlider);
  LCD_SetColor(GUI_BLACK);
  WIDGET__EFFECT_DrawUpRect(&pObj->Widget, &rSlider);
  /* Draw focus */
  if (pObj->Widget.State & WIDGET_STATE_FOCUS) {
    LCD_SetColor(pObj->Props.FocusColor);
    WIDGET__DrawFocusRect(&pObj->Widget, &rFocus, 0);
  }
}

/*********************************************************************
*
*       _SliderPressed
*/
static void _SliderPressed(SLIDER_Handle hObj, SLIDER_Obj* pObj) {
  WIDGET_OrState(hObj, SLIDER_STATE_PRESSED);
  if (pObj->Widget.Win.Status & WM_SF_ISVIS) {
    WM_NotifyParent(hObj, WM_NOTIFICATION_CLICKED);
  }
}

/*********************************************************************
*
*       _SliderReleased
*/
static void _SliderReleased(SLIDER_Handle hObj, SLIDER_Obj* pObj) {
  WIDGET_AndState(hObj, SLIDER_STATE_PRESSED);
  if (pObj->Widget.Win.Status & WM_SF_ISVIS) {
    WM_NotifyParent(hObj, WM_NOTIFICATION_RELEASED);
  }
}

/*********************************************************************
*
*       _OnTouch
*/
static void _OnTouch(SLIDER_Handle hObj, SLIDER_Obj* pObj, WM_MESSAGE*pMsg) {
  const GUI_PID_STATE* pState = (const GUI_PID_STATE*)pMsg->Data.p;
  if (pMsg->Data.p) {  /* Something happened in our area (pressed or released) */
    if (pState->Pressed) {
      int x0, xsize, x, Sel, Range;
      Range = (pObj->Max - pObj->Min);
      x0    = 1 + pObj->Width / 2;  /* 1 pixel focus rectangle + width of actual slider */
      x     = (pObj->Widget.State & WIDGET_STATE_VERTICAL) ? pState->y : pState->x;
      x    -= x0;
      xsize = WIDGET__GetWindowSizeX(hObj) - 2 * x0;
      if (x <= 0) {
        Sel = pObj->Min;
      } else if (x >= xsize) {
        Sel = pObj->Max;
      } else {
        int Div;
        Div = xsize ? xsize : 1;     /* Make sure we do not divide by 0, even though xsize should never be 0 in this case anyhow */
        Sel = pObj->Min + ((U32)Range * (U32)x + Div / 2) / Div;
      }
      if (WM_IsFocussable(hObj)) {
        WM_SetFocus(hObj);
      }
      WM_SetCapture(hObj, 1);
      SLIDER_SetValue(hObj, Sel);
      if ((pObj->Widget.State & SLIDER_STATE_PRESSED) == 0){   
        _SliderPressed(hObj, pObj);
      }
    } else {
      /* React only if button was pressed before ... avoid problems with moving / hiding windows above (such as dropdown) */
      if (pObj->Widget.State & SLIDER_STATE_PRESSED) {   
        _SliderReleased(hObj, pObj);
      }
    }
  }
}

/*********************************************************************
*
*       _OnKey
*/
static void  _OnKey(SLIDER_Handle hObj, WM_MESSAGE*pMsg) {
  const WM_KEY_INFO* pKeyInfo;
  int Key;
  pKeyInfo = (const WM_KEY_INFO*)(pMsg->Data.p);
  Key = pKeyInfo->Key;
  if (pKeyInfo->PressedCnt > 0) {
    switch (Key) {
      case GUI_KEY_RIGHT:
        SLIDER_Inc(hObj);
        break;                    /* Send to parent by not doing anything */
      case GUI_KEY_LEFT:
        SLIDER_Dec(hObj);
        break;                    /* Send to parent by not doing anything */
      default:
        return;
    }
  }
}

/*********************************************************************
*
*       Private routines
*
**********************************************************************
*/
/*********************************************************************
*
*       SLIDER_h2p
*/
#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
SLIDER_Obj * SLIDER_h2p(SLIDER_Handle h) {
  SLIDER_Obj * p = (SLIDER_Obj *)GUI_ALLOC_h2p(h);
  if (p) {
    if (p->DebugId != SLIDER_ID) {
      GUI_DEBUG_ERROROUT("SLIDER.c: Wrong handle type or Object not init'ed");
      return 0;
    }
  }
  return p;
}
#endif

/*********************************************************************
*
*       Exported routines:  Callback
*
**********************************************************************
*/
/*********************************************************************
*
*       SLIDER_Callback
*/
void SLIDER_Callback (WM_MESSAGE *pMsg) {
  SLIDER_Handle hObj;
  SLIDER_Obj* pObj;
  hObj = pMsg->hWin;
  pObj = (SLIDER_Obj *)GUI_ALLOC_h2p(hObj); /* Don't use use WIDGET_H2P because WIDGET_INIT_ID() has not be called at this point */
  /* Let widget handle the standard messages */
  if (WIDGET_HandleActive(hObj, pMsg) == 0) {
    return;
  }
  switch (pMsg->MsgId) {
  case WM_PAINT:
    GUI_DEBUG_LOG("SLIDER: _Callback(WM_PAINT)\n");
    _Paint(pObj, hObj);
    return;
  case WM_TOUCH:
    _OnTouch(hObj, pObj, pMsg);
    break;
  case WM_KEY:
    _OnKey(hObj, pMsg);
    break;
  }
  WM_DefaultProc(pMsg);
}

/*********************************************************************
*
*       Exported routines:  Create
*
**********************************************************************
*/

/* Note: the parameters to a create function may vary.
         Some widgets may have multiple create functions */

/*********************************************************************
*
*       SLIDER_CreateEx
*/
SLIDER_Handle SLIDER_CreateEx(int x0, int y0, int xsize, int ysize, WM_HWIN hParent,
                              int WinFlags, int ExFlags, int Id)
{
  SLIDER_Handle hObj;
  /* Create the window */
  WM_LOCK();
  #if SLIDER_SUPPORT_TRANSPARENCY
    WinFlags |= WM_CF_HASTRANS;
  #endif
  hObj = WM_CreateWindowAsChild(x0, y0, xsize, ysize, hParent, WinFlags, SLIDER_Callback, sizeof(SLIDER_Obj) - sizeof(WM_Obj));
  if (hObj) {
    SLIDER_Obj * pObj;
    U16 InitState;
    pObj = (SLIDER_Obj *)GUI_ALLOC_h2p(hObj); /* Don't use use WIDGET_H2P because WIDGET_INIT_ID() has not be called at this point */
    /* Handle SpecialFlags */
    InitState = WIDGET_STATE_FOCUSSABLE;
    if (ExFlags & SLIDER_CF_VERTICAL) {
      InitState |= WIDGET_CF_VERTICAL;
    }
    /* init widget specific variables */
    WIDGET__Init(&pObj->Widget, Id, InitState);
    /* init member variables */
    SLIDER_INIT_ID(pObj);
    pObj->Props = SLIDER__DefaultProps;
    pObj->Width       = 8;
    pObj->Max         = 100;
    pObj->Min         = 0;
    pObj->NumTicks    = -1;
  } else {
    GUI_DEBUG_ERROROUT_IF(hObj==0, "SLIDER_Create failed")
  }
  WM_UNLOCK();
  return hObj;
}

/*********************************************************************
*
*       Exported routines:  Various methods
*
**********************************************************************
*/
/*********************************************************************
*
*       SLIDER_Dec
*/
void SLIDER_Dec(SLIDER_Handle hObj) {
  SLIDER_Obj* pObj;
  if (hObj) {
    WM_LOCK();
    pObj = SLIDER_H2P(hObj);
    if (pObj->v > pObj->Min) {
      pObj->v--;
      WM_InvalidateWindow(hObj);
      WM_NotifyParent(hObj, WM_NOTIFICATION_VALUE_CHANGED);
    }
    WM_UNLOCK();
  }
}

/*********************************************************************
*
*       SLIDER_Inc
*/
void SLIDER_Inc(SLIDER_Handle hObj) {
  SLIDER_Obj* pObj;
  if (hObj) {
    WM_LOCK();
    pObj = SLIDER_H2P(hObj);
    if (pObj->v < pObj->Max) {
      pObj->v++;
      WM_InvalidateWindow(hObj);
      WM_NotifyParent(hObj, WM_NOTIFICATION_VALUE_CHANGED);
    }
    WM_UNLOCK();
  }
}

/*********************************************************************
*
*       SLIDER_SetWidth
*/
void SLIDER_SetWidth(SLIDER_Handle hObj, int Width) {
  SLIDER_Obj* pObj;
  if (hObj) {
    WM_LOCK();
    pObj = SLIDER_H2P(hObj);
    if (pObj->Width != Width) {
      pObj->Width = Width;
      WM_InvalidateWindow(hObj);
    }
    WM_UNLOCK();
  }
}

/*********************************************************************
*
*       SLIDER_SetValue
*/
void SLIDER_SetValue(SLIDER_Handle hObj, int v) {
  SLIDER_Obj* pObj;
  if (hObj) {
    WM_LOCK();
    pObj = SLIDER_H2P(hObj);
    /* Put in min/max range */
    if (v < pObj->Min) {
      v = pObj->Min;
    }
    if (v > pObj->Max) {
      v = pObj->Max;
    }
    if (pObj->v != v) {
      pObj->v = v;
      WM_InvalidateWindow(hObj);
      WM_NotifyParent(hObj, WM_NOTIFICATION_VALUE_CHANGED);
    }
    WM_UNLOCK();
  }
}

/*********************************************************************
*
*       SLIDER_SetRange
*/
void SLIDER_SetRange(SLIDER_Handle hObj, int Min, int Max) {
  if (hObj) {
    SLIDER_Obj* pObj;
    WM_LOCK();
    pObj = SLIDER_H2P(hObj);
    if (Max < Min) {
      Max = Min;
    }
    pObj->Min = Min;
    pObj->Max = Max;
    if (pObj->v < Min) {
      pObj->v = Min;
    }
    if (pObj->v > Max) {
      pObj->v = Max;
    }
    WM_InvalidateWindow(hObj);
    WM_UNLOCK();
  }
}

/*********************************************************************
*
*       SLIDER_SetNumTicks
*/
void SLIDER_SetNumTicks(SLIDER_Handle hObj, int NumTicks) {
  if (hObj && (NumTicks >= 0)) {
    SLIDER_Obj* pObj;
    WM_LOCK();
    pObj = SLIDER_H2P(hObj);
    pObj->NumTicks = NumTicks;
    WM_InvalidateWindow(hObj);
    WM_UNLOCK();
  }
}

/*********************************************************************
*
*       SLIDER_SetBkColor
*/
void SLIDER_SetBkColor(SLIDER_Handle hObj, GUI_COLOR Color) {
  if (hObj) {
    SLIDER_Obj * pObj;
    WM_LOCK();
    pObj = SLIDER_H2P(hObj);
    pObj->Props.BkColor = Color;
    #if SLIDER_SUPPORT_TRANSPARENCY
      if (Color <= 0xFFFFFF) {
        WM_ClrHasTrans(hObj);
      } else {
        WM_SetHasTrans(hObj);
      }
    #endif
    WM_InvalidateWindow(hObj);
    WM_UNLOCK();
  }
}

/*********************************************************************
*
*       SLIDER_SetDefaultBkColor
*/
void SLIDER_SetDefaultBkColor(GUI_COLOR Color) {
  SLIDER__DefaultProps.BkColor = Color;
}

/*********************************************************************
*
*       Query state
*
**********************************************************************
*/
/*********************************************************************
*
*       SLIDER_GetValue
*/
int SLIDER_GetValue(SLIDER_Handle hObj) {
  int r = 0;
  SLIDER_Obj* pObj;
  if (hObj) {
    WM_LOCK();
    pObj = SLIDER_H2P(hObj);
    r = pObj->v;
    WM_UNLOCK();
  }
  return r;
}


#else /* avoid empty object files */

void SLIDER_C(void);
void SLIDER_C(void){}

#endif  /* #if GUI_WINSUPPORT */


	 	 			 		    	 				 	  			   	 	 	 	 	 	  	  	      	   		 	 	 		  		  	 		 	  	  			     			       	   	 			  		    	 	     	 				  	 					 	 			   	  	  			 				 		 	 	 			     			 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产女主播在线一区二区| 国产精品另类一区| 国产成人亚洲综合a∨婷婷| 亚洲欧美色一区| 精品国产乱码久久久久久浪潮| 色悠久久久久综合欧美99| 久久91精品国产91久久小草| 亚洲夂夂婷婷色拍ww47| 久久精品亚洲乱码伦伦中文| 欧美肥妇bbw| 色8久久人人97超碰香蕉987| 国产精品资源网站| 日韩不卡在线观看日韩不卡视频| 亚洲人成7777| 中文字幕+乱码+中文字幕一区| 欧美一区二区三区婷婷月色| 欧美性猛交xxxx乱大交退制版| 99热精品一区二区| 精品一区二区三区日韩| 男男视频亚洲欧美| 午夜精品久久久久久久蜜桃app| 最新国产の精品合集bt伙计| 日本一区二区三级电影在线观看| 精品国产免费一区二区三区四区 | 91色综合久久久久婷婷| 狠狠久久亚洲欧美| 日本伊人精品一区二区三区观看方式 | 国产露脸91国语对白| 天天综合天天做天天综合| 亚洲精品视频观看| 亚洲欧洲日韩在线| 中文av一区二区| 久久精品免费在线观看| 久久久九九九九| 久久亚洲影视婷婷| 欧美大尺度电影在线| 欧美一卡二卡三卡四卡| 欧美一三区三区四区免费在线看| 欧美日韩视频在线第一区| 欧美丝袜第三区| 欧美最猛黑人xxxxx猛交| 在线亚洲人成电影网站色www| 在线亚洲欧美专区二区| 欧美综合一区二区| 欧美亚洲高清一区| 欧美三级电影网站| 欧美日韩国产欧美日美国产精品| 欧美日韩国产免费一区二区 | 欧美网站一区二区| 欧美三级电影网站| 欧美高清一级片在线| 欧美美女bb生活片| 91麻豆精品久久久久蜜臀| 日韩一二三四区| 精品国产乱码久久久久久老虎| 久久嫩草精品久久久久| 亚洲国产精品av| 亚洲免费大片在线观看| 亚洲成av人片观看| 另类小说欧美激情| 国产精品99久久久久| 99精品久久免费看蜜臀剧情介绍| 日本高清成人免费播放| 欧美精品第一页| 欧美精品一区二| 亚洲欧美激情插| 亚洲成人tv网| 国内精品国产成人国产三级粉色| 国产成人夜色高潮福利影视| 色欧美片视频在线观看在线视频| 欧美一卡二卡在线| 欧美国产欧美综合| 亚洲色图.com| 日本aⅴ亚洲精品中文乱码| 紧缚奴在线一区二区三区| 成人午夜激情视频| 欧美日韩一区小说| 国产亚洲精品aa| 一区二区三区日韩精品| 老司机一区二区| 91丨porny丨在线| 日韩欧美中文字幕公布| 综合久久久久久久| 青青草97国产精品免费观看无弹窗版 | 国产日韩成人精品| 亚洲国产日韩a在线播放性色| 久草热8精品视频在线观看| 91在线国产观看| 日韩精品一区二区三区蜜臀 | 国产精品自在欧美一区| 欧美综合亚洲图片综合区| 久久久一区二区三区捆绑**| 亚洲成av人综合在线观看| 国产a久久麻豆| 欧美一区二区三区在线看| 亚洲人被黑人高潮完整版| 麻豆一区二区99久久久久| 色婷婷激情综合| 国产亚洲一二三区| 日韩va亚洲va欧美va久久| 色婷婷狠狠综合| 欧美激情中文字幕| 美女网站视频久久| 欧美性高清videossexo| 日本一区二区三区电影| 久久av资源网| 欧美日韩高清在线| 亚洲人成亚洲人成在线观看图片| 国产成人综合在线观看| 欧美一区二区三区免费视频| 亚洲丝袜另类动漫二区| 国产成人综合亚洲91猫咪| 精品日韩欧美在线| 午夜视频在线观看一区| 97久久精品人人爽人人爽蜜臀| 欧美不卡视频一区| 午夜精品福利久久久| 日本道色综合久久| 中文字幕一区二区三区乱码在线| 国产一区在线看| 精品欧美久久久| 蜜臀99久久精品久久久久久软件| 欧美日韩你懂的| 亚洲成av人片在www色猫咪| 色综合久久久久综合体桃花网| 中文字幕av资源一区| 国产成人三级在线观看| 久久久www成人免费无遮挡大片| 日本美女一区二区三区| 欧美女孩性生活视频| 亚洲小说欧美激情另类| 91福利在线导航| 一区二区三区蜜桃网| 一本大道久久精品懂色aⅴ| 一色屋精品亚洲香蕉网站| 成人国产精品免费观看视频| 国产午夜精品久久| 国产经典欧美精品| 亚洲国产精品v| 成人av午夜影院| 国产精品妹子av| 成人黄色在线看| 综合激情成人伊人| 色综合久久88色综合天天免费| 亚洲美女屁股眼交3| 欧洲人成人精品| 日韩精品国产欧美| 91精品国产全国免费观看| 蜜臀av国产精品久久久久| 精品蜜桃在线看| 国产精品99久| 亚洲青青青在线视频| 精品1区2区3区| 裸体在线国模精品偷拍| 久久品道一品道久久精品| 国产成人午夜视频| 亚洲摸摸操操av| 久久久久久久电影| 99久免费精品视频在线观看| 亚洲午夜电影在线| 日韩一区二区三区视频在线 | 久久精品视频免费| 国产精品一区在线观看乱码| 亚洲日本va在线观看| 欧美亚日韩国产aⅴ精品中极品| 欧美96一区二区免费视频| 国产亚洲人成网站| 成人高清av在线| 亚洲精品一卡二卡| 91精品一区二区三区在线观看| 韩国女主播成人在线| 亚洲欧洲美洲综合色网| 在线不卡中文字幕播放| 国产激情精品久久久第一区二区 | 黑人巨大精品欧美黑白配亚洲| 国产丝袜美腿一区二区三区| 91天堂素人约啪| 日韩成人免费看| 国产精品视频看| 欧美老女人在线| 国产传媒一区在线| 亚洲二区在线视频| 精品国产成人在线影院| 97精品视频在线观看自产线路二| 男女男精品网站| 亚洲人成小说网站色在线| 日韩你懂的电影在线观看| 91在线视频官网| 韩日av一区二区| 亚洲国产精品视频| 国产精品污污网站在线观看 | 综合久久综合久久| 精品少妇一区二区三区在线视频 | 91影院在线免费观看| 日本亚洲最大的色成网站www| 国产日产欧产精品推荐色| 欧美精品123区| 日本久久一区二区三区| 国产一区二区h| 亚洲成人动漫在线免费观看|