Initial community commit
This commit is contained in:
parent
537bcbc862
commit
fc06254474
16440 changed files with 4239995 additions and 2 deletions
197
Src/omBrowser/toolbarProgress.cpp
Normal file
197
Src/omBrowser/toolbarProgress.cpp
Normal file
|
@ -0,0 +1,197 @@
|
|||
#include "main.h"
|
||||
#include "./toolbarProgress.h"
|
||||
#include "./toolbar.h"
|
||||
#include "./graphics.h"
|
||||
#include "./resource.h"
|
||||
#include "../Plugins/General/gen_ml/ml_ipc_0313.h"
|
||||
#include "./ifc_imageloader.h"
|
||||
#include <strsafe.h>
|
||||
|
||||
#define PROGRESS_FRAMECOUNT 9
|
||||
|
||||
static ATOM TOOLBARPROGRESS_PROP = 0;
|
||||
#define TIMER_PROGRESSSTEP_ID 111
|
||||
#define TIMER_PROGRESSSTEP_INTERVAL 120
|
||||
|
||||
|
||||
ToolbarProgress::ToolbarProgress(LPCSTR pszName, UINT nStyle, LPCWSTR pszText, LPCWSTR pszDescription)
|
||||
: ToolbarItem(pszName, nStyle, ICON_NONE, pszText, pszDescription),
|
||||
bitmap(NULL), frame(0), hTimer(NULL)
|
||||
|
||||
{
|
||||
}
|
||||
|
||||
ToolbarProgress::~ToolbarProgress()
|
||||
{
|
||||
if (NULL != hTimer)
|
||||
Animate(hTimer, FALSE);
|
||||
|
||||
if (NULL != bitmap)
|
||||
DeleteObject(bitmap);
|
||||
}
|
||||
|
||||
static void CALLBACK ToolbarProgress_TimerElapsed(HWND hwnd, UINT uMsg, UINT_PTR eventId, DWORD dwTime)
|
||||
{
|
||||
ToolbarProgress *item = (ToolbarProgress*)GetProp(hwnd, MAKEINTATOM(TOOLBARPROGRESS_PROP));
|
||||
if (NULL == item || 0 != ((ToolbarItem::stateDisabled | ToolbarItem::stateHidden) & item->GetStyle()))
|
||||
{
|
||||
if (NULL != item)
|
||||
item->Animate(hwnd, FALSE);
|
||||
else
|
||||
KillTimer(hwnd, TIMER_PROGRESSSTEP_ID);
|
||||
return;
|
||||
}
|
||||
item->Animate(hwnd, TRUE);
|
||||
}
|
||||
|
||||
|
||||
ToolbarItem* CALLBACK ToolbarProgress::CreateInstance(ToolbarItem::Template *item)
|
||||
{
|
||||
if (NULL == item)
|
||||
return NULL;
|
||||
|
||||
return new ToolbarProgress( (NULL != item->name) ? item->name : TOOLCLS_PROGRESS,
|
||||
item->style | styleNoChevron,
|
||||
item->text,
|
||||
item->description);
|
||||
}
|
||||
|
||||
void ToolbarProgress::SetStyle(HWND hToolbar, UINT newStyle, UINT styleMask)
|
||||
{
|
||||
__super::SetStyle(hToolbar, newStyle, styleMask);
|
||||
|
||||
if (0 == ((stateDisabled | stateHidden) & style))
|
||||
{
|
||||
Animate(hToolbar, TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
BOOL ToolbarProgress::Animate(HWND hToolbar, BOOL fAnimate)
|
||||
{
|
||||
if (FALSE == fAnimate)
|
||||
{
|
||||
if (NULL != hTimer)
|
||||
{
|
||||
RemoveProp(hTimer, MAKEINTATOM(TOOLBARPROGRESS_PROP));
|
||||
KillTimer(hTimer, TIMER_PROGRESSSTEP_ID);
|
||||
hTimer = NULL;
|
||||
}
|
||||
|
||||
if (0 != frame)
|
||||
{
|
||||
frame = 0;
|
||||
InvalidateRect(hToolbar, &rect, FALSE);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
if (NULL == hTimer)
|
||||
{
|
||||
if (0 == TOOLBARPROGRESS_PROP)
|
||||
{
|
||||
TOOLBARPROGRESS_PROP = GlobalAddAtom(L"omToolbarProgressProp");
|
||||
if (0 == TOOLBARPROGRESS_PROP) return FALSE;
|
||||
}
|
||||
|
||||
if (!SetProp(hToolbar, MAKEINTATOM(TOOLBARPROGRESS_PROP), (HANDLE)this))
|
||||
return FALSE;
|
||||
|
||||
if (!SetTimer(hToolbar, TIMER_PROGRESSSTEP_ID, TIMER_PROGRESSSTEP_INTERVAL,
|
||||
ToolbarProgress_TimerElapsed))
|
||||
{
|
||||
RemoveProp(hToolbar, MAKEINTATOM(TOOLBARPROGRESS_PROP));
|
||||
return FALSE;
|
||||
|
||||
}
|
||||
hTimer = hToolbar;
|
||||
}
|
||||
|
||||
if (++frame >= PROGRESS_FRAMECOUNT)
|
||||
{
|
||||
frame = 1;
|
||||
}
|
||||
InvalidateRect(hToolbar, &rect, FALSE);
|
||||
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void ToolbarProgress::UpdateSkin(HWND hToolbar)
|
||||
{
|
||||
|
||||
if (NULL != bitmap)
|
||||
{
|
||||
DeleteObject(bitmap);
|
||||
bitmap = NULL;
|
||||
}
|
||||
|
||||
ifc_omimageloader *loader;
|
||||
|
||||
if (SUCCEEDED(Plugin_QueryImageLoader(Plugin_GetInstance(), MAKEINTRESOURCE(IDR_TOOLBARPROGRESS_IMAGE), TRUE, &loader)))
|
||||
{
|
||||
BITMAPINFOHEADER headerInfo;
|
||||
BYTE *pixelData;
|
||||
if (SUCCEEDED(loader->LoadBitmapEx(&bitmap, &headerInfo, (void**)&pixelData)))
|
||||
{
|
||||
if (headerInfo.biHeight < 0) headerInfo.biHeight = -headerInfo.biHeight;
|
||||
|
||||
Image_Colorize(pixelData, headerInfo.biWidth, headerInfo.biHeight, headerInfo.biBitCount,
|
||||
Toolbar_GetBkColor(hToolbar), Toolbar_GetFgColor(hToolbar), TRUE);
|
||||
}
|
||||
loader->Release();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
BOOL ToolbarProgress::AdjustRect(HWND hToolbar, RECT *proposedRect)
|
||||
{
|
||||
BITMAP bm;
|
||||
if (NULL == bitmap || sizeof(BITMAP) != GetObject(bitmap, sizeof(BITMAP), &bm))
|
||||
return FALSE;
|
||||
|
||||
if (bm.bmHeight < 0) bm.bmHeight = -bm.bmHeight;
|
||||
bm.bmHeight /= PROGRESS_FRAMECOUNT;
|
||||
proposedRect->right = proposedRect->left + bm.bmWidth;
|
||||
proposedRect->top += (((proposedRect->bottom - proposedRect->top) - bm.bmHeight)/2);
|
||||
proposedRect->bottom = proposedRect->top + bm.bmHeight;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL ToolbarProgress::Paint(HWND hToolbar, HDC hdc, const RECT *paintRect, UINT state)
|
||||
{
|
||||
BITMAP bm;
|
||||
if (NULL == bitmap || sizeof(BITMAP) != GetObject(bitmap, sizeof(BITMAP), &bm))
|
||||
return FALSE;
|
||||
|
||||
if (bm.bmHeight < 0) bm.bmHeight = -bm.bmHeight;
|
||||
bm.bmHeight /= PROGRESS_FRAMECOUNT;
|
||||
|
||||
RECT blitRect;
|
||||
if (!IntersectRect(&blitRect, paintRect))
|
||||
return TRUE;
|
||||
|
||||
BOOL success = FALSE;
|
||||
HDC hdcSrc = CreateCompatibleDC(hdc);
|
||||
|
||||
if (NULL != hdcSrc)
|
||||
{
|
||||
HBITMAP hbmpOld = (HBITMAP)SelectObject(hdcSrc, bitmap);
|
||||
|
||||
success = BitBlt(hdc, blitRect.left, blitRect.top,
|
||||
blitRect.right - blitRect.left, blitRect.bottom - blitRect.top,
|
||||
hdcSrc,
|
||||
blitRect.left - rect.left,
|
||||
bm.bmHeight * frame + (blitRect.top - rect.top),
|
||||
SRCCOPY);
|
||||
|
||||
SelectObject(hdcSrc, hbmpOld);
|
||||
DeleteDC(hdcSrc);
|
||||
}
|
||||
|
||||
return success;
|
||||
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue