.developing rainbow

git-svn-id: svn://ultimatepp.org/upp/trunk@3586 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
cxl 2011-07-02 09:17:46 +00:00
parent 8d0ff37e27
commit 5d0f272a87
9 changed files with 96 additions and 89 deletions

View file

@ -1,60 +1,18 @@
class ViewDraw : public SystemDraw {
ImageBuffer ib;
Vector<Rect> dummy_invalid;
public:
ViewDraw(Ctrl *ctrl) : SystemDraw(ib, dummy_invalid) { _DBG_ }
~ViewDraw() {}
};
class DHCtrl : Ctrl {};
void InitFB();
#ifdef PLATFORM_WIN32
Vector<WString>& coreCmdLine__();
Vector<WString> SplitCmdLine__(const char *cmd);
void FBInit(HINSTANCE hInstance);
#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__(); \
UPP::FBInit(hInstance); \
GuiMainFn_(); \
UPP::Ctrl::CloseTopCtrls(); \
UPP::UsrLog("---------- About to delete this log of WinFB..."); \
UPP::DeleteUsrLog(); \
return UPP::GetExitCode(); \
} \
\
void GuiMainFn_()
#endif
#ifdef PLATFORM_POSIX
void FBInit(const String& fbdevice);
#define GUI_APP_MAIN \
void GuiMainFn_();\
\
int main(int argc, const char **argv, const char **envptr) { \
UPP::AppInit__(argc, argv, envptr); \
FBInit("/dev/fb0"); \
GuiMainFn_(); \
UPP::Ctrl::CloseTopCtrls(); \
UPP::UsrLog("---------- About to delete this log of LinuxFB..."); \
UPP::DeleteUsrLog(); \
return UPP::GetExitCode(); \
} \
\
void GuiMainFn_()
#endif
void SetDesktop(Ctrl& desktop);
Ctrl *GetDesktop();
class ViewDraw : public SystemDraw {
ImageBuffer ib;
Vector<Rect> dummy_invalid;
public:
ViewDraw(Ctrl *ctrl) : SystemDraw(ib, dummy_invalid) { _DBG_ }
~ViewDraw() {}
};
class DHCtrl : Ctrl {};
void InitFB();
#include FRAMEBUFFER_INCLUDE
void SetDesktop(Ctrl& desktop);
Ctrl *GetDesktop();

View file

@ -3,6 +3,8 @@ public:
static void InitFB();
static void DoMouseFB(int event, Point p, int zdelta = 0);
static bool DoKeyFB(dword key, int cnt);
static void RemoveCursor(Rect& update);
static void RemoveCaret(Rect& update);
static void RemoveCursor();
static void RemoveCaret();
static void CursorSync();

View file

@ -66,26 +66,44 @@ Image Ctrl::GetBak(Rect& tr)
return bak;
}
void Ctrl::RemoveCursor()
void Ctrl::RemoveCursor(Rect& update)
{
update = Null;
if(!IsNull(fbCursorBakPos)) {
Copy(framebuffer, fbCursorBakPos, fbCursorBak, fbCursorBak.GetSize());
FBUpdate(Rect(fbCursorBakPos, fbCursorBak.GetSize()));
update = Rect(fbCursorBakPos, fbCursorBak.GetSize());
}
fbCursorPos = fbCursorBakPos = Null;
fbCursorBak = Null;
}
void Ctrl::RemoveCaret()
void Ctrl::RemoveCursor()
{
Rect update;
RemoveCursor(update);
if(!IsNull(update))
FBUpdate(update);
}
void Ctrl::RemoveCaret(Rect& update)
{
update = Null;
if(!IsNull(fbCaretRect)) {
Copy(framebuffer, fbCaretRect.TopLeft(), fbCaretBak, fbCaretBak.GetSize());
FBUpdate(fbCaretRect);
update = fbCaretRect;
}
fbCaretRect = Null;
fbCaretBak = Null;
}
void Ctrl::RemoveCaret()
{
Rect update;
RemoveCaret(update);
if(!IsNull(update))
FBUpdate(update);
}
void Ctrl::SetCaret(int x, int y, int cx, int cy)
{
GuiLock __;
@ -109,7 +127,8 @@ void Ctrl::CursorSync()
cr = RectC(focusCtrl->caretx, focusCtrl->carety, focusCtrl->caretcx, focusCtrl->caretcy)
+ focusCtrl->GetScreenView().TopLeft();
if(fbCursorPos != p || cr != fbCaretRect) {
RemoveCursor();
Rect oc;
RemoveCursor(oc);
RemoveCaret();
fbCursorPos = p;
@ -135,6 +154,16 @@ void Ctrl::CursorSync()
}
Over(framebuffer, p, fbCursorImage, sz);
DLOG("Cursor " << p << " " << sz);
DDUMP(oc);
// DDUMP(tr);
_DBG_ // Only do this if they overlap!
if(!IsNull(oc))
tr = tr | oc;
// tr.left -= 50;
// tr.right += 50;
DDUMP(tr);
FBUpdate(tr);
FBSync();
}

View file

@ -16,18 +16,25 @@ IMAGE_ID(sizebottom)
IMAGE_ID(sizebottomright)
IMAGE_BEGIN_DATA
IMAGE_DATA(120,156,237,87,219,106,195,48,12,53,131,208,193,10,101,15,123,219,119,239,15,242,178,159,76,77,156,152,212,214,229,72)
IMAGE_DATA(110,221,22,124,140,33,117,207,145,100,201,114,155,112,14,63,225,128,101,155,40,150,121,158,45,154,149,111,208,100,62,168)
IMAGE_DATA(185,225,3,154,138,175,104,72,190,160,97,249,140,70,228,19,26,149,95,104,52,206,113,86,252,160,215,175,178,135,240,143)
IMAGE_DATA(254,20,141,152,51,134,95,249,4,226,210,246,165,242,59,248,200,126,64,110,141,41,92,194,71,56,173,179,48,182,62,239)
IMAGE_DATA(40,158,179,243,226,243,219,175,49,251,173,242,18,206,49,113,83,76,218,116,155,56,116,174,154,223,255,63,113,30,184,61)
IMAGE_DATA(248,162,134,224,178,26,129,91,105,0,110,214,88,184,158,88,60,123,245,228,242,9,245,181,157,207,239,56,62,183,33,37)
IMAGE_DATA(142,152,40,208,38,65,244,45,223,91,226,108,213,87,5,4,108,208,183,143,95,207,197,101,213,163,54,44,223,107,62,144)
IMAGE_DATA(24,165,125,74,208,114,108,209,83,49,89,206,10,181,230,213,163,118,60,125,231,233,91,205,22,141,75,28,167,109,0,70)
IMAGE_DATA(61,240,108,160,212,121,244,187,13,47,80,45,215,92,218,154,212,152,212,26,213,56,214,217,226,87,227,33,107,20,122,212)
IMAGE_DATA(168,212,180,156,171,150,243,184,235,121,164,63,191,233,205,1,22,241,60,75,160,61,14,153,230,151,219,135,164,77,24,137)
IMAGE_DATA(35,247,33,105,19,70,226,200,125,72,218,132,226,21,159,51,196,5,74,221,35,45,119,107,239,53,173,16,124,130,191,226)
IMAGE_DATA(152,182,193,24,225,96,185,124,173,92,234,25,193,43,243,31,145,39,107,157,150,209,41,119,234,20,9,150,46,146,156,183)
IMAGE_DATA(112,209,147,231,253,109,241,240,44,221,208,35,127,50,127,20,188,153,247,94,5,31,87,227,125,174,70,75,55,60,178,234)
IMAGE_DATA(212,51,130,87,230,63,243,118,201,243,10,123,119,252,169,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
IMAGE_END_DATA(448, 15)
IMAGE_DATA(120,156,237,87,189,75,28,65,20,159,4,46,6,34,72,10,187,20,105,242,79,164,73,155,210,194,46,165,69,42,59,83)
IMAGE_DATA(4,99,180,8,33,16,228,20,98,144,96,226,233,69,208,132,164,216,70,68,197,179,240,3,193,15,252,0,17,69,16,65)
IMAGE_DATA(68,4,173,180,251,57,222,158,27,179,59,243,246,189,89,93,21,246,55,12,183,55,247,251,189,55,243,62,230,238,84,181)
IMAGE_DATA(170,85,231,120,160,238,157,191,64,201,0,161,6,128,72,131,211,211,167,56,57,121,198,213,224,248,248,57,142,142,94,224)
IMAGE_DATA(240,240,37,71,131,131,131,58,236,239,215,99,111,239,21,118,118,26,226,52,216,221,109,208,188,215,216,222,110,196,214,86)
IMAGE_DATA(19,214,215,155,41,13,54,55,223,96,99,227,173,230,181,98,117,245,35,150,151,219,177,184,216,97,211,96,109,237,3,86)
IMAGE_DATA(86,62,97,105,41,143,133,133,110,204,205,21,49,59,251,19,51,51,189,38,141,230,116,96,126,254,139,230,245,96,122,122)
IMAGE_DATA(8,165,82,169,50,255,96,98,162,24,214,104,91,221,154,215,131,169,169,34,38,39,255,6,124,245,47,151,151,53,154,243)
IMAGE_DATA(93,207,2,198,199,7,48,54,246,27,35,35,30,121,222,209,209,94,12,15,247,5,118,60,111,136,228,123,222,143,200,30)
IMAGE_DATA(7,7,251,173,241,49,197,160,80,248,70,241,141,126,187,186,58,69,117,152,207,127,22,215,122,91,219,123,145,143,150,150)
IMAGE_DATA(119,98,31,2,110,20,57,85,163,238,171,170,242,84,161,196,171,114,179,250,8,61,7,206,67,239,239,252,154,229,188,145)
IMAGE_DATA(184,168,106,29,184,156,14,90,238,255,192,113,103,89,243,228,215,87,114,94,226,166,193,39,53,6,174,85,67,112,35,26)
IMAGE_DATA(6,55,208,72,184,46,123,113,57,171,75,44,111,32,191,178,250,124,172,199,195,202,160,2,103,152,92,112,155,132,163,79)
IMAGE_DATA(242,185,100,159,73,245,145,4,50,108,152,111,31,119,189,109,95,82,61,215,134,228,243,56,31,156,61,82,231,164,16,23)
IMAGE_DATA(99,137,222,180,39,73,173,152,214,92,245,92,59,46,125,231,210,183,113,182,204,168,209,163,170,50,24,70,93,224,114,128)
IMAGE_DATA(176,206,69,127,97,195,21,92,173,173,185,226,214,168,198,52,173,153,26,71,58,147,248,141,227,113,214,76,72,35,71,97)
IMAGE_DATA(77,146,186,74,82,143,23,122,59,252,31,191,254,63,7,182,200,206,147,108,52,141,34,139,243,107,59,7,165,245,145,5)
IMAGE_DATA(206,120,14,74,235,35,11,156,241,28,148,214,71,232,47,190,205,144,109,163,166,123,36,201,221,154,246,90,92,34,236,1)
IMAGE_DATA(126,164,71,174,50,44,70,108,144,92,190,82,174,233,153,131,219,204,191,142,56,73,243,132,172,83,174,168,83,40,72,186)
IMAGE_DATA(136,114,158,132,203,173,60,215,239,22,23,158,164,27,210,136,31,205,207,18,158,152,119,183,18,158,93,141,87,115,53,74)
IMAGE_DATA(186,225,58,179,110,122,230,224,54,243,111,242,118,9,230,25,68,109,209,184,0,0,0,0,0,0,0,0,0,0,0,0)
IMAGE_END_DATA(672, 15)

View file

@ -1,5 +1,6 @@
file
LinuxFb.h,
Keys.h,
Proc.cpp;
file
LinuxFb.h,
Local.h,
Keys.h,
Proc.cpp;

View file

@ -57,6 +57,7 @@ LRESULT CALLBACK fbWindowProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPa
if(hwnd) {
PAINTSTRUCT ps;
HDC dc = BeginPaint(hwnd, &ps);
DDUMP(Rect(ps.rcPaint));
Size sz = framebuffer.GetSize();
Buffer<byte> data;
data.Alloc(sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD)*256);
@ -71,8 +72,12 @@ LRESULT CALLBACK fbWindowProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPa
hi->biClrImportant = 0;
hi->biWidth = sz.cx;
hi->biHeight = -sz.cy;
::SetDIBitsToDevice(dc, 0, 0, sz.cx, sz.cy, 0, 0,
0, sz.cy, ~framebuffer, (BITMAPINFO *)~data, DIB_RGB_COLORS);
Rect r = ps.rcPaint;
::SetDIBitsToDevice(dc, r.left, r.top, r.GetWidth(), r.GetHeight(),
r.left, -r.top - r.GetHeight() + sz.cy, 0, sz.cy,
~framebuffer, (BITMAPINFO *)~data, DIB_RGB_COLORS);
// ::SetDIBitsToDevice(dc, r.left, r.top, r.GetWidth(), r.GetHeight(), r.left, ,
// 0, sz.cy, ~framebuffer, (BITMAPINFO *)~data, DIB_RGB_COLORS);
EndPaint(hwnd, &ps);
}
return 0L;

View file

@ -59,7 +59,9 @@ void FBInit(HINSTANCE hInstance)
void FBUpdate(const Rect& inv)
{
DLOG("FBUpdate " << inv);
if(fbHWND)
// ::InvalidateRect(fbHWND, Rect(0, 0, 10000, 10000), false);
::InvalidateRect(fbHWND, inv, false);
}

View file

@ -1,5 +1,6 @@
file
WinFb.h,
Local.h,
Keys.h,
Win.cpp,
Proc.cpp;

View file

@ -8,12 +8,14 @@
#ifdef flagWINFB
#define GUIPLATFORM_KEYCODES_INCLUDE <WinFb/Keys.h>
#define GUIPLATFORM_INCLUDE <Framebuffer/Framebuffer.h>
#define GUIPLATFORM_INCLUDE <Framebuffer/Framebuffer.h>
#define FRAMEBUFFER_INCLUDE <WinFb/Local.h>
#endif
#ifdef flagLINUXFB
#define GUIPLATFORM_KEYCODES_INCLUDE <LinuxFb/Keys.h>
#define GUIPLATFORM_INCLUDE <Framebuffer/Framebuffer.h>
#define GUIPLATFORM_INCLUDE <Framebuffer/Framebuffer.h>
#define FRAMEBUFFER_INCLUDE <LinuxFb/Local.h>
#endif
#ifdef flagWINGL