void UserPromptView::AddPrompt(std::string const& message, bool visible, PromiseAuthCodePtr const& promise) { auto* text_input = new unity::TextInput(); auto* text_entry = text_input->text_entry(); text_input->scale = scale(); text_input->input_hint = SanitizeMessage(message); text_input->hint_font_size = PROMPT_FONT_SIZE; text_input->show_caps_lock = true; text_input->show_activator = true; text_entry->SetPasswordMode(!visible); text_entry->SetPasswordChar("•"); text_entry->SetToggleCursorVisibilityOnKeyFocus(true); text_entry->clipboard_enabled = false; text_input->SetMinimumHeight(Settings::GRID_SIZE.CP(scale)); text_input->SetMaximumHeight(Settings::GRID_SIZE.CP(scale)); prompt_layout_->AddView(text_input, 1); focus_queue_.push_back(text_input); // Don't remove it, it helps with a11y. if (focus_queue_.size() == 1) nux::GetWindowCompositor().SetKeyFocusArea(text_entry); text_entry->activated.connect([this, text_input, promise](){ auto* text_entry = text_input->text_entry(); if (!text_entry->GetInputEventSensitivity()) return; if (focus_queue_.size() == 1) { text_input->SetSpinnerVisible(true); text_input->SetSpinnerState(STATE_SEARCHING); } focus_queue_.pop_front(); cached_focused_geo_ = text_entry->GetGeometry(); text_entry->SetInputEventSensitivity(false); QueueRelayout(); QueueDraw(); std::string const& password = text_entry->GetText(); if (promise) promise->set_value(password); }); GetLayout()->ComputeContentPosition(0, 0); ComputeContentSize(); QueueRelayout(); QueueDraw(); }
void UserPromptView::ResetLayout() { focus_queue_.clear(); SetLayout(new nux::VLayout()); GetLayout()->SetLeftAndRightPadding(PADDING.CP(scale)); GetLayout()->SetTopAndBottomPadding(PADDING.CP(scale)); static_cast<nux::VLayout*>(GetLayout())->SetVerticalInternalMargin(LAYOUT_MARGIN.CP(scale)); auto const& real_name = session_manager_->RealName(); auto const& name = (real_name.empty() ? session_manager_->UserName() : real_name); username_ = new unity::StaticCairoText(name); username_->SetScale(scale); username_->SetFont("Ubuntu "+std::to_string(PROMPT_FONT_SIZE)); GetLayout()->AddView(username_); msg_layout_ = new nux::VLayout(); msg_layout_->SetVerticalInternalMargin(MSG_LAYOUT_MARGIN.CP(scale)); msg_layout_->SetReconfigureParentLayoutOnGeometryChange(true); GetLayout()->AddLayout(msg_layout_); prompt_layout_ = new nux::VLayout(); prompt_layout_->SetVerticalInternalMargin(PROMPT_LAYOUT_MARGIN.CP(scale)); prompt_layout_->SetReconfigureParentLayoutOnGeometryChange(true); GetLayout()->AddLayout(prompt_layout_); QueueRelayout(); QueueDraw(); }
void PreviewRatingsWidget::UpdateScale(double scale) { reviews_->SetScale(scale); ratings_->scale = scale; preview_container_.scale = scale; layout_->SetSpaceBetweenChildren(CHILDREN_SPACE.CP(scale)); QueueRelayout(); QueueDraw(); }
void FilterGenre::OnOptionRemoved(FilterOption::Ptr const& removed_filter) { for (auto it=buttons_.begin() ; it != buttons_.end(); ++it) { if ((*it)->GetFilter() == removed_filter) { genre_layout_->RemoveChildObject(*it); buttons_.erase(it); QueueRelayout(); break; } } }
void PanelView::OnObjectRemoved(indicator::Indicator::Ptr const& proxy) { if (proxy->IsAppmenu()) { menu_view_->RemoveIndicator(proxy); } else { indicators_->RemoveIndicator(proxy); } QueueRelayout(); QueueDraw(); }
void UserPromptView::AddMessage(std::string const& message, nux::Color const& color) { auto* view = new unity::StaticCairoText(""); view->SetFont(Settings::Instance().font_name()); view->SetTextColor(color); view->SetText(message); msg_layout_->AddView(view); GetLayout()->ComputeContentPosition(0, 0); ComputeContentSize(); QueueRelayout(); QueueDraw(); }
void UserPromptView::UpdateSize() { auto width = 8 * Settings::GRID_SIZE.CP(scale); auto height = 3 * Settings::GRID_SIZE.CP(scale); SetMinimumWidth(width); SetMaximumWidth(width); SetMinimumHeight(height); if (nux::Layout* layout = GetLayout()) { layout->SetLeftAndRightPadding(PADDING.CP(scale)); layout->SetTopAndBottomPadding(PADDING.CP(scale)); static_cast<nux::VLayout*>(layout)->SetVerticalInternalMargin(LAYOUT_MARGIN.CP(scale)); } if (username_) username_->SetScale(scale); if (msg_layout_) { msg_layout_->SetVerticalInternalMargin(MSG_LAYOUT_MARGIN.CP(scale)); for (auto* area : msg_layout_->GetChildren()) { area->SetMaximumWidth(width); static_cast<StaticCairoText*>(area)->SetScale(scale); } } if (prompt_layout_) { prompt_layout_->SetVerticalInternalMargin(PROMPT_LAYOUT_MARGIN.CP(scale)); for (auto* area : prompt_layout_->GetChildren()) { auto* text_input = static_cast<TextInput*>(area); text_input->SetMinimumHeight(Settings::GRID_SIZE.CP(scale)); text_input->SetMaximumHeight(Settings::GRID_SIZE.CP(scale)); text_input->scale = scale(); } } bg_layer_.reset(); ComputeContentSize(); QueueRelayout(); QueueDraw(); }
void FilterGenre::OnOptionAdded(FilterOption::Ptr const& new_filter) { std::string tmp_label(new_filter->name); glib::String escape(g_markup_escape_text(tmp_label.c_str(), -1)); std::string label(escape.Value()); FilterGenreButton* button = new FilterGenreButton(label, NUX_TRACKER_LOCATION); button->scale = scale(); button->SetFilter(new_filter); genre_layout_->AddView(button, 0, nux::MINOR_POSITION_CENTER, nux::MINOR_SIZE_FULL); buttons_.push_back(button); QueueRelayout(); }
void UserPromptView::AddMessage(std::string const& message, nux::Color const& color) { nux::Geometry const& geo = GetGeometry(); auto* view = new unity::StaticCairoText(""); view->SetScale(scale); view->SetFont(Settings::Instance().font_name()); view->SetTextColor(color); view->SetText(message); view->SetMaximumWidth(geo.width - PADDING.CP(scale)*2); msg_layout_->AddView(view); GetLayout()->ComputeContentPosition(0, 0); ComputeContentSize(); QueueRelayout(); QueueDraw(); }
void PanelView::Resize() { int height = Style::Instance().PanelHeight(monitor_); auto const& monitor_geo = UScreen::GetDefault()->GetMonitorGeometry(monitor_); SetMinMaxSize(monitor_geo.width, height); parent_->SetGeometry({monitor_geo.x, monitor_geo.y, monitor_geo.width, height}); for (auto* child : layout_->GetChildren()) { child->SetMinimumHeight(height); child->SetMaximumHeight(height); } QueueRelayout(); }
// // Signals // void PanelView::OnObjectAdded(indicator::Indicator::Ptr const& proxy) { // Appmenu is treated differently as it needs to expand // We could do this in a more special way, but who has the time for special? if (proxy->IsAppmenu()) { menu_view_->AddIndicator(proxy); } else { indicators_->AddIndicator(proxy); } QueueRelayout(); QueueDraw(); }
void FilterExpanderLabel::UpdateLayoutSizes() { auto& style = dash::Style::Instance(); layout_->SetLeftAndRightPadding(style.GetFilterBarLeftPadding().CP(scale), style.GetFilterBarRightPadding().CP(scale)); top_bar_layout_->SetTopAndBottomPadding(style.GetFilterHighlightPadding().CP(scale)); expander_layout_->SetSpaceBetweenChildren(EXPANDER_LAYOUT_SPACE_BETWEEN_CHILDREN.CP(scale)); auto const& tex = expand_icon_->texture(); expand_icon_->SetMinMaxSize(RawPixel(tex->GetWidth()).CP(scale), RawPixel(tex->GetHeight()).CP(scale)); arrow_layout_->SetLeftAndRightPadding(ARROW_HORIZONTAL_PADDING.CP(scale)); arrow_layout_->SetTopAndBottomPadding(ARROW_TOP_PADDING.CP(scale), ARROW_BOTTOM_PADDING.CP(scale)); QueueRelayout(); QueueDraw(); }
void PreviewInfoHintWidget::UpdateScale(double scale) { if (layout_) layout_->SetSpaceBetweenChildren(LAYOUT_SPACING.CP(scale)); if (info_names_layout_) { info_names_layout_->SetSpaceBetweenChildren(HINTS_SPACING.CP(scale)); for (auto* area : info_names_layout_->GetChildren()) static_cast<StaticCairoText*>(area)->SetScale(scale); } if (info_values_layout_) { info_values_layout_->SetSpaceBetweenChildren(HINTS_SPACING.CP(scale)); for (auto* area : info_values_layout_->GetChildren()) static_cast<StaticCairoText*>(area)->SetScale(scale); } QueueRelayout(); QueueDraw(); }
void PanelView::OnIndicatorViewUpdated() { needs_geo_sync_ = true; QueueRelayout(); QueueDraw(); }