Browse Source

Tooltips now have css properties border-radius and padding. Also moved CSS code to window.cc

merge-requests/382/head
eidheim 8 years ago
parent
commit
715b3a9051
  1. 5
      src/directories.cc
  2. 10
      src/notebook.cc
  3. 33
      src/tooltips.cc
  4. 1
      src/tooltips.h
  5. 18
      src/window.cc

5
src/directories.cc

@ -116,9 +116,8 @@ Directories::Directories() : Gtk::ListViewText(1) {
if(auto renderer_text=dynamic_cast<Gtk::CellRendererText*>(renderer)) if(auto renderer_text=dynamic_cast<Gtk::CellRendererText*>(renderer))
renderer_text->property_markup()=iter->get_value(column_record.markup); renderer_text->property_markup()=iter->get_value(column_record.markup);
}); });
auto provider = Gtk::CssProvider::create();
provider->load_from_data("*:selected {border-left-color: inherit; color: inherit; background-color: rgba(128, 128, 128 , 0.2); background-image: inherit;}"); get_style_context()->add_class("juci_directories");
get_style_context()->add_provider(provider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
tree_store->set_sort_column(column_record.id, Gtk::SortType::SORT_ASCENDING); tree_store->set_sort_column(column_record.id, Gtk::SortType::SORT_ASCENDING);
set_enable_search(true); //TODO: why does this not work in OS X? set_enable_search(true); //TODO: why does this not work in OS X?

10
src/notebook.cc

@ -44,6 +44,7 @@ Notebook::Notebook() : Gtk::Paned(), notebooks(2) {
Gsv::init(); Gsv::init();
for(auto &notebook: notebooks) { for(auto &notebook: notebooks) {
notebook.get_style_context()->add_class("juci_notebook");
notebook.set_scrollable(); notebook.set_scrollable();
notebook.set_group_name("source_notebooks"); notebook.set_group_name("source_notebooks");
notebook.signal_switch_page().connect([this](Gtk::Widget *widget, guint) { notebook.signal_switch_page().connect([this](Gtk::Widget *widget, guint) {
@ -67,15 +68,6 @@ Notebook::Notebook() : Gtk::Paned(), notebooks(2) {
} }
} }
}); });
auto provider = Gtk::CssProvider::create();
//GtkNotebook-tab-overlap got removed in gtk 3.20, but margin works in 3.20
#if GTK_VERSION_GE(3, 20)
provider->load_from_data("tab {border-radius: 5px 5px 0 0; padding: 0 4px; margin: 0;}");
#else
provider->load_from_data(".notebook {-GtkNotebook-tab-overlap: 0px;} tab {border-radius: 5px 5px 0 0; padding: 4px 4px;}");
#endif
notebook.get_style_context()->add_provider(provider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
} }
pack1(notebooks[0], true, true); pack1(notebooks[0], true, true);
} }

33
src/tooltips.cc

@ -50,20 +50,35 @@ void Tooltip::show(bool disregard_drawn) {
window->set_accept_focus(false); window->set_accept_focus(false);
window->set_skip_taskbar_hint(true); window->set_skip_taskbar_hint(true);
window->set_default_size(0, 0); window->set_default_size(0, 0);
window->get_style_context()->add_class("juci_tooltip_window");
auto visual = window->get_screen()->get_rgba_visual();
if(visual)
gtk_widget_set_visual(reinterpret_cast<GtkWidget*>(window->gobj()), visual->gobj());
auto box=Gtk::manage(new Gtk::Box());
box->get_style_context()->add_class("juci_tooltip_box");
window->add(*box);
tooltip_widget=std::make_unique<Gtk::TextView>(create_tooltip_buffer()); auto buffer=create_tooltip_buffer();
wrap_lines(tooltip_widget->get_buffer()); wrap_lines(buffer);
tooltip_widget->set_editable(false); auto tooltip_text_view=Gtk::manage(new Gtk::TextView(buffer));
tooltip_text_view->set_editable(false);
if(text_view) { if(text_view) {
auto tag=text_view->get_buffer()->get_tag_table()->lookup("def:note_background"); auto tag=text_view->get_buffer()->get_tag_table()->lookup("def:note_background");
tooltip_widget->override_background_color(tag->property_background_rgba()); box->override_background_color(tag->property_background_rgba());
tooltip_text_view->override_background_color(tag->property_background_rgba());
} }
window->add(*tooltip_widget); else
box->override_background_color(tooltip_text_view->get_style_context()->get_background_color());
box->add(*tooltip_text_view);
auto layout=Pango::Layout::create(tooltip_widget->get_pango_context()); auto layout=Pango::Layout::create(tooltip_text_view->get_pango_context());
layout->set_text(tooltip_widget->get_buffer()->get_text()); layout->set_text(buffer->get_text());
layout->get_pixel_size(size.first, size.second); layout->get_pixel_size(size.first, size.second);
size.second+=2; size.first+=6; // 2xpadding
size.second+=8; // 2xpadding + 2
window->signal_realize().connect([this] { window->signal_realize().connect([this] {
if(!text_view) { if(!text_view) {
@ -71,6 +86,7 @@ void Tooltip::show(bool disregard_drawn) {
if(dialog && dialog->is_visible()) { if(dialog && dialog->is_visible()) {
int root_x, root_y; int root_x, root_y;
dialog->get_position(root_x, root_y); dialog->get_position(root_x, root_y);
root_x-=3; // -1xpadding
position.first=root_x; position.first=root_x;
position.second=root_y-size.second; position.second=root_y-size.second;
if(position.second<0) if(position.second<0)
@ -91,6 +107,7 @@ void Tooltip::show(bool disregard_drawn) {
auto activation_rectangle_x=std::max(activation_rectangle.get_x(), visible_x); auto activation_rectangle_x=std::max(activation_rectangle.get_x(), visible_x);
text_view->get_window(Gtk::TextWindowType::TEXT_WINDOW_TEXT)->get_root_coords(activation_rectangle_x, activation_rectangle.get_y(), root_x, root_y); text_view->get_window(Gtk::TextWindowType::TEXT_WINDOW_TEXT)->get_root_coords(activation_rectangle_x, activation_rectangle.get_y(), root_x, root_y);
root_x-=3; // -1xpadding
if(root_y<size.second) if(root_y<size.second)
root_x+=visible_rect.get_width()*0.1; root_x+=visible_rect.get_width()*0.1;
} }

1
src/tooltips.h

@ -22,7 +22,6 @@ private:
void wrap_lines(Glib::RefPtr<Gtk::TextBuffer> text_buffer); void wrap_lines(Glib::RefPtr<Gtk::TextBuffer> text_buffer);
std::function<Glib::RefPtr<Gtk::TextBuffer>()> create_tooltip_buffer; std::function<Glib::RefPtr<Gtk::TextBuffer>()> create_tooltip_buffer;
std::unique_ptr<Gtk::TextView> tooltip_widget;
Gtk::TextView *text_view; Gtk::TextView *text_view;
std::pair<int, int> size; std::pair<int, int> size;
std::pair<int, int> position; std::pair<int, int> position;

18
src/window.cc

@ -15,6 +15,24 @@ Window::Window() {
set_title("juCi++"); set_title("juCi++");
set_events(Gdk::POINTER_MOTION_MASK|Gdk::FOCUS_CHANGE_MASK|Gdk::SCROLL_MASK|Gdk::LEAVE_NOTIFY_MASK); set_events(Gdk::POINTER_MOTION_MASK|Gdk::FOCUS_CHANGE_MASK|Gdk::SCROLL_MASK|Gdk::LEAVE_NOTIFY_MASK);
auto provider = Gtk::CssProvider::create();
auto screen = get_screen();
std::string border_radius_style;
if(screen->get_rgba_visual())
border_radius_style="border-radius: 5px; ";
#if GTK_VERSION_GE(3, 20)
std::string notebook_style(".juci_notebook tab {border-radius: 5px 5px 0 0; padding: 0 4px; margin: 0;}");
#else
std::string notebook_style(".juci_notebook {-GtkNotebook-tab-overlap: 0px;} .juci_notebook tab {border-radius: 5px 5px 0 0; padding: 4px 4px;}");
#endif
provider->load_from_data(R"(
.juci_directories *:selected {border-left-color: inherit; color: inherit; background-color: rgba(128, 128, 128 , 0.2); background-image: inherit;}
)"+notebook_style+R"(
.juci_tooltip_window {background-color: transparent;}
.juci_tooltip_box {)"+border_radius_style+R"(padding: 3px;}
)");
get_style_context()->add_provider_for_screen(screen, provider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
set_menu_actions(); set_menu_actions();
configure(); configure();
Menu::get().toggle_menu_items(); Menu::get().toggle_menu_items();

Loading…
Cancel
Save