Как создать окно типа Google Chrome в GTK + - PullRequest
4 голосов
/ 31 января 2011

Я довольно новичок в библиотеках GTK и пытаюсь разработать небольшой проект на GTK + 2 с его C API. Требуется сделать это в окне типа Google-Chrome . Он будет иметь свою собственную строку заголовка и элементы управления с разными цветами.

Кто-нибудь может мне помочь с любым учебником или справочником или любым открытым кодом, который уже реализовал это?

Я ценю вашу помощь.

Ответы [ 5 ]

5 голосов
/ 31 января 2011

То, что вы хотите сделать, это пользовательское оформление.

Насколько я понимаю, вы должны установить False в качестве значения False в окне, чтобы WM не добавлял границу / строку заголовка в ваши окна, а затемсобственный подкласс Window, который самостоятельно обрабатывает рисование своих украшений методом paint().

Не тривиально.

5 голосов
/ 31 января 2011

Поскольку браузер Crhomium является проектом с открытым исходным кодом, его источник доступен здесь: http://src.chromium.org/viewvc/chrome/trunk/

То, что вы ищете, по определению должно быть доступно там:)

2 голосов
/ 21 июня 2012

то, что вы можете искать, является примером тачки gtk.В нем показано, как создать фасонное окно с использованием файла xpm. Пример есть в C, Perl и Python.Я сделал один из них несколько лет назад, но не использовал его в течение некоторого времени.

Вот версия C ...

Вот пример Python ...

Вот учебник по растровым изображениям и GTK +

Просто создайте свое изображение с помощью Gimp и сохраните его как файл xpm.

1 голос
/ 17 апреля 2013

В дополнение к ответу 246tNt, Chrome использует Skia. Вот пример (Gtk + 3, Каир, Скиа):

  g_signal_connect(window_container_, "draw",
                   G_CALLBACK(OnWindowContainerDraw), NULL);

gboolean OnWindowContainerDraw(GtkWidget* widget,
                               cairo_t *cr) {                  
  SkBitmap bitmap;
  bitmap.setConfig(SkBitmap::kARGB_8888_Config, 100, 100);
  bitmap.allocPixels();

  SkDevice device(bitmap);
  SkCanvas canvas(&device);
  SkPaint paint;
  SkRect r;

  paint.setARGB(255, 255, 255, 255);
  r.set(10, 10, 20, 20);
  canvas.drawRect(r, paint);

  cairo_surface_t* surface = cairo_image_surface_create_for_data(
      (unsigned char*)bitmap.getPixels(), CAIRO_FORMAT_ARGB32,
      bitmap.width(), bitmap.height(), bitmap.rowBytes());
  cairo_surface_mark_dirty(surface);
  cairo_set_source_surface(cr, surface, 0, 0);
  cairo_paint(cr);

  return FALSE;
}
0 голосов
/ 31 января 2011

Я немного сбит с толку относительно того, что вы на самом деле ищете, но я думаю, что вам нужен элемент управления, который обеспечивает веб-браузер внутри вашего окна.

WebKitGTK + является одним из таких элементов управления:http://webkitgtk.org/

GtkMozEmbed - это другое: http://www.mozilla.org/unix/gtk-embedding.html

В прошлый раз, когда я сделал это, мне пришлось попробовать несколько, чтобы найти тот, который работал.Элементы управления имеют различные ошибки и поддерживают HTML (и Flash.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...