< prev index next >

src/java.desktop/unix/native/libawt_xawt/awt/gtk3_interface.c

Print this page
rev 16201 : 8170525: Fix minor issues in AWT/ECC/PKCS11 coding
Reviewed-by: vinnie, clanger, prr, ssadetsky


1997 }
1998 
1999 static gint gtk3_get_ythickness(JNIEnv *env, WidgetType widget_type)
2000 {
2001     init_containers();
2002 
2003     gtk3_widget = gtk3_get_widget(widget_type);
2004     GtkStyleContext* context = fp_gtk_widget_get_style_context (gtk3_widget);
2005     if (context) {
2006         GtkBorder padding;
2007         fp_gtk_style_context_get_padding(context, 0, &padding);
2008         return padding.top + 1;
2009     }
2010     return 0;
2011 }
2012 
2013 /*************************************************/
2014 static guint8 recode_color(gdouble channel)
2015 {
2016     guint16 result = (guint16)(channel * 65535);
2017     if (result < 0) {
2018         result = 0;
2019     } else if (result > 65535) {
2020         result = 65535;
2021     }
2022     return (guint8)( result >> 8);
2023 }
2024 
2025 static GtkStateFlags gtk3_get_state_flags(GtkStateType state_type) {
2026     switch (state_type)
2027     {
2028         case GTK_STATE_NORMAL:
2029             return GTK_STATE_FLAG_NORMAL;
2030         case GTK_STATE_ACTIVE:
2031             return GTK_STATE_FLAG_ACTIVE;
2032         case GTK_STATE_PRELIGHT:
2033             return GTK_STATE_FLAG_PRELIGHT;
2034         case GTK_STATE_SELECTED:
2035             return GTK_STATE_FLAG_SELECTED;
2036         case GTK_STATE_INSENSITIVE:
2037             return GTK_STATE_FLAG_INSENSITIVE;
2038         case GTK_STATE_INCONSISTENT:
2039             return GTK_STATE_FLAG_INCONSISTENT;


2201     green = 1.0;
2202   else if (green < 0.0)
2203     green = 0.0;
2204 
2205   blue *= k;
2206   if (blue > 1.0)
2207     blue = 1.0;
2208   else if (blue < 0.0)
2209     blue = 0.0;
2210 
2211   hls_to_rgb (&red, &green, &blue);
2212 
2213   b->red = red;
2214   b->green = green;
2215   b->blue = blue;
2216 }
2217 
2218 static GdkRGBA gtk3_get_color_for_flags(GtkStyleContext* context,
2219                                   GtkStateFlags flags, ColorType color_type) {
2220     GdkRGBA c, color;

2221 
2222     switch (color_type)
2223     {
2224         case FOREGROUND:
2225         case TEXT_FOREGROUND:
2226             fp_gtk_style_context_get_color(context, flags, &color);
2227             break;
2228         case BACKGROUND:
2229         case TEXT_BACKGROUND:
2230             fp_gtk_style_context_get_background_color(context, flags, &color);
2231             break;
2232         case LIGHT:
2233             c = gtk3_get_color_for_flags(context, flags, BACKGROUND);
2234             gtk3_style_shade(&c, &color, LIGHTNESS_MULT);
2235             break;
2236         case DARK:
2237             c = gtk3_get_color_for_flags(context, flags, BACKGROUND);
2238             gtk3_style_shade (&c, &color, DARKNESS_MULT);
2239             break;
2240         case MID:


2249         case FOCUS:
2250         case BLACK:
2251             color.red = 0;
2252             color.green = 0;
2253             color.blue = 0;
2254             break;
2255         case WHITE:
2256             color.red = 1;
2257             color.green = 1;
2258             color.blue = 1;
2259             break;
2260     }
2261     return color;
2262 }
2263 
2264 static gint gtk3_get_color_for_state(JNIEnv *env, WidgetType widget_type,
2265                               GtkStateType state_type, ColorType color_type)
2266 {
2267 
2268     gint result = 0;
2269     GdkRGBA color;
2270 
2271     GtkStateFlags flags = gtk3_get_state_flags(state_type);
2272 
2273     init_containers();
2274 
2275     gtk3_widget = gtk3_get_widget(widget_type);
2276 
2277     GtkStyleContext* context = fp_gtk_widget_get_style_context(gtk3_widget);
2278 
2279     if (widget_type == TOOL_TIP) {
2280         fp_gtk_style_context_add_class(context, "tooltip");
2281     }
2282     if (widget_type == CHECK_BOX_MENU_ITEM
2283      || widget_type == RADIO_BUTTON_MENU_ITEM) {
2284         flags &= GTK_STATE_FLAG_NORMAL | GTK_STATE_FLAG_SELECTED
2285                   | GTK_STATE_FLAG_INSENSITIVE | GTK_STATE_FLAG_FOCUSED;
2286     }
2287 
2288     color = gtk3_get_color_for_flags(context, flags, color_type);
2289 
2290     if (recode_color(color.alpha) == 0) {
2291         color = gtk3_get_color_for_flags(
2292         fp_gtk_widget_get_style_context(gtk3_get_widget(INTERNAL_FRAME)),
2293         0, BACKGROUND);
2294     }
2295 
2296     result = recode_color(color.alpha) << 24 | recode_color(color.red) << 16 |
2297              recode_color(color.green) << 8 | recode_color(color.blue);
2298 
2299     return result;
2300 }
2301 
2302 /*************************************************/
2303 static jobject create_Boolean(JNIEnv *env, jboolean boolean_value);
2304 static jobject create_Integer(JNIEnv *env, jint int_value);
2305 static jobject create_Long(JNIEnv *env, jlong long_value);
2306 static jobject create_Float(JNIEnv *env, jfloat float_value);
2307 static jobject create_Double(JNIEnv *env, jdouble double_value);
2308 static jobject create_Character(JNIEnv *env, jchar char_value);




1997 }
1998 
1999 static gint gtk3_get_ythickness(JNIEnv *env, WidgetType widget_type)
2000 {
2001     init_containers();
2002 
2003     gtk3_widget = gtk3_get_widget(widget_type);
2004     GtkStyleContext* context = fp_gtk_widget_get_style_context (gtk3_widget);
2005     if (context) {
2006         GtkBorder padding;
2007         fp_gtk_style_context_get_padding(context, 0, &padding);
2008         return padding.top + 1;
2009     }
2010     return 0;
2011 }
2012 
2013 /*************************************************/
2014 static guint8 recode_color(gdouble channel)
2015 {
2016     guint16 result = (guint16)(channel * 65535);
2017     if (result > 65535) {


2018         result = 65535;
2019     }
2020     return (guint8)( result >> 8);
2021 }
2022 
2023 static GtkStateFlags gtk3_get_state_flags(GtkStateType state_type) {
2024     switch (state_type)
2025     {
2026         case GTK_STATE_NORMAL:
2027             return GTK_STATE_FLAG_NORMAL;
2028         case GTK_STATE_ACTIVE:
2029             return GTK_STATE_FLAG_ACTIVE;
2030         case GTK_STATE_PRELIGHT:
2031             return GTK_STATE_FLAG_PRELIGHT;
2032         case GTK_STATE_SELECTED:
2033             return GTK_STATE_FLAG_SELECTED;
2034         case GTK_STATE_INSENSITIVE:
2035             return GTK_STATE_FLAG_INSENSITIVE;
2036         case GTK_STATE_INCONSISTENT:
2037             return GTK_STATE_FLAG_INCONSISTENT;


2199     green = 1.0;
2200   else if (green < 0.0)
2201     green = 0.0;
2202 
2203   blue *= k;
2204   if (blue > 1.0)
2205     blue = 1.0;
2206   else if (blue < 0.0)
2207     blue = 0.0;
2208 
2209   hls_to_rgb (&red, &green, &blue);
2210 
2211   b->red = red;
2212   b->green = green;
2213   b->blue = blue;
2214 }
2215 
2216 static GdkRGBA gtk3_get_color_for_flags(GtkStyleContext* context,
2217                                   GtkStateFlags flags, ColorType color_type) {
2218     GdkRGBA c, color;
2219     color.alpha = 1;
2220 
2221     switch (color_type)
2222     {
2223         case FOREGROUND:
2224         case TEXT_FOREGROUND:
2225             fp_gtk_style_context_get_color(context, flags, &color);
2226             break;
2227         case BACKGROUND:
2228         case TEXT_BACKGROUND:
2229             fp_gtk_style_context_get_background_color(context, flags, &color);
2230             break;
2231         case LIGHT:
2232             c = gtk3_get_color_for_flags(context, flags, BACKGROUND);
2233             gtk3_style_shade(&c, &color, LIGHTNESS_MULT);
2234             break;
2235         case DARK:
2236             c = gtk3_get_color_for_flags(context, flags, BACKGROUND);
2237             gtk3_style_shade (&c, &color, DARKNESS_MULT);
2238             break;
2239         case MID:


2248         case FOCUS:
2249         case BLACK:
2250             color.red = 0;
2251             color.green = 0;
2252             color.blue = 0;
2253             break;
2254         case WHITE:
2255             color.red = 1;
2256             color.green = 1;
2257             color.blue = 1;
2258             break;
2259     }
2260     return color;
2261 }
2262 
2263 static gint gtk3_get_color_for_state(JNIEnv *env, WidgetType widget_type,
2264                               GtkStateType state_type, ColorType color_type)
2265 {
2266 
2267     gint result = 0;

2268 
2269     GtkStateFlags flags = gtk3_get_state_flags(state_type);
2270 
2271     init_containers();
2272 
2273     gtk3_widget = gtk3_get_widget(widget_type);
2274 
2275     GtkStyleContext* context = fp_gtk_widget_get_style_context(gtk3_widget);
2276 
2277     if (widget_type == TOOL_TIP) {
2278         fp_gtk_style_context_add_class(context, "tooltip");
2279     }
2280     if (widget_type == CHECK_BOX_MENU_ITEM
2281      || widget_type == RADIO_BUTTON_MENU_ITEM) {
2282         flags &= GTK_STATE_FLAG_NORMAL | GTK_STATE_FLAG_SELECTED
2283                   | GTK_STATE_FLAG_INSENSITIVE | GTK_STATE_FLAG_FOCUSED;
2284     }
2285 
2286     GdkRGBA color = gtk3_get_color_for_flags(context, flags, color_type);
2287 
2288     if (recode_color(color.alpha) == 0) {
2289         color = gtk3_get_color_for_flags(
2290         fp_gtk_widget_get_style_context(gtk3_get_widget(INTERNAL_FRAME)),
2291         0, BACKGROUND);
2292     }
2293 
2294     result = recode_color(color.alpha) << 24 | recode_color(color.red) << 16 |
2295              recode_color(color.green) << 8 | recode_color(color.blue);
2296 
2297     return result;
2298 }
2299 
2300 /*************************************************/
2301 static jobject create_Boolean(JNIEnv *env, jboolean boolean_value);
2302 static jobject create_Integer(JNIEnv *env, jint int_value);
2303 static jobject create_Long(JNIEnv *env, jlong long_value);
2304 static jobject create_Float(JNIEnv *env, jfloat float_value);
2305 static jobject create_Double(JNIEnv *env, jdouble double_value);
2306 static jobject create_Character(JNIEnv *env, jchar char_value);


< prev index next >