160 // platformContext() returns 0 when printing
161 if (paintInfo.context().paintingDisabled() || !paintInfo.context().platformContext()) {
162 return false;
163 }
164
165 auto jRenderTheme = paintInfo.context().platformContext()->jRenderTheme();
166 if (!jRenderTheme) {
167 return false;
168 }
169
170 int state = createWidgetState(object);
171 RGBA32 bgColor = object.style().visitedDependentColor(
172 widgetIndex == JNI_EXPAND(MENU_LIST_BUTTON)
173 ? CSSPropertyColor
174 : CSSPropertyBackgroundColor
175 ).rgb();
176
177 JNIEnv* env = WebCore_GetJavaEnv();
178
179 WTF::Vector<jbyte> extParams;
180 if (JNI_EXPAND(SLIDER) == widgetIndex) {
181 HTMLInputElement& input = downcast<RenderSlider>(object).element();
182
183 extParams.grow(sizeof(jint) + 3 * sizeof(jfloat));
184 jbyte *data = extParams.data();
185 auto isVertical = jint((object.style().appearance() == SliderHorizontalPart)
186 ? 0
187 : 1);
188 memcpy(data, &isVertical, sizeof(isVertical));
189 data += sizeof(jint);
190
191 auto maximum = jfloat(input.maximum());
192 memcpy(data, &maximum, sizeof(maximum));
193 data += sizeof(jfloat);
194
195 auto minimum = jfloat(input.minimum());
196 memcpy(data, &minimum, sizeof(minimum));
197 data += sizeof(jfloat);
198
199 auto valueAsNumber = jfloat(input.valueAsNumber());
200 memcpy(data, &valueAsNumber, sizeof(valueAsNumber));
201 } else if (JNI_EXPAND(PROGRESS_BAR) == widgetIndex) {
202 #if ENABLE(PROGRESS_ELEMENT)
203 RenderProgress& renderProgress = downcast<RenderProgress>(object);
204
205 extParams.grow(sizeof(jint) + 3*sizeof(jfloat));
206 jbyte *data = extParams.data();
207 auto isDeterminate = jint(renderProgress.isDeterminate() ? 1 : 0);
208 memcpy(data, &isDeterminate, sizeof(isDeterminate));
209 data += sizeof(jint);
210
211 auto position = jfloat(renderProgress.position());
212 memcpy(data, &position, sizeof(position));
213 data += sizeof(jfloat);
214
215 auto animationProgress = jfloat(renderProgress.animationProgress());
216 memcpy(data, &animationProgress, sizeof(animationProgress));
217 data += sizeof(jfloat);
218
219 auto animationStartTime = jfloat(renderProgress.animationStartTime());
220 memcpy(data, &animationStartTime, sizeof(animationStartTime));
221 #endif
222 #if ENABLE(METER_ELEMENT)
223 } else if (JNI_EXPAND(METER) == widgetIndex) {
224 jfloat value = 0;
225 jint region = 0;
226 if (object.isMeter()) {
227 HTMLMeterElement* meter = static_cast<HTMLMeterElement*>(object.node());
228 value = meter->valueRatio();
229 region = meter->gaugeRegion();
230 #if ENABLE(PROGRESS_ELEMENT)
231 } else if (object.isProgress()) {
232 RenderProgress& renderProgress = downcast<RenderProgress>(object);
233 value = jfloat(renderProgress.position());
234 #endif
235 }
236
237 extParams.grow(sizeof(jfloat) + sizeof(jint));
238 jbyte *data = extParams.data();
239 memcpy(data, &value, sizeof(value));
240 data += sizeof(jfloat);
241
242 memcpy(data, ®ion, sizeof(region));
243 #endif
244 }
245
246 static jmethodID mid = env->GetMethodID(getJRenderThemeClass(), "createWidget",
247 "(JIIIIILjava/nio/ByteBuffer;)Lcom/sun/webkit/graphics/Ref;");
248 ASSERT(mid);
249
250 RefPtr<RQRef> widgetRef = RQRef::create(
251 env->CallObjectMethod(jobject(*jRenderTheme), mid,
|
160 // platformContext() returns 0 when printing
161 if (paintInfo.context().paintingDisabled() || !paintInfo.context().platformContext()) {
162 return false;
163 }
164
165 auto jRenderTheme = paintInfo.context().platformContext()->jRenderTheme();
166 if (!jRenderTheme) {
167 return false;
168 }
169
170 int state = createWidgetState(object);
171 RGBA32 bgColor = object.style().visitedDependentColor(
172 widgetIndex == JNI_EXPAND(MENU_LIST_BUTTON)
173 ? CSSPropertyColor
174 : CSSPropertyBackgroundColor
175 ).rgb();
176
177 JNIEnv* env = WebCore_GetJavaEnv();
178
179 WTF::Vector<jbyte> extParams;
180 if (JNI_EXPAND(SLIDER) == widgetIndex && is<RenderSlider>(object)) {
181 HTMLInputElement& input = downcast<RenderSlider>(object).element();
182
183 extParams.grow(sizeof(jint) + 3 * sizeof(jfloat));
184 jbyte *data = extParams.data();
185 auto isVertical = jint((object.style().appearance() == SliderHorizontalPart)
186 ? 0
187 : 1);
188 memcpy(data, &isVertical, sizeof(isVertical));
189 data += sizeof(jint);
190
191 auto maximum = jfloat(input.maximum());
192 memcpy(data, &maximum, sizeof(maximum));
193 data += sizeof(jfloat);
194
195 auto minimum = jfloat(input.minimum());
196 memcpy(data, &minimum, sizeof(minimum));
197 data += sizeof(jfloat);
198
199 auto valueAsNumber = jfloat(input.valueAsNumber());
200 memcpy(data, &valueAsNumber, sizeof(valueAsNumber));
201 } else if (JNI_EXPAND(PROGRESS_BAR) == widgetIndex) {
202 #if ENABLE(PROGRESS_ELEMENT)
203 if (is<RenderProgress>(object)) {
204 RenderProgress& renderProgress = downcast<RenderProgress>(object);
205
206 extParams.grow(sizeof(jint) + 3*sizeof(jfloat));
207 jbyte *data = extParams.data();
208 auto isDeterminate = jint(renderProgress.isDeterminate() ? 1 : 0);
209 memcpy(data, &isDeterminate, sizeof(isDeterminate));
210 data += sizeof(jint);
211
212 auto position = jfloat(renderProgress.position());
213 memcpy(data, &position, sizeof(position));
214 data += sizeof(jfloat);
215
216 auto animationProgress = jfloat(renderProgress.animationProgress());
217 memcpy(data, &animationProgress, sizeof(animationProgress));
218 data += sizeof(jfloat);
219
220 auto animationStartTime = jfloat(renderProgress.animationStartTime());
221 memcpy(data, &animationStartTime, sizeof(animationStartTime));
222 }
223 #endif
224 #if ENABLE(METER_ELEMENT)
225 } else if (JNI_EXPAND(METER) == widgetIndex) {
226 jfloat value = 0;
227 jint region = 0;
228 if (object.isMeter()) {
229 HTMLMeterElement* meter = static_cast<HTMLMeterElement*>(object.node());
230 value = meter->valueRatio();
231 region = meter->gaugeRegion();
232 #if ENABLE(PROGRESS_ELEMENT)
233 } else if (is<RenderProgress>(object>)) {
234 RenderProgress& renderProgress = downcast<RenderProgress>(object);
235 value = jfloat(renderProgress.position());
236 #endif
237 }
238
239 extParams.grow(sizeof(jfloat) + sizeof(jint));
240 jbyte *data = extParams.data();
241 memcpy(data, &value, sizeof(value));
242 data += sizeof(jfloat);
243
244 memcpy(data, ®ion, sizeof(region));
245 #endif
246 }
247
248 static jmethodID mid = env->GetMethodID(getJRenderThemeClass(), "createWidget",
249 "(JIIIIILjava/nio/ByteBuffer;)Lcom/sun/webkit/graphics/Ref;");
250 ASSERT(mid);
251
252 RefPtr<RQRef> widgetRef = RQRef::create(
253 env->CallObjectMethod(jobject(*jRenderTheme), mid,
|