| OLD | NEW |
| 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/autocomplete/autocomplete_popup_view_gtk.h" | 5 #include "chrome/browser/autocomplete/autocomplete_popup_view_gtk.h" |
| 6 | 6 |
| 7 #include <gtk/gtk.h> | 7 #include <gtk/gtk.h> |
| 8 | 8 |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 | 10 |
| (...skipping 346 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 357 const GURL url(match.destination_url); | 357 const GURL url(match.destination_url); |
| 358 std::wstring keyword; | 358 std::wstring keyword; |
| 359 const bool is_keyword_hint = model_->GetKeywordForMatch(match, &keyword); | 359 const bool is_keyword_hint = model_->GetKeywordForMatch(match, &keyword); |
| 360 edit_view_->OpenURL(url, disposition, match.transition, GURL(), line, | 360 edit_view_->OpenURL(url, disposition, match.transition, GURL(), line, |
| 361 is_keyword_hint ? std::wstring() : keyword); | 361 is_keyword_hint ? std::wstring() : keyword); |
| 362 } | 362 } |
| 363 | 363 |
| 364 gboolean AutocompletePopupViewGtk::HandleMotion(GtkWidget* widget, | 364 gboolean AutocompletePopupViewGtk::HandleMotion(GtkWidget* widget, |
| 365 GdkEventMotion* event) { | 365 GdkEventMotion* event) { |
| 366 // TODO(deanm): Windows has a bunch of complicated logic here. | 366 // TODO(deanm): Windows has a bunch of complicated logic here. |
| 367 size_t line = LineFromY(static_cast<int>(event->y)); | 367 size_t line = LineFromY(event->y); |
| 368 // There is both a hovered and selected line, hovered just means your mouse | 368 // There is both a hovered and selected line, hovered just means your mouse |
| 369 // is over it, but selected is what's showing in the location edit. | 369 // is over it, but selected is what's showing in the location edit. |
| 370 model_->SetHoveredLine(line); | 370 model_->SetHoveredLine(line); |
| 371 // Select the line if the user has the left mouse button down. | 371 // Select the line if the user has the left mouse button down. |
| 372 if (event->state & GDK_BUTTON1_MASK) | 372 if (event->state & GDK_BUTTON1_MASK) |
| 373 model_->SetSelectedLine(line, false); | 373 model_->SetSelectedLine(line, false); |
| 374 return TRUE; | 374 return TRUE; |
| 375 } | 375 } |
| 376 | 376 |
| 377 gboolean AutocompletePopupViewGtk::HandleButtonPress(GtkWidget* widget, | 377 gboolean AutocompletePopupViewGtk::HandleButtonPress(GtkWidget* widget, |
| 378 GdkEventButton* event) { | 378 GdkEventButton* event) { |
| 379 // Very similar to HandleMotion. | 379 // Very similar to HandleMotion. |
| 380 size_t line = LineFromY(static_cast<int>(event->y)); | 380 size_t line = LineFromY(event->y); |
| 381 model_->SetHoveredLine(line); | 381 model_->SetHoveredLine(line); |
| 382 if (event->button == 1) | 382 if (event->button == 1) |
| 383 model_->SetSelectedLine(line, false); | 383 model_->SetSelectedLine(line, false); |
| 384 return TRUE; | 384 return TRUE; |
| 385 } | 385 } |
| 386 | 386 |
| 387 gboolean AutocompletePopupViewGtk::HandleButtonRelease(GtkWidget* widget, | 387 gboolean AutocompletePopupViewGtk::HandleButtonRelease(GtkWidget* widget, |
| 388 GdkEventButton* event) { | 388 GdkEventButton* event) { |
| 389 size_t line = LineFromY(static_cast<int>(event->y)); | 389 size_t line = LineFromY(event->y); |
| 390 switch (event->button) { | 390 switch (event->button) { |
| 391 case 1: // Left click. | 391 case 1: // Left click. |
| 392 AcceptLine(line, CURRENT_TAB); | 392 AcceptLine(line, CURRENT_TAB); |
| 393 break; | 393 break; |
| 394 case 2: // Middle click. | 394 case 2: // Middle click. |
| 395 AcceptLine(line, NEW_BACKGROUND_TAB); | 395 AcceptLine(line, NEW_BACKGROUND_TAB); |
| 396 break; | 396 break; |
| 397 default: | 397 default: |
| 398 // Don't open the result. | 398 // Don't open the result. |
| 399 break; | 399 break; |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 458 // Draw the icon for this result. | 458 // Draw the icon for this result. |
| 459 DrawFullPixbuf(drawable, gc, IconForMatch(match, is_selected), | 459 DrawFullPixbuf(drawable, gc, IconForMatch(match, is_selected), |
| 460 icon_start_x, line_rect.y() + kIconTopPadding); | 460 icon_start_x, line_rect.y() + kIconTopPadding); |
| 461 | 461 |
| 462 // Draw the results text vertically centered in the results space. | 462 // Draw the results text vertically centered in the results space. |
| 463 // First draw the contents / url, but don't let it take up the whole width | 463 // First draw the contents / url, but don't let it take up the whole width |
| 464 // if there is also a description to be shown. | 464 // if there is also a description to be shown. |
| 465 bool has_description = !match.description.empty(); | 465 bool has_description = !match.description.empty(); |
| 466 int text_width = window_rect.width() - (kIconAreaWidth + kRightPadding); | 466 int text_width = window_rect.width() - (kIconAreaWidth + kRightPadding); |
| 467 int allocated_content_width = has_description ? | 467 int allocated_content_width = has_description ? |
| 468 static_cast<int>(text_width * kContentWidthPercentage) : text_width; | 468 text_width * kContentWidthPercentage : text_width; |
| 469 pango_layout_set_width(layout_, allocated_content_width * PANGO_SCALE); | 469 pango_layout_set_width(layout_, allocated_content_width * PANGO_SCALE); |
| 470 | 470 |
| 471 // Note: We force to URL to LTR for all text directions. | 471 // Note: We force to URL to LTR for all text directions. |
| 472 SetupLayoutForMatch(layout_, match.contents, match.contents_class, | 472 SetupLayoutForMatch(layout_, match.contents, match.contents_class, |
| 473 &kContentTextColor, std::string()); | 473 &kContentTextColor, std::string()); |
| 474 | 474 |
| 475 int actual_content_width, actual_content_height; | 475 int actual_content_width, actual_content_height; |
| 476 pango_layout_get_size(layout_, | 476 pango_layout_get_size(layout_, |
| 477 &actual_content_width, &actual_content_height); | 477 &actual_content_width, &actual_content_height); |
| 478 actual_content_width /= PANGO_SCALE; | 478 actual_content_width /= PANGO_SCALE; |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 512 // static | 512 // static |
| 513 AutocompletePopupView* AutocompletePopupView::CreatePopupView( | 513 AutocompletePopupView* AutocompletePopupView::CreatePopupView( |
| 514 const gfx::Font& font, | 514 const gfx::Font& font, |
| 515 AutocompleteEditView* edit_view, | 515 AutocompleteEditView* edit_view, |
| 516 AutocompleteEditModel* edit_model, | 516 AutocompleteEditModel* edit_model, |
| 517 Profile* profile, | 517 Profile* profile, |
| 518 AutocompletePopupPositioner* popup_positioner) { | 518 AutocompletePopupPositioner* popup_positioner) { |
| 519 return new AutocompletePopupViewGtk(edit_view, edit_model, profile, | 519 return new AutocompletePopupViewGtk(edit_view, edit_model, profile, |
| 520 popup_positioner); | 520 popup_positioner); |
| 521 } | 521 } |
| OLD | NEW |