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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? 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;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人的网站免费观看| 欧美精品一区二区三区很污很色的| 欧美最新大片在线看| 欧美成人一区二区| 亚洲美女视频在线| 国产精品性做久久久久久| 欧美久久一二区| 一区二区三区在线观看视频| 国产一区二区在线电影| 欧美三级电影网| 自拍偷自拍亚洲精品播放| 国产一区日韩二区欧美三区| 欧美一区二区三区小说| 亚洲影视在线播放| 92精品国产成人观看免费| 欧美激情在线免费观看| 国产一区欧美日韩| 精品久久久三级丝袜| 日韩国产精品久久久久久亚洲| 成人av资源下载| 中文久久乱码一区二区| 国产激情91久久精品导航| 精品成人私密视频| 蜜臀av在线播放一区二区三区| 欧美日韩高清一区二区| 一区二区三区免费在线观看| 99精品久久99久久久久| 国产精品色呦呦| 成人性生交大片免费看中文| 国产无一区二区| 国产成人夜色高潮福利影视| 久久久高清一区二区三区| 久久精品国产99久久6| 日韩视频免费观看高清完整版在线观看| 亚洲成年人影院| 51精品国自产在线| 日本少妇一区二区| 日韩精品在线一区二区| 精品一区免费av| 久久综合久久综合亚洲| 国产成人免费在线观看| 中文字幕日韩av资源站| 91国产免费看| 日本中文字幕不卡| 久久午夜羞羞影院免费观看| 国产成人av一区二区三区在线观看| 久久久99免费| 99这里只有精品| 91女厕偷拍女厕偷拍高清| 国产亚洲成aⅴ人片在线观看| 国产乱子伦一区二区三区国色天香| 日韩午夜在线影院| 精品一区二区三区不卡| 欧美激情一区二区三区四区| 91在线观看高清| 日韩vs国产vs欧美| 久久精品视频网| av午夜一区麻豆| 亚洲成av人片一区二区梦乃| 精品日韩欧美在线| 91麻豆免费观看| 日韩电影在线免费看| 国产午夜精品久久| 欧美三级欧美一级| 国产一区二区在线看| 亚洲精品一二三| 日韩精品一区二区三区中文精品| 成人性生交大片免费看视频在线| 亚洲美女少妇撒尿| 精品国产免费视频| 在线观看网站黄不卡| 精品一区二区三区在线观看国产| 亚洲视频你懂的| 日韩精品一区二区三区swag| 91丨porny丨蝌蚪视频| 久久超级碰视频| 一区2区3区在线看| 国产婷婷一区二区| 在线播放中文字幕一区| av在线播放一区二区三区| 男女男精品网站| 亚洲欧美经典视频| 久久精品一区二区三区不卡| 欧美精品一卡二卡| 99视频超级精品| 国产九色精品成人porny| 亚洲地区一二三色| 中文字幕一区在线观看| 久久久久久免费网| 91精品国产一区二区人妖| 99re成人精品视频| 国产精品一区二区三区乱码| 奇米在线7777在线精品| 亚洲综合成人在线| 中文字幕欧美一区| 国产偷国产偷亚洲高清人白洁| 日韩一区二区麻豆国产| 欧美日韩一区小说| 91官网在线观看| 色综合久久88色综合天天免费| 国产福利91精品| 国产毛片精品视频| 韩国欧美一区二区| 青青草国产精品亚洲专区无| 亚洲国产综合色| 亚洲制服丝袜av| 一区二区三区影院| 18欧美亚洲精品| 国产精品乱人伦中文| 日本一区二区三区电影| 国产日韩影视精品| 久久亚洲捆绑美女| 久久精品男人天堂av| 国产性做久久久久久| 久久久久久久久久看片| 国产三区在线成人av| 国产区在线观看成人精品| 欧美高清在线一区二区| 国产精品理伦片| 日本一区二区高清| 国产精品另类一区| 国产精品麻豆久久久| 最新国产精品久久精品| 亚洲男女一区二区三区| 一区二区激情小说| 图片区小说区国产精品视频| 毛片不卡一区二区| 国产精品一线二线三线精华| 成人激情av网| 色94色欧美sute亚洲13| 欧美日韩一区视频| 欧美精品乱人伦久久久久久| 4438亚洲最大| 国产欧美一区二区三区鸳鸯浴| 国产精品视频第一区| 亚洲一级片在线观看| 青草国产精品久久久久久| 国产在线精品一区二区夜色| 成人h动漫精品一区二区| 欧美吻胸吃奶大尺度电影 | 亚洲午夜久久久久久久久电影院| 夜夜操天天操亚洲| 日韩高清在线电影| 国产成人精品免费网站| 色婷婷久久久综合中文字幕| 日韩一区二区中文字幕| 中文字幕不卡一区| 亚洲电影第三页| 国产精品一区二区91| 欧美亚洲一区二区在线| 日韩欧美综合在线| 最新不卡av在线| 日本不卡在线视频| 99热精品国产| 日韩美女一区二区三区| 一区二区中文视频| 久久精品国产精品亚洲红杏| 一本久久a久久精品亚洲| 精品少妇一区二区| 亚洲欧美成人一区二区三区| 国产一区二区视频在线播放| 在线中文字幕一区| 欧美国产成人在线| 日韩av一二三| 在线观看亚洲精品| 国产农村妇女毛片精品久久麻豆 | 亚洲日穴在线视频| 国模无码大尺度一区二区三区| 95精品视频在线| 精品日韩成人av| 亚洲成人av中文| www..com久久爱| 久久蜜桃av一区二区天堂 | 懂色av一区二区在线播放| 欧美一卡二卡在线| 亚洲欧美区自拍先锋| 国产一区二区成人久久免费影院 | 夜夜嗨av一区二区三区网页| 国产一区二区三区在线看麻豆| 欧美久久久久久蜜桃| 亚洲黄网站在线观看| 9久草视频在线视频精品| 久久精品男人的天堂| 蜜桃av一区二区| 欧美一区二视频| 视频在线观看一区| 欧美日韩免费在线视频| 亚洲精品国产视频| 97久久精品人人爽人人爽蜜臀| 亚洲国产高清aⅴ视频| 国产传媒日韩欧美成人| 久久久精品欧美丰满| 国产尤物一区二区在线| 亚洲精品一区二区三区99| 麻豆91免费看| 精品久久久久久无| 久久精品国内一区二区三区| 日韩一级在线观看| 秋霞av亚洲一区二区三| 日韩西西人体444www|