亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
亚洲午夜视频在线观看| 91久久精品国产91性色tv| 99视频精品全部免费在线| 欧美日韩亚洲综合| 国产午夜精品一区二区三区四区| 日韩美女啊v在线免费观看| 免费不卡在线视频| 欧美亚洲综合久久| 日韩一区欧美小说| 国产原创一区二区| 欧美一区二区三区免费在线看| 国产精品网站一区| 国产一区二区三区在线观看精品| 欧美精品视频www在线观看| 日韩美女精品在线| 福利电影一区二区| 久久久美女毛片| 久久99精品一区二区三区| 欧美做爰猛烈大尺度电影无法无天| 国产欧美中文在线| 国产一区二区在线视频| 欧美一区二区三区免费观看视频| 性做久久久久久| 色94色欧美sute亚洲线路二| 亚洲视频在线观看一区| 粉嫩蜜臀av国产精品网站| 久久蜜臀精品av| 国产美女娇喘av呻吟久久| 欧美xxxxxxxx| 国产一区二区视频在线播放| 欧美精品一区二区三| 六月丁香婷婷久久| 精品国产一区久久| 精品在线你懂的| 久久久久久一二三区| 国产精品自在在线| 国产欧美一区在线| 91在线精品一区二区| 亚洲少妇最新在线视频| 99精品国产99久久久久久白柏 | 欧美日韩视频在线观看一区二区三区 | 免费在线观看一区| 6080国产精品一区二区| 日韩激情视频在线观看| 欧美va在线播放| 国产一区二区三区黄视频| 欧美经典一区二区| 99re视频精品| 亚洲444eee在线观看| 欧美一级二级三级蜜桃| 精油按摩中文字幕久久| 国产午夜亚洲精品不卡| 日本乱人伦一区| 天天操天天干天天综合网| 日韩欧美一区在线| 国产一区二区三区av电影| 欧美激情综合五月色丁香| 日本韩国欧美在线| 免费欧美高清视频| 中文字幕不卡在线| 欧美日本一区二区| 久久精品国产第一区二区三区| 久久久亚洲午夜电影| 99精品黄色片免费大全| 五月天国产精品| 欧美激情在线看| 欧美日韩一卡二卡三卡| 国产揄拍国内精品对白| 亚洲伊人伊色伊影伊综合网| 精品国产乱码久久久久久免费| 成人午夜激情片| 日韩成人午夜精品| 亚洲欧洲色图综合| 日韩午夜激情视频| www.日韩大片| 久久不见久久见免费视频1| 国产精品久久久久久亚洲毛片| 欧美日韩国产天堂| 成人av电影免费观看| 日韩极品在线观看| 亚洲精品五月天| 国产三级精品三级在线专区| 欧美三级电影在线观看| 国产美女视频一区| 青青草伊人久久| 亚洲免费观看高清完整版在线 | 欧美另类变人与禽xxxxx| 国产成人丝袜美腿| 日本中文字幕一区二区视频| 亚洲人妖av一区二区| 久久综合资源网| 在线播放91灌醉迷j高跟美女 | 蜜臀久久99精品久久久画质超高清| 国产欧美日韩亚州综合| 欧美成人精精品一区二区频| 在线观看成人免费视频| 成人精品gif动图一区| 精品无码三级在线观看视频| 日韩国产精品91| 亚洲va欧美va人人爽午夜 | 国产日韩欧美综合一区| 69av一区二区三区| 欧美午夜一区二区三区| 95精品视频在线| 成人午夜电影久久影院| 国产成人综合在线| 韩国在线一区二区| 久久精品99国产国产精| 免费在线观看日韩欧美| 日韩av一区二| 日本中文字幕不卡| 老司机一区二区| 久久精品国产77777蜜臀| 精品一区二区三区在线观看| 老司机精品视频一区二区三区| 日韩不卡免费视频| 全部av―极品视觉盛宴亚洲| 日韩av成人高清| 精品一区二区三区久久| 国产资源精品在线观看| 丁香亚洲综合激情啪啪综合| 99视频在线精品| 色天使色偷偷av一区二区| 一本色道亚洲精品aⅴ| 在线观看国产日韩| 欧美人妇做爰xxxⅹ性高电影| 欧美另类久久久品| 精品国产乱码久久久久久夜甘婷婷| 精品国产1区2区3区| 国产视频一区在线观看| 欧美国产国产综合| 亚洲三级在线免费| 亚洲国产日韩在线一区模特| 日韩av电影一区| 国产精品一区二区在线观看不卡 | 日本美女一区二区三区| 久久97超碰色| 成人sese在线| 欧美一a一片一级一片| 日韩视频不卡中文| 欧美极品xxx| 午夜久久久久久| 国产福利精品一区二区| 色婷婷综合中文久久一本| 91 com成人网| 日本一区二区三级电影在线观看| 一区二区在线观看视频| 麻豆视频一区二区| av电影在线不卡| 日韩欧美在线网站| 国产精品久久久久天堂| 日韩电影在线看| 91色porny在线视频| 欧美一级xxx| 亚洲日韩欧美一区二区在线| 久久精工是国产品牌吗| 91麻豆国产在线观看| 日韩免费观看高清完整版| 国产精品理论片| 久久精品国产免费看久久精品| 色悠久久久久综合欧美99| 日韩午夜激情免费电影| 亚洲激情自拍偷拍| 国产成人精品三级| 7777精品伊人久久久大香线蕉 | 国产99精品视频| 不卡高清视频专区| 国产精品白丝jk黑袜喷水| 国产麻豆一精品一av一免费| 欧美一二三四区在线| 国产香蕉久久精品综合网| 亚洲福利视频一区| 丁香婷婷综合网| 精品久久久久久久久久久院品网 | 在线观看亚洲a| 久久久久久久久97黄色工厂| 日本在线观看不卡视频| 91精品办公室少妇高潮对白| 国产精品美女久久久久av爽李琼| 麻豆91在线观看| 欧美精三区欧美精三区| 亚洲码国产岛国毛片在线| 成人午夜又粗又硬又大| 久久亚洲综合色一区二区三区| 天天操天天干天天综合网| 在线观看网站黄不卡| 亚洲欧美日韩在线不卡| 成人一级片网址| 国产午夜精品美女毛片视频| 国产在线精品一区在线观看麻豆| 91精品国产入口在线| 亚洲6080在线| 欧美一区中文字幕| 亚洲国产成人tv| 717成人午夜免费福利电影| 亚洲成人动漫一区| 欧美日免费三级在线| 亚洲h精品动漫在线观看| 欧美日韩一区久久| 亚洲成在人线在线播放|