summaryrefslogtreecommitdiffstats
path: root/WebCore/platform/android/RenderSkinRadio.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'WebCore/platform/android/RenderSkinRadio.cpp')
-rw-r--r--WebCore/platform/android/RenderSkinRadio.cpp83
1 files changed, 83 insertions, 0 deletions
diff --git a/WebCore/platform/android/RenderSkinRadio.cpp b/WebCore/platform/android/RenderSkinRadio.cpp
new file mode 100644
index 0000000..d610fa7
--- /dev/null
+++ b/WebCore/platform/android/RenderSkinRadio.cpp
@@ -0,0 +1,83 @@
+/* libs/WebKitLib/WebKit/WebCore/platform/android/RenderSkinRadio.cpp
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+
+#include "config.h"
+#include "Document.h"
+#include "Node.h"
+#include "PlatformGraphicsContext.h"
+#include "RenderSkinRadio.h"
+#include "SkCanvas.h"
+
+static const char* checks[] = { "res/drawable/checkbox_off_background.png", "res/drawable/checkbox_on_background.png",
+ "res/drawable/radiobutton_off_background.png", "res/drawable/radiobutton_on_background.png"};
+static const SkScalar SIZE = SkIntToScalar(19); // Default height and width - corresponds with the bitmap - perhaps we should query the bitmap.
+
+namespace WebCore {
+
+SkBitmap RenderSkinRadio::m_bitmap[4];
+bool RenderSkinRadio::m_decoded;
+
+RenderSkinRadio::RenderSkinRadio(bool isCheckBox)
+{
+ m_checked = false;
+ m_enabled = true;
+ m_isCheckBox = isCheckBox;
+}
+
+void RenderSkinRadio::Init(android::AssetManager* am)
+{
+ if (m_decoded)
+ return;
+ m_decoded = RenderSkinAndroid::DecodeBitmap(am, checks[0], &m_bitmap[0]);
+ m_decoded = RenderSkinAndroid::DecodeBitmap(am, checks[1], &m_bitmap[1]) && m_decoded;
+ m_decoded = RenderSkinAndroid::DecodeBitmap(am, checks[2], &m_bitmap[2]) && m_decoded;
+ m_decoded = RenderSkinAndroid::DecodeBitmap(am, checks[3], &m_bitmap[3]) && m_decoded;
+}
+
+
+bool RenderSkinRadio::draw(PlatformGraphicsContext* pgc)
+{
+ if (!m_decoded) // Seems like an unnecessary slowdown, since it should always decode
+ return false;
+ SkCanvas* canvas = pgc->mCanvas;
+ if (!m_enabled) {
+ SkRect r;
+ r.set(0, 0, m_size, m_size);
+ canvas->saveLayerAlpha(&r, 0x80);
+ } else {
+ canvas->save();
+ }
+ if (SIZE != m_size) {
+ SkScalar scale = SkScalarDiv(m_size, SIZE);
+ canvas->scale(scale, scale);
+ }
+ canvas->drawBitmap(m_bitmap[m_checked + 2*(!m_isCheckBox)], 0, 0, &m_paint);
+ canvas->restore();
+ return false; // True if we need to redraw
+}
+
+void RenderSkinRadio::notifyState(Node* element)
+{
+ if (!element) {
+ return;
+ }
+ m_checked = element->isChecked();
+ m_enabled = element->isEnabled();
+}
+
+} //WebCore
+