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

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

?? listbox.c

?? ucCos移植到廣州友善nano2410
?? C
?? 第 1 頁 / 共 3 頁
字號:
/*
*********************************************************************************************************
*                                                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        : LISTBOX.c
Purpose     : Implementation of listbox widget
---------------------------END-OF-HEADER------------------------------
*/

#include <stdlib.h>
#include <string.h>
#include "GUI_ARRAY.h"
#include "LISTBOX_Private.h"
#include "SCROLLBAR.h"
#include "GUIDebug.h"
#include "GUI_Protected.h"
#include "WM_Intern.h"

#if GUI_WINSUPPORT

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

/* Support for 3D effects */
#ifndef LISTBOX_USE_3D
  #define LISTBOX_USE_3D 1
#endif

/* Define default fonts */
#ifndef LISTBOX_FONT_DEFAULT
  #define LISTBOX_FONT_DEFAULT &GUI_Font13_1
#endif


/* Define colors */
#ifndef LISTBOX_BKCOLOR0_DEFAULT
  #define LISTBOX_BKCOLOR0_DEFAULT GUI_WHITE     /* Not selected */
#endif

#ifndef LISTBOX_BKCOLOR1_DEFAULT
  #define LISTBOX_BKCOLOR1_DEFAULT GUI_GRAY      /* Selected, no focus */
#endif

#ifndef LISTBOX_BKCOLOR2_DEFAULT
  #define LISTBOX_BKCOLOR2_DEFAULT GUI_BLUE      /* Selected, focus */
#endif

#ifndef LISTBOX_BKCOLOR3_DEFAULT
  #define LISTBOX_BKCOLOR3_DEFAULT 0xC0C0C0      /* Disabled */
#endif


#ifndef LISTBOX_TEXTCOLOR0_DEFAULT
  #define LISTBOX_TEXTCOLOR0_DEFAULT GUI_BLACK   /* Not selected */
#endif

#ifndef LISTBOX_TEXTCOLOR1_DEFAULT
  #define LISTBOX_TEXTCOLOR1_DEFAULT GUI_WHITE   /* Selected, no focus */
#endif

#ifndef LISTBOX_TEXTCOLOR2_DEFAULT
  #define LISTBOX_TEXTCOLOR2_DEFAULT GUI_WHITE   /* Selected, focus */
#endif

#ifndef LISTBOX_TEXTCOLOR3_DEFAULT
  #define LISTBOX_TEXTCOLOR3_DEFAULT GUI_GRAY    /* Disabled */
#endif


#ifndef LISTBOX_SCROLLSTEP_H_DEFAULT
  #define LISTBOX_SCROLLSTEP_H_DEFAULT 10
#endif

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


LISTBOX_PROPS LISTBOX_DefaultProps = {
  LISTBOX_FONT_DEFAULT,
  LISTBOX_SCROLLSTEP_H_DEFAULT,
  LISTBOX_BKCOLOR0_DEFAULT,
  LISTBOX_BKCOLOR1_DEFAULT,
  LISTBOX_BKCOLOR2_DEFAULT,
  LISTBOX_BKCOLOR3_DEFAULT,
  LISTBOX_TEXTCOLOR0_DEFAULT,
  LISTBOX_TEXTCOLOR1_DEFAULT,
  LISTBOX_TEXTCOLOR2_DEFAULT,
  LISTBOX_TEXTCOLOR3_DEFAULT,
};


/*********************************************************************
*
*       Static routines
*
**********************************************************************
*/
/*********************************************************************
*
*       _CallOwnerDraw
*/
static int _CallOwnerDraw(LISTBOX_Handle hObj, const LISTBOX_Obj* pObj, int Cmd, int ItemIndex) {
  WIDGET_ITEM_DRAW_INFO ItemInfo;
  int r;
  ItemInfo.Cmd       = Cmd;
  ItemInfo.hWin      = hObj;
  ItemInfo.ItemIndex = ItemIndex;
  if (pObj->pfDrawItem) {
    r = pObj->pfDrawItem(&ItemInfo);
  } else {
    r = LISTBOX_OwnerDraw(&ItemInfo);
  }
  return r;
}

/*********************************************************************
*
*       LISTBOX__GetNumItems
*
*  Returns:
*    Number of items
*/
unsigned LISTBOX__GetNumItems(const LISTBOX_Obj* pObj) {
  return GUI_ARRAY_GetNumItems(&pObj->ItemArray);
}

/*********************************************************************
*
*       LISTBOX__GetpString
*
*  Returns:
*    Pointer to the specified item
*/
const char* LISTBOX__GetpString(const LISTBOX_Obj* pObj, int Index) {
  const char* s = NULL;
  LISTBOX_ITEM* pItem = (LISTBOX_ITEM*)GUI_ARRAY_GetpItem(&pObj->ItemArray, Index);
  if (pItem) {
    s = pItem->acText;
  }
  return s;
}

/*********************************************************************
*
*       _GetYSize
*/
static int _GetYSize(LISTBOX_Handle hObj) {
  GUI_RECT Rect;
  WM_GetInsideRectExScrollbar(hObj, &Rect);
  return (Rect.y1 - Rect.y0 + 1);
}

/*********************************************************************
*
*       _GetItemSizeX
*/
static int _GetItemSizeX(LISTBOX_Handle hObj, const LISTBOX_Obj* pObj, unsigned Index) {
  LISTBOX_ITEM* pItem;
  int xSize = 0;
  pItem = (LISTBOX_ITEM*)GUI_ARRAY_GetpItem(&pObj->ItemArray, Index);
  if (pItem) {
    xSize = pItem->xSize;
  }
  if (xSize == 0) {
    const GUI_FONT GUI_UNI_PTR* pOldFont;
    pOldFont = GUI_SetFont(pObj->Props.pFont);
    xSize    = _CallOwnerDraw(hObj, pObj, WIDGET_ITEM_GET_XSIZE, Index);
    GUI_SetFont(pOldFont);
  }
  if (pItem) {
    pItem->xSize = xSize;
  }
  return xSize;
}

/*********************************************************************
*
*       _GetItemSizeY
*/
static int _GetItemSizeY(LISTBOX_Handle hObj, const LISTBOX_Obj* pObj, unsigned Index) {
  LISTBOX_ITEM* pItem;
  int ySize = 0;
  pItem = (LISTBOX_ITEM*)GUI_ARRAY_GetpItem(&pObj->ItemArray, Index);
  if (pItem) {
    ySize = pItem->ySize;
  }
  if (ySize == 0) {
    const GUI_FONT GUI_UNI_PTR* pOldFont;
    pOldFont = GUI_SetFont(pObj->Props.pFont);
    ySize    = _CallOwnerDraw(hObj, pObj, WIDGET_ITEM_GET_YSIZE, Index);
    GUI_SetFont(pOldFont);
  }
  if (pItem) {
    pItem->ySize = ySize;
  }
  return ySize;
}

/*********************************************************************
*
*       _GetContentsSizeX
*/
static int _GetContentsSizeX(LISTBOX_Handle hObj) {
  LISTBOX_Obj* pObj;
  int i, NumItems, SizeX;
  int Result = 0;
  pObj = LISTBOX_H2P(hObj);
  NumItems = LISTBOX__GetNumItems(pObj);
  for (i = 0; i < NumItems; i++) {
    SizeX = _GetItemSizeX(hObj, pObj, i);
    if (Result < SizeX) {
      Result = SizeX;
    }
  }
  return Result;
}

/*********************************************************************
*
*       _GetItemPosY
*/
static int _GetItemPosY(LISTBOX_Handle hObj, const LISTBOX_Obj* pObj, unsigned Index) {
  if (Index < LISTBOX__GetNumItems(pObj)) {
    if ((int)Index >= pObj->ScrollStateV.v) {
      unsigned i;
      int PosY = 0;
      for (i = pObj->ScrollStateV.v; i < Index; i++) {
        PosY += _GetItemSizeY(hObj, pObj, i);
      }
      return PosY;
    }
  }
  return -1;
}

/*********************************************************************
*
*       _IsPartiallyVis
*/
static int _IsPartiallyVis(LISTBOX_Handle hObj, const LISTBOX_Obj* pObj) {
  int Index;
  Index = pObj->Sel;
  if (Index < (int)LISTBOX__GetNumItems(pObj)) {
    if (Index >= pObj->ScrollStateV.v) {
      int y;
      y  = _GetItemPosY (hObj, pObj, Index);
      y += _GetItemSizeY(hObj, pObj, Index);
      if (y > _GetYSize(hObj)) {
        return 1;
      }
    }
  }
  return 0;
}

/*********************************************************************
*
*       _GetNumVisItems
*
*  Returns:
*   Number of fully or partially visible items
*/
static unsigned _GetNumVisItems(const LISTBOX_Obj* pObj, LISTBOX_Handle hObj) {
  int NumItems, r = 1;
  NumItems = LISTBOX__GetNumItems(pObj);
  if (NumItems > 1) {
    int i, ySize, DistY = 0;
    ySize = _GetYSize(hObj);
    for (i = NumItems - 1; i >= 0; i--) {
      DistY += _GetItemSizeY(hObj, pObj, i);
      if (DistY > ySize) {
        break;
      }
    }
    r = NumItems - i - 1;
    if (r < 1) {
      return 1;
    }
  }
  return r;
}

/*********************************************************************
*
*       _NotifyOwner
*
* Purpose:
*   Notify owner of the window.
*   If no owner is registered, the parent is considered owner.
*/
static void _NotifyOwner(WM_HWIN hObj, int Notification) {
  WM_MESSAGE Msg = {0};
  WM_HWIN hOwner;
  LISTBOX_Obj* pObj    = LISTBOX_H2P(hObj);
  hOwner = pObj->hOwner ? pObj->hOwner : WM_GetParent(hObj);
  Msg.MsgId  = WM_NOTIFY_PARENT;
  Msg.Data.v = Notification;
  Msg.hWinSrc= hObj;
  WM_SendMessage(hOwner, &Msg);
}

/*********************************************************************
*
*       LISTBOX_OwnerDraw
*/
int LISTBOX_OwnerDraw(const WIDGET_ITEM_DRAW_INFO* pDrawItemInfo) {
  switch (pDrawItemInfo->Cmd) {
    case WIDGET_ITEM_GET_XSIZE: {
      LISTBOX_Obj* pObj;
      const GUI_FONT GUI_UNI_PTR* pOldFont;
      const char* s;
      int DistX;
      pObj = LISTBOX_H2P(pDrawItemInfo->hWin);
      pOldFont = GUI_SetFont(pObj->Props.pFont);
      s = LISTBOX__GetpString(pObj, pDrawItemInfo->ItemIndex);
      DistX = GUI_GetStringDistX(s);
      GUI_SetFont(pOldFont);
      return DistX;
    }
    case WIDGET_ITEM_GET_YSIZE: {
      LISTBOX_Obj* pObj;
      pObj = LISTBOX_H2P(pDrawItemInfo->hWin);
      return GUI_GetYDistOfFont(pObj->Props.pFont) + pObj->ItemSpacing;
    }
    case WIDGET_ITEM_DRAW: {
      LISTBOX_Obj* pObj;
      LISTBOX_ITEM* pItem;
      WM_HMEM hItem;
      GUI_RECT r;
      int FontDistY;
      int ItemIndex = pDrawItemInfo->ItemIndex;
      const char* s;
      int ColorIndex;
      char IsDisabled;
      char IsSelected;
      pObj = LISTBOX_H2P(pDrawItemInfo->hWin);
      hItem = GUI_ARRAY_GethItem(&pObj->ItemArray, ItemIndex);
      pItem = (LISTBOX_ITEM *)GUI_ALLOC_h2p(hItem);
      WM_GetInsideRect(&r);
      FontDistY = GUI_GetFontDistY();
      /* Calculate color index */
      IsDisabled = (pItem->Status & LISTBOX_ITEM_DISABLED) ? 1 : 0;
      IsSelected = (pItem->Status & LISTBOX_ITEM_SELECTED) ? 1 : 0;
      if (pObj->Flags & LISTBOX_SF_MULTISEL) {
        if (IsDisabled) {
          ColorIndex = 3;
        } else {
          ColorIndex = (IsSelected) ? 2 : 0;
        }
      } else {
        if (IsDisabled) {
          ColorIndex = 3;
        } else {
          if (ItemIndex == pObj->Sel) {
            ColorIndex = (pObj->Widget.State & WIDGET_STATE_FOCUS) ? 2 : 1;
          } else {
            ColorIndex = 0;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩欧美中文一区| 紧缚捆绑精品一区二区| 麻豆精品精品国产自在97香蕉| 国产乱码字幕精品高清av | 亚洲精选在线视频| 麻豆高清免费国产一区| 欧美亚洲综合一区| 综合久久给合久久狠狠狠97色| 麻豆一区二区在线| 欧美精品一级二级三级| 亚洲精品伦理在线| 成人精品亚洲人成在线| 精品动漫一区二区三区在线观看| 亚洲一区二区成人在线观看| 99re在线视频这里只有精品| 国产亚洲制服色| 久久国产精品第一页| 欧美日本韩国一区| 一区二区三区国产精品| 一本大道久久a久久综合婷婷| 国产欧美日韩久久| 国产91丝袜在线播放0| 久久人人爽爽爽人久久久| 蜜桃视频在线观看一区| 欧美一卡在线观看| 蜜芽一区二区三区| 欧美一级艳片视频免费观看| 亚洲成人免费观看| 欧美日韩一区小说| 日韩精品福利网| 欧美一级片在线观看| 爽好多水快深点欧美视频| 欧美日韩在线播放| 午夜精品久久久久久久蜜桃app| 91黄色免费观看| 亚洲午夜羞羞片| 69堂亚洲精品首页| 麻豆中文一区二区| 国产日韩欧美综合在线| 床上的激情91.| 亚洲精品乱码久久久久久久久 | 136国产福利精品导航| 国产精品18久久久久| 国产亚洲女人久久久久毛片| 丰满亚洲少妇av| 亚洲男同1069视频| 欧美老女人在线| 另类小说欧美激情| 中文无字幕一区二区三区| jlzzjlzz亚洲日本少妇| 亚洲在线成人精品| 日韩欧美中文一区二区| 国产成人免费在线观看不卡| 日韩一区欧美一区| 欧美三级中文字幕| 激情综合五月天| 1区2区3区精品视频| 欧美日韩一区二区三区视频| 久久成人免费电影| 亚洲天堂成人网| 日韩一级片在线播放| 成人av一区二区三区| 亚洲一二三四区不卡| 欧美不卡视频一区| 91啪在线观看| 免费人成精品欧美精品| 国产精品家庭影院| 欧美剧情片在线观看| 国产**成人网毛片九色| 亚洲综合免费观看高清完整版在线| 欧美一区欧美二区| 99久久99久久精品国产片果冻| 午夜伦理一区二区| 中文字幕国产一区| 日韩一区二区免费在线电影| 成人免费看的视频| 麻豆一区二区三区| 亚洲午夜精品网| 国产精品久久久久久久久免费樱桃| 欧美一区二视频| 色香蕉久久蜜桃| 福利电影一区二区| 久久99精品久久久久久| 午夜精品久久久久久久久| 国产精品久久精品日日| 精品福利在线导航| 欧美一区二区三区在| 欧美中文字幕亚洲一区二区va在线| 国产一区二区不卡在线| 青青草原综合久久大伊人精品优势| 国产精品久久久久久久第一福利| 精品99久久久久久| 67194成人在线观看| 色婷婷久久久综合中文字幕 | 欧美激情在线看| 欧美sm美女调教| 欧美剧情片在线观看| 欧美性一区二区| 色综合久久久久综合99| 成人午夜在线播放| 丁香啪啪综合成人亚洲小说 | 丝袜亚洲精品中文字幕一区| 亚洲精品一二三| 亚洲欧美日韩小说| 亚洲欧美色一区| 亚洲桃色在线一区| 亚洲欧美色综合| 亚洲欧美另类在线| 自拍视频在线观看一区二区| 国产精品天干天干在观线| 国产欧美精品在线观看| 国产视频在线观看一区二区三区| 久久综合视频网| 久久蜜桃av一区精品变态类天堂| 日韩欧美一二三四区| 欧美日韩国产在线播放网站| 色8久久精品久久久久久蜜| 91在线观看污| 在线视频一区二区免费| 欧美伦理影视网| 日韩视频在线永久播放| 精品国产一区二区三区av性色| 精品日韩成人av| 国产视频911| 国产精品美女久久久久久久久久久| 久久久青草青青国产亚洲免观| 欧美国产一区二区在线观看| 国产精品国产三级国产aⅴ入口| 国产精品丝袜一区| 一区二区不卡在线视频 午夜欧美不卡在| 亚洲视频一区二区在线| 亚洲激情在线激情| 蜜桃av一区二区| 国产高清精品久久久久| 国产精品中文有码| 91香蕉视频在线| 欧美亚一区二区| 视频精品一区二区| 久久99精品久久久久久国产越南 | 久久久91精品国产一区二区三区| 久久久久国产精品人| 亚洲少妇30p| 爽爽淫人综合网网站| 国产一区二区三区美女| 成人h精品动漫一区二区三区| 99精品视频中文字幕| 在线电影国产精品| 国产欧美精品区一区二区三区 | 欧美电影在哪看比较好| 日韩精品中午字幕| 1区2区3区欧美| 喷水一区二区三区| 大桥未久av一区二区三区中文| 欧美亚男人的天堂| 亚洲国产精品传媒在线观看| 亚洲午夜精品一区二区三区他趣| 国产一区二区精品久久| 欧美无砖专区一中文字| 日本一区二区三区电影| 日韩精品色哟哟| 99精品视频在线免费观看| 精品人在线二区三区| 一区二区国产盗摄色噜噜| 国产久卡久卡久卡久卡视频精品| 在线一区二区三区四区| 久久网站热最新地址| 偷窥少妇高潮呻吟av久久免费| 风间由美一区二区三区在线观看 | 99久久er热在这里只有精品66| 欧美一级黄色片| 亚洲另类春色校园小说| 国产精品正在播放| 日韩欧美中文字幕精品| 亚洲一二三区视频在线观看| 国产精品538一区二区在线| 欧美日韩一区成人| 一区二区三区在线观看动漫| 国产91在线看| 亚洲精品一区二区三区在线观看| 香蕉成人伊视频在线观看| av在线不卡观看免费观看| 国产日韩欧美麻豆| 国产激情一区二区三区四区 | 日韩理论片网站| 成人影视亚洲图片在线| 久久婷婷国产综合国色天香| 青青青爽久久午夜综合久久午夜| 欧美日韩黄色一区二区| 亚洲主播在线播放| 色欧美日韩亚洲| 一区二区三区免费网站| 99精品视频在线观看免费| 国产精品免费视频网站| 国产.欧美.日韩| 国产精品久久久久影院色老大| 成人高清视频在线| 亚洲日本在线观看| 日本久久电影网| 亚洲成人精品在线观看| 91精品婷婷国产综合久久性色|