⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 camwin_style2.c

📁 瑞星微公司RK27XX系列芯片的SDK开发包
💻 C
📖 第 1 页 / 共 3 页
字号:
    {

        AlphaDraw16bitBmpId(CAM_OSD_ROOTMENU_X, CAM_OSD_ROOTMENU_Y, BID_Cam_OSD_BG, NULL, DSPM_Transp );	/* 刷新一级菜单背景 */

        for (i=1; i<(menu->itemCnt); i++)           /* 整体一级菜单往右移一格 */
        {

            if (menu->curItem == i)
            {
                AlphaDraw16bitBmpId( CAM_OSD_ROOTMENU_ITEM_X+(i-1)*CAM_OSD_ROOTMENU_ITEM_W,
                                     CAM_OSD_ROOTMENU_ITEM_Y,BID_Cam_OSD_0_Pixel_0+i*2+eSelect,NULL, DSPM_Transp);

            }
            else
            {
                AlphaDraw16bitBmpId( CAM_OSD_ROOTMENU_ITEM_X+(i-1)*CAM_OSD_ROOTMENU_ITEM_W,
                                     CAM_OSD_ROOTMENU_ITEM_Y,BID_Cam_OSD_0_Pixel_0+i*2+eNoSelect,NULL, DSPM_Transp);

            }
        }

    }
    else
    {
        AlphaDraw16bitBmpId(CAM_OSD_ROOTMENU_X, CAM_OSD_ROOTMENU_Y, BID_Cam_OSD_BG, NULL, DSPM_Transp );	/* 刷新一级菜单背景 */
        for ( i=0; i<(menu->itemCnt-1); i++ )     /* 整体一级菜单往左移一格 */
        {
            if ( menu->curItem == i )
            {
                AlphaDraw16bitBmpId( CAM_OSD_ROOTMENU_ITEM_X+i*CAM_OSD_ROOTMENU_ITEM_W,
                                     CAM_OSD_ROOTMENU_ITEM_Y,BID_Cam_OSD_0_Pixel_0+i*2+eSelect,NULL, DSPM_Transp);

            }
            else
            {
                AlphaDraw16bitBmpId( CAM_OSD_ROOTMENU_ITEM_X+i*CAM_OSD_ROOTMENU_ITEM_W,
                                     CAM_OSD_ROOTMENU_ITEM_Y, BID_Cam_OSD_0_Pixel_0+i*2+eNoSelect,NULL, DSPM_Transp);

            }
        }

    }

}

/*----------------------------------------------------------
*Name  :  Cam_WinSubMenuUpdate
*Desc  :  二级菜单刷新
*Params:
*return:
-----------------------------------------------------------*/
void Cam_WinSubMenuUpdate( CAM_MENU * menu, BOOLEAN	          bFullUpdate )
{
    UHRECT rect;

    Cam_WinRootMenuUpdate(&gCamMenuRoot,FALSE);

    if ( gCamMenuRoot.curItem == eCamZoom ) //滚动条
    {
        if ( bFullUpdate )
        {

            AlphaDrawStringIdEx(CAM_OSD_SUBMENU_X, CAM_OSD_SUBMENU_Y, 100,SID_Cam_Pixel+gCamMenuRoot.curItem,Font16X16, &gCamStrColorSel,0);

            rect.x = CAM_OSD_SUBMENU_X2;
            rect.y = CAM_OSD_SUBMENU_Y+2;
            rect.w = 80;
            rect.h = 12;
            AlphaClearGui(&rect, 0XFFFF);

            rect.x = CAM_OSD_SUBMENU_X2;
            rect.y = CAM_OSD_SUBMENU_Y+2;
            rect.w = 20*menu->curItem;
            rect.h = 12;
            AlphaClearGui(&rect, 0XF800);
        }
        else		//列表项
        {

            rect.x = CAM_OSD_SUBMENU_X2;
            rect.y = CAM_OSD_SUBMENU_Y+2;
            rect.w = 80;
            rect.h = 12;
            AlphaClearGui(&rect, 0XFFFF);

            rect.x = CAM_OSD_SUBMENU_X2;
            rect.y = CAM_OSD_SUBMENU_Y+2;
            rect.w = 20*menu->curItem;
            rect.h = 12;
            AlphaClearGui(&rect, 0XF800);
        }
    }
    else
    {
        if ( bFullUpdate )
        {
            AlphaDrawStringIdEx(CAM_OSD_SUBMENU_X, CAM_OSD_SUBMENU_Y, 100,SID_Cam_Pixel+gCamMenuRoot.curItem,Font16X16, &gCamStrColorSel,0);
            AlphaDrawStringIdEx(CAM_OSD_SUBMENU_X2, CAM_OSD_SUBMENU_Y, 100,menu->menuItemsRes+menu->curItem,Font16X16, &gCamStrColorSel,0);
        }
        else
        {
            AlphaDrawStringIdEx(CAM_OSD_SUBMENU_X2, CAM_OSD_SUBMENU_Y, 100,menu->menuItemsRes+menu->curItem,Font16X16, &gCamStrColorSel,0);
        }
    }

}

/*****************************************************************************/
//OSD 窗口 相关接口

void Cam_WinOSDPaint(BOOLEAN ScnUpdate )
{
    if (gGuiAlphaLogicBuf == 0)
        return;

    AlphaDateChange();
    if (ScnUpdate == TRUE)
    {
        Screen_MCUUpDate();
    }
    return;
}

/*----------------------------------------------------------
*Name  :  Cam_WinDestroy
*Desc  :  camera 窗口的destroy消息处理函数
*Params:
*return:
-----------------------------------------------------------*/
UINT32  Cam_WinDestroy( WINDOW* win , WMPARAM wParam, WLPARAM lParam )
{
    //正在录制,则先退出dv
    if ((gCameraOsdCurState == eOSD_Dv) && (gCamera.State == Cam_Dving))
        Cam_WinDoKeyReturn(win);

    Cam_WinProcessStop();
    Cam_WinDialogDestroy(NULL);
    Cam_WinOSDDeInit();
    Cam_Deinit();    
    return WMPROC_UNHANDLE;
}

/*----------------------------------------------------------
*Name  :  Cam_WinTick
*Desc  :  camera 窗口的tick消息处理函数,此处主要是DV 扇动图标显示
*Params:
*return:
-----------------------------------------------------------*/
UINT32 Cam_WinTick( WINDOW* win , WMPARAM wParam, WLPARAM lParam )
{
    IdleProcResetAll();     /* 复位idle任务,避免被休眠 */
    return;
}
/*----------------------------------------------------------
*Name  :  Cam_WinUserMsg
*Desc  :  camera 窗口的WM_USER消息处理函数,此处主要是DV OSD退出操作
*Params:
*return:
-----------------------------------------------------------*/
UINT32 Cam_WinUserMsg( WINDOW* win , WMPARAM wParam, WLPARAM lParam )
{
    if ( (DV_RESULT == wParam) && (gCamera.State == Cam_Pause))	//dv 处理返回, 注意当USB插入时这个消息跑不到
    {
        Cam_WinProcessStop( );
        Cam_WinDrawTime(CAM_OSD_STATEBAR_DVTIME_X, CAM_OSD_STATEBAR_DVTIME_Y, 0 );
        AlphaDraw16bitBmpId(CAM_DV_STATEICON_X, CAM_DV_STATEICON_Y,BID_Cam_Dv_Stop,NULL,DSPM_Transp);//停止小图标
        Cam_WinDialog(gCamDv.dvResult, 1);
        Cam_PreviewStart(eSensor);
    }
}
/*----------------------------------------------------------
*Name  :  Cam_WinDoKeyUp
*Desc  :  up 键处理
*Params:
*return:
-----------------------------------------------------------*/
void Cam_WinDoKeyUp(void)
{
    if ( gCameraOsdCurState == eOSD_Setting )
        Cam_WinMenuKeyUp();
}

/*----------------------------------------------------------
*Name  :  Cam_WinDoKeyDown
*Desc  :  Down 键处理
*Params:
*return:
-----------------------------------------------------------*/
void Cam_WinDoKeyDown(void)
{
    if ( gCameraOsdCurState == eOSD_Setting )
        Cam_WinMenuKeyDown();
}

/*----------------------------------------------------------
*Name  :  Cam_WinDoKeyPre
*Desc  :  Pre 键处理
*Params:
*return:
-----------------------------------------------------------*/
void Cam_WinDoKeyPre(void)
{
    if ( gCameraOsdCurState == eOSD_Setting )
        Cam_WinMenuKeyPre();
    else if (( gCameraOsdCurState == eOSD_Dc ) && ( gCamera.State == Cam_Previewing) )
        Cam_WinOsdStateSwitch(eOSD_Dv);
    else if (( gCameraOsdCurState == eOSD_Dv ) && ( gCamera.State == Cam_Previewing) )	//DV状态下,只有IDLE才让转
        Cam_WinOsdStateSwitch(eOSD_Dc);
}

/*----------------------------------------------------------
*Name  :  Cam_WinDoKeyNext
*Desc  :  Next 键处理
*Params:
*return:
-----------------------------------------------------------*/
void Cam_WinDoKeyNext(void)
{
    if ( gCameraOsdCurState == eOSD_Setting )	//设置菜单下
        Cam_WinMenuKeyNext();
    else if (( gCameraOsdCurState == eOSD_Dc ) && ( gCamera.State == Cam_Previewing) )		//DC状态下
        Cam_WinOsdStateSwitch(eOSD_Dv);
    else if (( gCameraOsdCurState == eOSD_Dv ) && ( gCamera.State == Cam_Previewing) )	//DV状态下,只有IDLE才让转
        Cam_WinOsdStateSwitch(eOSD_Dc);
}

/*----------------------------------------------------------
*Name  :  Cam_WinDoKeyMenu
*Desc  :  Menu 键处理
*Params:
*return:
-----------------------------------------------------------*/
void Cam_WinDoKeyMenu(void)
{
    if ( (gCameraOsdCurState != eOSD_Setting) && (gCamera.State == Cam_Previewing)
            && (DialogTick == DIALOG_NOEXIST_FLAG))
    {
        Cam_WinOsdStateSwitch(eOSD_Setting);
    }
}

/*----------------------------------------------------------
*Name  :  Cam_WinDoKeyPlay
*Desc  :  Play 键处理
*Params:
*return:
-----------------------------------------------------------*/

void Cam_WinDoKeyPlay( WINDOW* win )
{
    int ret;

    if ( gCameraOsdCurState == eOSD_Dc )	//拍照
    {
        if ( (gCamera.State == Cam_Previewing) || (gCamera.State == Cam_Pause))
        {
            Cam_PreviewPause();					/*先停止preview*/
            Cam_WinProcessStart(CAM_PROCESSBAR_X,CAM_PROCESSBAR_Y);     /* 进度条显示 */
            DelayMs_nops(50);					        /*防止刷一半进入DC*/
            INPUT_DISABLE();
            ret = Cam_DcStart(eSensor);				/*启动DC操作*/
            INPUT_ENABLE();
            Cam_WinProcessStop( );
            Cam_WinDialog(ret,1);
            Timer_PowerOffDeinit(0);
#if (CAM_SENSOR)
            gCamera.sensorIf.Sensor_Set_Zoom(pgCameraConfig->zoom);   /*恢复preview*/
#endif
            Cam_PreviewStart(eSensor);
        }
    }
    else if ( gCameraOsdCurState == eOSD_Dv )
    {
        if ( (gCamera.State == Cam_Previewing) || (gCamera.State == Cam_Pause))
        {
            AlphaDraw16bitBmpId(CAM_DV_STATEICON_X, CAM_DV_STATEICON_Y, BID_Cam_Dv_Playing, NULL, DSPM_Transp);	//录制小图标
            Cam_PreviewPause();
            DelayMs_nops(50);		//防止刷一半进入DV

            Cam_WinProcessStart(CAM_PROCESSBAR_X,CAM_PROCESSBAR_Y);
            INPUT_DISABLE();
            ret = Cam_DvStart(eSensor);
            INPUT_ENABLE();
            Cam_WinProcessStop( );
            if ( ret != CAMRET_OK ) //空间不足
            {
                AlphaDraw16bitBmpId(CAM_DV_STATEICON_X, CAM_DV_STATEICON_Y, BID_Cam_Dv_Stop, NULL, DSPM_Transp);	//停止小图标
                Cam_WinDialog( ret, 2 ); 			//ret 错误同对话框类型定义一样,这里调用方便
                Cam_PreviewStart(eSensor);
            }
        }
        else if ( gCamera.State == Cam_Dving )
        {
            Cam_WinProcessStart(CAM_PROCESSBAR_X, CAM_PROCESSBAR_Y);
            AlphaDraw16bitBmpId(CAM_DV_STATEICON_X, CAM_DV_STATEICON_Y, BID_Cam_Dv_Stop, NULL, DSPM_Transp);	//停止小图标
            Cam_DvStop( );
            Cam_WinProcessStop( );
        }
    }
}

/*----------------------------------------------------------
*Name  :  Cam_WinDoKeyReturn
*Desc  :  Return 键处理
*Params:
*return:
-----------------------------------------------------------*/
void Cam_WinDoKeyReturn( WINDOW* win )
{
    if ( gCameraOsdCurState == eOSD_Setting )
    {
        Cam_WinOsdStateSwitch(eOSD_Dc);
    }
    else if ((gCameraOsdCurState == eOSD_Dv) && (gCamera.State == Cam_Dving))/* dvplaying 则停止dv */
    {
        WindowSendMessage( win, WM_KEY, KE_PLAY_RELEASE, NULL );
    }
    else
    {
        WindowDestroy(win);
    }
}
/*----------------------------------------------------------
*Name  :  Cam_WinKeyProc
*Desc  :  camera 窗口的按键消息处理函数
*Params:
*return:
-----------------------------------------------------------*/
UINT32  Cam_WinKeyProc( WINDOW* win , WMPARAM wParam, WLPARAM lParam )
{
    UINT16      keyPress = (UINT16)((wParam)>>16);
    UINT16      KEY_EV =(UINT16)(wParam);

    switch (KEY_EV)
    {
        case KE_PREV_LONGP:
        case KE_PREV_RELEASE:
            if (gCamera.State == Cam_Previewing)
            {
                Cam_WinDoKeyPre();
            }
            break;
        case KE_NEXT_LONGP:
        case KE_NEXT_RELEASE:
            if (gCamera.State == Cam_Previewing)
            {
                Cam_WinDoKeyNext();
            }
            break;
        case KE_DN_LONGP:
        case KE_DN_RELEASE:
            if (gCamera.State == Cam_Previewing)
            {
                Cam_WinDoKeyDown();
            }
            break;
        case KE_UP_LONGP:
        case KE_UP_RELEASE:
            if (gCamera.State == Cam_Previewing)
            {
                Cam_WinDoKeyUp();
            }
            break;
        case KE_MENU_RELEASE:
            if (gCamera.State == Cam_Previewing)
            {
                Cam_WinDoKeyMenu();
            }
            break;
        case KE_PLAY_RELEASE:
            Cam_WinDoKeyPlay(win);
            break;
        case KE_RETURN_RELEASE:
            Cam_WinDoKeyReturn(win);
            break;
        default:
            return FALSE;
    }
    Cam_WinOSDPaint(TRUE);
    return TRUE;
}

/* camera 主窗口消息处理列表 */
BEGIN_APPMESSAGE_MAP( CameraWinProcMap , CW_TYPE_Bmp)
ON_MESSAGE(WM_KEY, Cam_WinKeyProc)
ON_MESSAGE(WM_DESTROY, Cam_WinDestroy)
ON_MESSAGE(WM_TICK, Cam_WinTick)
ON_MESSAGE(WM_USER, Cam_WinUserMsg)
END_MESSAGE_MAP( )

#endif



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -