Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
547bc1cd
D
dragonwell8_jdk
项目概览
openanolis
/
dragonwell8_jdk
通知
4
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dragonwell8_jdk
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
547bc1cd
编写于
4月 10, 2014
作者:
A
alexsch
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
8038113: [macosx] JTree icon is not rendered in high resolution on Retina
Reviewed-by: serb, pchelko
上级
febc1540
变更
4
显示空白变更内容
内联
并排
Showing
4 changed file
with
159 addition
and
36 deletion
+159
-36
src/macosx/classes/com/apple/laf/AquaIcon.java
src/macosx/classes/com/apple/laf/AquaIcon.java
+39
-35
src/macosx/classes/com/apple/laf/AquaInternalFrameUI.java
src/macosx/classes/com/apple/laf/AquaInternalFrameUI.java
+2
-1
test/javax/swing/JTree/8038113/bug8038113.html
test/javax/swing/JTree/8038113/bug8038113.html
+36
-0
test/javax/swing/JTree/8038113/bug8038113.java
test/javax/swing/JTree/8038113/bug8038113.java
+82
-0
未找到文件。
src/macosx/classes/com/apple/laf/AquaIcon.java
浏览文件 @
547bc1cd
...
...
@@ -44,7 +44,8 @@ public class AquaIcon {
}
static
UIResource
getIconFor
(
final
JRSUIControlSpec
spec
,
final
int
width
,
final
int
height
)
{
return
new
CachableJRSUIIcon
(
width
,
height
)
{
return
new
ScalingJRSUIIcon
(
width
,
height
)
{
@Override
public
void
initIconPainter
(
final
AquaPainter
<
JRSUIState
>
painter
)
{
spec
.
initIconPainter
(
painter
);
}
...
...
@@ -128,35 +129,12 @@ public class AquaIcon {
if
(
image
!=
null
)
return
image
;
if
(!
GraphicsEnvironment
.
isHeadless
())
{
image
=
getOptimized
Image
();
image
=
create
Image
();
}
return
image
;
}
private
Image
getOptimizedImage
()
{
final
Image
img
=
createImage
();
// TODO: no RuntimeOptions for now
//if (RuntimeOptions.getRenderer(null) != RuntimeOptions.Sun) return img;
return
getProgressiveOptimizedImage
(
img
,
getIconWidth
(),
getIconHeight
());
}
static
Image
getProgressiveOptimizedImage
(
final
Image
img
,
final
int
w
,
final
int
h
)
{
if
(
img
==
null
)
return
null
;
final
int
halfImgW
=
img
.
getWidth
(
null
)
/
2
;
final
int
halfImgH
=
img
.
getHeight
(
null
)
/
2
;
if
(
w
*
2
>
halfImgW
&&
h
*
2
>
halfImgH
)
return
img
;
final
BufferedImage
halfImage
=
new
BufferedImage
(
halfImgW
,
halfImgH
,
BufferedImage
.
TYPE_INT_ARGB
);
final
Graphics
g
=
halfImage
.
getGraphics
();
((
Graphics2D
)
g
).
setRenderingHint
(
RenderingHints
.
KEY_INTERPOLATION
,
RenderingHints
.
VALUE_INTERPOLATION_BILINEAR
);
g
.
drawImage
(
img
,
0
,
0
,
halfImgW
,
halfImgH
,
null
);
g
.
dispose
();
return
getProgressiveOptimizedImage
(
halfImage
,
w
,
h
);
}
abstract
Image
createImage
();
public
boolean
hasIconRef
()
{
...
...
@@ -189,24 +167,50 @@ public class AquaIcon {
}
static
abstract
class
CachableJRSUIIcon
extends
CachingScalingIcon
implements
UIResource
{
public
CachableJRSUIIcon
(
final
int
width
,
final
int
height
)
{
super
(
width
,
height
);
static
abstract
class
ScalingJRSUIIcon
implements
Icon
,
UIResource
{
final
int
width
;
final
int
height
;
public
ScalingJRSUIIcon
(
final
int
width
,
final
int
height
)
{
this
.
width
=
width
;
this
.
height
=
height
;
}
Image
createImage
()
{
final
AquaPainter
<
JRSUIState
>
painter
=
AquaPainter
.
create
(
JRSUIState
.
getInstance
());
@Override
public
void
paintIcon
(
final
Component
c
,
Graphics
g
,
final
int
x
,
final
int
y
)
{
if
(
GraphicsEnvironment
.
isHeadless
())
{
return
;
}
g
=
g
.
create
();
if
(
g
instanceof
Graphics2D
)
{
// improves icon rendering quality in Quartz
((
Graphics2D
)
g
).
setRenderingHint
(
RenderingHints
.
KEY_RENDERING
,
RenderingHints
.
VALUE_RENDER_QUALITY
);
}
final
AquaPainter
<
JRSUIState
>
painter
=
AquaPainter
.
create
(
JRSUIState
.
getInstance
());
initIconPainter
(
painter
);
final
BufferedImage
img
=
new
BufferedImage
(
getIconWidth
(),
getIconHeight
(),
BufferedImage
.
TYPE_INT_ARGB_PRE
);
final
Graphics
g
=
img
.
getGraphics
();
g
.
setClip
(
new
Rectangle
(
0
,
0
,
getIconWidth
(),
getIconHeight
()));
painter
.
paint
(
g
,
null
,
0
,
0
,
getIconWidth
(),
getIconHeight
());
g
.
setClip
(
new
Rectangle
(
x
,
y
,
width
,
height
));
painter
.
paint
(
g
,
c
,
x
,
y
,
width
,
height
);
g
.
dispose
();
return
img
;
}
public
abstract
void
initIconPainter
(
final
AquaPainter
<
JRSUIState
>
painter
);
@Override
public
int
getIconWidth
()
{
return
width
;
}
@Override
public
int
getIconHeight
()
{
return
height
;
}
}
static
class
FileIcon
extends
CachingScalingIcon
{
...
...
src/macosx/classes/com/apple/laf/AquaInternalFrameUI.java
浏览文件 @
547bc1cd
...
...
@@ -786,8 +786,9 @@ public class AquaInternalFrameUI extends BasicInternalFrameUI implements SwingCo
}
static
final
RecyclableSingleton
<
Icon
>
RESIZE_ICON
=
new
RecyclableSingleton
<
Icon
>()
{
@Override
protected
Icon
getInstance
()
{
return
new
AquaIcon
.
Cachable
JRSUIIcon
(
11
,
11
)
{
return
new
AquaIcon
.
Scaling
JRSUIIcon
(
11
,
11
)
{
public
void
initIconPainter
(
final
AquaPainter
<
JRSUIState
>
iconState
)
{
iconState
.
state
.
set
(
Widget
.
GROW_BOX_TEXTURED
);
iconState
.
state
.
set
(
WindowType
.
UTILITY
);
...
...
test/javax/swing/JTree/8038113/bug8038113.html
0 → 100644
浏览文件 @
547bc1cd
<!--
Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
This code is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License version 2 only, as
published by the Free Software Foundation.
This code is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
version 2 for more details (a copy is included in the LICENSE file that
accompanied this code).
You should have received a copy of the GNU General Public License version
2 along with this work; if not, write to the Free Software Foundation,
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
or visit www.oracle.com if you need additional information or have any
questions.
-->
<html>
<body>
Verify that scaled icons are rendered smoothly.
1. Run the test.
2. Check that Collapsed and Expanded JTree icons are drawn smoothly.
If so, press PASS, else press FAIL.
<applet
code=
"bug8038113.class"
width=
400
height=
400
></applet>
</body>
</html>
test/javax/swing/JTree/8038113/bug8038113.java
0 → 100644
浏览文件 @
547bc1cd
/*
* Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
import
java.awt.BasicStroke
;
import
java.awt.BorderLayout
;
import
java.awt.Graphics
;
import
java.awt.Graphics2D
;
import
javax.swing.Icon
;
import
javax.swing.JApplet
;
import
javax.swing.JPanel
;
import
javax.swing.JTree
;
import
javax.swing.SwingUtilities
;
import
javax.swing.plaf.basic.BasicTreeUI
;
/* @test
* @bug 8038113
* @summary [macosx] JTree icon is not rendered in high resolution on Retina
* @run applet/manual=yesno bug8038113.html
*/
public
class
bug8038113
extends
JApplet
{
@Override
public
void
init
()
{
SwingUtilities
.
invokeLater
(
new
Runnable
()
{
@Override
public
void
run
()
{
final
JTree
tree
=
new
JTree
();
final
BasicTreeUI
treeUI
=
(
BasicTreeUI
)
tree
.
getUI
();
final
JPanel
panel
=
new
JPanel
()
{
@Override
public
void
paint
(
Graphics
g
)
{
super
.
paint
(
g
);
Graphics2D
g2
=
(
Graphics2D
)
g
;
g2
.
setStroke
(
new
BasicStroke
(
0.5f
));
g2
.
scale
(
2
,
2
);
int
x
=
10
;
int
y
=
10
;
Icon
collapsedIcon
=
treeUI
.
getCollapsedIcon
();
Icon
expandeIcon
=
treeUI
.
getExpandedIcon
();
int
w
=
collapsedIcon
.
getIconWidth
();
int
h
=
collapsedIcon
.
getIconHeight
();
collapsedIcon
.
paintIcon
(
this
,
g
,
x
,
y
);
g
.
drawRect
(
x
,
y
,
w
,
h
);
y
+=
10
+
h
;
w
=
expandeIcon
.
getIconWidth
();
h
=
expandeIcon
.
getIconHeight
();
expandeIcon
.
paintIcon
(
this
,
g
,
x
,
y
);
g
.
drawRect
(
x
,
y
,
w
,
h
);
}
};
getContentPane
().
setLayout
(
new
BorderLayout
());
getContentPane
().
add
(
panel
,
BorderLayout
.
CENTER
);
}
});
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录