Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(178)

Side by Side Diff: chrome/browser/ui/libgtkui/native_theme_gtk3.cc

Issue 2668113003: Gtk3: Let NativeThemeBase render arrows on scrollbar buttons (Closed)
Patch Set: Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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/ui/libgtkui/native_theme_gtk3.h" 5 #include "chrome/browser/ui/libgtkui/native_theme_gtk3.h"
6 6
7 #include <gtk/gtk.h> 7 #include <gtk/gtk.h>
8 8
9 #include "chrome/browser/ui/libgtkui/chrome_gtk_frame.h" 9 #include "chrome/browser/ui/libgtkui/chrome_gtk_frame.h"
10 #include "chrome/browser/ui/libgtkui/chrome_gtk_menu_subclasses.h" 10 #include "chrome/browser/ui/libgtkui/chrome_gtk_menu_subclasses.h"
(...skipping 342 matching lines...) Expand 10 before | Expand all | Expand 10 after
353 g_type_class_unref(g_type_class_ref(gtk_menu_get_type())); 353 g_type_class_unref(g_type_class_ref(gtk_menu_get_type()));
354 g_type_class_unref(g_type_class_ref(gtk_menu_item_get_type())); 354 g_type_class_unref(g_type_class_ref(gtk_menu_item_get_type()));
355 g_type_class_unref(g_type_class_ref(gtk_entry_get_type())); 355 g_type_class_unref(g_type_class_ref(gtk_entry_get_type()));
356 g_type_class_unref(g_type_class_ref(gtk_info_bar_get_type())); 356 g_type_class_unref(g_type_class_ref(gtk_info_bar_get_type()));
357 g_type_class_unref(g_type_class_ref(gtk_tooltip_get_type())); 357 g_type_class_unref(g_type_class_ref(gtk_tooltip_get_type()));
358 g_type_class_unref(g_type_class_ref(gtk_scrollbar_get_type())); 358 g_type_class_unref(g_type_class_ref(gtk_scrollbar_get_type()));
359 g_type_class_unref(g_type_class_ref(gtk_toolbar_get_type())); 359 g_type_class_unref(g_type_class_ref(gtk_toolbar_get_type()));
360 g_type_class_unref(g_type_class_ref(gtk_text_view_get_type())); 360 g_type_class_unref(g_type_class_ref(gtk_text_view_get_type()));
361 g_type_class_unref(g_type_class_ref(gtk_separator_get_type())); 361 g_type_class_unref(g_type_class_ref(gtk_separator_get_type()));
362 g_type_class_unref(g_type_class_ref(gtk_menu_bar_get_type())); 362 g_type_class_unref(g_type_class_ref(gtk_menu_bar_get_type()));
363 g_type_class_unref(g_type_class_ref(gtk_arrow_get_type()));
364 g_type_class_unref(g_type_class_ref(gtk_scrolled_window_get_type())); 363 g_type_class_unref(g_type_class_ref(gtk_scrolled_window_get_type()));
365 g_type_class_unref(g_type_class_ref(gtk_range_get_type())); 364 g_type_class_unref(g_type_class_ref(gtk_range_get_type()));
366 365
367 g_signal_connect_after(gtk_settings_get_default(), "notify::gtk-theme-name", 366 g_signal_connect_after(gtk_settings_get_default(), "notify::gtk-theme-name",
368 G_CALLBACK(OnThemeChanged), this); 367 G_CALLBACK(OnThemeChanged), this);
369 } 368 }
370 369
371 // This doesn't actually get called 370 // This doesn't actually get called
372 NativeThemeGtk3::~NativeThemeGtk3() {} 371 NativeThemeGtk3::~NativeThemeGtk3() {}
373 372
(...skipping 14 matching lines...) Expand all
388 void NativeThemeGtk3::PaintArrowButton(SkCanvas* canvas, 387 void NativeThemeGtk3::PaintArrowButton(SkCanvas* canvas,
389 const gfx::Rect& rect, 388 const gfx::Rect& rect,
390 Part direction, 389 Part direction,
391 State state) const { 390 State state) const {
392 auto context = GetStyleContextFromCss( 391 auto context = GetStyleContextFromCss(
393 GtkVersionCheck(3, 20) 392 GtkVersionCheck(3, 20)
394 ? "GtkScrollbar#scrollbar #contents GtkButton#button" 393 ? "GtkScrollbar#scrollbar #contents GtkButton#button"
395 : "GtkRange.scrollbar.button"); 394 : "GtkRange.scrollbar.button");
396 GtkStateFlags state_flags = StateToStateFlags(state); 395 GtkStateFlags state_flags = StateToStateFlags(state);
397 gtk_style_context_set_state(context, state_flags); 396 gtk_style_context_set_state(context, state_flags);
398 SkBitmap bitmap =
399 GetWidgetBitmap(rect.size(), context, BG_RENDER_NORMAL, true);
400 397
401 gdouble angle = 0;
402 switch (direction) { 398 switch (direction) {
403 case kScrollbarUpArrow: 399 case kScrollbarUpArrow:
404 angle = 0;
405 gtk_style_context_add_class(context, GTK_STYLE_CLASS_TOP); 400 gtk_style_context_add_class(context, GTK_STYLE_CLASS_TOP);
406 break; 401 break;
407 case kScrollbarRightArrow: 402 case kScrollbarRightArrow:
408 angle = G_PI / 2;
409 gtk_style_context_add_class(context, GTK_STYLE_CLASS_RIGHT); 403 gtk_style_context_add_class(context, GTK_STYLE_CLASS_RIGHT);
410 break; 404 break;
411 case kScrollbarDownArrow: 405 case kScrollbarDownArrow:
412 angle = G_PI;
413 gtk_style_context_add_class(context, GTK_STYLE_CLASS_BOTTOM); 406 gtk_style_context_add_class(context, GTK_STYLE_CLASS_BOTTOM);
414 break; 407 break;
415 case kScrollbarLeftArrow: 408 case kScrollbarLeftArrow:
416 angle = 3 * G_PI / 2;
417 gtk_style_context_add_class(context, GTK_STYLE_CLASS_LEFT); 409 gtk_style_context_add_class(context, GTK_STYLE_CLASS_LEFT);
418 break; 410 break;
419 default: 411 default:
420 NOTREACHED(); 412 NOTREACHED();
421 } 413 }
422 414
423 CairoSurface surface(bitmap); 415 PaintWidget(canvas, rect, context, BG_RENDER_NORMAL, true);
424 416 PaintArrow(canvas, rect, direction, SkColorFromStyleContext(context));
425 auto arrow_context = AppendCssNodeToStyleContext(context, "GtkArrow#arrow");
426 gfloat arrow_scaling = 0.7; // Default scaling for a GtkArrow
427 gtk_style_context_get_style(arrow_context, "arrow-scaling", &arrow_scaling,
428 nullptr);
429 const double w = rect.width();
430 const double h = rect.height();
431 const double arrow_size = std::min(w, h) * arrow_scaling;
432 gtk_render_arrow(arrow_context, surface.cairo(), angle, (w - arrow_size) / 2,
433 (h - arrow_size) / 2, arrow_size);
434 canvas->drawBitmap(bitmap, rect.x(), rect.y());
435 } 417 }
436 418
437 void NativeThemeGtk3::PaintScrollbarTrack( 419 void NativeThemeGtk3::PaintScrollbarTrack(
438 SkCanvas* canvas, 420 SkCanvas* canvas,
439 Part part, 421 Part part,
440 State state, 422 State state,
441 const ScrollbarTrackExtraParams& extra_params, 423 const ScrollbarTrackExtraParams& extra_params,
442 const gfx::Rect& rect) const { 424 const gfx::Rect& rect) const {
443 PaintWidget(canvas, rect, 425 PaintWidget(canvas, rect, GetStyleContextFromCss(
444 GetStyleContextFromCss(GtkVersionCheck(3, 20) 426 GtkVersionCheck(3, 20)
445 ? "GtkScrollbar#scrollbar #contents #trough" 427 ? "GtkScrollbar#scrollbar #contents #trough"
446 : "GtkScrollbar.scrollbar.trough"), 428 : "GtkScrollbar.scrollbar.trough"),
447 BG_RENDER_NORMAL,true); 429 BG_RENDER_NORMAL, true);
448 } 430 }
449 431
450 void NativeThemeGtk3::PaintScrollbarThumb( 432 void NativeThemeGtk3::PaintScrollbarThumb(
451 SkCanvas* canvas, 433 SkCanvas* canvas,
452 Part part, 434 Part part,
453 State state, 435 State state,
454 const gfx::Rect& rect, 436 const gfx::Rect& rect,
455 NativeTheme::ScrollbarOverlayColorTheme theme) const { 437 NativeTheme::ScrollbarOverlayColorTheme theme) const {
456 auto context = GetStyleContextFromCss( 438 auto context = GetStyleContextFromCss(
457 GtkVersionCheck(3, 20) 439 GtkVersionCheck(3, 20)
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
564 546
565 if (frame_top_area.incognito) { 547 if (frame_top_area.incognito) {
566 bitmap = SkBitmapOperations::CreateHSLShiftedBitmap( 548 bitmap = SkBitmapOperations::CreateHSLShiftedBitmap(
567 bitmap, kDefaultTintFrameIncognito); 549 bitmap, kDefaultTintFrameIncognito);
568 } 550 }
569 551
570 canvas->drawBitmap(bitmap, rect.x(), rect.y()); 552 canvas->drawBitmap(bitmap, rect.x(), rect.y());
571 } 553 }
572 554
573 } // namespace libgtkui 555 } // namespace libgtkui
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698