小编yon*_*ran的帖子

如何获得CSS像素/设备像素比?

我想找到CSS像素和设备像素之间的比例.

编辑:我应该意识到这只是缩放级别.我已经添加了关于缩放级别的规范参考的答案.

CSS像素是我们几乎用于所有事物的单位 - 它是element.style.width,element.clientWidth,element.offsetWidth等的含义.设备像素是浏览器实际绘制的像素.在设备像素中测量一些属性,例如window.screen.width,其是在用户放大时不改变的屏幕尺寸(例如1024).

动机:当用户放大时,我想增加画布的宽度和高度(同时保持style.width和style.height相同的CSS像素值),scale()上下文,并在更加清晰的放大画布上重绘.

在Surfin的Safari上读过Quirksmode的两个视口故事高DPI,但他们都没有说如何获得这个比例.到目前为止,我唯一的想法是收集mousemoves并测量event.clientX中的更改除以event.screenX中的更改,或以编程方式创建媒体查询moz--min-device-pixel-ratio,使用getComputedStyle(),测试规则是否匹配,并使用二进制搜索缩小规模.我希望有一种更容易/更可靠的方式.

编辑:我尝试使用@media (-webkit-min-device-pixel-ratio:1)Chrome,Safari和Firefox 4 的查询,显然Webkit将属性视为一个恒定的设备像素到屏幕像素比率(不随缩放而变化),而Firefox 4将其视为设备像素与CSS像素比率(放大时会增加).因此在Firefox 4中,我可以使用二进制搜索发现CSS像素/设备像素比率,但不能使用Webkit.

javascript css html5

45
推荐指数
2
解决办法
6万
查看次数

哪个std :: sync :: atomic :: Ordering使用?

所有std::sync::atomic::AtomicBool采用内存排序的方法(Relaxed,Release,Acquire,AcqRel和SeqCst),我以前没用过.在什么情况下应该使用这些值?该文档使用令人困惑的"加载"和"存储"术语,我并不理解.例如:

生成器线程改变由a持有的某个状态Mutex,然后调用AtomicBool: compare_and_swap(false, true, ordering):(以合并失效),如果它交换,则将"无效"消息发布到并发队列(例如,mpsc或winapi PostMessage).消费者线程重置AtomicBool,从队列中读取,并读取互斥锁持有的状态.生产者是否可以使用轻松排序,因为它之前是互斥锁,或者必须使用Release?消费者可以使用store(false, Relaxed)或必须使用它compare_and_swap(true, false, Acquire)来接收来自互斥锁的更改吗?

如果生产者和消费者共享一个RefCell而不是一个Mutex

sync atomic std rust

33
推荐指数
1
解决办法
3476
查看次数

在Coffeescript中枚举和压缩?

来自Python,我喜欢Coffeescript从Python和Perl借用的许多功能(范围/切片,理解,解构分配).Coffeescript中是否存在模仿Python enumeratezip(itertools.izip)函数的语法糖?

以下是我不太关心的模式:

# an enumerate call would be helpful here
i = 0
for x in arr
  ... use x and i ...
  i++
Run Code Online (Sandbox Code Playgroud)

# a zip would be useful here
n = Math.min(arr1.length,arr2.length)
for i in 0...n
  x = arr1[i]; y = arr2[i]
  ... use x and y ...
Run Code Online (Sandbox Code Playgroud)

list-comprehension coffeescript

31
推荐指数
4
解决办法
5747
查看次数

Drop为什么选择自我而不是自我?

为什么Drop方法有签名fn drop(&mut self)而不是fn drop(self)?这使得很难将值移出字段,例如self.join_handle.join()std::mem::drop(self.file)(错误:不能移出类型X,这定义了Drop特征).

rust

16
推荐指数
2
解决办法
1162
查看次数

java.awt.Robot.waitForIdle()是否等待调度事件?

我正在使用java.awt.Robot我的Swing应用程序的集成测试,但是我无法以正确的顺序运行我的操作.robot.mousePressed(...)在Swing完成调度该事件之前,如何告诉调用阻塞的线程?显然,robot.setAutoWaitForIdle(true)没有好处.

这是我的演示.我期待"机器人完成!" 消息总是在"动作完成阻止"之后出现,但相反,它经常发生得太快.

import java.awt.AWTException;
import java.awt.GraphicsConfiguration;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.sql.Date;
import java.text.DateFormat;
import java.util.logging.ConsoleHandler;
import java.util.logging.Formatter;
import java.util.logging.LogManager;
import java.util.logging.LogRecord;
import java.util.logging.Logger;

import javax.swing.GroupLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;


public class RobotWaitForIdleDemo {
    /**
     * Create the device that contains the given point in screen coordinates.
     * Robot has to be constructed differently for each monitor. …
Run Code Online (Sandbox Code Playgroud)

java swing awt awtrobot

9
推荐指数
1
解决办法
3499
查看次数

bash脚本如何将Ctrl-C等效于后台任务?

有没有办法调用子进程,以便它及其所有后代发送一个中断,就像你Ctrl-C前台任务一样?我正在尝试杀死一个调用一个长期运行的孩子的启动器脚本.我已经尝试过kill -SIGINT $child(它不会向其后代发送中断,因此是无操作)和kill -SIGINT -$child(在交互式调用时有效但在脚本中运行时无效).

这是一个测试脚本.长期运行的脚本是test.sh --child.当你打电话时test.sh --parent,它会调用test.sh --child &然后尝试杀死它.如何让父母成功杀死孩子?

#!/bin/bash

if [ "$1" = "--child" ]; then
sleep 1000

elif [ "$1" = "--parent" ]; then
"$0" --child &
for child in $(jobs -p); do
  echo kill -SIGINT "-$child" && kill -SIGINT "-$child"
done
wait $(jobs -p)

else
echo "Must be invoked with --child or --parent."
fi
Run Code Online (Sandbox Code Playgroud)

我知道你可以修改长时间运行的子trap信号,将它们发送到它的子进程,然后等待(从 Bash脚本杀死Ctrl + C上的背景(大)子),但有没有办法不修改子脚本?

bash

9
推荐指数
3
解决办法
2万
查看次数

为什么这个字体在Java中如此之大?

我正在尝试使用OpenDyslexic作为Swing应用程序中的字体选项.但令人惊讶的是,OpenDyslexic看起来比同一点大小的任何其他字体大得多,即使它在其他应用程序中看起来通常很大.我尝试了一些其他OpenType字体,它们看起来并不特别大或小.为什么OpenDyslexic在Java中如此之大,如何让Java正常大小以便我不需要特殊情况下OpenDyslexic的大小?

在所有操作系统上的Oracle JRE(我试过1.7.0_11,1.7.0_15和最新的1.7.0_21)上,当Java加载字体文件时,字体太大了Font.createFont.但是,当我字体安装到操作系统中时,所有3个平台上的行为都不同:

  • 在Linux中,安装字体~/.fonts没有用.在安装字体之前和安装后,屏幕截图看起来一样.
  • 在Windows中,安装字体会修复字体字形,但字体间距仍然太大!见下面的截图.
  • 在OS X中,安装字体修复了它!它看起来像OS X上的普通大小的字体.

更新:有趣的是,OpenJDK(Linux中的7u21 Ubuntu软件包和OS X上的obuildfactory构建版本)都没有出现这个bug.OpenFDK上的15pt OpenDyslexic'm'应该是15px宽,无论是从文件创建字体还是由操作系统处理字体时都是如此.该错误发布在最新的Oracle JRE中,但不在最新的OpenJDK中.

这是我的示例程序.请注意,要尝试它,您需要将OpenDyslexic文件放入资源/.或者,将OpenDyslexic安装到您的系统中并取出registerFonts()呼叫.

SansSerif是正常大小 OpenDyslexic在相同的点大小是巨大的 在Windows上安装OpenDyslexic后,它看起来很愚蠢 在OS X上安装字体后:完美!

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Font;
import java.awt.FontFormatException;
import java.awt.GraphicsEnvironment;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.InvocationTargetException;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Locale;

import javax.swing.DefaultComboBoxModel;
import javax.swing.DefaultListCellRenderer;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import javax.swing.event.ListDataEvent;
import javax.swing.event.ListDataListener;

public class FontFrame …
Run Code Online (Sandbox Code Playgroud)

java fonts swing jtextcomponent letter-spacing

8
推荐指数
1
解决办法
1642
查看次数

如何在结构上创建一个大小的闭包或实现Fn/FnMut/FnOnce?

基本上,我想编写一个返回闭包的函数.我怎么能这样做而不必返回Box<FnOnce(u32)>

Rust书闭包章节,我读到一个闭包只是一个结构的语法糖和一个impl FnOnce.这是我的尝试:

#[derive(Debug)]
struct MyError {
    code: u32,
    location: &'static str,
}
// Here is my closure:
struct MyErrorPartial {
    location: &'static str,
}
impl FnOnce(u32) for MyErrorPartial {
    type Output = MyError;

    fn call_once(self, args: u32) -> MyError {
        MyError {
            code: args,
            location: self.location,
        }
    }
}
fn error_at(location: &'static str) -> MyErrorPartial {
    MyErrorPartial {location: location}
}

fn function_returning_code() -> Result<(), u32> {
    Err(123)
}
fn function_with_error() -> Result<(), …
Run Code Online (Sandbox Code Playgroud)

higher-order-functions rust

7
推荐指数
1
解决办法
1335
查看次数

使用 XMLStreamWriter 时如何保留属性中的空格?

使用 javax.xml.XMLStreamWriter 时,有什么方法可以保留属性中的空格吗?我知道 XMLStreamReader 将执行Attribute-Value Normalization,将\r\n\tXML 转换为空格,因此编写者需要发出实体引用(例如&#13;&#10;)以保留空格。有什么方法可以告诉作者对空白使用实体引用吗?我可以自己添加对属性的实体引用吗?

以下 JUnit3 测试通过。当我编码时"Hello,\r\n\tworld",我想得到同样的东西。但相反,解码后的值为"Hello  world"(两个空格)。

import java.io.StringReader;
import java.io.StringWriter;
import javax.xml.stream.*;
import junit.framework.TestCase;
public class XmlStreamTest extends TestCase {
    public void testAttribute() throws XMLStreamException {
        StringWriter stringWriter = new StringWriter();
        XMLStreamWriter xmlStreamWriter = XMLOutputFactory.newFactory().createXMLStreamWriter(stringWriter);
        xmlStreamWriter.writeStartDocument();
        xmlStreamWriter.writeStartElement("root");
        xmlStreamWriter.writeAttribute("a", "Hello,\r\n\tWorld! ");
        xmlStreamWriter.writeEndElement();
        xmlStreamWriter.writeEndDocument();
        xmlStreamWriter.close();
        assertEquals("<?xml version=\"1.0\" ?><root a=\"Hello,\r\n\tWorld! \"></root>", stringWriter.toString());

        StringReader stringReader = new StringReader(stringWriter.toString());
        XMLStreamReader xmlStreamReader = XMLInputFactory.newInstance().createXMLStreamReader(stringReader);
        assertEquals(XMLStreamConstants.START_DOCUMENT, xmlStreamReader.getEventType());
        assertEquals(XMLStreamConstants.START_ELEMENT, xmlStreamReader.next());
        // This is …
Run Code Online (Sandbox Code Playgroud)

java xml

6
推荐指数
0
解决办法
1112
查看次数

Guava的TypeToken可以获得通用字段的特定类型吗?

我为一个名为ASN.1的文件格式编写了一个解析器,它使用Guice TypeLiteral.getFieldType(Field)将通用字段转换为特定的Java类型,因此我可以构造正确的类型(类似于Jackson或GSON数据绑定).但由于我已经依赖Guava并且它似乎有一个新的TypeLiteral替代品,我想改为使用TypeToken.根据Guave TypeToken文档:

TypeToken类似于Guice的TypeLiteral类,但有一个重要的区别:它支持非实现类型,如T,List<T>甚至List<? extends Number>; 而TypeLiteral不是.TypeToken也是可序列化的,并提供了许多额外的实用方法.

你能用一个字段的具体类型TypeToken吗?换句话说,我怎样才能在番石榴中做到以下几点?

import org.junit.Test;
import com.google.inject.TypeLiteral;
public class FieldTypeTest {
    public static class A<T> {
        T a;
    }
    public static class B {
        A<String> b;
    }

    @Test
    public void testTypeToken() throws SecurityException, NoSuchFieldException {
        TypeLiteral<?> reifiedA = TypeLiteral.get(B.class).getFieldType(B.class.getDeclaredField("b"));
        assertEquals(String.class, reifiedA.getFieldType(reifiedA.getRawType().getDeclaredField("a")).getRawType());
    }
}
Run Code Online (Sandbox Code Playgroud)

java guava

6
推荐指数
1
解决办法
3171
查看次数