diff --git a/rainbow/Framebuffer/After.h b/rainbow/Framebuffer/After.h index d044658fd..50f60524d 100644 --- a/rainbow/Framebuffer/After.h +++ b/rainbow/Framebuffer/After.h @@ -4,24 +4,6 @@ public: ~ViewDraw(); }; -Vector& coreCmdLine__(); -Vector SplitCmdLine__(const char *cmd); - -#define GUI_APP_MAIN \ -void GuiMainFn_();\ -\ -int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR lpCmdLine, int nCmdShow) \ -{ \ - UPP::coreCmdLine__() = UPP::SplitCmdLine__(UPP::FromSystemCharset(lpCmdLine)); \ - UPP::AppInitEnvironment__(); \ - GuiMainFn_(); \ - UPP::Ctrl::CloseTopCtrls(); \ - UPP::UsrLog("---------- About to delete this log..."); \ - UPP::DeleteUsrLog(); \ - return UPP::GetExitCode(); \ -} \ -\ -void GuiMainFn_() - - class DHCtrl : Ctrl {}; + +void InitFB(); diff --git a/rainbow/Framebuffer/ChSysInit.cpp b/rainbow/Framebuffer/ChSysInit.cpp index 3f0c09a0f..1c4c8e266 100644 --- a/rainbow/Framebuffer/ChSysInit.cpp +++ b/rainbow/Framebuffer/ChSysInit.cpp @@ -1,6 +1,6 @@ #include -#ifdef GUI_EMPTY +#ifdef GUI_FB NAMESPACE_UPP diff --git a/rainbow/Framebuffer/Clip.cpp b/rainbow/Framebuffer/Clip.cpp index 50707b977..01d84192b 100644 --- a/rainbow/Framebuffer/Clip.cpp +++ b/rainbow/Framebuffer/Clip.cpp @@ -1,7 +1,7 @@ #include #include -#ifdef GUI_EMPTY +#ifdef GUI_FB NAMESPACE_UPP diff --git a/rainbow/Framebuffer/Ctrl.cpp b/rainbow/Framebuffer/Ctrl.cpp index 9875d2277..f4b2d6a09 100644 --- a/rainbow/Framebuffer/Ctrl.cpp +++ b/rainbow/Framebuffer/Ctrl.cpp @@ -1,6 +1,6 @@ #include -#ifdef GUI_EMPTY +#ifdef GUI_FB #define LLOG(x) // DLOG(x) diff --git a/rainbow/Framebuffer/Ctrl.h b/rainbow/Framebuffer/Ctrl.h index cd2112445..b2e23a325 100644 --- a/rainbow/Framebuffer/Ctrl.h +++ b/rainbow/Framebuffer/Ctrl.h @@ -1,3 +1,5 @@ //$ class Ctrl { - +public: + static void InitFB(); + static void DoMouseFB(int event, Point p, int zdelta = 0); //$ }; diff --git a/rainbow/Framebuffer/DnD.cpp b/rainbow/Framebuffer/DnD.cpp index 50543fea8..955e6b486 100644 --- a/rainbow/Framebuffer/DnD.cpp +++ b/rainbow/Framebuffer/DnD.cpp @@ -1,6 +1,6 @@ #include -#ifdef GUI_EMPTY +#ifdef GUI_FB NAMESPACE_UPP diff --git a/rainbow/Framebuffer/Draw.cpp b/rainbow/Framebuffer/Draw.cpp index 22b14cfd0..fdcbf972c 100644 --- a/rainbow/Framebuffer/Draw.cpp +++ b/rainbow/Framebuffer/Draw.cpp @@ -1,6 +1,6 @@ #include -#ifdef GUI_EMPTY +#ifdef GUI_FB NAMESPACE_UPP diff --git a/rainbow/Framebuffer/DrawOp.cpp b/rainbow/Framebuffer/DrawOp.cpp index b47cebaa4..ed58a5889 100644 --- a/rainbow/Framebuffer/DrawOp.cpp +++ b/rainbow/Framebuffer/DrawOp.cpp @@ -1,6 +1,6 @@ #include -#ifdef GUI_EMPTY +#ifdef GUI_FB NAMESPACE_UPP diff --git a/rainbow/Framebuffer/DrawText.cpp b/rainbow/Framebuffer/DrawText.cpp index b90cb7e94..1c16c67da 100644 --- a/rainbow/Framebuffer/DrawText.cpp +++ b/rainbow/Framebuffer/DrawText.cpp @@ -1,6 +1,6 @@ #include -#ifdef GUI_EMPTY +#ifdef GUI_FB NAMESPACE_UPP diff --git a/rainbow/Framebuffer/Event.cpp b/rainbow/Framebuffer/Event.cpp new file mode 100644 index 000000000..7b456b7f9 --- /dev/null +++ b/rainbow/Framebuffer/Event.cpp @@ -0,0 +1,20 @@ +#include + +NAMESPACE_UPP + +void Ctrl::DoMouseFB(int event, Point p, int zdelta) +{ + int a = event & Ctrl::ACTION; +// if(a == DOWN) +// ClickActivateWnd(); + if(a == Ctrl::UP && Ctrl::ignoreclick) + EndIgnore(); + else + if(a != Ctrl::DOWN || !ignoreclick) + LOG("Mouse " << p << ' ' << zdelta); +// if(_this) PostInput(); +// if(a == Ctrl::MOUSEMOVE) +// DoCursorShape(); +} + +END_UPP_NAMESPACE diff --git a/rainbow/Framebuffer/Skeleton.h b/rainbow/Framebuffer/Framebuffer.h similarity index 89% rename from rainbow/Framebuffer/Skeleton.h rename to rainbow/Framebuffer/Framebuffer.h index e6012605f..2eda5f446 100644 --- a/rainbow/Framebuffer/Skeleton.h +++ b/rainbow/Framebuffer/Framebuffer.h @@ -1,4 +1,4 @@ -#define GUI_FRAMEBUFFER +#define GUI_FB NAMESPACE_UPP @@ -91,15 +91,24 @@ public: void DrawDragRect(SystemDraw& w, const Rect& rect1, const Rect& rect2, const Rect& clip, int n, Color color, uint64 pattern); -#define GUIPLATFORM_KEYCODES_INCLUDE +#define GUIPLATFORM_KEYCODES_INCLUDE #define GUIPLATFORM_CTRL_TOP_DECLS -#define GUIPLATFORM_CTRL_DECLS_INCLUDE +#define GUIPLATFORM_CTRL_DECLS_INCLUDE #define GUIPLATFORM_PASTECLIP_DECLS -#define GUIPLATFORM_TOPWINDOW_DECLS_INCLUDE +#define GUIPLATFORM_TOPWINDOW_DECLS_INCLUDE + +// to be implemented by final FB { + +bool FBIsWaitingEvent(); +bool FBProcessEvent(bool *quit); +void FBSleep(int ms); +bool FBEndSession(); + +// } class PrinterJob { NilDraw nil; diff --git a/rainbow/Framebuffer/Framebuffer.upp b/rainbow/Framebuffer/Framebuffer.upp index 59b6457ff..f55288e49 100644 --- a/rainbow/Framebuffer/Framebuffer.upp +++ b/rainbow/Framebuffer/Framebuffer.upp @@ -1,7 +1,7 @@ description "Generic framebuffer GUI rainbow\377"; file - Skeleton.h, + Framebuffer.h, After.h, Keys.h, DrawOp.cpp, @@ -12,7 +12,7 @@ file Ctrl.h, Ctrl.cpp, Wnd.cpp, - Proc.cpp, + Event.cpp, Top.h, Top.cpp, Clip.cpp, diff --git a/rainbow/Framebuffer/Gui.h b/rainbow/Framebuffer/Gui.h index 057406baa..b99463c69 100644 --- a/rainbow/Framebuffer/Gui.h +++ b/rainbow/Framebuffer/Gui.h @@ -1,4 +1,4 @@ -#define GUI_EMPTY +#define GUI_FB NAMESPACE_UPP diff --git a/rainbow/Framebuffer/Image.cpp b/rainbow/Framebuffer/Image.cpp index efe04e4ae..92d77dd82 100644 --- a/rainbow/Framebuffer/Image.cpp +++ b/rainbow/Framebuffer/Image.cpp @@ -1,6 +1,6 @@ #include -#ifdef GUI_EMPTY +#ifdef GUI_FB #include diff --git a/rainbow/Framebuffer/Proc.cpp b/rainbow/Framebuffer/Proc.cpp deleted file mode 100644 index 242a3810e..000000000 --- a/rainbow/Framebuffer/Proc.cpp +++ /dev/null @@ -1,24 +0,0 @@ -#include - -#ifdef GUI_EMPTY - -#include - -//#include "imm.h" - -NAMESPACE_UPP - -#define LLOG(x) // LOG(x) - -bool GetShift() { return false; } -bool GetCtrl() { return false; } -bool GetAlt() { return false; } -bool GetCapsLock() { return false; } -bool GetMouseLeft() { return false; } -bool GetMouseRight() { return false; } -bool GetMouseMiddle() { return false; } -Point GetMousePos() { return Point(0, 0); } - -END_UPP_NAMESPACE - -#endif diff --git a/rainbow/Framebuffer/Top.cpp b/rainbow/Framebuffer/Top.cpp index ed61fcbc2..6eeb73267 100644 --- a/rainbow/Framebuffer/Top.cpp +++ b/rainbow/Framebuffer/Top.cpp @@ -1,6 +1,6 @@ #include -#ifdef GUI_EMPTY +#ifdef GUI_FB NAMESPACE_UPP diff --git a/rainbow/Framebuffer/Util.cpp b/rainbow/Framebuffer/Util.cpp index 47f1a6c16..a1f9e4c63 100644 --- a/rainbow/Framebuffer/Util.cpp +++ b/rainbow/Framebuffer/Util.cpp @@ -1,6 +1,6 @@ #include -#ifdef GUI_EMPTY +#ifdef GUI_FB NAMESPACE_UPP diff --git a/rainbow/Framebuffer/Wnd.cpp b/rainbow/Framebuffer/Wnd.cpp index 4d25056ae..c3f69af64 100644 --- a/rainbow/Framebuffer/Wnd.cpp +++ b/rainbow/Framebuffer/Wnd.cpp @@ -1,6 +1,6 @@ #include -#ifdef GUI_EMPTY +#ifdef GUI_FB NAMESPACE_UPP @@ -14,6 +14,11 @@ NAMESPACE_UPP #define ELOGW(x) // RLOG(GetSysTime() << ": " << x) // Only activate in MT! #define ELOG(x) // RLOG(GetSysTime() << ": " << x) +void Ctrl::InitFB() +{ + Ctrl::InitTimer(); +} + bool Ctrl::IsAlphaSupported() { return false; @@ -81,35 +86,43 @@ void Ctrl::UnregisterSystemHotKey(int id) bool Ctrl::IsWaitingEvent() { - return false; + return FBIsWaitingEvent(); } bool Ctrl::ProcessEvent(bool *quit) { ASSERT(IsMainThread()); + if(DoCall()) + return false; + if(FBEndSession()) + return false; + if(!GetMouseLeft() && !GetMouseRight() && !GetMouseMiddle()) + ReleaseCtrlCapture(); + if(FBProcessEvent(quit)) { + DefferedFocusSync(); + SyncCaret(); + return true; + } return false; } -void SweepMkImageCache(); - bool Ctrl::ProcessEvents(bool *quit) { -/* if(ProcessEvent(quit)) { + if(ProcessEvent(quit)) { while(ProcessEvent(quit) && (!LoopCtrl || LoopCtrl->InLoop())); // LoopCtrl-MF 071008 TimerProc(GetTickCount()); SweepMkImageCache(); return true; } SweepMkImageCache(); - TimerProc(GetTickCount());*/ + TimerProc(GetTickCount()); return false; } - void Ctrl::EventLoop0(Ctrl *ctrl) { GuiLock __; -/* ASSERT(IsMainThread()); + ASSERT(IsMainThread()); ASSERT(LoopLevel == 0 || ctrl); LoopLevel++; LLOG("Entering event loop at level " << LoopLevel << BeginIndent); @@ -122,12 +135,12 @@ void Ctrl::EventLoop0(Ctrl *ctrl) bool quit = false; ProcessEvents(&quit); - while(!EndSession() && !quit && ctrl ? ctrl->IsOpen() && ctrl->InLoop() : GetTopCtrls().GetCount()) + while(!FBEndSession() && !quit && ctrl ? ctrl->IsOpen() && ctrl->InLoop() : GetTopCtrls().GetCount()) { // LLOG(GetSysTime() << " % " << (unsigned)msecs() % 10000 << ": EventLoop / GuiSleep"); SyncCaret(); GuiSleep(1000); - if(EndSession()) break; + if(FBEndSession()) break; // LLOG(GetSysTime() << " % " << (unsigned)msecs() % 10000 << ": EventLoop / ProcessEvents"); ProcessEvents(&quit); // LLOG(GetSysTime() << " % " << (unsigned)msecs() % 10000 << ": EventLoop / after ProcessEvents"); @@ -136,33 +149,20 @@ void Ctrl::EventLoop0(Ctrl *ctrl) if(ctrl) LoopCtrl = ploop; LoopLevel--; - LLOG(EndIndent << "Leaving event loop ");*/ + LLOG(EndIndent << "Leaving event loop "); } void Ctrl::GuiSleep0(int ms) { GuiLock __; -/* ASSERT(IsMainThread()); + ASSERT(IsMainThread()); ELOG("GuiSleep"); - if(EndSession()) + if(FBEndSession()) return; ELOG("GuiSleep 2"); int level = LeaveGMutexAll(); -#if !defined(flagDLL) && !defined(PLATFORM_WINCE) - if(!OverwatchThread) { - DWORD dummy; - OverwatchThread = CreateThread(NULL, 0x100000, Win32OverwatchThread, NULL, 0, &dummy); - ELOG("ExitLoopEventWait 1"); - ExitLoopEvent.Wait(); - } - HANDLE h[1]; - *h = ExitLoopEvent.GetHandle(); - ELOG("ExitLoopEventWait 2 " << (void *)*h); - MsgWaitForMultipleObjects(1, h, FALSE, ms, QS_ALLINPUT); -#else - MsgWaitForMultipleObjects(0, NULL, FALSE, ms, QS_ALLINPUT); -#endif - EnterGMutex(level);*/ + FBSleep(ms); + EnterGMutex(level); } Rect Ctrl::GetWndUpdateRect() const diff --git a/rainbow/Framebuffer/init b/rainbow/Framebuffer/init index c9a3a82a2..f72944eac 100644 --- a/rainbow/Framebuffer/init +++ b/rainbow/Framebuffer/init @@ -1,3 +1,3 @@ -#ifndef _Skeleton_icpp_init_stub -#define _Skeleton_icpp_init_stub +#ifndef _Framebuffer_icpp_init_stub +#define _Framebuffer_icpp_init_stub #endif diff --git a/rainbow/Paint/Paint.upp b/rainbow/Paint/Paint.upp index 8bb8821dc..2f97685fc 100644 --- a/rainbow/Paint/Paint.upp +++ b/rainbow/Paint/Paint.upp @@ -2,7 +2,8 @@ description "Paint method and Draw example\377"; uses CtrlLib, - Framebuffer; + Framebuffer, + WinFb; file Draw.cpp; diff --git a/rainbow/Paint/init b/rainbow/Paint/init index 7f24ec221..c1804d3d3 100644 --- a/rainbow/Paint/init +++ b/rainbow/Paint/init @@ -2,4 +2,5 @@ #define _Paint_icpp_init_stub #include "CtrlLib/init" #include "Framebuffer/init" +#include "WinFb/init" #endif diff --git a/rainbow/Skeleton/ChSysInit.cpp b/rainbow/Skeleton/ChSysInit.cpp index 3f0c09a0f..4bfbe1898 100644 --- a/rainbow/Skeleton/ChSysInit.cpp +++ b/rainbow/Skeleton/ChSysInit.cpp @@ -1,6 +1,6 @@ #include -#ifdef GUI_EMPTY +#ifdef GUI_SKELETON NAMESPACE_UPP diff --git a/rainbow/Skeleton/Clip.cpp b/rainbow/Skeleton/Clip.cpp index 50707b977..8eb5c257e 100644 --- a/rainbow/Skeleton/Clip.cpp +++ b/rainbow/Skeleton/Clip.cpp @@ -1,7 +1,7 @@ #include #include -#ifdef GUI_EMPTY +#ifdef GUI_SKELETON NAMESPACE_UPP diff --git a/rainbow/Skeleton/Ctrl.cpp b/rainbow/Skeleton/Ctrl.cpp index 9875d2277..6838d5574 100644 --- a/rainbow/Skeleton/Ctrl.cpp +++ b/rainbow/Skeleton/Ctrl.cpp @@ -1,6 +1,6 @@ #include -#ifdef GUI_EMPTY +#ifdef GUI_SKELETON #define LLOG(x) // DLOG(x) diff --git a/rainbow/Skeleton/DnD.cpp b/rainbow/Skeleton/DnD.cpp index 50543fea8..23c13d487 100644 --- a/rainbow/Skeleton/DnD.cpp +++ b/rainbow/Skeleton/DnD.cpp @@ -1,6 +1,6 @@ #include -#ifdef GUI_EMPTY +#ifdef GUI_SKELETON NAMESPACE_UPP diff --git a/rainbow/Skeleton/Draw.cpp b/rainbow/Skeleton/Draw.cpp index 22b14cfd0..14b487a5a 100644 --- a/rainbow/Skeleton/Draw.cpp +++ b/rainbow/Skeleton/Draw.cpp @@ -1,6 +1,6 @@ #include -#ifdef GUI_EMPTY +#ifdef GUI_SKELETON NAMESPACE_UPP diff --git a/rainbow/Skeleton/DrawOp.cpp b/rainbow/Skeleton/DrawOp.cpp index b47cebaa4..fe4ab186b 100644 --- a/rainbow/Skeleton/DrawOp.cpp +++ b/rainbow/Skeleton/DrawOp.cpp @@ -1,6 +1,6 @@ #include -#ifdef GUI_EMPTY +#ifdef GUI_SKELETON NAMESPACE_UPP diff --git a/rainbow/Skeleton/DrawText.cpp b/rainbow/Skeleton/DrawText.cpp index b90cb7e94..058400c05 100644 --- a/rainbow/Skeleton/DrawText.cpp +++ b/rainbow/Skeleton/DrawText.cpp @@ -1,6 +1,6 @@ #include -#ifdef GUI_EMPTY +#ifdef GUI_SKELETON NAMESPACE_UPP diff --git a/rainbow/Skeleton/Gui.h b/rainbow/Skeleton/Gui.h index 057406baa..2070bdbec 100644 --- a/rainbow/Skeleton/Gui.h +++ b/rainbow/Skeleton/Gui.h @@ -1,4 +1,4 @@ -#define GUI_EMPTY +#define GUI_SKELETON NAMESPACE_UPP diff --git a/rainbow/Skeleton/Image.cpp b/rainbow/Skeleton/Image.cpp index efe04e4ae..cc16661fa 100644 --- a/rainbow/Skeleton/Image.cpp +++ b/rainbow/Skeleton/Image.cpp @@ -1,6 +1,6 @@ #include -#ifdef GUI_EMPTY +#ifdef GUI_SKELETON #include diff --git a/rainbow/Skeleton/Proc.cpp b/rainbow/Skeleton/Proc.cpp index 242a3810e..ea09609d4 100644 --- a/rainbow/Skeleton/Proc.cpp +++ b/rainbow/Skeleton/Proc.cpp @@ -1,6 +1,6 @@ #include -#ifdef GUI_EMPTY +#ifdef GUI_SKELETON #include diff --git a/rainbow/Skeleton/Skeleton.h b/rainbow/Skeleton/Skeleton.h index 1bc8332df..fb4f030e7 100644 --- a/rainbow/Skeleton/Skeleton.h +++ b/rainbow/Skeleton/Skeleton.h @@ -1,4 +1,4 @@ -#define GUI_EMPTY +#define GUI_SKELETON NAMESPACE_UPP diff --git a/rainbow/Skeleton/Top.cpp b/rainbow/Skeleton/Top.cpp index ed61fcbc2..d84de934c 100644 --- a/rainbow/Skeleton/Top.cpp +++ b/rainbow/Skeleton/Top.cpp @@ -1,6 +1,6 @@ #include -#ifdef GUI_EMPTY +#ifdef GUI_SKELETON NAMESPACE_UPP diff --git a/rainbow/Skeleton/Util.cpp b/rainbow/Skeleton/Util.cpp index 47f1a6c16..1ede98214 100644 --- a/rainbow/Skeleton/Util.cpp +++ b/rainbow/Skeleton/Util.cpp @@ -1,6 +1,6 @@ #include -#ifdef GUI_EMPTY +#ifdef GUI_SKELETON NAMESPACE_UPP diff --git a/rainbow/Skeleton/Wnd.cpp b/rainbow/Skeleton/Wnd.cpp index 4d25056ae..408893b70 100644 --- a/rainbow/Skeleton/Wnd.cpp +++ b/rainbow/Skeleton/Wnd.cpp @@ -1,6 +1,6 @@ #include -#ifdef GUI_EMPTY +#ifdef GUI_SKELETON NAMESPACE_UPP diff --git a/rainbow/WinFb/Proc.cpp b/rainbow/WinFb/Proc.cpp new file mode 100644 index 000000000..fcd9572f3 --- /dev/null +++ b/rainbow/WinFb/Proc.cpp @@ -0,0 +1,164 @@ +#include "WinFb.h" + +NAMESPACE_UPP + +bool GetShift() { return !!(GetKeyState(VK_SHIFT) & 0x8000); } +bool GetCtrl() { return !!(GetKeyState(VK_CONTROL) & 0x8000); } +bool GetAlt() { return !!(GetKeyState(VK_MENU) & 0x8000); } +bool GetCapsLock() { return !!(GetKeyState(VK_CAPITAL) & 1); } +bool GetMouseLeft() { return !!(GetKeyState(VK_LBUTTON) & 0x8000); } +bool GetMouseRight() { return !!(GetKeyState(VK_RBUTTON) & 0x8000); } +bool GetMouseMiddle() { return !!(GetKeyState(VK_MBUTTON) & 0x8000); } + +LRESULT CALLBACK fbWindowProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) +{ + GuiLock __; +// LLOG("Ctrl::WindowProc(" << message << ") in " << ::Name(this) << ", focus " << (void *)::GetFocus()); + switch(message) { + case WM_PAINT: + ASSERT(hwnd); + if(hwnd) { + PAINTSTRUCT ps; + HDC dc = BeginPaint(hwnd, &ps); +/* + SystemDraw draw(dc); + #ifndef PLATFORM_WINCE + HPALETTE hOldPal; + if(draw.PaletteMode() && SystemDraw::AutoPalette()) { + hOldPal = SelectPalette(dc, GetQlibPalette(), TRUE); + int n = RealizePalette(dc); + LLOG("In paint realized " << n << " colors"); + } + #endif + painting = true; + UpdateArea(draw, Rect(ps.rcPaint)); + painting = false; + #ifndef PLATFORM_WINCE + if(draw.PaletteMode() && SystemDraw::AutoPalette()) + SelectPalette(dc, hOldPal, TRUE); + #endif +*/ + EndPaint(hwnd, &ps); + } + return 0L; + case WM_LBUTTONDOWN: + Ctrl::DoMouseFB(Ctrl::LEFTDOWN, Point((dword)lParam)); + return 0L; + case WM_LBUTTONUP: + Ctrl::DoMouseFB(Ctrl::LEFTUP, Point((dword)lParam)); + return 0L; + case WM_LBUTTONDBLCLK: + Ctrl::DoMouseFB(Ctrl::LEFTDOUBLE, Point((dword)lParam)); + return 0L; + case WM_RBUTTONDOWN: + Ctrl::DoMouseFB(Ctrl::RIGHTDOWN, Point((dword)lParam)); + return 0L; + case WM_RBUTTONUP: + Ctrl::DoMouseFB(Ctrl::RIGHTUP, Point((dword)lParam)); + return 0L; + case WM_RBUTTONDBLCLK: + Ctrl::DoMouseFB(Ctrl::RIGHTDOUBLE, Point((dword)lParam)); + return 0L; + case WM_MBUTTONDOWN: + Ctrl::DoMouseFB(Ctrl::MIDDLEDOWN, Point((dword)lParam)); + return 0L; + case WM_MBUTTONUP: + Ctrl::DoMouseFB(Ctrl::MIDDLEUP, Point((dword)lParam)); + return 0L; + case WM_MBUTTONDBLCLK: + Ctrl::DoMouseFB(Ctrl::MIDDLEDOUBLE, Point((dword)lParam)); + return 0L; + case WM_MOUSEMOVE: + Ctrl::DoMouseFB(Ctrl::MOUSEMOVE, Point((dword)lParam)); + return 0L; + case 0x20a: // WM_MOUSEWHEEL: + Ctrl::DoMouseFB(Ctrl::MOUSEWHEEL, Point((dword)lParam), (short)HIWORD(wParam)); + return 0L; + case WM_SETCURSOR: + SetCursor(NULL); + break; +// case WM_MENUCHAR: +// return MAKELONG(0, MNC_SELECT); + case WM_KEYDOWN: + case WM_SYSKEYDOWN: + case WM_CHAR: +// ignorekeyup = false; + case WM_KEYUP: + case WM_SYSKEYUP: + { +#if 0 + String msgdump; + switch(message) + { + case WM_KEYDOWN: msgdump << "WM_KEYDOWN"; break; + case WM_KEYUP: msgdump << "WM_KEYUP"; break; + case WM_SYSKEYDOWN: msgdump << "WM_SYSKEYDOWN"; break; + case WM_SYSKEYUP: msgdump << "WM_SYSKEYUP"; break; + case WM_CHAR: msgdump << "WM_CHAR"; break; + } + msgdump << " wParam = 0x" << FormatIntHex(wParam, 8) + << ", lParam = 0x" << FormatIntHex(lParam, 8) + << ", ignorekeyup = " << (ignorekeyup ? "true" : "false"); + LLOG(msgdump); + dword keycode = 0; + if(message == WM_KEYDOWN) { + keycode = KEYtoK((dword)wParam); + if(keycode == K_SPACE) + keycode = 0; + } + else + if(message == WM_KEYUP) + keycode = KEYtoK((dword)wParam) | K_KEYUP; + else + if(message == WM_SYSKEYDOWN /*&& ((lParam & 0x20000000) || wParam == VK_F10)*/) + keycode = KEYtoK((dword)wParam); + else + if(message == WM_SYSKEYUP /*&& ((lParam & 0x20000000) || wParam == VK_F10)*/) + keycode = KEYtoK((dword)wParam) | K_KEYUP; + else + if(message == WM_CHAR && wParam != 127 && wParam > 32 || wParam == 32 && KEYtoK(VK_SPACE) == K_SPACE) { +#ifdef PLATFORM_WINCE + keycode = wParam; +#else + if(IsWindowUnicode(hwnd)) // TRC 04/10/17: ActiveX Unicode patch + keycode = (dword)wParam; + else { + char b[20]; + ::GetLocaleInfo(MAKELCID(LOWORD(GetKeyboardLayout(0)), SORT_DEFAULT), + LOCALE_IDEFAULTANSICODEPAGE, b, 20); + int codepage = atoi(b); + if(codepage >= 1250 && codepage <= 1258) + keycode = ToUnicode((dword)wParam, codepage - 1250 + CHARSET_WIN1250); + else + keycode = (dword)wParam; + } +#endif + } + bool b = false; + if(keycode) { + b = DispatchKey(keycode, LOWORD(lParam)); + SyncCaret(); + if(_this) PostInput(); + } +// LOG("key processed = " << b); + if(b || (message == WM_SYSKEYDOWN || message == WM_SYSKEYUP) + && wParam != VK_F4 && !PassWindowsKey((dword)wParam)) // 17.11.2003 Mirek -> invoke system menu + return 0L; + break; +#endif + } + break; +// case WM_GETDLGCODE: +// return wantfocus ? 0 : DLGC_STATIC; + case WM_ERASEBKGND: + return 1L; + case WM_SIZE: + case WM_MOVE: + return 0L; + case WM_HELP: + return TRUE; + } + return DefWindowProc(hwnd, message, wParam, lParam); +} + +END_UPP_NAMESPACE diff --git a/rainbow/WinFb/Win.cpp b/rainbow/WinFb/Win.cpp new file mode 100644 index 000000000..517bf0cf2 --- /dev/null +++ b/rainbow/WinFb/Win.cpp @@ -0,0 +1,59 @@ +#include "WinFb.h" + +NAMESPACE_UPP + +HWND fbHWND; +bool fbEndSession; + +bool FBEndSession() +{ + return fbEndSession; +} + +bool FBIsWaitingEvent() +{ + MSG msg; + return PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE); +} + +bool FBProcessEvent(bool *quit) +{ + MSG msg; + if(PeekMessageW(&msg, NULL, 0, 0, PM_REMOVE)) { + if(msg.message == WM_QUIT && quit) + *quit = true; + DispatchMessageW(&msg); + return true; + } + return false; +} + +void FBSleep(int ms) +{ + MsgWaitForMultipleObjects(0, NULL, FALSE, ms, QS_ALLINPUT); +} + +void FBInit(HINSTANCE hInstance) +{ + GuiLock __; + + Ctrl::InitFB(); + + WNDCLASSW wc; + Zero(wc); + wc.style = CS_DBLCLKS|CS_HREDRAW|CS_VREDRAW; + wc.lpfnWndProc = (WNDPROC)fbWindowProc; + wc.hInstance = hInstance; + wc.hCursor = LoadCursor(NULL, IDC_ARROW); + wc.hbrBackground = (HBRUSH)NULL; + wc.lpszClassName = L"UPP-FB-CLASS"; + RegisterClassW(&wc); + fbHWND = CreateWindowW(L"UPP-FB-CLASS", L"", WS_OVERLAPPED, + CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, + NULL, NULL, hInstance, NULL); + SetTimer(fbHWND, 1, 10, NULL); + +// Csizeinit(); +} + +END_UPP_NAMESPACE diff --git a/rainbow/WinFb/WinFb.h b/rainbow/WinFb/WinFb.h new file mode 100644 index 000000000..da2ea776a --- /dev/null +++ b/rainbow/WinFb/WinFb.h @@ -0,0 +1,29 @@ +#include + +NAMESPACE_UPP + +LRESULT CALLBACK fbWindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); + +Vector& coreCmdLine__(); +Vector SplitCmdLine__(const char *cmd); + +#define GUI_APP_MAIN \ +void GuiMainFn_();\ +\ +int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR lpCmdLine, int nCmdShow) \ +{ \ + UPP::coreCmdLine__() = UPP::SplitCmdLine__(UPP::FromSystemCharset(lpCmdLine)); \ + UPP::AppInitEnvironment__(); \ + FBInit(hInstance); \ + GuiMainFn_(); \ + UPP::Ctrl::CloseTopCtrls(); \ + UPP::UsrLog("---------- About to delete this log..."); \ + UPP::DeleteUsrLog(); \ + return UPP::GetExitCode(); \ +} \ +\ +void GuiMainFn_() + +END_UPP_NAMESPACE + + diff --git a/rainbow/WinFb/WinFb.upp b/rainbow/WinFb/WinFb.upp new file mode 100644 index 000000000..4e1ced903 --- /dev/null +++ b/rainbow/WinFb/WinFb.upp @@ -0,0 +1,5 @@ +file + WinFb.h, + Win.cpp, + Proc.cpp; + diff --git a/rainbow/WinFb/init b/rainbow/WinFb/init new file mode 100644 index 000000000..18ac96b3f --- /dev/null +++ b/rainbow/WinFb/init @@ -0,0 +1,3 @@ +#ifndef _WinFb_icpp_init_stub +#define _WinFb_icpp_init_stub +#endif