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

Side by Side Diff: chrome/browser/chrome_page_zoom.cc

Issue 847703003: Refactor to move chrome_page_zoom functions to components/ui/zoom. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix Mac compile. Created 5 years, 11 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 | « chrome/browser/chrome_page_zoom.h ('k') | chrome/browser/chrome_page_zoom_constants.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/chrome_page_zoom.h"
6
7 #include <algorithm>
8 #include <cmath>
9
10 #include "base/prefs/pref_service.h"
11 #include "chrome/browser/chrome_page_zoom_constants.h"
12 #include "components/ui/zoom/zoom_controller.h"
13 #include "content/public/browser/host_zoom_map.h"
14 #include "content/public/browser/render_view_host.h"
15 #include "content/public/browser/user_metrics.h"
16 #include "content/public/browser/web_contents.h"
17 #include "content/public/common/page_zoom.h"
18 #include "content/public/common/renderer_preferences.h"
19
20 using base::UserMetricsAction;
21
22 namespace chrome_page_zoom {
23
24 enum PageZoomValueType {
25 PAGE_ZOOM_VALUE_TYPE_FACTOR,
26 PAGE_ZOOM_VALUE_TYPE_LEVEL,
27 };
28
29 std::vector<double> PresetZoomValues(PageZoomValueType value_type,
30 double custom_value) {
31 // Generate a vector of zoom values from an array of known preset
32 // factors. The values in content::kPresetZoomFactors will already be in
33 // sorted order.
34 std::vector<double> zoom_values;
35 bool found_custom = false;
36 for (size_t i = 0; i < kPresetZoomFactorsSize; i++) {
37 double zoom_value = kPresetZoomFactors[i];
38 if (value_type == PAGE_ZOOM_VALUE_TYPE_LEVEL)
39 zoom_value = content::ZoomFactorToZoomLevel(zoom_value);
40 if (content::ZoomValuesEqual(zoom_value, custom_value))
41 found_custom = true;
42 zoom_values.push_back(zoom_value);
43 }
44 // If the preset array did not contain the custom value, append it to the
45 // vector and then sort.
46 double min = value_type == PAGE_ZOOM_VALUE_TYPE_LEVEL ?
47 content::ZoomFactorToZoomLevel(content::kMinimumZoomFactor) :
48 content::kMinimumZoomFactor;
49 double max = value_type == PAGE_ZOOM_VALUE_TYPE_LEVEL ?
50 content::ZoomFactorToZoomLevel(content::kMaximumZoomFactor) :
51 content::kMaximumZoomFactor;
52 if (!found_custom && custom_value > min && custom_value < max) {
53 zoom_values.push_back(custom_value);
54 std::sort(zoom_values.begin(), zoom_values.end());
55 }
56 return zoom_values;
57 }
58
59 std::vector<double> PresetZoomFactors(double custom_factor) {
60 return PresetZoomValues(PAGE_ZOOM_VALUE_TYPE_FACTOR, custom_factor);
61 }
62
63 std::vector<double> PresetZoomLevels(double custom_level) {
64 return PresetZoomValues(PAGE_ZOOM_VALUE_TYPE_LEVEL, custom_level);
65 }
66
67 void Zoom(content::WebContents* web_contents, content::PageZoom zoom) {
68 ui_zoom::ZoomController* zoom_controller =
69 ui_zoom::ZoomController::FromWebContents(web_contents);
70 DCHECK(zoom_controller);
71
72 double current_zoom_level = zoom_controller->GetZoomLevel();
73 double default_zoom_level = zoom_controller->GetDefaultZoomLevel();
74
75 if (zoom == content::PAGE_ZOOM_RESET) {
76 zoom_controller->SetZoomLevel(default_zoom_level);
77 content::RecordAction(UserMetricsAction("ZoomNormal"));
78 return;
79 }
80
81 // Generate a vector of zoom levels from an array of known presets along with
82 // the default level added if necessary.
83 std::vector<double> zoom_levels = PresetZoomLevels(default_zoom_level);
84
85 if (zoom == content::PAGE_ZOOM_OUT) {
86 // Iterate through the zoom levels in reverse order to find the next
87 // lower level based on the current zoom level for this page.
88 for (std::vector<double>::reverse_iterator i = zoom_levels.rbegin();
89 i != zoom_levels.rend(); ++i) {
90 double zoom_level = *i;
91 if (content::ZoomValuesEqual(zoom_level, current_zoom_level))
92 continue;
93 if (zoom_level < current_zoom_level) {
94 zoom_controller->SetZoomLevel(zoom_level);
95 content::RecordAction(UserMetricsAction("ZoomMinus"));
96 return;
97 }
98 content::RecordAction(UserMetricsAction("ZoomMinus_AtMinimum"));
99 }
100 } else {
101 // Iterate through the zoom levels in normal order to find the next
102 // higher level based on the current zoom level for this page.
103 for (std::vector<double>::const_iterator i = zoom_levels.begin();
104 i != zoom_levels.end(); ++i) {
105 double zoom_level = *i;
106 if (content::ZoomValuesEqual(zoom_level, current_zoom_level))
107 continue;
108 if (zoom_level > current_zoom_level) {
109 zoom_controller->SetZoomLevel(zoom_level);
110 content::RecordAction(UserMetricsAction("ZoomPlus"));
111 return;
112 }
113 }
114 content::RecordAction(UserMetricsAction("ZoomPlus_AtMaximum"));
115 }
116 }
117
118 } // namespace chrome_page_zoom
OLDNEW
« no previous file with comments | « chrome/browser/chrome_page_zoom.h ('k') | chrome/browser/chrome_page_zoom_constants.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698