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

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

?? listbox.c

?? 這是我移植到GBA游戲機上的uCGUI3.24 可以通過模擬器仿真
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*
*********************************************************************************************************
*                                                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     : Multiple choice for emWin GSC
---------------------------END-OF-HEADER------------------------------
*/

#include <stdlib.h>
#include <string.h>
#include "LISTBOX.h"
#include "SCROLLBAR.h"
#include "WIDGET.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_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


/*********************************************************************
*
*       Object definition
*
**********************************************************************
*/

typedef struct {
  WIDGET Widget;
  I16 Sel;                        /* current selection */
  I16 NumItems;
  WM_HMEM haHandle;               /* Handle to buffer holding handles */
  WM_SCROLL_STATE ScrollState;
  const GUI_FONT* pFont;
  GUI_COLOR aBackColor[3];
  GUI_COLOR aTextColor[3];
  #if GUI_DEBUG_LEVEL >1
    int DebugId;
  #endif  
} LISTBOX_Obj;


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

static const GUI_FONT* _pDefaultFont = LISTBOX_FONT_DEFAULT;

/*********************************************************************
*
*       Macros for internal use
*
**********************************************************************
*/

#define LISTBOX_H2P(h) (LISTBOX_Obj*) WM_HMEM2Ptr(h)

#if GUI_DEBUG_LEVEL >1
  #define OBJECT_ID 0x4C69   /* Magic numer, should be unique if possible */
  #define ASSERT_IS_VALID_PTR(p) GUI_DEBUG_ERROROUT_IF(p->DebugId != OBJECT_ID, "EDIT.C: Wrong handle type or Object not init'ed")
  #define INIT_ID(p)   p->DebugId = OBJECT_ID
  #define DEINIT_ID(p) p->DebugId = 0
#else
  #define ASSERT_IS_VALID_PTR(p)
  #define INIT_ID(p)
  #define DEINIT_ID(p)
#endif

/*********************************************************************
*
*       Static routines
*
**********************************************************************
*/


/*********************************************************************
*
*       _GetNumVisItems

  Returns:
    Number of fully or partially visible items
*/
static int _GetNumVisItems(LISTBOX_Obj* pObj) {
  int FontDist = GUI_GetYDistOfFont(pObj->pFont);
  int ysize = WM__GetWindowSizeY(&pObj->Widget.Win);
  ysize -= 2*  pObj->Widget.pEffect->EffectSize;
  if (FontDist)
    return ysize  / FontDist;
  return 1;
}

/*********************************************************************
*
*       _GetNumItems

  Returns:
    Number of fully or partially visible items
*/
static int _GetNumItems(LISTBOX_Obj* pObj) {
  return pObj->NumItems;
}

/*********************************************************************
*
*       _GethItem

  Returns:
    Handle of the specified item
*/
static WM_HMEM _GethItem(LISTBOX_Obj* pObj, int Index) {
  WM_HMEM h = 0;
  if (Index < pObj->NumItems) {
    WM_HMEM  ha;
    WM_HMEM* pa;
    ha = pObj->haHandle;
    if (ha) {
      pa = (WM_HMEM*) WM_HMEM2Ptr(ha);
      h = *(pa + Index);
    }
  }
  return h;
}

/*********************************************************************
*
*       _GetpItem

  Returns:
    Pointer to the specified item
*/
static const char* _GetpItem(LISTBOX_Obj* pObj, int Index) {
  const char* s = NULL;
  WM_HMEM h = _GethItem(pObj, Index);
  if (h) {
    s = (const char*) WM_HMEM2Ptr(h);
  }
  return s;
}


static void _SetScrollState(WM_HWIN hWin) {
  LISTBOX_Obj* pObj    = LISTBOX_H2P(hWin);
  WIDGET__SetScrollState(hWin, &pObj->ScrollState, NULL);
}

static void _CalcScrollParas(WM_HWIN hWin) {
  LISTBOX_Obj* pObj    = LISTBOX_H2P(hWin);
  pObj->ScrollState.NumItems = _GetNumItems(pObj);
  pObj->ScrollState.PageSize = _GetNumVisItems(pObj);
}


static void _SetScroll(LISTBOX_Handle hObj, LISTBOX_Obj* pObj, int iScroll) {
  pObj->ScrollState.v = iScroll;
  _SetScrollState(hObj);
}

static void _CheckSel(LISTBOX_Handle hObj) {
  int Sel;
  LISTBOX_Obj* pObj = LISTBOX_H2P(hObj);
  Sel = pObj->Sel;
  /* Check if we have to scroll up */
  if (Sel < pObj->ScrollState.v) {
    _SetScroll(hObj, pObj, Sel);
  } else {
  /* Check if we have to scroll down */
    if (Sel > pObj->ScrollState.v + pObj->ScrollState.PageSize -1) {
      _SetScroll(hObj, pObj, Sel - (pObj->ScrollState.PageSize -1));
    }
  }   
}

static int _Tolower(int Key) {
  if ((Key >= 0x41) && (Key <= 0x5a)) {
    Key += 0x20;
  }
  return Key;
}

static void _SelectByKey(LISTBOX_Handle hObj, int Key) {
  int i;
  LISTBOX_Obj* pObj;
  pObj = LISTBOX_H2P(hObj);
  Key = _Tolower(Key);
  for (i = 0; i < _GetNumItems(pObj); i++) {
    char c = _Tolower(*_GetpItem(pObj, i));
    if (c == Key) {
      LISTBOX_SetSel(hObj, i);
      break;
    }
  }
}

/*********************************************************************
*
*       _Delete
*/
static void _FreeAttached(LISTBOX_Obj* pObj) {
  int i;
  WM_HMEM ha;
  WM_HMEM* pa;
  ha = pObj->haHandle;
  if (ha) {
    pa = (WM_HMEM*) WM_HMEM2Ptr(ha);
    /* Fre the attached strings, one at a time */
    for (i = 0; i < pObj->NumItems; i++) {
      WM_FREEPTR(pa+i);
    }
    /* Free the handle buffer */
    WM_FREEPTR(&pObj->haHandle);
  }
}


/*********************************************************************
*
*       _Paint
*/
static void _Paint(LISTBOX_Handle hObj) {
  int i;
  int Border;
  GUI_RECT r;
  int FontDistY;
  LISTBOX_Obj* pObj;
  int NumItems;
  pObj = LISTBOX_H2P(hObj);
  NumItems = _GetNumItems(pObj);
  Border = pObj->Widget.pEffect->EffectSize;
  GUI_SetFont(pObj->pFont);
  FontDistY = GUI_GetFontDistY();
  if (Border) {
    GUI_SetBkColor(pObj->aBackColor[0]);
    GUI_Clear();
  }
  /* Calculate rect used for painting (subtract border) */
  WM_GetClientRect(&r);
  r.x1 -= Border;
  r.y1 -= Border;
  r.y0 -= Border;
  WM_SetUserClipArea(&r);
  for (i = pObj->ScrollState.v; i < NumItems; i++) {
    const char* s;
    int y, ColorIndex;
    y = Border + (i - pObj->ScrollState.v) * FontDistY;
    s = _GetpItem(pObj, i);
    if (i == pObj->Sel) {
      ColorIndex = (pObj->Widget.State & WIDGET_STATE_FOCUS) ? 2 : 1;
    } else {
      ColorIndex = 0;
    }
    GUI_SetBkColor(pObj->aBackColor[ColorIndex]);
    GUI_SetColor  (pObj->aTextColor[ColorIndex]);
    GUI_ClearRect(Border, y, Border, y + FontDistY -1);
    GUI_DispStringAt(s, Border+1, y);
    GUI_DispCEOL();
  }
  WM_SetUserClipArea(NULL);
  /* Draw the 3D effect (if configured) */
  WIDGET__EFFECT_DrawDown(&pObj->Widget);
}

/*********************************************************************
*
*       _OnTouch
*/
static int _OnTouch(LISTBOX_Handle hObj, LISTBOX_Obj* pObj, WM_MESSAGE*pMsg) {
  int Notification;
  int Sel;
  GUI_TOUCH_tState* pState = (GUI_TOUCH_tState*)pMsg->Data.p;
  int FontDistY = GUI_GetYDistOfFont(pObj->pFont);
  if (pMsg->Data.p) {  /* Something happened in our area (pressed or released) */
    if (pState->Pressed) {
      Sel = pState->y / FontDistY + pObj->ScrollState.v; 
      WM_SetFocus(hObj);
      Notification = WM_NOTIFICATION_CLICKED;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
天天综合天天综合色| 久久久五月婷婷| 欧美性色黄大片| 精品理论电影在线| 亚洲欧洲在线观看av| 奇米在线7777在线精品| 白白色 亚洲乱淫| 日韩一区二区免费电影| 一区二区三区高清| 丁香另类激情小说| 精品久久久影院| 色婷婷激情综合| 亚洲高清免费在线| 久久久久久电影| 不卡在线视频中文字幕| 天天操天天色综合| av亚洲精华国产精华精华| 国产精品国产三级国产aⅴ中文 | 国产91精品入口| 色婷婷国产精品综合在线观看| 精品少妇一区二区三区视频免付费 | 在线看不卡av| 国产精品乱码人人做人人爱| 国产精品一二三四| 精品国产免费人成电影在线观看四季| 五月婷婷另类国产| 欧美日本视频在线| 亚洲电影一区二区| 欧美日本视频在线| 婷婷成人激情在线网| 欧美偷拍一区二区| 亚洲第四色夜色| 6080午夜不卡| 美腿丝袜亚洲一区| 日韩免费成人网| 老司机精品视频导航| 欧美一区二区播放| 免费高清在线视频一区·| 日韩精品一区二区三区三区免费| 美女网站在线免费欧美精品| 欧美白人最猛性xxxxx69交| 免费成人结看片| 久久久久久久久久久久久女国产乱| 美腿丝袜亚洲综合| 久久久蜜桃精品| 不卡一区在线观看| 亚洲国产一区二区在线播放| 欧美怡红院视频| 蜜桃久久久久久久| 久久久久久久国产精品影院| caoporm超碰国产精品| 亚洲综合在线免费观看| 欧美二区乱c少妇| 国产一区在线不卡| 日韩一区日韩二区| 欧美日韩成人综合在线一区二区| 另类的小说在线视频另类成人小视频在线| 日韩欧美一区电影| 福利一区二区在线| 亚洲大片免费看| 久久综合九色综合欧美亚洲| av电影在线观看一区| 亚洲第一狼人社区| 国产欧美视频在线观看| 日本电影亚洲天堂一区| 美女免费视频一区| 亚洲视频你懂的| 日韩欧美黄色影院| 99re这里都是精品| 美女网站在线免费欧美精品| 亚洲国产精品传媒在线观看| 欧美日韩aaaaa| 不卡av在线网| 久久精品国产色蜜蜜麻豆| 国产精品嫩草99a| 欧美日本在线视频| 99在线精品观看| 日本不卡高清视频| 亚洲天堂成人在线观看| 日韩久久久精品| 在线观看国产91| 成人精品小蝌蚪| 麻豆国产精品一区二区三区| 亚洲久本草在线中文字幕| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 久久一区二区视频| 欧美伊人久久大香线蕉综合69 | 91精品国产综合久久精品app| 国产69精品久久99不卡| 五月综合激情日本mⅴ| 亚洲欧洲日韩综合一区二区| 日韩精品一区二区三区在线观看| 99这里只有久久精品视频| 国产综合久久久久影院| 天天av天天翘天天综合网色鬼国产| 中文字幕制服丝袜一区二区三区| 精品国产免费人成电影在线观看四季| 在线观看国产一区二区| 91在线视频18| av网站免费线看精品| 国产精品正在播放| 久久99久久久久| 日韩电影在线一区| 午夜精品久久久久久久99水蜜桃 | 国产美女在线精品| 久久国产视频网| 青青国产91久久久久久| 丝袜诱惑亚洲看片| 午夜精品久久久久久久久久久 | 亚洲国产精品久久人人爱蜜臀| 国产精品久久久99| 欧美韩国一区二区| 国产日本欧洲亚洲| 国产日韩欧美在线一区| 国产日产精品1区| 欧美国产欧美亚州国产日韩mv天天看完整 | 国产精品久久二区二区| 国产精品美女久久久久高潮| 国产欧美一区二区精品性色 | 色婷婷精品大在线视频| 在线免费观看日本欧美| 欧美性色aⅴ视频一区日韩精品| 日本精品视频一区二区三区| 欧美在线三级电影| 欧美区一区二区三区| 日韩一级精品视频在线观看| 日韩午夜在线播放| 久久嫩草精品久久久久| 亚洲国产精品传媒在线观看| 国产精品第13页| 亚洲已满18点击进入久久| 亚洲一二三级电影| 美美哒免费高清在线观看视频一区二区 | 成人精品视频一区| 色成人在线视频| 欧美一区二区精美| 久久一区二区三区国产精品| 国产精品毛片无遮挡高清| 亚洲精品第1页| 蜜臀av性久久久久蜜臀aⅴ流畅| 狠狠色丁香婷综合久久| 成年人国产精品| 欧美日本精品一区二区三区| 精品嫩草影院久久| 中文字幕日本不卡| 婷婷综合五月天| 国产综合色在线视频区| 一本久久综合亚洲鲁鲁五月天| 欧美美女一区二区在线观看| 精品处破学生在线二十三| 日韩毛片在线免费观看| 免费观看91视频大全| av亚洲精华国产精华| 日韩一区二区三区电影| 亚洲欧美在线高清| 青青草91视频| 91香蕉视频污在线| 欧美成人性战久久| 亚洲黄色小说网站| 美国十次了思思久久精品导航| 99视频热这里只有精品免费| 91精品国产色综合久久ai换脸 | 色综合久久综合网97色综合 | 欧美日韩在线免费视频| 国产欧美一区二区精品忘忧草| 丝袜美腿高跟呻吟高潮一区| av在线不卡电影| 欧美大片国产精品| 亚洲一区二区视频在线观看| 国产乱国产乱300精品| 欧美丰满少妇xxxxx高潮对白| 亚洲欧美在线视频观看| 国产精品自在在线| 日韩一本二本av| 午夜久久久久久电影| 91亚洲精品乱码久久久久久蜜桃 | 亚洲电影中文字幕在线观看| 不卡一卡二卡三乱码免费网站| 精品国产乱码久久久久久蜜臀| 亚洲妇熟xx妇色黄| 色婷婷久久一区二区三区麻豆| 亚洲国产激情av| 九九精品一区二区| 日韩欧美一级特黄在线播放| 天天做天天摸天天爽国产一区| 91视频国产资源| 中文字幕中文在线不卡住| 高清国产一区二区| 国产欧美va欧美不卡在线| 激情综合网激情| 欧美成人性战久久| 久久av资源网| 精品国产百合女同互慰| 蜜臀久久99精品久久久久久9| 欧美日韩你懂得| 首页国产丝袜综合| 在线观看91av| 免费欧美在线视频| 日韩免费性生活视频播放| 蜜臀va亚洲va欧美va天堂 |