2011-06-24 32 views
9

Trên ứng dụng Java SWT đa nền tảng của tôi, tôi đang sử dụng hàm setImages() của TrayItem để đặt biểu tượng thanh dock và thanh trạng thái. Biểu tượng là PNG trong suốt 128x128. Tình trạng và khay biểu tượng được một cách thích hợp kẹp trên cả hai phân phối Windows và Linux, nhưng trên Mac Tôi có vấn đề mà làm cho các biểu tượng trên thanh trạng thái xuất hiện với lớp đệm lạ trên cả hai mặt như thế này:SWT TrayItem.setImage không mở rộng đúng trong thanh trạng thái Mac

Nó có vẻ lạ lùng tôi rằng điều này đang làm việc trên tất cả các nền tảng khác nhưng Mac. Ví dụ, đây là một biểu tượng trên thanh trạng thái mà không có vấn đề về hộp Linux của tôi:

Có ai có bất kỳ ý tưởng làm thế nào để ngăn chặn padding thêm này trên máy Mac?

+0

Nếu không có bất kỳ mã nào, điều này sẽ khó gỡ lỗi. Dựa trên một số Googling, có vẻ như bạn sẽ có thể làm điều này mà không có bất kỳ vấn đề gì. – jtbandes

+0

Bạn đã thử đặt câu hỏi trên eclipse.platform.swt và tìm kiếm https://bugs.eclipse.org/bugs/ để tìm lỗi có thể không? –

+0

SWT Snippet 143 - http://dev.eclipse.org/viewcvs/viewvc.cgi/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet143.java?view=co - xem như thế nào cho bạn? –

Trả lời

5

Tôi đã tìm thấy sự cố trong nguồn ca cao SWT.

public void setImage (Image image) { 
    checkWidget(); 
    if (image != null && image.isDisposed()) error (SWT.ERROR_INVALID_ARGUMENT); 
    super.setImage (image); 
    double /*float*/ width = 0; 
    if (image == null) { 
     view.setImage (null); 
    } else { 
     /* 
     * Feature in Cocoa. If the NSImage object being set into the view is 
     * the same NSImage object that is already there then the new image is 
     * not taken. This results in the view's image not changing even if the 
     * NSImage object's content has changed since it was last set into the 
     * view. The workaround is to temporarily set the view's image to null 
     * so that the new image will then be taken. 
     */ 
     NSImage current = view.image(); 
     if (current != null && current.id == image.handle.id) { 
      view.setImage (null); 
     } 
     view.setImage (image.handle); 
     if (visible) { 
      width = image.handle.size().width + BORDER; 
     } 
    } 
    item.setLength (width); 
} 

Vấn đề ở trên dòng width = image.handle.size().width + BORDER; chỉ mất kích thước ảnh thuần túy (trong trường hợp của bạn là 128 px). Tôi đã không tìm thấy bất kỳ giải pháp thích hợp nào (tôi thấy bạn đăng báo cáo lỗi về lỗi của SWT).

Vì vậy, cách duy nhất để tránh lỗi này (hiện tại) là làm cho hình ảnh khay của bạn nhỏ hơn.

+0

Bạn nói đúng. Tôi đã gửi một báo cáo lỗi vào nhóm SWT cách đây vài ngày và quên cập nhật bài đăng này phản ánh điều này. Thật không may là vấn đề này tồn tại bởi vì nó đòi hỏi một viết lại mãnh liệt của một phần lớn mã. Xem báo cáo lỗi của tôi [ở đây] (https://bugs.eclipse.org/bugs/show_bug.cgi?id=350751) – blimmer

+2

Chỉ cần theo dõi - họ đã gửi một bản vá trên [báo cáo lỗi] (https://bugs.eclipse.org/bugs/show_bug.cgi?id=350751) nếu bạn gặp vấn đề tương tự. – blimmer

Các vấn đề liên quan