diff --git a/uppsrc/VirtualGui/Clip.cpp b/uppsrc/VirtualGui/Clip.cpp index 4cca6d2a7..669faf255 100644 --- a/uppsrc/VirtualGui/Clip.cpp +++ b/uppsrc/VirtualGui/Clip.cpp @@ -96,29 +96,20 @@ static String sText(const Value& data) return data; } -static String sWText(const Value& data) -{ - return Unicode__(WString(data)); -} - void Append(VectorMap& data, const String& text) { data.GetAdd("text", ClipData(text, sText)); - data.GetAdd("wtext", ClipData(text, sWText)); } void Append(VectorMap& data, const WString& text) { data.GetAdd("text", ClipData(text, sText)); - data.GetAdd("wtext", ClipData(text, sWText)); } String GetTextClip(const WString& text, const String& fmt) { if(fmt == "text") return text.ToString(); - if(fmt == "wtext") - return Unicode__(text); return Null; } @@ -126,8 +117,6 @@ String GetTextClip(const String& text, const String& fmt) { if(fmt == "text") return text; - if(fmt == "wtext") - return Unicode__(text.ToWString()); return Null; } diff --git a/uppsrc/VirtualGui/Ctrl.cpp b/uppsrc/VirtualGui/Ctrl.cpp index 39f75c219..101fcd2a6 100644 --- a/uppsrc/VirtualGui/Ctrl.cpp +++ b/uppsrc/VirtualGui/Ctrl.cpp @@ -28,10 +28,6 @@ bool Ctrl::GuiPlatformSetFullRefreshSpecial() return false; } -void Ctrl::PaintCaret(SystemDraw& w) -{ -} - String GuiPlatformGetKeyDesc(dword key) { return Null; @@ -71,7 +67,8 @@ String Ctrl::Name() const { #else String s = String(typeid(*this).name()) + " : " + Format("0x%x", (int) this); #endif - if(IsChild()) + Ctrl *parent = GetParent(); + if(parent) s << "(parent " << String(typeid(*parent).name()) << ")"; return s; } diff --git a/uppsrc/VirtualGui/Ctrl.h b/uppsrc/VirtualGui/Ctrl.h index 3fe64c1ee..3613fa450 100644 --- a/uppsrc/VirtualGui/Ctrl.h +++ b/uppsrc/VirtualGui/Ctrl.h @@ -25,7 +25,7 @@ private: void DestroyWnd(); - void NewTop() { top = new Top; top->owner_window = NULL; } + void NewTop() { SetTop(new Top); GetTop()->owner_window = NULL; } void PutForeground(); static void MouseEventFB(Ptr t, int event, Point p, int zdelta); diff --git a/uppsrc/VirtualGui/Event.cpp b/uppsrc/VirtualGui/Event.cpp index e85db651d..fcebb39cf 100644 --- a/uppsrc/VirtualGui/Event.cpp +++ b/uppsrc/VirtualGui/Event.cpp @@ -96,44 +96,17 @@ bool Ctrl::DoKeyFB(dword key, int cnt) return b; } -void Ctrl::SetCaret(int x, int y, int cx, int cy) -{ - GuiLock __; - caretx = x; - carety = y; - caretcx = cx; - caretcy = cy; - fbCaretTm = msecs(); - SyncCaret(); -} - -void Ctrl::SyncCaret() -{ - CursorSync(); -} - void Ctrl::CursorSync() { LLOG("@ CursorSync"); Point p = GetMousePos() - fbCursorImage.GetHotSpot(); Rect cr = Null; - if(focusCtrl && (((msecs() - fbCaretTm) / 500) & 1) == 0) - cr = (RectC(focusCtrl->caretx, focusCtrl->carety, focusCtrl->caretcx, focusCtrl->caretcy) - + focusCtrl->GetScreenView().TopLeft()) & focusCtrl->GetScreenView(); - if(fbCursorPos != p) { fbCursorPos = p; if(!(VirtualGuiPtr->GetOptions() & GUI_SETMOUSECURSOR)) Invalidate(); } - if(cr != fbCaretRect) { - fbCaretRect = cr; - if(VirtualGuiPtr->GetOptions() & GUI_SETCARET) - VirtualGuiPtr->SetCaret(cr); - else - Invalidate(); - } } bool Ctrl::ProcessEvent(bool *quit) @@ -159,6 +132,7 @@ bool Ctrl::ProcessEvents(bool *quit) LLOG("TimerProc invoked at " << msecs()); TimerProc(msecs()); LLOG("TimerProc elapsed: " << tm); + AnimateCaret(); SweepMkImageCache(); DoPaint(); return ret; diff --git a/uppsrc/VirtualGui/Wnd.cpp b/uppsrc/VirtualGui/Wnd.cpp index 9d7b1917e..fba70ecf8 100644 --- a/uppsrc/VirtualGui/Wnd.cpp +++ b/uppsrc/VirtualGui/Wnd.cpp @@ -35,6 +35,7 @@ bool Ctrl::invalid; Point Ctrl::fbCursorPos = Null; Image Ctrl::fbCursorImage; + Rect Ctrl::fbCaretRect; int Ctrl::fbCaretTm; bool Ctrl::fbEndSession; @@ -73,9 +74,9 @@ Ctrl *Ctrl::GetOwner() { GuiLock __; int q = FindTopCtrl(); - if(q > 0 && topctrl[q]->top) { - Ctrl *x = topctrl[q]->top->owner_window; - LDUMP(Upp::Name(x)); + Top *top = topctrl[q]->GetTop(); + if(q > 0 && top) { + Ctrl *x = top->owner_window; return dynamic_cast(x) ? x->GetOwner() : x; } return NULL; @@ -87,36 +88,13 @@ Ctrl *Ctrl::GetActiveCtrl() return focusCtrl ? focusCtrl->GetTopCtrl() : NULL; } -// Vector Ctrl::hotkey; - int Ctrl::RegisterSystemHotKey(dword key, Function cb) { -/* ASSERT(key >= K_DELTA); - int q = hotkey.GetCount(); - for(int i = 0; i < hotkey.GetCount(); i++) - if(!hotkey[i]) { - q = i; - break; - } - hotkey.At(q) = cb; - dword mod = 0; - if(key & K_ALT) - mod |= MOD_ALT; - if(key & K_SHIFT) - mod |= MOD_SHIFT; - if(key & K_CTRL) - mod |= MOD_CONTROL; - - return RegisterHotKey(NULL, q, mod, key & 0xffff) ? q : -1;*/ return -1; } void Ctrl::UnregisterSystemHotKey(int id) { -/* if(id >= 0 && id < hotkey.GetCount()) { - UnregisterHotKey(NULL, id); - hotkey[id].Clear(); - }*/ } bool Ctrl::IsWaitingEvent() @@ -135,30 +113,12 @@ void Ctrl::SyncTopWindows() ViewDraw::ViewDraw(Ctrl *ctrl) { -/* - if(Ctrl::invalid) - Ctrl::DoPaint(); - Ctrl::invalid = false; - Ctrl::RemoveCursor(); - Ctrl::RemoveCaret(); - Rect r = ctrl->GetScreenView(); - Ctrl::invalid.Add(r); - Ctrl::AddUpdate(r); - for(int i = max(ctrl->GetTopCtrl()->FindTopCtrl() + 1, 0); i < Ctrl::topctrl.GetCount(); i++) { - Rect rr = Ctrl::topctrl[i]->GetScreenRect(); - ExcludeClip(rr); - Subtract(Ctrl::invalid, rr); - } - Offset(r.TopLeft()); -*/ } ViewDraw::~ViewDraw() { -// Ctrl::DoUpdate(); } - Rect Ctrl::GetClipBound(const Vector& inv, const Rect& r) { Rect ri = Null; @@ -306,18 +266,18 @@ int Ctrl::GetKbdSpeed() void Ctrl::DestroyWnd() { - for(int i = 0; i < topctrl.GetCount(); i++) - if(topctrl[i]->top && topctrl[i]->top->owner_window == this) + for(int i = 0; i < topctrl.GetCount(); i++) { + Top *top = topctrl[i]->GetTop(); + if(top && top->owner_window == this) topctrl[i]->WndDestroy(); + } int q = FindTopCtrl(); if(q >= 0) { Invalidate(); topctrl.Remove(q); } - if(top) { - delete top; - top = NULL; - } + if(top) + DeleteTop(); isopen = false; TopWindow *win = dynamic_cast(this); if(win) @@ -341,8 +301,11 @@ void Ctrl::PutForeground() } Vector< Ptr > fw; for(int i = 0; i < topctrl.GetCount(); i++) - if(topctrl[i] && topctrl[i]->top && topctrl[i]->top->owner_window == this && topctrl[i] != this) - fw.Add(topctrl[i]); + if(topctrl[i]) { + Top *top = topctrl[i]->GetTop(); + if(top && top->owner_window == this && topctrl[i] != this) + fw.Add(topctrl[i]); + } for(int i = 0; i < fw.GetCount(); i++) if(fw[i]) fw[i]->PutForeground(); @@ -355,8 +318,8 @@ void Ctrl::SetWndForeground() if(IsWndForeground()) return; Ctrl *to = this; - while(to->top && to->top->owner_window) - to = to->top->owner_window; + while(to->GetTop() && to->GetTop()->owner_window) + to = to->GetTop()->owner_window; to->PutForeground(); if(this != focusCtrl) ActivateWnd(); @@ -445,7 +408,8 @@ void Ctrl::PopUp(Ctrl *owner, bool savebits, bool activate, bool dropshadow, boo ASSERT(owner_window->IsOpen()); if(owner_window != desktop) { owner_window->SetForeground(); - top->owner_window = owner_window; + if(GetTop()) + GetTop()->owner_window = owner_window; } } topctrl.Add(this); @@ -496,10 +460,8 @@ void Ctrl::SysEndLoop() void Ctrl::DeleteDesktopTop() { - if(desktop && desktop->top) { - delete desktop->top; - desktop->top = NULL; - } + if(desktop && desktop->GetTop()) + desktop->DeleteTop(); } void Ctrl::SetDesktop(Ctrl& q) diff --git a/uppsrc/VirtualGui/src.tpp/VirtualGui_en-us.tpp b/uppsrc/VirtualGui/src.tpp/VirtualGui_en-us.tpp index 90603a5ec..a1e2a94a1 100644 --- a/uppsrc/VirtualGui/src.tpp/VirtualGui_en-us.tpp +++ b/uppsrc/VirtualGui/src.tpp/VirtualGui_en-us.tpp @@ -25,7 +25,7 @@ some font system to measure fonts (e.g. DrawGL and plugin/FT`_fontsys).&] [s5;:Upp`:`:VirtualGui`:`:GetOptions`(`): [@(0.0.255) virtual] [_^Upp`:`:dword^ dword]_[* G etOptions]()&] [s2;%% Returns a set of flags describing some aspects of VirtualGui -behaviour. Available option flags are:-|&] +behaviour. Available option flags are:&] [s2;%% &] [s7;i1120;a17;:Ctrl`:`:CENTER:%% [%-*C@3 GUI`_SETMOUSECURSOR]-|Use the SetMouseCursor() method instead of painting the cursor.&]