// Copyright (c) 2010 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef GFX_NATIVE_THEME_LINUX_H_ #define GFX_NATIVE_THEME_LINUX_H_ #include "base/basictypes.h" #include "skia/ext/platform_canvas.h" namespace skia { class PlatformCanvas; } namespace gfx { class Rect; class Size; // Linux theming API. class NativeThemeLinux { public: // Gets our singleton instance. static NativeThemeLinux* instance(); // The part to be painted / sized. enum Part { kScrollbarDownArrow, kScrollbarLeftArrow, kScrollbarRightArrow, kScrollbarUpArrow, kScrollbarHorizontalThumb, kScrollbarVerticalThumb, kScrollbarHorizontalTrack, kScrollbarVerticalTrack }; // The state of the part. enum State { kDisabled, kHover, kNormal, kPressed, }; // Extra data needed to draw scrollbar track correctly. struct ScrollbarTrackExtraParams { int track_x; int track_y; int track_width; int track_height; }; union ExtraParams { ScrollbarTrackExtraParams scrollbar_track; }; // Return the size of the part. virtual gfx::Size GetSize(Part part) const; // Paint the part to the canvas. virtual void Paint(skia::PlatformCanvas* canvas, Part part, State state, const gfx::Rect& rect, const ExtraParams& extra); // Supports theme specific colors. void SetScrollbarColors(unsigned inactive_color, unsigned active_color, unsigned track_color) const; protected: NativeThemeLinux(); virtual ~NativeThemeLinux(); // Draw the arrow. virtual void PaintArrowButton( skia::PlatformCanvas* gc, const gfx::Rect& rect, Part direction, State state); // Paint the track. Done before the thumb so that it can contain alpha. virtual void PaintTrack(skia::PlatformCanvas* canvas, Part part, State state, const ScrollbarTrackExtraParams& extra_params, const gfx::Rect& rect); // Draw the thumb over the track. virtual void PaintThumb(skia::PlatformCanvas* canvas, Part part, State state, const gfx::Rect& rect); private: void DrawVertLine(SkCanvas* canvas, int x, int y1, int y2, const SkPaint& paint) const; void DrawHorizLine(SkCanvas* canvas, int x1, int x2, int y, const SkPaint& paint) const; void DrawBox(SkCanvas* canvas, const gfx::Rect& rect, const SkPaint& paint) const; SkScalar Clamp(SkScalar value, SkScalar min, SkScalar max) const; SkColor SaturateAndBrighten(SkScalar* hsv, SkScalar saturate_amount, SkScalar brighten_amount) const; SkColor OutlineColor(SkScalar* hsv1, SkScalar* hsv2) const; static unsigned int scrollbar_width_; static unsigned int button_length_; static unsigned int thumb_inactive_color_; static unsigned int thumb_active_color_; static unsigned int track_color_; DISALLOW_COPY_AND_ASSIGN(NativeThemeLinux); }; } // namespace gfx #endif // GFX_NATIVE_THEME_LINUX_H_