TestWindow::TestWindow(BApplication* myApp) : BWindow(BRect(20,20,100,100), "Code Profile", B_TITLED_WINDOW, 0) { BRect frm = Bounds(); BView* myview = new BView(BRect(),"testView",0,0); BOutlineListView* olist = new BOutlineListView(BRect(),"MyList", B_SINGLE_SELECTION_LIST,B_FOLLOW_NONE); if( myview && olist ) { myview->AddChild(olist); BView* vw = olist; vw->SetViewColor(0xc0,0xc0,0xc0); vw->Invalidate(); vw->SetLowColor(0xc0,0xc0,0xc0); vw->Invalidate(); vw->SetHighColor(0x00,0x00,0x00); vw->Invalidate(); vw->SetFont(be_bold_font); this->AddChild(myview); BRect frm = vw->Frame(); vw->ResizeTo(1,1); vw->Draw(vw->Bounds()); vw->ResizeToPreferred(); float w=0,h=0; vw->GetPreferredSize(&w,&h); printf("Preferred size = %f x %f\n",w,h); } string = new BStringView(BRect(0,0,100,20),"String", "Ready to profile..."); if( string ) { string->SetViewColor(0xc0,0xc0,0xc0); this->AddChild(string); float w=0, h=0; string->GetPreferredSize(&w,&h); MoveTo(30,30); ResizeTo(w,h); } BMenuBar* menu = new BMenuBar(BRect(),"MainMenu",B_FOLLOW_NONE); if( menu ) { this->AddChild(menu); float w=0, h=0; menu->GetPreferredSize(&w,&h); printf("Preferred Size = (%f,%f)\n",w,h); menu->SetFont(be_plain_font); menu->GetPreferredSize(&w,&h); printf("Preferred Size = (%f,%f)\n",w,h); menu->SetFont(be_bold_font); menu->GetPreferredSize(&w,&h); printf("Preferred Size = (%f,%f)\n",w,h); menu->SetFont(be_fixed_font); menu->GetPreferredSize(&w,&h); printf("Preferred Size = (%f,%f)\n",w,h); } }
void TScrollViewComponent::FrameMoved(BPoint screenPoint) { printf("TScrollViewComponent::FrameMoved....\n"); Invalidate(); BView *child; if ( child = ChildAt(0) ) { child->Invalidate(); child->FrameResized(0,0); BRect AFrame = this->Frame(); BRect AFrame2 = child->Frame(); printf("TScrollViewComponent::FrameMoved Getting ScrollBar\n"); BScrollBar *truc = this->ScrollBar(B_HORIZONTAL); AFrame2 = truc->Frame(); FPropertyList->SetPropertyValue(PROP_BOTTOM,FloatToStr(AFrame.bottom -2 -((AFrame2.bottom - AFrame2.top)))); truc = this->ScrollBar(B_VERTICAL); AFrame2 = truc->Frame(); FPropertyList->SetPropertyValue(PROP_RIGHT,FloatToStr(AFrame.right -2 - ((AFrame2.right-AFrame2.left)))); FPropertyList->SetPropertyValue(PROP_TOP,FloatToStr(AFrame.top + 2)); FPropertyList->SetPropertyValue(PROP_LEFT,FloatToStr(AFrame.left + 2)); } BScrollView::FrameMoved(screenPoint); // FrameMovedComponent(FInternalComponent); // FInternalComponent->FrameMovedComponent(FInternalComponent); }
void WorkspacesView::_UpdateParentClipping() { if (fParentWhichDrawsOnChildren != NULL) { _CleanupParentClipping(); _ExcludeFromParentClipping(); fParentWhichDrawsOnChildren->Invalidate(fCurrentFrame); fCurrentFrame = Frame(); } }
void ArpTextControl::copy_colors(BView* v) { // Make no assumptions about the structure of the children. if( !v ) return; int32 num = v->CountChildren(); for( int32 i=0; i<num; i++ ) { BView* child = v->ChildAt(i); if( child ) { copy_colors(child); BTextView* text = dynamic_cast<BTextView*>(child); if( text ) { text->SetFontAndColor(NULL, B_FONT_ALL, &PV_FillForeColor); } child->SetViewColor(PV_FillBackColor); child->SetLowColor(PV_FillBackColor); child->SetHighColor(PV_FillForeColor); child->Invalidate(); } } }
int32 SnowView::SnowMakerThread(void *p_this) { SnowView *_this = (SnowView *)p_this; BView *p = _this->Parent(); BRect portion(0,0,(_this->fCachedWsWidth/PORTION_GRAN)-1, (_this->fCachedWsHeight/PORTION_GRAN)-1); int nf = _this->fNumFlakes; BRegion reg(BRect(-1,-1,-1,-1)); while (p && _this->fAttached) { snooze(INTERVAL/(10*(nf?nf:1))); int32 cw = _this->fCurrentWorkspace; bool drawThisOne = false; //printf("processing flake %d...\n", current); //for (; (current%(fNumFlakes/4); current++) if (reg.Intersects(portion)) { for (int i = 0; !drawThisOne && i < nf; i++) { /* if we find at least one flake in this rect, draw it */ if ((_this->fFlakes[cw][i].weight) && ( portion.Intersects(BRect(_this->fFlakes[cw][i].opos - BPoint(4,4), _this->fFlakes[cw][i].opos + BPoint(4,4))) || portion.Intersects(BRect(_this->fFlakes[cw][i].pos - BPoint(4,4), _this->fFlakes[cw][i].pos + BPoint(4,4))))) { drawThisOne = true; } } } //if (!drawThisOne) //printf("!Invalidate(%f, %f, %f, %f)\n", portion.left, portion.top, portion.right, portion.bottom); /* avoid deadlock on exit */ if (drawThisOne && (_this->LockLooperWithTimeout(2000) == B_OK)) { // printf("Invalidate(%f, %f, %f, %f)\n", portion.left, portion.top, portion.right, portion.bottom); p->Invalidate(portion); _this->UnlockLooper(); } portion.OffsetBy(_this->fCachedWsWidth/PORTION_GRAN, 0); if (portion.left >= _this->fCachedWsWidth) { /* right wrap */ //printf("rigth wrap to %ld\n", _this->fCachedWsWidth); portion.OffsetTo(0, portion.top+(_this->fCachedWsHeight/PORTION_GRAN)); } if (portion.top >= _this->fCachedWsHeight) { portion.OffsetTo(0,0); /* avoid deadlock on exit */ if (_this->LockLooperWithTimeout(5000) == B_OK) { //printf("calculating flakes...\n"); _this->Calc(); //printf("done calculating flakes.\n"); _this->GetClippingRegion(®); //printf("Region:\n"); //reg.PrintToStream(); _this->UnlockLooper(); } } } #if 0 BView *p = _this->Parent(); while (p && _this->fAttached) { snooze(INTERVAL/_this->fNumFlakes); //printf("processing flake %d...\n", current); //for (; (current%(fNumFlakes/4); current++) /* avoid deadlock on exit */ if (_this->LockLooperWithTimeout(2000) == B_OK) { if (_this->fFlakes[_this->fCurrentWorkspace][current].weight) { p->Invalidate(BRect(_this->fFlakes[_this->fCurrentWorkspace][current].opos - BPoint(4,4), _this->fFlakes[_this->fCurrentWorkspace][current].opos + BPoint(4,4))); p->Invalidate(BRect(_this->fFlakes[_this->fCurrentWorkspace][current].pos - BPoint(4,4), _this->fFlakes[_this->fCurrentWorkspace][current].pos + BPoint(4,4))); } _this->UnlockLooper(); current++; current %= _this->fNumFlakes; if (!current) { /* avoid deadlock on exit */ if (_this->LockLooperWithTimeout(2000) == B_OK) { printf("calculating flakes...\n"); _this->Calc(); printf("done calculating flakes.\n"); _this->UnlockLooper(); } } } } #endif return B_OK; }
void EBePrivateWin::DispatchMessage(BMessage *bMsg, BHandler *handler) { bool handled = true; if(bMsg->what == 'etk_') { int32 what = 0; bMsg->FindInt32("etk:what", &what); switch(what) { case ETK_BEOS_QUIT: doQuit = true; PostMessage(B_QUIT_REQUESTED); break; case ETK_BEOS_CONTACT_TO: { fContactor = EMessenger(); const char *buffer = NULL; ssize_t size = -1; if(bMsg->FindData("etk:messenger", B_ANY_TYPE, (const void**)&buffer, &size) != B_OK) break; if(buffer == NULL || size <= 0) break; fContactor.Unflatten(buffer, (size_t)size); } break; case ETK_BEOS_SET_BACKGROUND: { rgb_color bkColor; if(bMsg->FindInt32("background", (int32*)&bkColor) != B_OK) break; fTopView->SetViewColor(bkColor); fTopView->Invalidate(); } break; case ETK_BEOS_SET_LOOK: { int8 look; if(bMsg->FindInt8("look", &look) != B_OK) break; switch((e_window_look)look) { case E_BORDERED_WINDOW_LOOK: SetLook(B_BORDERED_WINDOW_LOOK); break; case E_NO_BORDER_WINDOW_LOOK: SetLook(B_NO_BORDER_WINDOW_LOOK); break; case E_TITLED_WINDOW_LOOK: SetLook(B_TITLED_WINDOW_LOOK); break; case E_DOCUMENT_WINDOW_LOOK: SetLook(B_DOCUMENT_WINDOW_LOOK); break; case E_MODAL_WINDOW_LOOK: SetLook(B_MODAL_WINDOW_LOOK); break; case E_FLOATING_WINDOW_LOOK: SetLook(B_FLOATING_WINDOW_LOOK); break; default: break; } } break; case ETK_BEOS_SET_TITLE: { const char *title = NULL; if(bMsg->FindString("title", &title) != B_OK) break; SetTitle(title); } break; case ETK_BEOS_SET_WORKSPACES: { uint32 workspaces = 0; if(bMsg->FindInt32("workspaces", (int32*)&workspaces) != B_OK) break; if(workspaces == 0) workspaces = current_workspace() + 1; SetWorkspaces(workspaces); } break; case ETK_BEOS_GET_WORKSPACES: { uint32 workspaces = Workspaces(); bMsg->AddInt32("workspaces", *((int32*)&workspaces)); } break; case ETK_BEOS_ICONIFY: if(!IsMinimized()) Minimize(true); break; case ETK_BEOS_SHOW: if(IsHidden()) { uint32 oldFlags = Flags(); SetFlags(oldFlags | B_AVOID_FOCUS); Show(); if(Look() != B_NO_BORDER_WINDOW_LOOK) SetFlags(oldFlags); } break; case ETK_BEOS_HIDE: if(!IsHidden()) Hide(); break; case ETK_BEOS_RAISE: if(!IsFront()) { uint32 oldFlags = Flags(); SetFlags(oldFlags | B_AVOID_FOCUS); Activate(true); if(Look() != B_NO_BORDER_WINDOW_LOOK) SetFlags(oldFlags); } break; case ETK_BEOS_LOWER: { BHandler *_frontWin = NULL; if(bMsg->FindPointer("front", (void**)&_frontWin) != B_OK) break; BWindow *frontWin = e_cast_as(_frontWin, BWindow); if(frontWin == NULL) break; SendBehind(frontWin); bMsg->AddBool("done", true); } break; case ETK_BEOS_ACTIVATE: { bool state; if(bMsg->FindBool("state", &state) != B_OK || state == IsActive()) break; Activate(state); } break; case ETK_BEOS_GET_ACTIVATED_STATE: bMsg->AddBool("state", IsActive()); break; case ETK_BEOS_MOVE_RESIZE: { if(bMsg->HasPoint("where")) { BPoint pt; if(bMsg->FindPoint("where", &pt) == B_OK) MoveTo(pt); } if(bMsg->HasFloat("width") && bMsg->HasFloat("height")) { float w = -1, h = -1; bMsg->FindFloat("width", &w); bMsg->FindFloat("height", &h); if(w < 0 || h < 0) break; ResizeTo(w, h); } } break; case ETK_BEOS_DRAW_BITMAP: { BBitmap *bitmap = NULL; BRect srcRect, destRect; const ERegion *clipping = NULL; if(bMsg->FindPointer("bitmap", (void**)&bitmap) != B_OK || bitmap == NULL) break; bMsg->FindRect("src", &srcRect); bMsg->FindRect("dest", &destRect); if(srcRect.IsValid() == false || destRect.IsValid() == false) break; bMsg->FindPointer("clipping", (void**)&clipping); BRegion beRegion; __etk_convert_region(clipping, &beRegion, fTopView->Bounds()); fTopView->ConstrainClippingRegion(&beRegion); fTopView->DrawBitmap(bitmap, srcRect, destRect); } break; case ETK_BEOS_GRAB_MOUSE: case ETK_BEOS_UNGRAB_MOUSE: { uint32 options = (what == ETK_BEOS_GRAB_MOUSE ? B_LOCK_WINDOW_FOCUS : 0); if(fTopView->SetEventMask(B_POINTER_EVENTS, options) != B_OK) break; bMsg->AddBool("state", what == ETK_BEOS_GRAB_MOUSE); } break; case ETK_BEOS_GRAB_KEYBOARD: case ETK_BEOS_UNGRAB_KEYBOARD: { uint32 options = (what == ETK_BEOS_GRAB_KEYBOARD ? B_LOCK_WINDOW_FOCUS : 0); if(fTopView->SetEventMask(B_KEYBOARD_EVENTS, options) != B_OK) break; bMsg->AddBool("state", what == ETK_BEOS_GRAB_KEYBOARD); } break; case ETK_BEOS_QUERY_MOUSE: { BPoint pt; uint32 btns = 0; fTopView->GetMouse(&pt, &btns, false); bMsg->AddInt32("x", (int32)pt.x); bMsg->AddInt32("y", (int32)pt.y); bMsg->AddInt32("buttons", (int32)btns); } break; case ETK_BEOS_SET_SIZE_LIMITS: { BRect r; if(bMsg->FindRect("limits", &r) != B_OK) break; SetSizeLimits(r.left, r.right, r.top, r.bottom); bMsg->AddBool("done", true); } break; case ETK_BEOS_GET_SIZE_LIMITS: { BRect r(-1, -1, -1, -1); GetSizeLimits(&(r.left), &(r.right), &(r.top), &(r.bottom)); bMsg->AddRect("limits", r); } break; default: handled = false; break; } if(handled) { BMessage aMsg(*bMsg); bMsg->SendReply(&aMsg); return; } } switch(bMsg->what) { case B_WINDOW_ACTIVATED: { handled = false; if(fContactor.IsValid() == false) break; EMessage message(E_WINDOW_ACTIVATED); message.AddBool("etk:msg_from_gui", true); message.AddInt64("when", e_real_time_clock_usecs()); fContactor.SendMessage(&message); } break; case B_MOUSE_DOWN: case B_MOUSE_UP: case B_MOUSE_MOVED: { if(fContactor.IsValid() == false) break; BPoint where; int32 buttons = 0; bMsg->FindPoint("where", &where); if(bMsg->what != B_MOUSE_UP) bMsg->FindInt32("buttons", &buttons); int32 clicks = 1; if(bMsg->what == B_MOUSE_DOWN) { #if 0 bMsg->FindInt32("clicks", &clicks); #else bigtime_t eventTime; if(bMsg->FindInt64("when", &eventTime) == B_OK) { if(eventTime - fPrevMouseDownTime <= CLICK_TIMEOUT) clicks = (fPrevMouseDownCount += 1); else clicks = fPrevMouseDownCount = 1; fPrevMouseDownTime = eventTime; } #endif } EMessage message; if(bMsg->what == B_MOUSE_DOWN) message.what = E_MOUSE_DOWN; else if(bMsg->what == B_MOUSE_UP) message.what = E_MOUSE_UP; else message.what = E_MOUSE_MOVED; message.AddBool("etk:msg_from_gui", true); message.AddInt64("when", e_real_time_clock_usecs()); if(bMsg->what != B_MOUSE_UP) message.AddInt32("buttons", buttons); if(bMsg->what == B_MOUSE_DOWN) message.AddInt32("clicks", clicks); message.AddPoint("where", EPoint(where.x, where.y)); ConvertToScreen(&where); message.AddPoint("screen_where", EPoint(where.x, where.y)); // TODO: modifiers message.AddMessenger("etk:msg_for_target", fContactor); etk_app->PostMessage(&message); } break; case B_KEY_DOWN: case B_KEY_UP: case B_UNMAPPED_KEY_DOWN: case B_UNMAPPED_KEY_UP: { if(fContactor.IsValid() == false) break; int8 byte[4]; const char *bytes = NULL; int32 numBytes = 0; int32 key = 0; int32 key_repeat = 0; int32 beModifiers = 0; eint32 modifiers = 0; bMsg->FindInt32("key", &key); bMsg->FindInt32("modifiers", &beModifiers); bzero(byte, sizeof(int8) * 4); if(bMsg->what == B_KEY_DOWN || bMsg->what == B_KEY_UP) { for(int32 i = 0; i < 3; i++) bMsg->FindInt8("byte", i, &byte[i]); if(bMsg->FindString("bytes", &bytes) == B_OK) numBytes = strlen(bytes); // if(bMsg->what == B_KEY_DOWN) bMsg->FindInt32("be:key_repeat", &key_repeat); } else { etk_beos_get_byte(beModifiers, key, (char*)byte); } if(beModifiers & B_SHIFT_KEY) modifiers |= E_SHIFT_KEY; if(beModifiers & B_CONTROL_KEY) modifiers |= E_CONTROL_KEY; if(beModifiers & B_COMMAND_KEY) modifiers |= E_COMMAND_KEY; EMessage message; if(bMsg->what == B_KEY_DOWN) message.what = E_KEY_DOWN; else if(bMsg->what == B_KEY_UP) message.what = E_KEY_UP; else if(bMsg->what == B_UNMAPPED_KEY_DOWN) message.what = E_UNMAPPED_KEY_DOWN; else message.what = E_UNMAPPED_KEY_UP; message.AddBool("etk:msg_from_gui", true); message.AddInt64("when", e_real_time_clock_usecs()); message.AddInt32("key", key); message.AddInt32("modifiers", modifiers); if(bMsg->what == B_KEY_DOWN || bMsg->what == B_KEY_UP) { if(bMsg->what == B_KEY_DOWN) message.AddInt32("etk:key_repeat", key_repeat); for(int32 i = 0; i < 3; i++) message.AddInt8("byte", byte[i]); if(!(numBytes != 1 || *bytes != byte[0])) { etk_beos_get_byte(beModifiers, key, (char*)byte); message.AddString("bytes", (char*)byte); } else if(numBytes > 0) { message.AddString("bytes", bytes); } } else if(byte[0] != 0) { message.AddInt8("byte", byte[0]); message.AddString("bytes", (char*)byte); } message.AddMessenger("etk:msg_for_target", fContactor); etk_app->PostMessage(&message); } break; case B_MODIFIERS_CHANGED: { if(fContactor.IsValid() == false) break; eint32 modifiers = 0; eint32 old_modifiers = 0; int32 beModifiers = 0; int32 old_beModifiers = 0; bMsg->FindInt32("modifiers", &beModifiers); bMsg->FindInt32("be:old_modifiers", &old_beModifiers); if(beModifiers & B_SHIFT_KEY) modifiers |= E_SHIFT_KEY; if(beModifiers & B_CONTROL_KEY) modifiers |= E_CONTROL_KEY; if(beModifiers & B_COMMAND_KEY) modifiers |= E_COMMAND_KEY; if(old_beModifiers & B_SHIFT_KEY) old_modifiers |= E_SHIFT_KEY; if(old_beModifiers & B_CONTROL_KEY) old_modifiers |= E_CONTROL_KEY; if(old_beModifiers & B_COMMAND_KEY) old_modifiers |= E_COMMAND_KEY; EMessage message(E_MODIFIERS_CHANGED); message.AddBool("etk:msg_from_gui", true); message.AddInt64("when", e_real_time_clock_usecs()); message.AddInt32("modifiers", modifiers); message.AddInt32("etk:old_modifiers", old_modifiers); message.AddMessenger("etk:msg_for_target", fContactor); etk_app->PostMessage(&message); } break; default: handled = false; break; } if(!handled) BWindow::DispatchMessage(bMsg, handler); }
void PrefsWindow::MessageReceived(BMessage* message) { switch(message->what) { case PrefsConstants::K_PREFS_VIEW_RESET_COLOUR_DEFAULTS: { ResetToDefaults(PrefsConstants::K_RESET_COLOUR_PREFS); } break; case PrefsConstants::K_PREFS_VIEW_RESET_COMMAND_DEFAULTS: { ResetToDefaults(PrefsConstants::K_RESET_COMMAND_PREFS); } break; case PrefsConstants::K_PREFS_VIEW_RESET_TOOLBAR_DEFAULTS: { ResetToDefaults(PrefsConstants::K_RESET_TOOLBAR_PREFS); } break; case PrefsConstants::K_PREFS_VIEW_RESET_GENERAL_DEFAULTS: { ResetToDefaults(PrefsConstants::K_RESET_GENERAL_PREFS); } break; case PrefsConstants::K_PREFS_UPDATE: { //update the preferences message, from view values BString prefsID; if (message->FindString(K_PREFS_ID, &prefsID) == B_OK) { BView *changedView = m_parent->FindView(prefsID.String()); prefsLock.Lock(); //different view have different kinds of values if (is_instance_of(changedView, BTextControl)) { //a textcontrol value was changed, update preferences with new text BTextControl *textControl = dynamic_cast<BTextControl*>(changedView); preferences.ReplaceString(prefsID.String(), textControl->Text()); } else if (is_instance_of(changedView, BCheckBox)) { //a checkbox value was changed, update preferences with new bool value(on/off) BCheckBox *checkBox = dynamic_cast<BCheckBox*>(changedView); preferences.ReplaceBool(prefsID.String(), checkBox->Value()); } else if (is_instance_of(changedView, BSlider)) { //a slider value was changed, update preferences with new slider value BSlider *slider = dynamic_cast<BSlider*>(changedView); preferences.ReplaceInt32(prefsID.String(), slider->Value()); } else if (is_instance_of(changedView, ColourButton)) { //a colourcontrol value was changed, update preferences with new colour ColourButton *colourControl = dynamic_cast<ColourButton*>(changedView); preferences.ReplaceData(prefsID.String(),B_RGB_COLOR_TYPE, &colourControl->Value(), sizeof(rgb_color)); } prefsLock.Unlock(); } } break; case PrefsConstants::K_LOAD_PREFERENCES: { //set preferences view values to values of the preferences message BString prefsID; if (message->FindString(K_PREFS_ID, &prefsID) == B_OK) { //find out which view value has to be updated BView *changedView = m_parent->FindView(prefsID.String()); prefsLock.Lock(); char *name; uint32 type; int32 count; for (int32 i = 0; preferences.GetInfo(B_ANY_TYPE, i, &name, &type, &count) == B_OK; i++) { //find out what kind of field we are using switch (type) { case B_INT32_TYPE: { int32 value; preferences.FindInt32(name, &value); if (is_instance_of(changedView, BSlider)) { BSlider *slider = dynamic_cast<BSlider*>(changedView); slider->SetValue(value); } } break; case B_BOOL_TYPE: { bool value; preferences.FindBool(name, &value); if (is_instance_of(changedView, BCheckBox)) { BCheckBox *checkBox = dynamic_cast<BCheckBox*>(changedView); checkBox->SetValue(value); } } break; case B_RGB_COLOR_TYPE: { rgb_color *colour; ssize_t size; preferences.FindData(name, B_RGB_COLOR_TYPE, (const void**)&colour, &size); if (is_instance_of(changedView, ColourButton)) { ColourButton *colourControl = dynamic_cast<ColourButton*>(changedView); colourControl->SetValue(*colour); } } break; case B_STRING_TYPE: { BString string; preferences.FindString(name, &string); if (is_instance_of(changedView, ColourButton)) { BTextControl *textControl = dynamic_cast<BTextControl*>(changedView); textControl->SetText(string.String()); } } break; } } prefsLock.Unlock(); //make sure the new view values are drawn! changedView->Invalidate(); } } break; default: BWindow::MessageReceived(message); break; } }