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

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

?? scrollbar.c

?? UC_GUI開發源代碼,里面含有范例,源文件
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*
*********************************************************************************************************
*                                             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        : SCROLLBAR.c
Purpose     : Implementation of scrollbar widget
---------------------------END-OF-HEADER------------------------------
*/

#include <stdlib.h>
#include <string.h>
#include "GUI_Protected.h"
#include "SCROLLBAR_Private.h"
#include "WIDGET.h"
#include "WM_Intern.h"

#if GUI_WINSUPPORT

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

/* Define colors */
#ifndef   SCROLLBAR_COLOR_SHAFT_DEFAULT
  #define SCROLLBAR_COLOR_SHAFT_DEFAULT 0x808080
#endif

#ifndef   SCROLLBAR_COLOR_ARROW_DEFAULT
  #define SCROLLBAR_COLOR_ARROW_DEFAULT GUI_BLACK
#endif

#ifndef   SCROLLBAR_COLOR_THUMB_DEFAULT
  #define SCROLLBAR_COLOR_THUMB_DEFAULT 0xc0c0c0
#endif

#ifndef   SCROLLBAR_THUMB_SIZE_MIN_DEFAULT
  #define SCROLLBAR_THUMB_SIZE_MIN_DEFAULT 4
#endif

#ifndef SCROLLBAR_DEFAULT_WIDTH
  #if   WIDGET_USE_SCHEME_SMALL
    #define SCROLLBAR_DEFAULT_WIDTH 11
  #elif WIDGET_USE_SCHEME_MEDIUM
    #define SCROLLBAR_DEFAULT_WIDTH 16
  #elif WIDGET_USE_SCHEME_LARGE
    #define SCROLLBAR_DEFAULT_WIDTH 22
  #endif
#endif

/*********************************************************************
*
*       Module internal data
*
**********************************************************************
*/
SCROLLBAR_PROPS SCROLLBAR__DefaultProps = {
  SCROLLBAR_COLOR_THUMB_DEFAULT,
  SCROLLBAR_COLOR_SHAFT_DEFAULT,
  SCROLLBAR_COLOR_ARROW_DEFAULT,
};

I16 SCROLLBAR__DefaultWidth = SCROLLBAR_DEFAULT_WIDTH;

/*********************************************************************
*
*       Static routines
*
**********************************************************************
*/
/*********************************************************************
*
*       _GetArrowSize
*
*/
static int _GetArrowSize(SCROLLBAR_Obj* pObj) {
  unsigned int r;
  unsigned int xSize = WIDGET__GetXSize(&pObj->Widget);
  unsigned int ySize = WIDGET__GetYSize(&pObj->Widget);
  r = ySize/2 + 5;
  if (r > xSize-5)
    r = xSize-5;
  return r;
}

/*********************************************************************
*
*       _WIDGET__RECT2VRECT
*
* Purpose:
*   Convert rectangle in real coordinates into virtual coordinates
*
* Add. info:
*   This function could eventualy be made none-static and move into
*   a module of its own.
*/
static void _WIDGET__RECT2VRECT(const WIDGET* pWidget, GUI_RECT* pRect) {
  if (pWidget->State & WIDGET_STATE_VERTICAL) {
    int xSize = pWidget->Win.Rect.x1 - pWidget->Win.Rect.x0 + 1;
    int x0, x1;
    x0 = pRect->x0;
    x1 = pRect->x1;
    pRect->x0 = pRect->y0;
    pRect->x1 = pRect->y1;
    pRect->y1 = xSize - 1 - x0;
    pRect->y0 = xSize - 1 - x1;
  }
}

/*********************************************************************
*
*       _CalcPositions
*
*  Calculates all positions required for drawing or for mouse / touch
*  evaluation.
*/
static void _CalcPositions(SCROLLBAR_Obj* pObj, SCROLLBAR_POSITIONS* pPos) {
  int xSizeArrow, xSize, xSizeMoveable, ThumbSize, NumItems, xSizeThumbArea;
  WM_HWIN hWin;
  GUI_RECT r, rSub;
  int x0, y0;
  r = pObj->Widget.Win.Rect;
  x0 = r.x0;
  y0 = r.y0;
  pPos->x1  = (pObj->Widget.State & WIDGET_STATE_VERTICAL) ? r.y1 : r.x1;
  /* Subtract the rectangle of the other scrollbar (if existing and visible) */
  if (pObj->Widget.Id == GUI_ID_HSCROLL) {
    hWin = WM_GetScrollbarV(pObj->Widget.Win.hParent);
    if (hWin) {
      WM_GetWindowRectEx(hWin, &rSub);
      if (r.x1 == rSub.x1) {
        r.x1 = rSub.x0 -1;
      }
    }
  }
  if (pObj->Widget.Id == GUI_ID_VSCROLL) {
    hWin = WM_GetScrollbarH(pObj->Widget.Win.hParent);
    if (hWin) {
      WM_GetWindowRectEx(hWin, &rSub);
      if (r.y1 == rSub.y1) {
        r.y1 = rSub.y0 -1;
      }
    }
  }
  /* Convert coordinates of this window */
  GUI_MoveRect(&r, -x0, -y0);
  /* Convert real into virtual coordinates */
  _WIDGET__RECT2VRECT(&pObj->Widget, &r);
  NumItems      = pObj->NumItems;
  xSize         = r.x1 - r.x0 + 1;
  xSizeArrow    = _GetArrowSize(pObj);
  xSizeThumbArea= xSize - 2 * xSizeArrow;     /* Number of pixels available for thumb and movement */
  ThumbSize     = GUI__DivideRound(xSizeThumbArea * pObj->PageSize, NumItems);
  if (ThumbSize < SCROLLBAR_THUMB_SIZE_MIN_DEFAULT) {
    ThumbSize = SCROLLBAR_THUMB_SIZE_MIN_DEFAULT;
  }
  if (ThumbSize > xSizeThumbArea) {
    ThumbSize = xSizeThumbArea;
  }
  xSizeMoveable = xSizeThumbArea - ThumbSize;
  pPos->x0_LeftArrow  = r.x0;
  pPos->x1_LeftArrow  = xSizeArrow - 1;
  pPos->x1_RightArrow = xSize - 1;
  pPos->x0_RightArrow = xSize - xSizeArrow;
  pPos->x0_Thumb      = pPos->x1_LeftArrow + 1+ GUI__DivideRound(xSizeMoveable * pObj->v, NumItems - pObj->PageSize);
  pPos->x1_Thumb      = pPos->x0_Thumb + ThumbSize - 1;
  pPos->xSizeMoveable = xSizeMoveable;
  pPos->ThumbSize     = ThumbSize;
}

/*********************************************************************
*
*       _DrawTriangle
*/
static void _DrawTriangle(WIDGET* pWidget, int x, int y, int Size, int Inc) {
  if (pWidget->State & WIDGET_STATE_VERTICAL) {
    for (; Size >= 0; Size--, x += Inc) {
      GUI_DrawHLine(x, y - Size, y + Size);
    }
  } else {
    for (; Size >= 0; Size--, x += Inc) {
      GUI_DrawVLine(x, y - Size, y + Size);
    }
  }
}

/*********************************************************************
*
*       _Paint
*/
static void _Paint(SCROLLBAR_Obj* pObj) {
  int ArrowSize, ArrowOff;
  SCROLLBAR_POSITIONS Pos;
  GUI_RECT r, rClient;
  /*
    Get / calc position info
  */
  _CalcPositions(pObj, &Pos);
  WIDGET__GetClientRect(&pObj->Widget, &rClient);
  r = rClient;
  ArrowSize = ((r.y1 - r.y0) /3) - 1;
  ArrowOff = 3 + ArrowSize+ ArrowSize/3;
  /*
    Draw left Arrow
  */
  LCD_SetColor(pObj->Props.aColor[SCROLLBAR_CI_THUMB]);
  r = rClient;
  r.x0 = Pos.x0_LeftArrow;
  r.x1 = Pos.x1_LeftArrow;
  WIDGET__FillRectEx(&pObj->Widget, &r);
  LCD_SetColor(pObj->Props.aColor[SCROLLBAR_CI_ARROW]);
  _DrawTriangle(&pObj->Widget, r.x0 + ArrowOff, (r.y1 - r.y0) >> 1, ArrowSize, -1);
  WIDGET__EFFECT_DrawUpRect(&pObj->Widget, &r);
  /*
    Draw the thumb area which is not covered by the thumb
  */
  LCD_SetColor(pObj->Props.aColor[SCROLLBAR_CI_SHAFT]);
  r.x0 = Pos.x1_LeftArrow + 1;
  r.x1 = Pos.x0_Thumb - 1;
  WIDGET__FillRectEx(&pObj->Widget, &r);
  r = rClient;
  r.x0 = Pos.x1_Thumb + 1;
  r.x1 = Pos.x0_RightArrow - 1;
  WIDGET__FillRectEx(&pObj->Widget, &r);
  /*
    Draw Thumb
  */
  r = rClient;
  r.x0 = Pos.x0_Thumb;
  r.x1 = Pos.x1_Thumb;
  LCD_SetColor(pObj->Props.aColor[SCROLLBAR_CI_THUMB]);
  WIDGET__FillRectEx(&pObj->Widget, &r);
  WIDGET__EFFECT_DrawUpRect(&pObj->Widget, &r);
  /*
    Draw right Arrow
  */
  LCD_SetColor(pObj->Props.aColor[SCROLLBAR_CI_THUMB]);
  r.x0 = Pos.x0_RightArrow;
  r.x1 = Pos.x1_RightArrow;
  WIDGET__FillRectEx(&pObj->Widget, &r);
  LCD_SetColor(pObj->Props.aColor[SCROLLBAR_CI_ARROW]);
  _DrawTriangle(&pObj->Widget, r.x1 - ArrowOff, (r.y1 - r.y0) >> 1, ArrowSize, 1);
  WIDGET__EFFECT_DrawUpRect(&pObj->Widget, &r);
  /*
    Draw overlap area (if any ...)
  */
  if (Pos.x1_RightArrow != Pos.x1) {
    r.x0 = Pos.x1_RightArrow + 1;
    r.x1 = Pos.x1;
    LCD_SetColor(pObj->Props.aColor[SCROLLBAR_CI_THUMB]);
    WIDGET__FillRectEx(&pObj->Widget, &r);
  }
}

/*********************************************************************
*
*       _ScrollbarPressed
*/
static void _ScrollbarPressed(SCROLLBAR_Handle hObj, SCROLLBAR_Obj* pObj) {
  WIDGET_OrState(hObj, SCROLLBAR_STATE_PRESSED);
  if (pObj->Widget.Win.Status & WM_SF_ISVIS) {
    WM_NotifyParent(hObj, WM_NOTIFICATION_CLICKED);
  }
}

/*********************************************************************
*
*       _ScrollbarReleased
*/
static void _ScrollbarReleased(SCROLLBAR_Handle hObj, SCROLLBAR_Obj* pObj) {
  WIDGET_AndState(hObj, SCROLLBAR_STATE_PRESSED);
  if (pObj->Widget.Win.Status & WM_SF_ISVIS) {
    WM_NotifyParent(hObj, WM_NOTIFICATION_RELEASED);
  }
}

/*********************************************************************
*
*       _OnTouch
*/
static void _OnTouch(SCROLLBAR_Handle hObj, SCROLLBAR_Obj* pObj, WM_MESSAGE*pMsg) {
  SCROLLBAR_POSITIONS Pos;
  GUI_PID_STATE* pState = (GUI_PID_STATE*)pMsg->Data.p;
  if (pMsg->Data.p) {  /* Something happened in our area (pressed or released) */
    if (pState->Pressed) {
      int Sel;
      int Range;
      int x;
      Sel = pObj->v;
      _CalcPositions(pObj, &Pos);
      Range = pObj->NumItems - pObj->PageSize;
      /* Swap mouse coordinates if necessary */
      if (pObj->Widget.State & WIDGET_STATE_VERTICAL) {
        int t = pState->x;
        pState->x = pState->y;
        pState->y = t;
      }
      x = pState->x;
      if (x <= Pos.x1_LeftArrow) {         /* left arrow (line left) */
        Sel--;
      } else if (x < Pos.x0_Thumb) {       /* left area  (page left) */
        Sel -= pObj->PageSize;
      } else if (x <= Pos.x1_Thumb) {      /* Thumb area */
        if (Pos.xSizeMoveable > 0) {
          x = x - Pos.ThumbSize/2 - Pos.x1_LeftArrow-1;
          Sel = GUI__DivideRound(Range * x, Pos.xSizeMoveable);
        }
      } else if (x < Pos.x0_RightArrow) {  /* right area (page right) */
        Sel += pObj->PageSize;
      } else  if (x <= Pos.x1_RightArrow) {
        Sel++;
      }
      /* WM_SetFocus(hObj); */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久婷婷一区二区三区| 亚洲国产精品一区二区久久| 亚洲视频中文字幕| 蜜臀久久99精品久久久画质超高清| 国产乱人伦偷精品视频不卡| av一区二区不卡| 精品粉嫩超白一线天av| 亚洲成人在线观看视频| 成人三级伦理片| 精品国产自在久精品国产| 亚洲午夜在线视频| 豆国产96在线|亚洲| 日韩美女一区二区三区四区| 一区二区三区四区乱视频| 国产成人精品一区二区三区四区| 91精品国产一区二区三区| 亚洲人吸女人奶水| 粉嫩av一区二区三区粉嫩| 2023国产精品自拍| 麻豆国产精品官网| 日韩亚洲欧美在线| 青娱乐精品在线视频| 欧美日韩久久一区| 亚洲一区在线看| 一本大道综合伊人精品热热| 国产精品久久久久影视| 国产精品99久久久久久似苏梦涵 | 国产麻豆成人传媒免费观看| 日韩一区二区免费在线电影| 亚洲成av人影院| 在线不卡中文字幕播放| 亚洲444eee在线观看| 欧美色区777第一页| 亚洲综合丁香婷婷六月香| 日本韩国精品在线| 亚洲一区二区视频在线观看| 在线中文字幕一区二区| 亚洲无人区一区| 在线91免费看| 老司机一区二区| 精品国产成人系列| 国产精品99久久久| 中文字幕佐山爱一区二区免费| zzijzzij亚洲日本少妇熟睡| 亚洲人成精品久久久久久| 色一情一伦一子一伦一区| 亚洲一级在线观看| 欧美一区二区三区视频| 老司机午夜精品99久久| 国产亚洲视频系列| 99综合电影在线视频| 夜夜嗨av一区二区三区网页| 欧美日韩国产另类一区| 精油按摩中文字幕久久| 欧美激情在线观看视频免费| 91在线云播放| 男男视频亚洲欧美| 欧美国产在线观看| 在线日韩国产精品| 久久se这里有精品| 国产精品日韩精品欧美在线| 91首页免费视频| 天堂午夜影视日韩欧美一区二区| 久久综合网色—综合色88| www.99精品| 图片区日韩欧美亚洲| 国产网站一区二区| 欧美亚洲另类激情小说| 久久99国产精品久久99果冻传媒| 国产精品福利在线播放| 91精品久久久久久久91蜜桃| 国产成人av影院| 五月天精品一区二区三区| 国产亚洲精品aa午夜观看| 欧美亚洲国产bt| 国产成人综合亚洲91猫咪| 午夜视频一区二区三区| 欧美韩日一区二区三区四区| 欧美日韩国产小视频| 成人激情动漫在线观看| 日韩精品91亚洲二区在线观看 | 91麻豆精品国产91久久久使用方法| 高清不卡在线观看av| 美女视频黄久久| 亚洲日本护士毛茸茸| 国产亚洲精品aa午夜观看| 欧美日本高清视频在线观看| 99r精品视频| 粉嫩欧美一区二区三区高清影视 | 成人免费一区二区三区视频| 日韩欧美123| 欧美日韩精品二区第二页| 成人app在线| 狠狠色狠狠色综合| 视频在线观看91| 亚洲最大的成人av| 中文字幕在线一区二区三区| 日韩欧美国产系列| 欧美伦理影视网| 在线观看日产精品| 91视频在线观看免费| 国产精品一区专区| 久久91精品国产91久久小草| 日韩福利视频网| 亚洲18女电影在线观看| 一区二区三区精品久久久| 中文字幕日韩一区二区| 亚洲国产成人午夜在线一区| 精品成人在线观看| 久久影院视频免费| 日韩精品中午字幕| 欧美一区二区三区爱爱| 欧美私模裸体表演在线观看| 在线一区二区三区四区| 99r国产精品| 91在线视频在线| 色综合久久久久网| 在线免费亚洲电影| 在线日韩av片| 欧美伦理影视网| 欧美一区二区美女| 日韩欧美一二区| 精品国产一区a| 久久精品水蜜桃av综合天堂| 久久久久高清精品| 日本一区二区三区电影| 日韩一区在线免费观看| 一区二区三区中文字幕精品精品| 亚洲自拍偷拍麻豆| 天堂成人国产精品一区| 蜜臀国产一区二区三区在线播放| 国内一区二区在线| 成人少妇影院yyyy| 色呦呦日韩精品| 宅男在线国产精品| 26uuu国产一区二区三区| 国产拍欧美日韩视频二区| 中文字幕在线一区| 亚洲影视资源网| 奇米影视在线99精品| 国产美女一区二区| 91香蕉视频在线| 在线91免费看| 国产日韩影视精品| 亚洲国产精品一区二区www在线 | 一区二区三区电影在线播| 五月婷婷色综合| 国产乱人伦精品一区二区在线观看| 粉嫩嫩av羞羞动漫久久久| 欧美三级蜜桃2在线观看| 欧美草草影院在线视频| 久久网这里都是精品| 亚洲精品国产一区二区精华液 | 久久国产福利国产秒拍| www.日韩精品| 欧美一区二区三区四区视频| 国产精品二三区| 日韩精品一区第一页| 国产盗摄视频一区二区三区| 欧美性色综合网| 国产香蕉久久精品综合网| 亚洲第一久久影院| 成人美女在线观看| 欧美精品tushy高清| 国产精品美女久久久久久2018 | 日韩欧美视频一区| 国产精品美女一区二区在线观看| 香蕉成人伊视频在线观看| 成人激情小说网站| 日韩免费一区二区| 亚洲午夜一二三区视频| 成人免费毛片嘿嘿连载视频| 91精品国产欧美一区二区18| 亚洲免费色视频| 风间由美一区二区三区在线观看| 在线电影欧美成精品| 国产精品成人免费| 国产米奇在线777精品观看| 欧美精品色综合| 亚洲精品第1页| 粉嫩av一区二区三区| 26uuu精品一区二区三区四区在线| 亚洲国产精品影院| 91精品福利视频| 中文字幕欧美一| 国产成人亚洲综合a∨婷婷 | 欧美色精品在线视频| 国产精品久久久久久久久免费樱桃| 国产在线精品一区在线观看麻豆| 欧美电影一区二区三区| 一区二区三区在线视频观看58| 成人白浆超碰人人人人| 国产日韩欧美麻豆| 国产美女在线观看一区| 精品欧美一区二区久久| 免播放器亚洲一区| 欧美一区二区免费视频| 日韩成人午夜精品| 91精品国产综合久久国产大片| 日韩不卡免费视频|