This commit is contained in:
Chris Jones 2010-07-21 13:17:31 -05:00
Родитель 4b5079349a ff35fd30c8
Коммит 8332fbce83
246 изменённых файлов: 14367 добавлений и 13988 удалений

Просмотреть файл

@ -51,7 +51,6 @@ CPPSRCS = \
nsAccessibleWrap.cpp \
nsTextAccessibleWrap.cpp \
nsDocAccessibleWrap.cpp \
nsRootAccessibleWrap.cpp \
nsHTMLWin32ObjectAccessible.cpp \
nsARIAGridAccessibleWrap.cpp \
nsXULMenuAccessibleWrap.cpp \

Просмотреть файл

@ -219,10 +219,16 @@ __try {
nsIView *rootView;
viewManager->GetRootView(rootView);
if (rootView == view) {
// If the current object has a widget but was created by an
// outer object with its own outer window, then
// we want the native accessible for that outer window
hwnd = ::GetParent(hwnd);
// If the client accessible (OBJID_CLIENT) has a window but its window
// was created by an outer window then we want the native accessible
// for that outer window. If the accessible was created for outer
// window (if the outer window has inner windows then they share the
// same client accessible with it) then return native accessible for
// the outer window.
HWND parenthwnd = ::GetParent(hwnd);
if (parenthwnd)
hwnd = parenthwnd;
NS_ASSERTION(hwnd, "No window handle for window");
}
}

Просмотреть файл

@ -1,62 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is
* Netscape Communications Corporation.
* Portions created by the Initial Developer are Copyright (C) 2003
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
* Original Author: Aaron Leventhal (aaronl@netscape.com)
*
* Alternatively, the contents of this file may be used under the terms of
* either of the GNU General Public License Version 2 or later (the "GPL"),
* or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
#include "nsRootAccessibleWrap.h"
#include "nsIAccessible.h"
#include "nsIAccessibleDocument.h"
#include "nsIServiceManager.h"
/* For documentation of the accessibility architecture,
* see http://lxr.mozilla.org/seamonkey/source/accessible/accessible-docs.html
*/
////////////////////////////////////////////////////////////////////////////////
// nsRootAccessibleWrap
////////////////////////////////////////////////////////////////////////////////
nsRootAccessibleWrap::
nsRootAccessibleWrap(nsIDocument *aDocument, nsIContent *aRootContent,
nsIWeakReference *aShell) :
nsRootAccessible(aDocument, aRootContent, aShell)
{
}
nsRootAccessibleWrap::~nsRootAccessibleWrap()
{
}

Просмотреть файл

@ -43,15 +43,8 @@
#ifndef _nsRootAccessibleWrap_H_
#define _nsRootAccessibleWrap_H_
#include "nsCOMPtr.h"
#include "nsRootAccessible.h"
class nsRootAccessibleWrap: public nsRootAccessible
{
public:
nsRootAccessibleWrap(nsIDocument *aDocument, nsIContent *aRootContent,
nsIWeakReference *aShell);
virtual ~nsRootAccessibleWrap();
};
typedef class nsRootAccessible nsRootAccessibleWrap;
#endif

Просмотреть файл

@ -48,14 +48,14 @@
label="&openLinkCmdInCurrent.label;"
accesskey="&openLinkCmdInCurrent.accesskey;"
oncommand="gContextMenu.openLinkInCurrent();"/>
<menuitem id="context-openlink"
label="&openLinkCmd.label;"
accesskey="&openLinkCmd.accesskey;"
oncommand="gContextMenu.openLink();"/>
<menuitem id="context-openlinkintab"
label="&openLinkCmdInTab.label;"
accesskey="&openLinkCmdInTab.accesskey;"
oncommand="gContextMenu.openLinkInTab();"/>
<menuitem id="context-openlink"
label="&openLinkCmd.label;"
accesskey="&openLinkCmd.accesskey;"
oncommand="gContextMenu.openLink();"/>
<menuseparator id="context-sep-open"/>
<menuitem id="context-bookmarklink"
label="&bookmarkThisLinkCmd.label;"
@ -250,14 +250,14 @@
label="&showOnlyThisFrameCmd.label;"
accesskey="&showOnlyThisFrameCmd.accesskey;"
oncommand="gContextMenu.showOnlyThisFrame();"/>
<menuitem id="context-openframe"
label="&openFrameCmd.label;"
accesskey="&openFrameCmd.accesskey;"
oncommand="gContextMenu.openFrame();"/>
<menuitem id="context-openframeintab"
label="&openFrameCmdInTab.label;"
accesskey="&openFrameCmdInTab.accesskey;"
oncommand="gContextMenu.openFrameInTab();"/>
<menuitem id="context-openframe"
label="&openFrameCmd.label;"
accesskey="&openFrameCmd.accesskey;"
oncommand="gContextMenu.openFrame();"/>
<menuseparator/>
<menuitem id="context-reloadframe"
label="&reloadFrameCmd.label;"

Просмотреть файл

@ -42,16 +42,16 @@
<menu id="file-menu" label="&fileMenu.label;"
accesskey="&fileMenu.accesskey;">
<menupopup id="menu_FilePopup">
<menuitem id="menu_newNavigator"
label="&newNavigatorCmd.label;"
accesskey="&newNavigatorCmd.accesskey;"
key="key_newNavigator"
command="cmd_newNavigator"/>
<menuitem id="menu_newNavigatorTab"
label="&tabCmd.label;"
command="cmd_newNavigatorTab"
key="key_newNavigatorTab"
accesskey="&tabCmd.accesskey;"/>
<menuitem id="menu_newNavigator"
label="&newNavigatorCmd.label;"
accesskey="&newNavigatorCmd.accesskey;"
key="key_newNavigator"
command="cmd_newNavigator"/>
<menuitem id="menu_openLocation"
label="&openLocationCmd.label;"
command="Browser:OpenLocation"
@ -62,17 +62,17 @@
command="Browser:OpenFile"
key="openFileKb"
accesskey="&openFileCmd.accesskey;"/>
<menuitem id="menu_close"
label="&closeCmd.label;"
key="key_close"
accesskey="&closeCmd.accesskey;"
command="cmd_close"/>
<menuitem id="menu_closeWindow"
hidden="true"
command="cmd_closeWindow"
key="key_closeWindow"
label="&closeWindow.label;"
accesskey="&closeWindow.accesskey;"/>
<menuitem id="menu_close"
label="&closeCmd.label;"
key="key_close"
accesskey="&closeCmd.accesskey;"
command="cmd_close"/>
<menuseparator/>
<menuitem id="menu_savePage"
label="&savePageCmd.label;"

Просмотреть файл

@ -80,8 +80,8 @@
<menulist id="openWhereList">
<menupopup>
<menuitem value="0" id="currentWindow" label="&topTab.label;"/>
<menuitem value="1" label="&newWindow.label;"/>
<menuitem value="3" label="&newTab.label;"/>
<menuitem value="1" label="&newWindow.label;"/>
</menupopup>
</menulist>
<spacer flex="1"/>

Просмотреть файл

@ -54,6 +54,9 @@ var EXPORTED_SYMBOLS = ["style"];
const Cc = Components.classes;
const Ci = Components.interfaces;
const Cu = Components.utils;
Cu.import("resource://gre/modules/Services.jsm");
var style = {

Просмотреть файл

@ -14,11 +14,6 @@ function nextLeftElement() elementFromPoint(left(scrollbox) - 1);
function nextRightElement() elementFromPoint(right(scrollbox) + 1);
function test() {
if (TabsOnTop.enabled) {
todo(false, "need to figure out why this doesn't work with tabs on top on OS X and Windows 7 (bug 575748)");
return;
}
waitForExplicitFinish();
// If the previous (or more) test finished with cleaning up the tabs,
@ -52,29 +47,29 @@ function runOverflowTests(aEvent) {
isLeft(tabContainer.firstChild, "Selecting the first tab scrolls it into view");
element = nextRightElement();
EventUtils.synthesizeMouse(downButton, 0, 0, {});
EventUtils.synthesizeMouse(downButton, 1, 1, {});
isRight(element, "Scrolled one tab to the right with a single click");
gBrowser.selectedTab = tabContainer.lastChild;
isRight(tabContainer.lastChild, "Selecting the last tab scrolls it into view");
element = nextLeftElement();
EventUtils.synthesizeMouse(upButton, 0, 0, {});
EventUtils.synthesizeMouse(upButton, 1, 1, {});
isLeft(element, "Scrolled one tab to the left with a single click");
element = elementFromPoint(left(scrollbox) - width(scrollbox));
EventUtils.synthesizeMouse(upButton, 0, 0, {clickCount: 2});
EventUtils.synthesizeMouse(upButton, 1, 1, {clickCount: 2});
isLeft(element, "Scrolled one page of tabs with a double click");
EventUtils.synthesizeMouse(upButton, 0, 0, {clickCount: 3});
EventUtils.synthesizeMouse(upButton, 1, 1, {clickCount: 3});
isLeft(tabContainer.firstChild, "Scrolled to the start with a triple click");
for (var i = 2; i; i--)
EventUtils.synthesizeMouseScroll(scrollbox, 0, 0, {axis: "horizontal", delta: -1});
EventUtils.synthesizeMouseScroll(scrollbox, 1, 1, {axis: "horizontal", delta: -1});
isLeft(tabContainer.firstChild, "Remained at the start with the mouse wheel");
element = nextRightElement();
EventUtils.synthesizeMouseScroll(scrollbox, 0, 0, {axis: "horizontal", delta: 1});
EventUtils.synthesizeMouseScroll(scrollbox, 1, 1, {axis: "horizontal", delta: 1});
isRight(element, "Scrolled one tab to the right with the mouse wheel");
while (tabContainer.childNodes.length > 1)

Просмотреть файл

@ -182,8 +182,8 @@ function runTest(testNum) {
case 3:
// Context menu for text link
checkContextMenu(["context-openlink", true,
"context-openlinkintab", true,
checkContextMenu(["context-openlinkintab", true,
"context-openlink", true,
"---", null,
"context-bookmarklink", true,
"context-savelink", true,
@ -303,8 +303,8 @@ function runTest(testNum) {
"context-selectall", true,
"frame", null,
["context-showonlythisframe", true,
"context-openframe", true,
"context-openframeintab", true,
"context-openframe", true,
"---", null,
"context-reloadframe", true,
"---", null,

Просмотреть файл

@ -134,12 +134,6 @@
default="true"
selectiontype="single"
selection="link"/>
<menuitem id="placesContext_open:newwindow"
command="placesCmd_open:window"
label="&cmd.open_window.label;"
accesskey="&cmd.open_window.accesskey;"
selectiontype="single"
selection="link"/>
<menuitem id="placesContext_open:newtab"
command="placesCmd_open:tab"
label="&cmd.open_tab.label;"
@ -162,6 +156,12 @@
accesskey="&cmd.open_all_in_tabs.accesskey;"
selectiontype="multiple"
selection="link"/>
<menuitem id="placesContext_open:newwindow"
command="placesCmd_open:window"
label="&cmd.open_window.label;"
accesskey="&cmd.open_window.accesskey;"
selectiontype="single"
selection="link"/>
<menuseparator id="placesContext_openSeparator"/>
<menuitem id="placesContext_new:bookmark"
command="placesCmd_new:bookmark"

Просмотреть файл

@ -1 +1 @@
4.0b2pre
4.0b3pre

Просмотреть файл

@ -288,16 +288,16 @@
<!ENTITY searchFocus.commandkey2 "e">
<!ENTITY searchFocusUnix.commandkey "j">
<!ENTITY openLinkCmdInTab.label "Open Link in New Tab">
<!ENTITY openLinkCmdInTab.accesskey "T">
<!ENTITY openLinkCmd.label "Open Link in New Window">
<!ENTITY openLinkCmd.accesskey "W">
<!ENTITY openLinkCmdInCurrent.label "Open Link">
<!ENTITY openLinkCmdInCurrent.accesskey "O">
<!ENTITY openLinkCmdInTab.label "Open Link in New Tab">
<!ENTITY openLinkCmdInTab.accesskey "T">
<!ENTITY openFrameCmd.label "Open Frame in New Window">
<!ENTITY openFrameCmd.accesskey "W">
<!ENTITY openFrameCmdInTab.label "Open Frame in New Tab">
<!ENTITY openFrameCmdInTab.accesskey "T">
<!ENTITY openFrameCmd.label "Open Frame in New Window">
<!ENTITY openFrameCmd.accesskey "W">
<!ENTITY showOnlyThisFrameCmd.label "Show Only This Frame">
<!ENTITY showOnlyThisFrameCmd.accesskey "S">
<!ENTITY reloadCmd.commandkey "r">

Просмотреть файл

@ -2,8 +2,8 @@
<!ENTITY enter.label "Enter the web location (URL), or specify the local file you would like to open:">
<!ENTITY chooseFile.label "Choose File…">
<!ENTITY newWindow.label "New Window">
<!ENTITY newTab.label "New Tab">
<!ENTITY newWindow.label "New Window">
<!ENTITY topTab.label "Current Tab">
<!ENTITY caption.label "Open Web Location">
<!ENTITY openWhere.label "Open in:">

Просмотреть файл

@ -10,4 +10,4 @@
# hardcoded milestones in the tree from these two files.
#--------------------------------------------------------
2.0b2pre
2.0b3pre

Просмотреть файл

@ -578,7 +578,7 @@ ifdef SHARED_LIBRARY
ifdef IS_COMPONENT
EXTRA_DSO_LDOPTS += -bundle
else
EXTRA_DSO_LDOPTS += -dynamiclib -install_name @loader_path/$(SHARED_LIBRARY) -compatibility_version 1 -current_version 1 -single_module
EXTRA_DSO_LDOPTS += -dynamiclib -install_name @executable_path/$(SHARED_LIBRARY) -compatibility_version 1 -current_version 1 -single_module
endif
endif
endif

Просмотреть файл

@ -117,6 +117,12 @@ public:
* @param aDocument The owner-document of aContent. Can be null.
* @param aContent The piece of content that changed. Is never null.
* @param aInfo The structure with information details about the change.
*
* @note Callers of this method might not hold a strong reference to the
* observer. The observer is responsible for making sure it stays
* alive for the duration of the call as needed. The observer may
* assume that this call will happen when there are script blockers on
* the stack.
*/
virtual void CharacterDataWillChange(nsIDocument *aDocument,
nsIContent* aContent,
@ -133,6 +139,12 @@ public:
* @param aDocument The owner-document of aContent. Can be null.
* @param aContent The piece of content that changed. Is never null.
* @param aInfo The structure with information details about the change.
*
* @note Callers of this method might not hold a strong reference to the
* observer. The observer is responsible for making sure it stays
* alive for the duration of the call as needed. The observer may
* assume that this call will happen when there are script blockers on
* the stack.
*/
virtual void CharacterDataChanged(nsIDocument *aDocument,
nsIContent* aContent,
@ -152,6 +164,12 @@ public:
* @param aModType Whether or not the attribute will be added, changed, or
* removed. The constants are defined in
* nsIDOMMutationEvent.h.
*
* @note Callers of this method might not hold a strong reference to the
* observer. The observer is responsible for making sure it stays
* alive for the duration of the call as needed. The observer may
* assume that this call will happen when there are script blockers on
* the stack.
*/
virtual void AttributeWillChange(nsIDocument* aDocument,
nsIContent* aContent,
@ -169,6 +187,12 @@ public:
* @param aModType Whether or not the attribute was added, changed, or
* removed. The constants are defined in
* nsIDOMMutationEvent.h.
*
* @note Callers of this method might not hold a strong reference to the
* observer. The observer is responsible for making sure it stays
* alive for the duration of the call as needed. The observer may
* assume that this call will happen when there are script blockers on
* the stack.
*/
virtual void AttributeChanged(nsIDocument* aDocument,
nsIContent* aContent,
@ -186,6 +210,12 @@ public:
* @param aFirstNewContent the node at aIndexInContainer in aContainer.
* @param aNewIndexInContainer the index in the container of the first
* new child
*
* @note Callers of this method might not hold a strong reference to the
* observer. The observer is responsible for making sure it stays
* alive for the duration of the call as needed. The observer may
* assume that this call will happen when there are script blockers on
* the stack.
*/
virtual void ContentAppended(nsIDocument *aDocument,
nsIContent* aContainer,
@ -204,6 +234,12 @@ public:
* aDocument
* @param aChild The newly inserted child.
* @param aIndexInContainer The index in the container of the new child.
*
* @note Callers of this method might not hold a strong reference to the
* observer. The observer is responsible for making sure it stays
* alive for the duration of the call as needed. The observer may
* assume that this call will happen when there are script blockers on
* the stack.
*/
virtual void ContentInserted(nsIDocument *aDocument,
nsIContent* aContainer,
@ -223,6 +259,12 @@ public:
* @param aChild The child that was removed.
* @param aIndexInContainer The index in the container which the child used
* to have.
*
* @note Callers of this method might not hold a strong reference to the
* observer. The observer is responsible for making sure it stays
* alive for the duration of the call as needed. The observer may
* assume that this call will happen when there are script blockers on
* the stack.
*/
virtual void ContentRemoved(nsIDocument *aDocument,
nsIContent* aContainer,
@ -241,6 +283,10 @@ public:
* removed from the observed node, use the ContentRemoved notification.
*
* @param aNode The node being destroyed.
*
* @note Callers of this method might not hold a strong reference to
* the observer. The observer is responsible for making sure it
* stays alive for the duration of the call as needed.
*/
virtual void NodeWillBeDestroyed(const nsINode *aNode) = 0;
@ -254,6 +300,10 @@ public:
* parent chain changed.
*
* @param aContent The piece of content that had its parent changed.
*
* @note Callers of this method might not hold a strong reference to
* the observer. The observer is responsible for making sure it
* stays alive for the duration of the call as needed.
*/
virtual void ParentChainChanged(nsIContent *aContent) = 0;

Просмотреть файл

@ -764,6 +764,8 @@ nsDOMAttribute::AttributeChanged(nsIDocument* aDocument,
return;
}
nsCOMPtr<nsIMutationObserver> kungFuDeathGrip(this);
// Just blow away our mChild and recreate it if needed
if (mChild) {
static_cast<nsTextNode*>(mChild)->UnbindFromAttribute();

Просмотреть файл

@ -2162,9 +2162,79 @@ nsDocument::StartDocumentLoad(const char* aCommand, nsIChannel* aChannel,
mChannel = aChannel;
nsresult rv = InitCSP();
nsresult rv = CheckFrameOptions();
NS_ENSURE_SUCCESS(rv, rv);
rv = InitCSP();
NS_ENSURE_SUCCESS(rv, rv);
return NS_OK;
}
// Check if X-Frame-Options permits this document to be loaded as a subdocument.
nsresult nsDocument::CheckFrameOptions()
{
nsAutoString xfoHeaderValue;
this->GetHeaderData(nsGkAtoms::headerXFO, xfoHeaderValue);
// return early if header does not have one of the two values with meaning
if (!xfoHeaderValue.LowerCaseEqualsLiteral("deny") &&
!xfoHeaderValue.LowerCaseEqualsLiteral("sameorigin"))
return NS_OK;
nsCOMPtr<nsIDocShell> docShell = do_QueryReferent(mDocumentContainer);
if (docShell) {
PRBool framingAllowed = true;
// We need to check the location of this window and the location of the top
// window, if we're not the top. X-F-O: SAMEORIGIN requires that the
// document must be same-origin with top window. X-F-O: DENY requires that
// the document must never be framed.
nsCOMPtr<nsIDOMWindow> thisWindow = do_GetInterface(docShell);
nsCOMPtr<nsIDOMWindow> topWindow;
thisWindow->GetTop(getter_AddRefs(topWindow));
// if the document is in the top window, it's not in a frame.
if (thisWindow == topWindow)
return NS_OK;
// If the value of the header is DENY, then the document
// should never be permitted to load as a subdocument.
if (xfoHeaderValue.LowerCaseEqualsLiteral("deny")) {
framingAllowed = false;
}
else if (xfoHeaderValue.LowerCaseEqualsLiteral("sameorigin")) {
// If the X-Frame-Options value is SAMEORIGIN, then the top frame in the
// parent chain must be from the same origin as this document.
nsCOMPtr<nsIURI> uri = static_cast<nsIDocument*>(this)->GetDocumentURI();
nsCOMPtr<nsIDOMDocument> topDOMDoc;
topWindow->GetDocument(getter_AddRefs(topDOMDoc));
nsCOMPtr<nsIDocument> topDoc = do_QueryInterface(topDOMDoc);
if (topDoc) {
nsCOMPtr<nsIURI> topUri = topDoc->GetDocumentURI();
nsresult rv = nsContentUtils::GetSecurityManager()->
CheckSameOriginURI(uri, topUri, PR_TRUE);
if (NS_FAILED(rv)) {
framingAllowed = false;
}
}
}
if (!framingAllowed) {
// cancel the load and display about:blank
mChannel->Cancel(NS_BINDING_ABORTED);
nsCOMPtr<nsIWebNavigation> webNav(do_QueryInterface(docShell));
if (webNav) {
webNav->LoadURI(NS_LITERAL_STRING("about:blank").get(),
0, nsnull, nsnull, nsnull);
}
return NS_ERROR_CONTENT_BLOCKED;
}
}
return NS_OK;
}
@ -5468,13 +5538,9 @@ nsDocument::CloneNode(PRBool aDeep, nsIDOMNode** aReturn)
NS_IMETHODIMP
nsDocument::Normalize()
{
PRInt32 count = mChildren.ChildCount();
for (PRInt32 i = 0; i < count; ++i) {
for (PRInt32 i = 0; i < mChildren.ChildCount(); ++i) {
nsCOMPtr<nsIDOMNode> node(do_QueryInterface(mChildren.ChildAt(i)));
if (node) {
node->Normalize();
}
node->Normalize();
}
return NS_OK;
@ -6442,6 +6508,7 @@ nsDocument::RetrieveRelevantHeaders(nsIChannel *aChannel)
"x-dns-prefetch-control",
"x-content-security-policy",
"x-content-security-policy-report-only",
"x-frame-options",
// add more http headers if you need
// XXXbz don't add content-location support without reading bug
// 238654 and its dependencies/dups first.

Просмотреть файл

@ -1019,9 +1019,9 @@ protected:
virtual nsPIDOMWindow *GetInnerWindowInternal();
virtual nsIScriptGlobalObject* GetScriptHandlingObjectInternal() const;
#define NS_DOCUMENT_NOTIFY_OBSERVERS(func_, params_) \
NS_OBSERVER_ARRAY_NOTIFY_OBSERVERS(mObservers, nsIDocumentObserver, \
func_, params_);
#define NS_DOCUMENT_NOTIFY_OBSERVERS(func_, params_) \
NS_OBSERVER_ARRAY_NOTIFY_XPCOM_OBSERVERS(mObservers, nsIDocumentObserver, \
func_, params_);
#ifdef DEBUG
void VerifyRootContentState();
@ -1143,6 +1143,7 @@ private:
void PostUnblockOnloadEvent();
void DoUnblockOnload();
nsresult CheckFrameOptions();
nsresult InitCSP();
/**

Просмотреть файл

@ -1025,6 +1025,7 @@ GK_ATOM(wrap, "wrap")
GK_ATOM(headerDNSPrefetchControl,"x-dns-prefetch-control")
GK_ATOM(headerCSP, "x-content-security-policy")
GK_ATOM(headerCSPReportOnly, "x-content-security-policy-report-only")
GK_ATOM(headerXFO, "x-frame-options")
GK_ATOM(xml, "xml")
GK_ATOM(xmlns, "xmlns")
GK_ATOM(xmp, "xmp")

Просмотреть файл

@ -86,7 +86,6 @@ using namespace mozilla::dom;
} while (node); \
PR_END_MACRO
void
nsNodeUtils::CharacterDataWillChange(nsIContent* aContent,
CharacterDataChangeInfo* aInfo)

Просмотреть файл

@ -353,6 +353,8 @@ nsRange::ParentChainChanged(nsIContent *aContent)
NS_ASSERTION(newRoot, "No valid boundary or root found!");
NS_ASSERTION(newRoot == IsValidBoundary(mEndParent),
"Start parent and end parent give different root!");
// This is safe without holding a strong ref to self as long as the change
// of mRoot is the last thing in DoSetRange.
DoSetRange(mStartParent, mStartOffset, mEndParent, mEndOffset, newRoot);
}
@ -473,6 +475,8 @@ nsRange::DoSetRange(nsINode* aStartN, PRInt32 aStartOffset,
mEndParent = aEndN;
mEndOffset = aEndOffset;
mIsPositioned = !!mStartParent;
// This needs to be the last thing this function does. See comment
// in ParentChainChanged.
mRoot = aRoot;
}

Просмотреть файл

@ -341,15 +341,12 @@ nsAttributeTextNode::AttributeChanged(nsIDocument* aDocument,
{
if (aNameSpaceID == mNameSpaceID && aAttribute == mAttrName &&
aContent == mGrandparent) {
// Since UpdateText notifies, do it asynchronously. Note that if we get
// unbound while the event is up that's ok -- we'll just have no
// grandparent when it fires, and will do nothing.
// XXXbz ideally we'd either process this on layout flushes or do it right
// after nsIMutationObserver notifications are over or something, instead
// of doing it fully async.
// Since UpdateText notifies, do it when it's safe to run script. Note
// that if we get unbound while the event is up that's ok -- we'll just
// have no grandparent when it fires, and will do nothing.
void (nsAttributeTextNode::*update)() = &nsAttributeTextNode::UpdateText;
nsCOMPtr<nsIRunnable> ev = NS_NewRunnableMethod(this, update);
NS_DispatchToCurrentThread(ev);
nsContentUtils::AddScriptRunner(ev);
}
}

Просмотреть файл

@ -403,6 +403,9 @@ _TEST_FILES2 = \
file_websocket_wsh.py \
file_websocket_http_resource.txt \
test_bug574596.html \
test_x-frame-options.html \
file_x-frame-options_main.html \
file_x-frame-options_page.sjs \
$(NULL)
# This test fails on the Mac for some reason

Просмотреть файл

@ -0,0 +1,19 @@
<html>
<head>
<title>X-Frame-Options tests</title>
<script type="text/javascript">
// This frame loading means all subframes have either loaded or errored out. We
// can now tell the test harness to check each subframe for the expected result.
window.addEventListener('load', parent.testFramesLoaded, false);
</script>
</head>
<body>
<iframe id="control1" src="http://mochi.test:8888/tests/content/base/test/file_x-frame-options_page.sjs?testid=control1"></iframe><br>
<iframe id="control2" src="http://example.com/tests/content/base/test/file_x-frame-options_page.sjs?testid=control2"></iframe><br>
<iframe id="deny" src="http://mochi.test:8888/tests/content/base/test/file_x-frame-options_page.sjs?testid=deny&xfo=deny"></iframe><br>
<iframe id="sameorigin1" src="http://mochi.test:8888/tests/content/base/test/file_x-frame-options_page.sjs?testid=sameorigin1&xfo=sameorigin"></iframe><br>
<iframe id="sameorigin2" src="http://example.com/tests/content/base/test/file_x-frame-options_page.sjs?testid=sameorigin2&xfo=sameorigin"></iframe><br>
</body>
</html>

Просмотреть файл

@ -0,0 +1,25 @@
// SJS file for X-Frame-Options mochitests
function handleRequest(request, response)
{
var query = {};
request.queryString.split('&').forEach(function (val) {
var [name, value] = val.split('=');
query[name] = unescape(value);
});
response.setHeader("Cache-Control", "no-cache", false);
response.setHeader("Content-Type", "text/html", false);
// X-Frame-Options header value
if (query['xfo'] == "deny") {
for (var i = 0 ; i < 0x7fffff ; i++) { }
response.setHeader("X-Frame-Options", "DENY", false);
}
else if (query['xfo'] == "sameorigin") {
response.setHeader("X-Frame-Options", "SAMEORIGIN", false);
}
// from the test harness we'll be checking for the presence of this element
// to test if the page loaded
response.write("<h1 id=\"test\">" + query["testid"] + "</h1>");
}

Просмотреть файл

@ -0,0 +1,50 @@
<!DOCTYPE HTML>
<html>
<head>
<title>Test for X-Frame-Options response header</title>
<script type="text/javascript" src="/MochiKit/packed.js"></script>
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
</head>
<body>
<p id="display"></p>
<div id="content" style="display: none">
</div>
<iframe style="width:100%;height:300px;" id="harness"></iframe>
<script class="testbody" type="text/javascript">
var path = "/tests/content/base/test/";
// contains { test_frame_id : expected_result }
var testExpectedResults = { "control1": true,
"control2": true,
"deny": false,
"sameorigin1": true,
"sameorigin2": false
};
var testFramesLoaded = function() {
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
var harness = document.getElementById("harness");
for (var t in testExpectedResults) {
var frame = harness.contentDocument.getElementById(t);
// test if frame loaded by checking for a contentDocument we can access
test = frame.contentDocument.getElementById("test");
is(test != null, testExpectedResults[t], "test "+t);
}
SimpleTest.finish();
}
SimpleTest.waitForExplicitFinish();
// load the test harness
document.getElementById("harness").src = "file_x-frame-options_main.html";
</script>
</pre>
</body>
</html>

Просмотреть файл

@ -306,6 +306,8 @@ PRBool nsXMLEventsManager::RemoveListener(nsIContent * aContent)
void nsXMLEventsManager::AddListeners(nsIDocument* aDocument)
{
nsCOMPtr<nsIMutationObserver> kungFuDeathGrip(this);
nsIContent *cur;
for (int i = 0; i < mIncomplete.Count(); ++i) {
cur = mIncomplete[i];
@ -315,41 +317,21 @@ void nsXMLEventsManager::AddListeners(nsIDocument* aDocument)
}
}
void
nsXMLEventsManager::BeginUpdate(nsIDocument* aDocument, nsUpdateType aUpdateType) {}
void
nsXMLEventsManager::EndUpdate(nsIDocument* aDocument, nsUpdateType aUpdateType) {}
void
nsXMLEventsManager::NodeWillBeDestroyed(const nsINode* aNode)
{
nsCOMPtr<nsIMutationObserver> kungFuDeathGrip(this);
mIncomplete.Clear();
mListeners.Enumerate(EnumAndUnregisterListener, this);
mListeners.Clear();
}
void
nsXMLEventsManager::BeginLoad(nsIDocument* aDocument) {}
void
nsXMLEventsManager::EndLoad(nsIDocument* aDocument)
{
AddListeners(aDocument);
}
NS_IMPL_NSIDOCUMENTOBSERVER_STATE_STUB(nsXMLEventsManager)
void
nsXMLEventsManager::CharacterDataWillChange(nsIDocument* aDocument,
nsIContent* aContent,
CharacterDataChangeInfo* aInfo) {}
void
nsXMLEventsManager::CharacterDataChanged(nsIDocument* aDocument,
nsIContent* aContent,
CharacterDataChangeInfo* aInfo) {}
void
nsXMLEventsManager::AttributeWillChange(nsIDocument* aDocument,
nsIContent* aContent,
PRInt32 aNameSpaceID,
nsIAtom* aAttribute,
PRInt32 aModType) {}
void
nsXMLEventsManager::AttributeChanged(nsIDocument* aDocument,
nsIContent* aContent,
@ -357,6 +339,8 @@ nsXMLEventsManager::AttributeChanged(nsIDocument* aDocument,
nsIAtom* aAttribute,
PRInt32 aModType)
{
nsCOMPtr<nsIMutationObserver> kungFuDeathGrip(this);
if (aNameSpaceID == kNameSpaceID_XMLEvents &&
(aAttribute == nsGkAtoms::event ||
aAttribute == nsGkAtoms::handler ||
@ -423,6 +407,8 @@ nsXMLEventsManager::ContentRemoved(nsIDocument* aDocument,
//And to remember: the same observer can be referenced by many
//XMLEventsListeners
nsCOMPtr<nsIMutationObserver> kungFuDeathGrip(this);
//If the content was an XML Events observer or handler
mListeners.Enumerate(EnumAndSetIncomplete, aChild);
@ -437,11 +423,3 @@ nsXMLEventsManager::ContentRemoved(nsIDocument* aDocument,
ContentRemoved(aDocument, aChild, aChild->GetChildAt(i), i);
}
}
void
nsXMLEventsManager::ParentChainChanged(nsIContent *aContent)
{
}
NS_IMPL_NSIDOCUMENTOBSERVER_STYLE_STUB(nsXMLEventsManager)

Просмотреть файл

@ -46,6 +46,7 @@
#include "nsIDOMEventListener.h"
#include "nsInterfaceHashtable.h"
#include "nsIAtom.h"
#include "nsStubDocumentObserver.h"
/*
* The implementation of the XML Events Basic profile
@ -89,12 +90,18 @@ private:
};
class nsXMLEventsManager : public nsIDocumentObserver {
class nsXMLEventsManager : public nsStubDocumentObserver {
public:
nsXMLEventsManager();
~nsXMLEventsManager();
NS_DECL_ISUPPORTS
NS_DECL_NSIDOCUMENTOBSERVER
NS_DECL_NSIMUTATIONOBSERVER_NODEWILLBEDESTROYED
virtual void EndLoad(nsIDocument* aDocument);
NS_DECL_NSIMUTATIONOBSERVER_ATTRIBUTECHANGED
NS_DECL_NSIMUTATIONOBSERVER_CONTENTAPPENDED
NS_DECL_NSIMUTATIONOBSERVER_CONTENTINSERTED
NS_DECL_NSIMUTATIONOBSERVER_CONTENTREMOVED
void AddXMLEventsContent(nsIContent * aContent);
void RemoveXMLEventsContent(nsIContent * aContent);

Просмотреть файл

@ -986,6 +986,9 @@ nsHTMLTextAreaElement::ContentChanged(nsIContent* aContent)
{
if (!mValueChanged && mDoneAddingChildren &&
nsContentUtils::IsInSameAnonymousTree(this, aContent)) {
// Hard to say what the reset can trigger, so be safe pending
// further auditing.
nsCOMPtr<nsIMutationObserver> kungFuDeathGrip(this);
Reset();
}
}

Просмотреть файл

@ -241,6 +241,7 @@ nsSVGUseElement::ContentRemoved(nsIDocument *aDocument,
void
nsSVGUseElement::NodeWillBeDestroyed(const nsINode *aNode)
{
nsCOMPtr<nsIMutationObserver> kungFuDeathGrip(this);
UnlinkSource();
}

Просмотреть файл

@ -231,6 +231,7 @@ nsXPathResult::SnapshotItem(PRUint32 aIndex, nsIDOMNode **aResult)
void
nsXPathResult::NodeWillBeDestroyed(const nsINode* aNode)
{
nsCOMPtr<nsIMutationObserver> kungFuDeathGrip(this);
// Set to null to avoid unregistring unnecessarily
mDocument = nsnull;
Invalidate(aNode->IsNodeOfType(nsINode::eCONTENT) ?
@ -380,11 +381,12 @@ nsXPathResult::Invalidate(const nsIContent* aChangeRoot)
}
}
mInvalidIteratorState = PR_TRUE;
// Make sure nulling out mDocument is the last thing we do.
if (mDocument) {
mDocument->RemoveMutationObserver(this);
mDocument = nsnull;
}
mInvalidIteratorState = PR_TRUE;
}
nsresult

Просмотреть файл

@ -1208,6 +1208,7 @@ txMozillaXSLTProcessor::ensureStylesheet()
void
txMozillaXSLTProcessor::NodeWillBeDestroyed(const nsINode* aNode)
{
nsCOMPtr<nsIMutationObserver> kungFuDeathGrip(this);
if (NS_FAILED(mCompileResult)) {
return;
}

Просмотреть файл

@ -988,6 +988,8 @@ nsXULDocument::AttributeWillChange(nsIDocument* aDocument,
// See if we need to update our ref map.
if (aAttribute == nsGkAtoms::ref ||
(aAttribute == nsGkAtoms::id && !aContent->GetIDAttributeName())) {
// Might not need this, but be safe for now.
nsCOMPtr<nsIMutationObserver> kungFuDeathGrip(this);
RemoveElementFromRefMap(aContent->AsElement());
}
}
@ -999,6 +1001,9 @@ nsXULDocument::AttributeChanged(nsIDocument* aDocument,
{
NS_ASSERTION(aDocument == this, "unexpected doc");
// Might not need this, but be safe for now.
nsCOMPtr<nsIMutationObserver> kungFuDeathGrip(this);
// XXXbz once we change AttributeChanged to take Element, we can nix this line
Element* aElement = aElementContent->AsElement();
@ -1097,6 +1102,9 @@ nsXULDocument::ContentAppended(nsIDocument* aDocument,
{
NS_ASSERTION(aDocument == this, "unexpected doc");
// Might not need this, but be safe for now.
nsCOMPtr<nsIMutationObserver> kungFuDeathGrip(this);
// Update our element map
nsresult rv = NS_OK;
for (nsIContent* cur = aFirstNewContent; cur && NS_SUCCEEDED(rv);
@ -1113,6 +1121,9 @@ nsXULDocument::ContentInserted(nsIDocument* aDocument,
{
NS_ASSERTION(aDocument == this, "unexpected doc");
// Might not need this, but be safe for now.
nsCOMPtr<nsIMutationObserver> kungFuDeathGrip(this);
AddSubtreeToDocument(aChild);
}
@ -1124,6 +1135,9 @@ nsXULDocument::ContentRemoved(nsIDocument* aDocument,
{
NS_ASSERTION(aDocument == this, "unexpected doc");
// Might not need this, but be safe for now.
nsCOMPtr<nsIMutationObserver> kungFuDeathGrip(this);
RemoveSubtreeFromDocument(aChild);
}

Просмотреть файл

@ -1562,6 +1562,8 @@ nsXULContentBuilder::AttributeChanged(nsIDocument* aDocument,
nsIAtom* aAttribute,
PRInt32 aModType)
{
nsCOMPtr<nsIMutationObserver> kungFuDeathGrip(this);
// Handle "open" and "close" cases. We do this handling before
// we've notified the observer, so that content is already created
// for the frame system to walk.
@ -1590,6 +1592,7 @@ nsXULContentBuilder::AttributeChanged(nsIDocument* aDocument,
void
nsXULContentBuilder::NodeWillBeDestroyed(const nsINode* aNode)
{
nsCOMPtr<nsIMutationObserver> kungFuDeathGrip(this);
// Break circular references
mContentSupportMap.Clear();

Просмотреть файл

@ -1086,6 +1086,7 @@ nsXULTreeBuilder::PerformActionOnCell(const PRUnichar* aAction, PRInt32 aRow, ns
void
nsXULTreeBuilder::NodeWillBeDestroyed(const nsINode* aNode)
{
nsCOMPtr<nsIMutationObserver> kungFuDeathGrip(this);
if (mObservers)
mObservers->Clear();

Просмотреть файл

@ -5839,6 +5839,8 @@ nsHTMLEditor::ShouldReplaceRootElement()
void
nsHTMLEditor::ResetRootElementAndEventTarget()
{
nsCOMPtr<nsIMutationObserver> kungFuDeathGrip(this);
// Need to remove the event listeners first because BeginningOfDocument
// could set a new root (and event target is set by InstallEventListeners())
// and we won't be able to remove them from the old event target then.

Просмотреть файл

@ -198,12 +198,14 @@ public:
ImageContainer* GetContainer() { return mContainer; }
gfxPattern::GraphicsFilter GetFilter() { return mFilter; }
NS_LAYER_DECL_NAME("ImageLayer", TYPE_IMAGE)
MOZ_LAYER_DECL_NAME("ImageLayer", TYPE_IMAGE)
protected:
ImageLayer(LayerManager* aManager, void* aImplData)
: Layer(aManager, aImplData), mFilter(gfxPattern::FILTER_GOOD) {}
virtual nsACString& PrintInfo(nsACString& aTo, const char* aPrefix);
nsRefPtr<ImageContainer> mContainer;
gfxPattern::GraphicsFilter mFilter;
};

384
gfx/layers/Layers.cpp Normal file
Просмотреть файл

@ -0,0 +1,384 @@
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*-
* vim: sw=2 ts=8 et :
*/
/* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at:
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is Mozilla Code.
*
* The Initial Developer of the Original Code is
* The Mozilla Foundation
* Portions created by the Initial Developer are Copyright (C) 2010
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
* Chris Jones <jones.chris.g@gmail.com>
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
#include "ImageLayers.h"
#include "Layers.h"
#ifdef MOZ_LAYERS_HAVE_LOG
FILE*
FILEOrDefault(FILE* aFile)
{
return aFile ? aFile : stderr;
}
#endif // MOZ_LAYERS_HAVE_LOG
namespace {
// XXX pretty general utilities, could centralize
nsACString&
AppendToString(nsACString& s, const gfxPattern::GraphicsFilter& f,
const char* pfx="", const char* sfx="")
{
s += pfx;
switch (f) {
case gfxPattern::FILTER_FAST: s += "fast"; break;
case gfxPattern::FILTER_GOOD: s += "good"; break;
case gfxPattern::FILTER_BEST: s += "best"; break;
case gfxPattern::FILTER_NEAREST: s += "nearest"; break;
case gfxPattern::FILTER_BILINEAR: s += "bilinear"; break;
case gfxPattern::FILTER_GAUSSIAN: s += "gaussian"; break;
default:
NS_ERROR("unknown filter type");
s += "???";
}
return s += sfx;
}
nsACString&
AppendToString(nsACString& s, const gfxRGBA& c,
const char* pfx="", const char* sfx="")
{
s += pfx;
s += nsPrintfCString(
128, "rgba(%d, %d, %d, %g)",
PRUint8(c.r*255.0), PRUint8(c.g*255.0), PRUint8(c.b*255.0), c.a);
return s += sfx;
}
nsACString&
AppendToString(nsACString& s, const gfx3DMatrix& m,
const char* pfx="", const char* sfx="")
{
s += pfx;
if (m.IsIdentity())
s += "[ I ]";
else {
gfxMatrix matrix;
if (m.Is2D(&matrix)) {
s += nsPrintfCString(
"[ %g %g; %g %g; %g %g; ]",
96, matrix.xx, matrix.yx, matrix.xy, matrix.yy, matrix.x0, matrix.y0);
} else {
s += nsPrintfCString(
256, "[ %g %g %g %g; %g %g %g %g; %g %g %g %g; %g %g %g %g; ]",
m._11, m._12, m._13, m._14,
m._21, m._22, m._23, m._24,
m._31, m._32, m._33, m._34,
m._41, m._42, m._43, m._44);
}
}
return s += sfx;
}
nsACString&
AppendToString(nsACString& s, const nsIntRect& r,
const char* pfx="", const char* sfx="")
{
s += pfx;
s += nsPrintfCString(
256, "(x=%d, y=%d, w=%d, h=%d)",
r.x, r.y, r.width, r.height);
return s += sfx;
}
nsACString&
AppendToString(nsACString& s, const nsIntRegion& r,
const char* pfx="", const char* sfx="")
{
s += pfx;
nsIntRegionRectIterator it(r);
s += "< ";
while (const nsIntRect* sr = it.Next())
AppendToString(s, *sr) += "; ";
s += ">";
return s += sfx;
}
} // namespace <anon>
namespace mozilla {
namespace layers {
//--------------------------------------------------
// Layer
PRBool
Layer::CanUseOpaqueSurface()
{
// If the visible content in the layer is opaque, there is no need
// for an alpha channel.
if (IsOpaqueContent())
return PR_TRUE;
// Also, if this layer is the bottommost layer in a container which
// doesn't need an alpha channel, we can use an opaque surface for this
// layer too. Any transparent areas must be covered by something else
// in the container.
ContainerLayer* parent = GetParent();
return parent && parent->GetFirstChild() == this &&
parent->CanUseOpaqueSurface();
}
#ifdef MOZ_LAYERS_HAVE_LOG
void
Layer::Dump(FILE* aFile, const char* aPrefix)
{
DumpSelf(aFile, aPrefix);
if (Layer* kid = GetFirstChild()) {
nsCAutoString pfx(aPrefix);
pfx += " ";
kid->Dump(aFile, pfx.get());
}
if (Layer* next = GetNextSibling())
next->Dump(aFile, aPrefix);
}
void
Layer::DumpSelf(FILE* aFile, const char* aPrefix)
{
nsCAutoString str;
PrintInfo(str, aPrefix);
fprintf(FILEOrDefault(aFile), "%s\n", str.get());
}
void
Layer::Log(const char* aPrefix)
{
if (!IsLogEnabled())
return;
LogSelf(aPrefix);
if (Layer* kid = GetFirstChild()) {
nsCAutoString pfx(aPrefix);
pfx += " ";
kid->Log(pfx.get());
}
if (Layer* next = GetNextSibling())
next->Log(aPrefix);
}
void
Layer::LogSelf(const char* aPrefix)
{
if (!IsLogEnabled())
return;
nsCAutoString str;
PrintInfo(str, aPrefix);
MOZ_LAYERS_LOG(("%s", str.get()));
}
nsACString&
Layer::PrintInfo(nsACString& aTo, const char* aPrefix)
{
aTo += aPrefix;
aTo += nsPrintfCString(64, "%s%s (0x%p)", mManager->Name(), Name(), this);
if (!mVisibleRegion.IsEmpty())
AppendToString(aTo, mVisibleRegion, " [visible=", "]");
if (!mTransform.IsIdentity())
AppendToString(aTo, mTransform, " [transform=", "]");
if (1.0 != mOpacity)
aTo.AppendPrintf(" [opacity=%g]", mOpacity);
if (IsOpaqueContent())
aTo += " [opaqueContent]";
return aTo;
}
nsACString&
ThebesLayer::PrintInfo(nsACString& aTo, const char* aPrefix)
{
Layer::PrintInfo(aTo, aPrefix);
return mValidRegion.IsEmpty() ?
aTo : AppendToString(aTo, mValidRegion, " [valid=", "]");
}
nsACString&
ColorLayer::PrintInfo(nsACString& aTo, const char* aPrefix)
{
Layer::PrintInfo(aTo, aPrefix);
AppendToString(aTo, mColor, " [color=", "]");
return aTo;
}
nsACString&
CanvasLayer::PrintInfo(nsACString& aTo, const char* aPrefix)
{
Layer::PrintInfo(aTo, aPrefix);
AppendToString(aTo, mFilter, " [filter=", "]");
return aTo;
}
nsACString&
ImageLayer::PrintInfo(nsACString& aTo, const char* aPrefix)
{
Layer::PrintInfo(aTo, aPrefix);
AppendToString(aTo, mFilter, " [filter=", "]");
return aTo;
}
//--------------------------------------------------
// LayerManager
void
LayerManager::Dump(FILE* aFile, const char* aPrefix)
{
FILE* file = FILEOrDefault(aFile);
DumpSelf(file, aPrefix);
nsCAutoString pfx(aPrefix);
pfx += " ";
if (!mRoot) {
fprintf(file, "%s(null)", pfx.get());
return;
}
mRoot->Dump(file, pfx.get());
}
void
LayerManager::DumpSelf(FILE* aFile, const char* aPrefix)
{
nsCAutoString str;
PrintInfo(str, aPrefix);
fprintf(FILEOrDefault(aFile), "%s\n", str.get());
}
void
LayerManager::Log(const char* aPrefix)
{
if (!IsLogEnabled())
return;
LogSelf(aPrefix);
nsCAutoString pfx(aPrefix);
pfx += " ";
if (!mRoot) {
MOZ_LAYERS_LOG(("%s(null)", pfx.get()));
return;
}
mRoot->Log(pfx.get());
}
void
LayerManager::LogSelf(const char* aPrefix)
{
nsCAutoString str;
PrintInfo(str, aPrefix);
MOZ_LAYERS_LOG(("%s", str.get()));
}
nsACString&
LayerManager::PrintInfo(nsACString& aTo, const char* aPrefix)
{
aTo += aPrefix;
return aTo += nsPrintfCString(64, "%sLayerManager (0x%p)", Name(), this);
}
/*static*/ void
LayerManager::InitLog()
{
if (!sLog)
sLog = PR_NewLogModule("Layers");
}
/*static*/ bool
LayerManager::IsLogEnabled()
{
NS_ABORT_IF_FALSE(!!sLog,
"layer manager must be created before logging is allowed");
return PR_LOG_TEST(sLog, PR_LOG_DEBUG);
}
#else // !MOZ_LAYERS_HAVE_LOG
void Layer::Dump(FILE* aFile, const char* aPrefix) {}
void Layer::DumpSelf(FILE* aFile, const char* aPrefix) {}
void Layer::Log(const char* aPrefix) {}
void Layer::LogSelf(const char* aPrefix) {}
nsACString&
Layer::PrintInfo(nsACString& aTo, const char* aPrefix)
{ return aTo; }
nsACString&
ThebesLayer::PrintInfo(nsACString& aTo, const char* aPrefix)
{ return aTo; }
nsACString&
ColorLayer::PrintInfo(nsACString& aTo, const char* aPrefix)
{ return aTo; }
nsACString&
CanvasLayer::PrintInfo(nsACString& aTo, const char* aPrefix)
{ return aTo; }
nsACString&
ImageLayer::PrintInfo(nsACString& aTo, const char* aPrefix)
{ return aTo; }
void LayerManager::Dump(FILE* aFile, const char* aPrefix) {}
void LayerManager::DumpSelf(FILE* aFile, const char* aPrefix) {}
void LayerManager::Log(const char* aPrefix) {}
void LayerManager::LogSelf(const char* aPrefix) {}
nsACString&
LayerManager::PrintInfo(nsACString& aTo, const char* aPrefix)
{ return aTo; }
/*static*/ void LayerManager::InitLog() {}
/*static*/ bool LayerManager::IsLogEnabled() { return false; }
#endif // MOZ_LAYERS_HAVE_LOG
PRLogModuleInfo* LayerManager::sLog;
} // namespace layers
} // namespace mozilla

Просмотреть файл

@ -49,6 +49,17 @@
#include "gfxColor.h"
#include "gfxPattern.h"
#if defined(DEBUG) || defined(PR_LOGGING)
# include <stdio.h> // FILE
# include "prlog.h"
# define MOZ_LAYERS_HAVE_LOG
# define MOZ_LAYERS_LOG(_args) \
PR_LOG(LayerManager::GetLog(), PR_LOG_DEBUG, _args)
#else
struct PRLogModuleInfo;
# define MOZ_LAYERS_LOG(_args)
#endif // if defined(DEBUG) || defined(PR_LOGGING)
class gfxContext;
class nsPaintEvent;
@ -67,9 +78,9 @@ class ColorLayer;
class ImageContainer;
class CanvasLayer;
#define NS_LAYER_DECL_NAME(n, e) \
virtual const char* Name() { return n; } \
virtual LayerType GetType() { return e; }
#define MOZ_LAYER_DECL_NAME(n, e) \
virtual const char* Name() const { return n; } \
virtual LayerType GetType() const { return e; }
/*
* Motivation: For truly smooth animation and video playback, we need to
@ -130,7 +141,10 @@ public:
LAYERS_D3D9
};
LayerManager() : mUserData(nsnull) {}
LayerManager() : mUserData(nsnull)
{
InitLog();
}
virtual ~LayerManager() {}
/**
@ -242,9 +256,47 @@ public:
void SetUserData(void* aData) { mUserData = aData; }
void* GetUserData() { return mUserData; }
// We always declare the following logging symbols, because it's
// extremely tricky to conditionally declare them. However, for
// ifndef MOZ_LAYERS_HAVE_LOG builds, they only have trivial
// definitions in Layers.cpp.
virtual const char* Name() const { return "???"; }
/**
* Dump information about this layer manager and its managed tree to
* aFile, which defaults to stderr.
*/
void Dump(FILE* aFile=NULL, const char* aPrefix="");
/**
* Dump information about just this layer manager itself to aFile,
* which defaults to stderr.
*/
void DumpSelf(FILE* aFile=NULL, const char* aPrefix="");
/**
* Log information about this layer manager and its managed tree to
* the NSPR log (if enabled for "Layers").
*/
void Log(const char* aPrefix="");
/**
* Log information about just this layer manager itself to the NSPR
* log (if enabled for "Layers").
*/
void LogSelf(const char* aPrefix="");
static bool IsLogEnabled();
static PRLogModuleInfo* GetLog() { return sLog; }
protected:
nsRefPtr<Layer> mRoot;
void* mUserData;
// Print interesting information about this into aTo. Internally
// used to implement Dump*() and Log*().
virtual nsACString& PrintInfo(nsACString& aTo, const char* aPrefix);
static void InitLog();
static PRLogModuleInfo* sLog;
};
class ThebesLayer;
@ -354,6 +406,13 @@ public:
virtual Layer* GetFirstChild() { return nsnull; }
const gfx3DMatrix& GetTransform() { return mTransform; }
// Returns true if it's OK to save the contents of aLayer in an
// opaque surface (a surface without an alpha channel).
// If we can use a surface without an alpha channel, we should, because
// it will often make painting of antialiased text faster and higher
// quality.
PRBool CanUseOpaqueSurface();
// This setter and getter can be used anytime. The user data is initially
// null.
void SetUserData(void* aData) { mUserData = aData; }
@ -365,10 +424,8 @@ public:
*/
virtual ThebesLayer* AsThebesLayer() { return nsnull; }
#ifdef DEBUG
virtual const char* Name() = 0;
#endif
virtual LayerType GetType() = 0;
virtual const char* Name() const =0;
virtual LayerType GetType() const =0;
/**
* Only the implementation should call this. This is per-implementation
@ -384,6 +441,30 @@ public:
void SetNextSibling(Layer* aSibling) { mNextSibling = aSibling; }
void SetPrevSibling(Layer* aSibling) { mPrevSibling = aSibling; }
/**
* Dump information about this layer manager and its managed tree to
* aFile, which defaults to stderr.
*/
void Dump(FILE* aFile=NULL, const char* aPrefix="");
/**
* Dump information about just this layer manager itself to aFile,
* which defaults to stderr.
*/
void DumpSelf(FILE* aFile=NULL, const char* aPrefix="");
/**
* Log information about this layer manager and its managed tree to
* the NSPR log (if enabled for "Layers").
*/
void Log(const char* aPrefix="");
/**
* Log information about just this layer manager itself to the NSPR
* log (if enabled for "Layers").
*/
void LogSelf(const char* aPrefix="");
static bool IsLogEnabled() { return LayerManager::IsLogEnabled(); }
protected:
Layer(LayerManager* aManager, void* aImplData) :
mManager(aManager),
@ -397,6 +478,13 @@ protected:
mIsOpaqueContent(PR_FALSE)
{}
// Print interesting information about this into aTo. Internally
// used to implement Dump*() and Log*(). If subclasses have
// additional interesting properties, they should override this with
// an implementation that first calls the base implementation then
// appends additional info to aTo.
virtual nsACString& PrintInfo(nsACString& aTo, const char* aPrefix);
LayerManager* mManager;
ContainerLayer* mParent;
Layer* mNextSibling;
@ -439,12 +527,14 @@ public:
virtual ThebesLayer* AsThebesLayer() { return this; }
NS_LAYER_DECL_NAME("ThebesLayer", TYPE_THEBES)
MOZ_LAYER_DECL_NAME("ThebesLayer", TYPE_THEBES)
protected:
ThebesLayer(LayerManager* aManager, void* aImplData)
: Layer(aManager, aImplData) {}
virtual nsACString& PrintInfo(nsACString& aTo, const char* aPrefix);
nsIntRegion mValidRegion;
};
@ -472,7 +562,7 @@ public:
// This getter can be used anytime.
virtual Layer* GetFirstChild() { return mFirstChild; }
NS_LAYER_DECL_NAME("ContainerLayer", TYPE_CONTAINER)
MOZ_LAYER_DECL_NAME("ContainerLayer", TYPE_CONTAINER)
protected:
ContainerLayer(LayerManager* aManager, void* aImplData)
@ -502,7 +592,7 @@ public:
// This getter can be used anytime.
virtual const gfxRGBA& GetColor() { return mColor; }
NS_LAYER_DECL_NAME("ColorLayer", TYPE_COLOR)
MOZ_LAYER_DECL_NAME("ColorLayer", TYPE_COLOR)
protected:
ColorLayer(LayerManager* aManager, void* aImplData)
@ -510,6 +600,8 @@ protected:
mColor(0.0, 0.0, 0.0, 0.0)
{}
virtual nsACString& PrintInfo(nsACString& aTo, const char* aPrefix);
gfxRGBA mColor;
};
@ -570,12 +662,14 @@ public:
void SetFilter(gfxPattern::GraphicsFilter aFilter) { mFilter = aFilter; }
gfxPattern::GraphicsFilter GetFilter() const { return mFilter; }
NS_LAYER_DECL_NAME("CanvasLayer", TYPE_CANVAS)
MOZ_LAYER_DECL_NAME("CanvasLayer", TYPE_CANVAS)
protected:
CanvasLayer(LayerManager* aManager, void* aImplData)
: Layer(aManager, aImplData), mFilter(gfxPattern::FILTER_GOOD) {}
virtual nsACString& PrintInfo(nsACString& aTo, const char* aPrefix);
gfxPattern::GraphicsFilter mFilter;
};

Просмотреть файл

@ -66,6 +66,7 @@ EXPORTS = \
$(NULL)
CPPSRCS = \
Layers.cpp \
BasicImages.cpp \
BasicLayers.cpp \
ThebesLayerBuffer.cpp \

Просмотреть файл

@ -1,4 +1,4 @@
/* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 4 -*-
/* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 2 -*-
* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
*
@ -43,8 +43,9 @@
namespace mozilla {
namespace layers {
static void
ClipToRegion(gfxContext* aContext, const nsIntRegion& aRegion)
/*static*/ void
ThebesLayerBuffer::ClipToRegion(gfxContext* aContext,
const nsIntRegion& aRegion)
{
aContext->NewPath();
nsIntRegionRectIterator iter(aRegion);
@ -124,34 +125,19 @@ WrapRotationAxis(PRInt32* aRotationPoint, PRInt32 aSize)
}
}
static already_AddRefed<gfxASurface>
CreateBuffer(gfxASurface* aTargetSurface, gfxASurface::gfxContentType aType,
const nsIntSize& aSize)
{
return aTargetSurface->CreateSimilarSurface(aType, gfxIntSize(aSize.width, aSize.height));
}
ThebesLayerBuffer::PaintState
ThebesLayerBuffer::BeginPaint(ThebesLayer* aLayer,
gfxASurface* aReferenceSurface,
PRUint32 aFlags)
ThebesLayerBuffer::BeginPaint(ThebesLayer* aLayer, ContentType aContentType)
{
PaintState result;
result.mRegionToDraw.Sub(aLayer->GetVisibleRegion(), aLayer->GetValidRegion());
gfxASurface::gfxContentType desiredContentType = gfxASurface::CONTENT_COLOR_ALPHA;
if (aReferenceSurface->AreSimilarSurfacesSensitiveToContentType()) {
if (aFlags & OPAQUE_CONTENT) {
desiredContentType = gfxASurface::CONTENT_COLOR;
}
if (mBuffer && desiredContentType != mBuffer->GetContentType()) {
// We're effectively clearing the valid region, so we need to draw
// the entire visible region now.
result.mRegionToDraw = aLayer->GetVisibleRegion();
result.mRegionToInvalidate = aLayer->GetValidRegion();
Clear();
}
if (mBuffer && aContentType != mBuffer->GetContentType()) {
// We're effectively clearing the valid region, so we need to draw
// the entire visible region now.
result.mRegionToDraw = aLayer->GetVisibleRegion();
result.mRegionToInvalidate = aLayer->GetValidRegion();
Clear();
}
if (result.mRegionToDraw.IsEmpty())
@ -162,8 +148,7 @@ ThebesLayerBuffer::BeginPaint(ThebesLayer* aLayer,
nsRefPtr<gfxASurface> destBuffer;
nsIntRect destBufferRect;
if (mBufferRect.width >= visibleBounds.width &&
mBufferRect.height >= visibleBounds.height) {
if (BufferSizeOkFor(visibleBounds.Size())) {
// The current buffer is big enough to hold the visible area.
if (mBufferRect.Contains(visibleBounds)) {
// We don't need to adjust mBufferRect.
@ -196,8 +181,7 @@ ThebesLayerBuffer::BeginPaint(ThebesLayer* aLayer,
// We can't do a real self-copy because the buffer is rotated.
// So allocate a new buffer for the destination.
destBufferRect = visibleBounds;
destBuffer = CreateBuffer(aReferenceSurface, desiredContentType,
destBufferRect.Size());
destBuffer = CreateBuffer(aContentType, destBufferRect.Size());
if (!destBuffer)
return result;
}
@ -215,8 +199,7 @@ ThebesLayerBuffer::BeginPaint(ThebesLayer* aLayer,
} else {
// The buffer's not big enough, so allocate a new one
destBufferRect = visibleBounds;
destBuffer = CreateBuffer(aReferenceSurface, desiredContentType,
destBufferRect.Size());
destBuffer = CreateBuffer(aContentType, destBufferRect.Size());
if (!destBuffer)
return result;
}
@ -256,7 +239,7 @@ ThebesLayerBuffer::BeginPaint(ThebesLayer* aLayer,
result.mContext->Translate(-gfxPoint(quadrantRect.x, quadrantRect.y));
ClipToRegion(result.mContext, result.mRegionToDraw);
if (desiredContentType == gfxASurface::CONTENT_COLOR_ALPHA && !isClear) {
if (aContentType == gfxASurface::CONTENT_COLOR_ALPHA && !isClear) {
result.mContext->SetOperator(gfxContext::OPERATOR_CLEAR);
result.mContext->Paint();
result.mContext->SetOperator(gfxContext::OPERATOR_OVER);
@ -264,18 +247,6 @@ ThebesLayerBuffer::BeginPaint(ThebesLayer* aLayer,
return result;
}
void
ThebesLayerBuffer::DrawTo(ThebesLayer* aLayer, PRUint32 aFlags, gfxContext* aTarget, float aOpacity)
{
aTarget->Save();
ClipToRegion(aTarget, aLayer->GetVisibleRegion());
if (aFlags & OPAQUE_CONTENT) {
aTarget->SetOperator(gfxContext::OPERATOR_SOURCE);
}
DrawBufferWithRotation(aTarget, aOpacity);
aTarget->Restore();
}
}
}

Просмотреть файл

@ -1,4 +1,4 @@
/* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 4 -*-
/* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 2 -*-
* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
*
@ -67,11 +67,27 @@ class ThebesLayer;
*/
class ThebesLayerBuffer {
public:
ThebesLayerBuffer() : mBufferRotation(0,0)
typedef gfxASurface::gfxContentType ContentType;
/**
* Controls the size of the backing buffer of this.
* - SizedToVisibleBounds: the backing buffer is exactly the same
* size as the bounds of ThebesLayer's visible region
* - ContainsVisibleBounds: the backing buffer is large enough to
* fit visible bounds. May be larger.
*/
enum BufferSizePolicy {
SizedToVisibleBounds,
ContainsVisibleBounds
};
ThebesLayerBuffer(BufferSizePolicy aBufferSizePolicy)
: mBufferRotation(0,0)
, mBufferSizePolicy(aBufferSizePolicy)
{
MOZ_COUNT_CTOR(ThebesLayerBuffer);
}
~ThebesLayerBuffer()
virtual ~ThebesLayerBuffer()
{
MOZ_COUNT_DTOR(ThebesLayerBuffer);
}
@ -99,13 +115,7 @@ public:
nsIntRegion mRegionToDraw;
nsIntRegion mRegionToInvalidate;
};
/**
* Pass OPAQUE_CONTENT when we have determined that everything visible
* in the buffer will be rendered with opaque pixels.
*/
enum {
OPAQUE_CONTENT = 0x01
};
/**
* Start a drawing operation. This returns a PaintState describing what
* needs to be drawn to bring the buffer up to date in the visible region.
@ -113,16 +123,14 @@ public:
* The returned mContext may be null if mRegionToDraw is empty.
* Otherwise it must not be null.
* mRegionToInvalidate will contain mRegionToDraw.
* @param aReferenceSurface if we need to create a buffer, we'll create
* a surface that's similar to aReferenceSurface
*/
PaintState BeginPaint(ThebesLayer* aLayer, gfxASurface* aReferenceSurface,
PRUint32 aFlags);
PaintState BeginPaint(ThebesLayer* aLayer, ContentType aContentType);
/**
* Complete the drawing operation. The region to draw must have been drawn
* before this is called. The contents of the buffer are drawn to aTarget.
* Return a new surface of |aSize| and |aType|.
*/
void DrawTo(ThebesLayer* aLayer, PRUint32 aFlags, gfxContext* aTarget, float aOpacity);
virtual already_AddRefed<gfxASurface>
CreateBuffer(ContentType aType, const nsIntSize& aSize) = 0;
/**
* Get the underlying buffer, if any. This is useful because we can pass
@ -132,6 +140,9 @@ public:
gfxASurface* GetBuffer() { return mBuffer; }
protected:
// XXX make me a general utility
static void ClipToRegion(gfxContext* aContext, const nsIntRegion& aRegion);
enum XSide {
LEFT, RIGHT
};
@ -142,7 +153,17 @@ protected:
void DrawBufferQuadrant(gfxContext* aTarget, XSide aXSide, YSide aYSide, float aOpacity);
void DrawBufferWithRotation(gfxContext* aTarget, float aOpacity);
const nsIntRect& BufferRect() const { return mBufferRect; }
const nsIntPoint& BufferRotation() const { return mBufferRotation; }
private:
PRBool BufferSizeOkFor(const nsIntSize& aSize)
{
return (aSize == mBufferRect.Size() ||
(SizedToVisibleBounds != mBufferSizePolicy &&
aSize < mBufferRect.Size()));
}
nsRefPtr<gfxASurface> mBuffer;
/** The area of the ThebesLayer that is covered by the buffer as a whole */
nsIntRect mBufferRect;
@ -157,6 +178,7 @@ private:
* buffer at the other end, not 2D rotation!
*/
nsIntPoint mBufferRotation;
BufferSizePolicy mBufferSizePolicy;
};
}

Просмотреть файл

@ -214,32 +214,11 @@ BasicContainerLayer::RemoveChildInternal(Layer* aChild)
NS_RELEASE(aChild);
}
// Returns true if it's OK to save the contents of aLayer in an
// opaque surface (a surface without an alpha channel).
// If we can use a surface without an alpha channel, we should, because
// it will often make painting of antialiased text faster and higher
// quality.
static PRBool
UseOpaqueSurface(Layer* aLayer)
{
// If the visible content in the layer is opaque, there is no need
// for an alpha channel.
if (aLayer->IsOpaqueContent())
return PR_TRUE;
// Also, if this layer is the bottommost layer in a container which
// doesn't need an alpha channel, we can use an opaque surface for this
// layer too. Any transparent areas must be covered by something else
// in the container.
BasicContainerLayer* parent =
static_cast<BasicContainerLayer*>(aLayer->GetParent());
return parent && parent->GetFirstChild() == aLayer &&
UseOpaqueSurface(parent);
}
class BasicThebesLayer : public ThebesLayer, BasicImplData {
public:
BasicThebesLayer(BasicLayerManager* aLayerManager) :
ThebesLayer(aLayerManager, static_cast<BasicImplData*>(this))
ThebesLayer(aLayerManager, static_cast<BasicImplData*>(this)),
mBuffer(this)
{
MOZ_COUNT_CTOR(BasicThebesLayer);
}
@ -272,7 +251,52 @@ protected:
return static_cast<BasicLayerManager*>(mManager);
}
ThebesLayerBuffer mBuffer;
class Buffer : public ThebesLayerBuffer {
public:
Buffer(BasicThebesLayer* aLayer)
: ThebesLayerBuffer(ContainsVisibleBounds)
, mLayer(aLayer)
{}
/**
* Complete the drawing operation. The region to draw must have been
* drawn before this is called. The contents of the buffer are drawn
* to aTarget.
*/
void DrawTo(PRBool aIsOpaqueContent, gfxContext* aTarget, float aOpacity);
virtual already_AddRefed<gfxASurface>
CreateBuffer(ContentType aType, const nsIntSize& aSize)
{
return mLayer->CreateBuffer(aType, aSize);
}
private:
BasicThebesLayer* mLayer;
};
virtual already_AddRefed<gfxASurface>
CreateBuffer(Buffer::ContentType aType, const nsIntSize& aSize)
{
nsRefPtr<gfxASurface> referenceSurface = mBuffer.GetBuffer();
if (!referenceSurface) {
gfxContext* defaultTarget = BasicManager()->GetDefaultTarget();
if (defaultTarget) {
referenceSurface = defaultTarget->CurrentSurface();
} else {
nsIWidget* widget = BasicManager()->GetRetainerWidget();
if (widget) {
referenceSurface = widget->GetThebesSurface();
} else {
referenceSurface = BasicManager()->GetTarget()->CurrentSurface();
}
}
}
return referenceSurface->CreateSimilarSurface(
aType, gfxIntSize(aSize.width, aSize.height));
}
Buffer mBuffer;
};
static void
@ -318,28 +342,16 @@ BasicThebesLayer::Paint(gfxContext* aContext,
return;
}
PRUint32 flags = 0;
if (UseOpaqueSurface(this)) {
flags |= ThebesLayerBuffer::OPAQUE_CONTENT;
}
nsRefPtr<gfxASurface> targetSurface = aContext->CurrentSurface();
PRBool isOpaqueContent =
(targetSurface->AreSimilarSurfacesSensitiveToContentType() &&
aOpacity == 1.0 &&
CanUseOpaqueSurface());
{
nsRefPtr<gfxASurface> referenceSurface = mBuffer.GetBuffer();
if (!referenceSurface) {
gfxContext* defaultTarget = BasicManager()->GetDefaultTarget();
if (defaultTarget) {
referenceSurface = defaultTarget->CurrentSurface();
} else {
nsIWidget* widget = BasicManager()->GetRetainerWidget();
if (widget) {
referenceSurface = widget->GetThebesSurface();
} else {
referenceSurface = aContext->CurrentSurface();
}
}
}
ThebesLayerBuffer::PaintState state =
mBuffer.BeginPaint(this, referenceSurface, flags);
Buffer::ContentType contentType =
isOpaqueContent ? gfxASurface::CONTENT_COLOR :
gfxASurface::CONTENT_COLOR_ALPHA;
Buffer::PaintState state = mBuffer.BeginPaint(this, contentType);
mValidRegion.Sub(mValidRegion, state.mRegionToInvalidate);
if (state.mContext) {
@ -359,7 +371,21 @@ BasicThebesLayer::Paint(gfxContext* aContext,
}
}
mBuffer.DrawTo(this, flags, target, aOpacity);
mBuffer.DrawTo(isOpaqueContent, target, aOpacity);
}
void
BasicThebesLayer::Buffer::DrawTo(PRBool aIsOpaqueContent,
gfxContext* aTarget,
float aOpacity)
{
aTarget->Save();
ClipToRegion(aTarget, mLayer->GetVisibleRegion());
if (aIsOpaqueContent) {
aTarget->SetOperator(gfxContext::OPERATOR_SOURCE);
}
DrawBufferWithRotation(aTarget, aOpacity);
aTarget->Restore();
}
class BasicImageLayer : public ImageLayer, BasicImplData {
@ -812,6 +838,11 @@ BasicLayerManager::PopGroupWithCachedSurface(gfxContext *aTarget,
void
BasicLayerManager::BeginTransactionWithTarget(gfxContext* aTarget)
{
#ifdef MOZ_LAYERS_HAVE_LOG
MOZ_LAYERS_LOG(("[----- BeginTransaction"));
Log();
#endif
NS_ASSERTION(!InTransaction(), "Nested transactions not allowed");
#ifdef DEBUG
mPhase = PHASE_CONSTRUCTION;
@ -823,6 +854,11 @@ void
BasicLayerManager::EndTransaction(DrawThebesLayerCallback aCallback,
void* aCallbackData)
{
#ifdef MOZ_LAYERS_HAVE_LOG
Log();
MOZ_LAYERS_LOG(("]----- EndTransaction"));
#endif
NS_ASSERTION(InConstruction(), "Should be in construction phase");
#ifdef DEBUG
mPhase = PHASE_DRAWING;
@ -925,7 +961,7 @@ BasicLayerManager::PaintLayer(Layer* aLayer,
// area first to minimize the size of the temporary surface.
ClipToContain(mTarget, aLayer->GetVisibleRegion().GetBounds());
gfxASurface::gfxContentType type = UseOpaqueSurface(aLayer)
gfxASurface::gfxContentType type = aLayer->CanUseOpaqueSurface()
? gfxASurface::CONTENT_COLOR : gfxASurface::CONTENT_COLOR_ALPHA;
mTarget->PushGroup(type);
}

Просмотреть файл

@ -129,6 +129,9 @@ public:
gfxContext* GetTarget() { return mTarget; }
PRBool IsRetained() { return mWidget != nsnull; }
#ifdef MOZ_LAYERS_HAVE_LOG
virtual const char* Name() const { return "Basic"; }
#endif // MOZ_LAYERS_HAVE_LOG
private:
// Paints aLayer to mTarget.
void PaintLayer(Layer* aLayer,

Просмотреть файл

@ -50,29 +50,6 @@ namespace layers {
using namespace mozilla::gl;
// Returns true if it's OK to save the contents of aLayer in an
// opaque surface (a surface without an alpha channel).
// If we can use a surface without an alpha channel, we should, because
// it will often make painting of antialiased text faster and higher
// quality.
static PRBool
UseOpaqueSurface(Layer* aLayer)
{
// If the visible content in the layer is opaque, there is no need
// for an alpha channel.
if (aLayer->IsOpaqueContent())
return PR_TRUE;
// Also, if this layer is the bottommost layer in a container which
// doesn't need an alpha channel, we can use an opaque surface for this
// layer too. Any transparent areas must be covered by something else
// in the container.
ContainerLayerOGL* parent =
static_cast<ContainerLayerOGL*>(aLayer->GetParent());
return parent && parent->GetFirstChild() == aLayer &&
UseOpaqueSurface(parent);
}
ThebesLayerOGL::ThebesLayerOGL(LayerManagerOGL *aManager)
: ThebesLayer(aManager, nsnull)
, LayerOGL(aManager)
@ -92,8 +69,8 @@ ThebesLayerOGL::EnsureSurface()
{
nsIntSize visibleSize = mVisibleRegion.GetBounds().Size();
TextureImage::ContentType contentType =
UseOpaqueSurface(this) ? gfxASurface::CONTENT_COLOR :
gfxASurface::CONTENT_COLOR_ALPHA;
CanUseOpaqueSurface() ? gfxASurface::CONTENT_COLOR :
gfxASurface::CONTENT_COLOR_ALPHA;
if (!mTexImage ||
mTexImage->GetSize() != visibleSize ||
mTexImage->GetContentType() != contentType)
@ -189,7 +166,7 @@ ThebesLayerOGL::RenderLayer(int aPreviousFrameBuffer,
// Note BGR: Cairo's image surfaces are always in what
// OpenGL and our shaders consider BGR format.
ColorTextureLayerProgram *program =
UseOpaqueSurface(this)
CanUseOpaqueSurface()
? mOGLManager->GetBGRXLayerProgram()
: mOGLManager->GetBGRALayerProgram();

Просмотреть файл

@ -89,6 +89,13 @@ struct nsIntSize {
PRBool operator!=(const nsIntSize& aSize) const {
return (PRBool) ((width != aSize.width) || (height != aSize.height));
}
PRBool operator<(const nsIntSize& aSize) const {
return (PRBool) (operator<=(aSize) &&
(width < aSize.width || height < aSize.height));
}
PRBool operator<=(const nsIntSize& aSize) const {
return (PRBool) ((width <= aSize.width) && (height <= aSize.height));
}
void SizeTo(PRInt32 aWidth, PRInt32 aHeight) {width = aWidth; height = aHeight;}
};

Просмотреть файл

@ -277,6 +277,7 @@ CPPSRCS += \
gfxFT2Fonts.cpp \
gfxFT2FontBase.cpp \
gfxFT2Utils.cpp \
gfxFT2FontList.cpp \
nsUnicodeRange.cpp \
$(NULL)
endif

Просмотреть файл

@ -58,6 +58,8 @@
#include "ft2build.h"
#include FT_FREETYPE_H
#include "gfxFT2Fonts.h"
#include "gfxPlatformFontList.h"
#include "gfxFT2FontList.h"
static FT_Library gPlatformFTLibrary = NULL;
@ -225,6 +227,15 @@ gfxAndroidPlatform::ResolveFontName(const nsAString& aFontName,
if (aFontName.IsEmpty())
return NS_ERROR_FAILURE;
nsAutoString resolvedName;
gfxPlatformFontList* platformFontList = gfxPlatformFontList::PlatformFontList();
if (platformFontList) {
if (!platformFontList->ResolveFontName(aFontName, resolvedName)) {
aAborted = PR_FALSE;
return NS_OK;
}
}
nsAutoString keyName(aFontName);
ToLowerCase(keyName);
@ -256,12 +267,40 @@ gfxAndroidPlatform::GetStandardFamilyName(const nsAString& aFontName, nsAString&
return ResolveFontName(aFontName, SimpleResolverCallback, &aFamilyName, aborted);
}
gfxPlatformFontList*
gfxAndroidPlatform::CreatePlatformFontList()
{
return new gfxFT2FontList();
}
PRBool
gfxAndroidPlatform::IsFontFormatSupported(nsIURI *aFontURI, PRUint32 aFormatFlags)
{
// check for strange format flags
NS_ASSERTION(!(aFormatFlags & gfxUserFontSet::FLAG_FORMAT_NOT_USED),
"strange font format hint set");
// accept supported formats
if (aFormatFlags & (gfxUserFontSet::FLAG_FORMAT_OPENTYPE |
gfxUserFontSet::FLAG_FORMAT_TRUETYPE)) {
return PR_TRUE;
}
// reject all other formats, known and unknown
if (aFormatFlags != 0) {
return PR_FALSE;
}
// no format hint set, need to look at data
return PR_TRUE;
}
gfxFontGroup *
gfxAndroidPlatform::CreateFontGroup(const nsAString &aFamilies,
const gfxFontStyle *aStyle,
gfxUserFontSet* aUserFontSet)
{
return new gfxFT2FontGroup(aFamilies, aStyle);
return new gfxFT2FontGroup(aFamilies, aStyle, aUserFontSet);
}
FT_Library
@ -332,6 +371,15 @@ gfxAndroidPlatform::FindFontForChar(PRUint32 aCh, gfxFont *aFont)
return nsnull;
}
gfxFontEntry*
gfxAndroidPlatform::MakePlatformFont(const gfxProxyFontEntry *aProxyEntry,
const PRUint8 *aFontData, PRUint32 aLength)
{
return gfxPlatformFontList::PlatformFontList()->MakePlatformFont(aProxyEntry,
aFontData,
aLength);
}
PRBool
gfxAndroidPlatform::GetPrefFontEntries(const nsCString& aKey, nsTArray<nsRefPtr<gfxFontEntry> > *aFontEntryList)
{

Просмотреть файл

@ -62,6 +62,11 @@ public:
already_AddRefed<gfxASurface> CreateOffscreenSurface(const gfxIntSize& size,
gfxASurface::gfxImageFormat imageFormat);
virtual PRBool IsFontFormatSupported(nsIURI *aFontURI, PRUint32 aFormatFlags);
virtual gfxPlatformFontList* CreatePlatformFontList();
virtual gfxFontEntry* MakePlatformFont(const gfxProxyFontEntry *aProxyEntry,
const PRUint8 *aFontData, PRUint32 aLength);
nsresult GetFontList(nsIAtom *aLangGroup,
const nsACString& aGenericFamily,
nsTArray<nsString>& aListOfFonts);

Просмотреть файл

@ -55,9 +55,9 @@
#include "nsDirectoryServiceDefs.h"
#include "nsAppDirectoryServiceDefs.h"
#include "nsISimpleEnumerator.h"
#include "nsIWindowsRegKey.h"
#ifdef XP_WIN
#include "nsIWindowsRegKey.h"
#include <windows.h>
#endif
@ -67,14 +67,23 @@
static PRLogModuleInfo *gFontInfoLog = PR_NewLogModule("fontInfoLog");
#endif /* PR_LOGGING */
#ifdef ANDROID
#include "gfxAndroidPlatform.h"
#include <dirent.h>
#include <android/log.h>
#define ALOG(args...) __android_log_print(ANDROID_LOG_INFO, "Gecko" , ## args)
#endif
#define LOG(args) PR_LOG(gFontInfoLog, PR_LOG_DEBUG, args)
#define LOG_ENABLED() PR_LOG_TEST(gFontInfoLog, PR_LOG_DEBUG)
static __inline void
BuildKeyNameFromFontName(nsAString &aName)
{
#ifdef XP_WIN
if (aName.Length() >= LF_FACESIZE)
aName.Truncate(LF_FACESIZE - 1);
#endif
ToLowerCase(aName);
}
@ -102,14 +111,22 @@ gfxFT2FontList::gfxFT2FontList()
void
gfxFT2FontList::AppendFacesFromFontFile(const PRUnichar *aFileName)
{
char fileName[MAX_PATH];
WideCharToMultiByte(CP_ACP, 0, aFileName, -1, fileName, MAX_PATH, NULL, NULL);
AppendFacesFromFontFile(NS_ConvertUTF16toUTF8(aFileName).get());
}
void
gfxFT2FontList::AppendFacesFromFontFile(const char *aFileName)
{
#ifdef XP_WIN
FT_Library ftLibrary = gfxWindowsPlatform::GetPlatform()->GetFTLibrary();
#elif defined(ANDROID)
FT_Library ftLibrary = gfxAndroidPlatform::GetPlatform()->GetFTLibrary();
#endif
FT_Face dummy;
if (FT_Err_Ok == FT_New_Face(ftLibrary, fileName, -1, &dummy)) {
if (FT_Err_Ok == FT_New_Face(ftLibrary, aFileName, -1, &dummy)) {
for (FT_Long i = 0; i < dummy->num_faces; i++) {
FT_Face face;
if (FT_Err_Ok != FT_New_Face(ftLibrary, fileName, i, &face))
if (FT_Err_Ok != FT_New_Face(ftLibrary, aFileName, i, &face))
continue;
FontEntry* fe = FontEntry::CreateFontEntryFromFace(face);
@ -147,6 +164,7 @@ gfxFT2FontList::AppendFacesFromFontFile(const PRUnichar *aFileName)
void
gfxFT2FontList::FindFonts()
{
#ifdef XP_WIN
nsTArray<nsString> searchPaths(3);
nsTArray<nsString> fontPatterns(3);
fontPatterns.AppendElement(NS_LITERAL_STRING("\\*.ttf"));
@ -189,6 +207,32 @@ gfxFT2FontList::FindFonts()
FindClose(handle);
}
}
#elif defined(ANDROID)
gfxFontCache *fc = gfxFontCache::GetCache();
if (fc)
fc->AgeAllGenerations();
mPrefFonts.Clear();
mCodepointsWithNoFonts.reset();
DIR *d = opendir("/system/fonts");
struct dirent *ent = NULL;
while(d && (ent = readdir(d)) != NULL) {
int namelen = strlen(ent->d_name);
if (namelen > 4 &&
strcasecmp(ent->d_name + namelen - 4, ".ttf") == 0)
{
nsCString s("/system/fonts");
s.Append("/");
s.Append(nsDependentCString(ent->d_name));
AppendFacesFromFontFile(nsPromiseFlatCString(s).get());
}
}
mCodepointsWithNoFonts.SetRange(0,0x1f); // C0 controls
mCodepointsWithNoFonts.SetRange(0x7f,0x9f); // C1 controls
#endif // XP_WIN && ANDROID
}
void
@ -263,6 +307,11 @@ gfxFT2FontList::GetDefaultFont(const gfxFontStyle* aStyle, PRBool& aNeedsBold)
return FindFontForFamily(resolvedName, aStyle, aNeedsBold);
}
}
#elif defined(ANDROID)
nsAutoString resolvedName;
if (ResolveFontName(nsDependentString(NS_LITERAL_STRING("Droid Sans")),
resolvedName))
return FindFontForFamily(resolvedName, aStyle, aNeedsBold);
#endif
/* TODO: what about Qt or other platforms that may use this? */
return nsnull;

Просмотреть файл

@ -41,10 +41,12 @@
#ifndef GFX_FT2FONTLIST_H
#define GFX_FT2FONTLIST_H
#ifdef XP_WIN
#include "gfxWindowsPlatform.h"
#include <windows.h>
#endif
#include "gfxPlatformFontList.h"
#include <windows.h>
#include <bitset>
class gfxFT2FontList : public gfxPlatformFontList
@ -66,6 +68,7 @@ protected:
virtual void InitFontList();
void AppendFacesFromFontFile(const PRUnichar *aFileName);
void AppendFacesFromFontFile(const char *aFileName);
void FindFonts();
};

Просмотреть файл

@ -108,6 +108,12 @@ FontEntry::~FontEntry()
#endif
}
gfxFont*
FontEntry::CreateFontInstance(const gfxFontStyle *aFontStyle, PRBool aNeedsBold) {
already_AddRefed<gfxFT2Font> font = gfxFT2Font::GetOrMakeFont(this, aFontStyle);
return font.get();
}
/* static */
FontEntry*
FontEntry::CreateFontEntry(const gfxProxyFontEntry &aProxyEntry,
@ -325,8 +331,9 @@ gfxFT2FontGroup::FontCallback(const nsAString& fontName,
}
gfxFT2FontGroup::gfxFT2FontGroup(const nsAString& families,
const gfxFontStyle *aStyle)
: gfxFontGroup(families, aStyle)
const gfxFontStyle *aStyle,
gfxUserFontSet *aUserFontSet)
: gfxFontGroup(families, aStyle, aUserFontSet)
{
#ifdef DEBUG_pavlov
printf("Looking for %s\n", NS_ConvertUTF16toUTF8(families).get());
@ -385,7 +392,7 @@ gfxFT2FontGroup::~gfxFT2FontGroup()
gfxFontGroup *
gfxFT2FontGroup::Copy(const gfxFontStyle *aStyle)
{
return new gfxFT2FontGroup(mFamilies, aStyle);
return new gfxFT2FontGroup(mFamilies, aStyle, nsnull);
}
/**
@ -699,7 +706,7 @@ gfxFT2FontGroup::WhichSystemFontSupportsChar(PRUint32 aCh)
}
#else
nsRefPtr<gfxFont> selectedFont;
nsRefPtr<gfxFT2Font> refFont = GetFontAt(0);
nsRefPtr<gfxFont> refFont = GetFontAt(0);
gfxToolkitPlatform *platform = gfxToolkitPlatform::GetPlatform();
selectedFont = platform->FindFontForChar(aCh, refFont);
if (selectedFont)

Просмотреть файл

@ -94,6 +94,8 @@ public:
// aFontData is NS_Malloc'ed data that aFace depends on, to be freed
// after the face is destroyed; null if there is no such buffer
virtual gfxFont *CreateFontInstance(const gfxFontStyle *aFontStyle, PRBool aNeedsBold);
cairo_font_face_t *CairoFontFace();
nsresult ReadCMAP();
@ -159,23 +161,10 @@ protected:
class THEBES_API gfxFT2FontGroup : public gfxFontGroup {
public: // new functions
gfxFT2FontGroup (const nsAString& families,
const gfxFontStyle *aStyle);
const gfxFontStyle *aStyle,
gfxUserFontSet *aUserFontSet);
virtual ~gfxFT2FontGroup ();
inline gfxFT2Font *GetFontAt (PRInt32 i) {
// If it turns out to be hard for all clients that cache font
// groups to call UpdateFontList at appropriate times, we could
// instead consider just calling UpdateFontList from someplace
// more central (such as here).
NS_ASSERTION(!mUserFontSet || mCurrGeneration == GetGeneration(),
"Whoever was caching this font group should have "
"called UpdateFontList on it");
NS_ASSERTION(mFonts.Length() > PRUint32(i),
"Requesting a font index that doesn't exist");
return static_cast <gfxFT2Font *>(static_cast <gfxFont *>(mFonts[i]));
}
protected: // from gfxFontGroup
virtual gfxTextRun *MakeTextRun(const PRUnichar *aString,
PRUint32 aLength,

Просмотреть файл

@ -1764,7 +1764,7 @@ gfxFontGroup::BuildFontList()
{
// "#if" to be removed once all platforms are moved to gfxPlatformFontList interface
// and subclasses of gfxFontGroup eliminated
#if defined(XP_MACOSX) || (defined(XP_WIN) && !defined(WINCE))
#if defined(XP_MACOSX) || (defined(XP_WIN) && !defined(WINCE)) || defined(ANDROID)
ForEachFont(FindPlatformFont, this);
if (mFonts.Length() == 0) {

Просмотреть файл

@ -242,7 +242,7 @@ gfxPlatform::Init()
nsresult rv;
#if defined(XP_MACOSX) || defined(XP_WIN) // temporary, until this is implemented on others
#if defined(XP_MACOSX) || defined(XP_WIN) || defined(ANDROID) // temporary, until this is implemented on others
rv = gfxPlatformFontList::Init();
if (NS_FAILED(rv)) {
NS_ERROR("Could not initialize gfxPlatformFontList");

Просмотреть файл

@ -113,14 +113,6 @@ endif
endif
ifeq (cocoa,$(MOZ_WIDGET_TOOLKIT))
# Create an app bundle
MOZ_FIX_LINK_PATHS+=-Wl,-headerpad_max_install_names
# We need to fix the install names for the Gecko libraries we're linked to.
# They're all @loader_path/libfoo.dylib, but this binary lives in a bundle
# underneath that.
paren=\(
LIST_INSTALL_NAMES=$(shell otool -L $(PROGRAM) | grep "@loader_path" | tr -s '\t ' ' ' | cut -f1 -d$(paren) | xargs echo)
FIX_INSTALL_NAMES=$(foreach l,$(LIST_INSTALL_NAMES),-change "$l" "$(subst @loader_path,@loader_path/../../..,$l)")
libs::
$(NSINSTALL) -D $(DIST)/bin/$(PROGRAM).app
@ -129,7 +121,6 @@ libs::
sed -e "s/%APP_NAME%/$(MOZ_APP_DISPLAYNAME)/" $(srcdir)/macbuild/Contents/Resources/English.lproj/InfoPlist.strings.in | \
iconv -f UTF-8 -t UTF-16 > $(DIST)/bin/$(PROGRAM).app/Contents/Resources/English.lproj/InfoPlist.strings
$(NSINSTALL) -D $(DIST)/bin/$(PROGRAM).app/Contents/MacOS
install_name_tool $(FIX_INSTALL_NAMES) $(PROGRAM)
$(NSINSTALL) $(PROGRAM) $(DIST)/bin/$(PROGRAM).app/Contents/MacOS
rm -f $(DIST)/bin/$(PROGRAM)
endif

Просмотреть файл

@ -10,4 +10,4 @@
# hardcoded milestones in the tree from these two files.
#--------------------------------------------------------
2.0b2pre
2.0b3pre

Просмотреть файл

@ -578,7 +578,7 @@ ifdef SHARED_LIBRARY
ifdef IS_COMPONENT
EXTRA_DSO_LDOPTS += -bundle
else
EXTRA_DSO_LDOPTS += -dynamiclib -install_name @loader_path/$(SHARED_LIBRARY) -compatibility_version 1 -current_version 1 -single_module
EXTRA_DSO_LDOPTS += -dynamiclib -install_name @executable_path/$(SHARED_LIBRARY) -compatibility_version 1 -current_version 1 -single_module
endif
endif
endif

Просмотреть файл

@ -47,9 +47,9 @@ script regress-330569.js
script regress-333541.js
skip script regress-335700.js # bug xxx - reftest hang, BigO
skip-if(!xulRuntime.shell) script regress-336409-1.js # no results reported.
script regress-336409-2.js
skip-if(!xulRuntime.shell&&xulRuntime.XPCOMABI.match(/x86_64/)) script regress-336409-2.js # fails on 64 bit systems for some reason
skip-if(!xulRuntime.shell) script regress-336410-1.js # slow
script regress-336410-2.js
skip-if(!xulRuntime.shell&&xulRuntime.XPCOMABI.match(/x86_64/)) script regress-336410-2.js # fails on 64 bit systems for some reason
script regress-338804-01.js
script regress-338804-02.js
script regress-338804-03.js

Просмотреть файл

@ -40,7 +40,7 @@ var gTestfile = 'regress-336409-2.js';
var BUGNUMBER = 336409;
var summary = 'Integer overflow in js_obj_toSource';
var actual = 'No Crash';
var expect = 'No Crash';
var expect = /(No Crash|InternalError: script stack space quota is exhausted|InternalError: allocation size overflow)/;
printBugNumber(BUGNUMBER);
printStatus (summary);
@ -74,9 +74,8 @@ try
}
catch(ex)
{
expect = 'InternalError: script stack space quota is exhausted';
actual = ex + '';
print(actual);
}
reportCompare(expect, actual, summary);
reportMatch(expect, actual, summary);

Просмотреть файл

@ -40,7 +40,7 @@ var gTestfile = 'regress-336410-2.js';
var BUGNUMBER = 336410;
var summary = 'Integer overflow in array_toSource';
var actual = 'No Crash';
var expect = 'No Crash';
var expect = /(No Crash|InternalError: script stack space quota is exhausted|InternalError: allocation size overflow)/;
printBugNumber(BUGNUMBER);
printStatus (summary);
@ -74,9 +74,8 @@ try
}
catch(ex)
{
expect = 'InternalError: script stack space quota is exhausted';
actual = ex + '';
print(actual);
}
reportCompare(expect, actual, summary);
reportMatch(expect, actual, summary);

Просмотреть файл

@ -1224,8 +1224,8 @@ XPCJSRuntime::OnJSContextNew(JSContext *cx)
if (!xpc)
return JS_FALSE;
JS_SetNativeStackQuota(cx, 512 * 1024);
JS_SetScriptStackQuota(cx, 100 * 1024 * 1024);
JS_SetNativeStackQuota(cx, 128 * sizeof(size_t) * 1024);
JS_SetScriptStackQuota(cx, 25 * sizeof(size_t) * 1024 * 1024);
return JS_TRUE;
}

Просмотреть файл

@ -1404,95 +1404,11 @@ FrameLayerBuilder::DrawThebesLayer(ThebesLayer* aLayer,
}
#ifdef DEBUG
static void
DumpIntRegion(FILE* aStream, const char* aName, const nsIntRegion& aRegion)
{
if (aRegion.IsEmpty())
return;
fprintf(aStream, " [%s=", aName);
nsIntRegionRectIterator iter(aRegion);
const nsIntRect* r;
PRBool first = PR_TRUE;
while ((r = iter.Next()) != nsnull) {
if (!first) {
fputs(";", aStream);
} else {
first = PR_FALSE;
}
fprintf(aStream, "%d,%d,%d,%d", r->x, r->y, r->width, r->height);
}
fputs("]", aStream);
}
static void
DumpLayer(FILE* aStream, Layer* aLayer, PRUint32 aIndent)
{
if (!aLayer)
return;
for (PRUint32 i = 0; i < aIndent; ++i) {
fputs(" ", aStream);
}
const char* name = aLayer->Name();
ThebesLayer* thebes = aLayer->AsThebesLayer();
fprintf(aStream, "%s(%p)", name, aLayer);
DumpIntRegion(aStream, "visible", aLayer->GetVisibleRegion());
gfx3DMatrix transform = aLayer->GetTransform();
if (!transform.IsIdentity()) {
gfxMatrix matrix;
if (transform.Is2D(&matrix)) {
fprintf(aStream, " [transform=%g,%g; %g,%g; %g,%g]",
matrix.xx, matrix.yx, matrix.xy, matrix.yy, matrix.x0, matrix.y0);
} else {
fprintf(aStream, " [transform=%g,%g,%g,%g; %g,%g,%g,%g; %g,%g,%g,%g; %g,%g,%g,%g]",
transform._11, transform._12, transform._13, transform._14,
transform._21, transform._22, transform._23, transform._24,
transform._31, transform._32, transform._33, transform._34,
transform._41, transform._42, transform._43, transform._44);
}
}
const nsIntRect* clip = aLayer->GetClipRect();
if (clip) {
fprintf(aStream, " [clip=%d,%d,%d,%d]",
clip->x, clip->y, clip->width, clip->height);
}
float opacity = aLayer->GetOpacity();
if (opacity != 1.0) {
fprintf(aStream, " [opacity=%f]", opacity);
}
if (aLayer->IsOpaqueContent()) {
fputs(" [opaqueContent]", aStream);
}
if (thebes) {
DumpIntRegion(aStream, "valid", thebes->GetValidRegion());
}
fputs("\n", aStream);
for (Layer* child = aLayer->GetFirstChild(); child;
child = child->GetNextSibling()) {
DumpLayer(aStream, child, aIndent + 1);
}
}
/* static */ void
FrameLayerBuilder::DumpLayerTree(LayerManager* aManager)
{
DumpLayer(stderr, aManager->GetRoot(), 0);
}
void
FrameLayerBuilder::DumpRetainedLayerTree()
{
if (mRetainingManager) {
DumpLayerTree(mRetainingManager);
mRetainingManager->Dump(stderr);
}
}
#endif

Просмотреть файл

@ -201,11 +201,6 @@ public:
void* aCallbackData);
#ifdef DEBUG
/**
* Dumps aManager's layer tree to stderr.
*/
static void DumpLayerTree(LayerManager* aManager);
/**
* Dumps this FrameLayerBuilder's retained layer manager's retained
* layer tree to stderr.

Просмотреть файл

@ -92,6 +92,7 @@
#include "nsIContentURIGrouper.h"
#include "mozilla/Services.h"
#include "nsDirectoryServiceDefs.h"
#include "nsCharSeparatedTokenizer.h"
#define SYNC_TEXT 0x1
#define SYNC_BUTTON 0x2
@ -855,21 +856,41 @@ nsFileControlFrame::CreateAccessible()
}
#endif
PRInt32
nsFileControlFrame::GetFileFilterFromAccept() const
void
nsFileControlFrame::ParseAcceptAttribute(AcceptAttrCallback aCallback,
void* aClosure) const
{
nsAutoString accept;
mContent->GetAttr(kNameSpaceID_None, nsGkAtoms::accept, accept);
if (accept.EqualsLiteral("image/*")) {
return nsIFilePicker::filterImages;
} else if (accept.EqualsLiteral("audio/*")) {
return nsIFilePicker::filterAudio;
} else if (accept.EqualsLiteral("video/*")) {
return nsIFilePicker::filterVideo;
nsCharSeparatedTokenizerTemplate<nsContentUtils::IsHTMLWhitespace>
tokenizer(accept, ',');
// Empty loop body because aCallback is doing the work
while (tokenizer.hasMoreTokens() &&
(*aCallback)(tokenizer.nextToken(), aClosure));
}
PRBool FileFilterCallback(const nsAString& aVal, void* aClosure)
{
PRInt32* filter = (PRInt32*)aClosure;
if (aVal.EqualsLiteral("image/*")) {
*filter |= nsIFilePicker::filterImages;
} else if (aVal.EqualsLiteral("audio/*")) {
*filter |= nsIFilePicker::filterAudio;
} else if (aVal.EqualsLiteral("video/*")) {
*filter |= nsIFilePicker::filterVideo;
}
return 0;
return PR_TRUE;
}
PRInt32
nsFileControlFrame::GetFileFilterFromAccept() const
{
PRInt32 filterVal = 0;
this->ParseAcceptAttribute(&FileFilterCallback, (void*)&filterVal);
return filterVal;
}
////////////////////////////////////////////////////////////
// Mouse listener implementation

Просмотреть файл

@ -115,6 +115,9 @@ public:
*/
PRInt32 GetFileFilterFromAccept() const;
typedef PRBool (*AcceptAttrCallback)(const nsAString&, void*);
void ParseAcceptAttribute(AcceptAttrCallback aCallback, void* aClosure) const;
protected:
class MouseListener;
friend class MouseListener;

Просмотреть файл

@ -17,6 +17,13 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=377624
<input id='a' type='file' accept="image/*">
<input id='b' type='file' accept="audio/*">
<input id='c' type='file' accept="video/*">
<input id='d' type='file' accept="image/*, audio/* ">
<input id='e' type='file' accept=" image/*,video/*">
<input id='f' type='file' accept="audio/*,video/*">
<input id='g' type='file' accept="image/*, audio/* ,video/*">
<input id='h' type='file' accept="foo/baz,image/*,bogus/duh">
<input id='i' type='file' accept="mime/type;parameter,video/*">
<input id='z' type='file' accept="i/am,a,pathological,;,,,,test/case">
</div>
<pre id="test">
<script type="application/javascript">
@ -105,22 +112,29 @@ factory = {
}
};
document.getElementById('a').addEventListener("focus", function (aEvent) {
aEvent.target.removeEventListener("focus", arguments.callee, false);
synthesizeKey('VK_SPACE', {});
}, false);
document.getElementById('b').addEventListener("focus", function (aEvent) {
aEvent.target.removeEventListener("focus", arguments.callee, false);
synthesizeKey('VK_SPACE', {});
}, false);
document.getElementById('c').addEventListener("focus", function (aEvent) {
aEvent.target.removeEventListener("focus", arguments.callee, false);
synthesizeKey('VK_SPACE', {});
}, false);
var testData = [["a", FilePickerService.prototype.filterImages, 1],
["b", FilePickerService.prototype.filterAudio, 1],
["c", FilePickerService.prototype.filterVideo, 1],
["d", FilePickerService.prototype.filterImages +
FilePickerService.prototype.filterAudio, 1],
["e", FilePickerService.prototype.filterImages +
FilePickerService.prototype.filterVideo, 1],
["f", FilePickerService.prototype.filterAudio +
FilePickerService.prototype.filterVideo, 1],
["g", FilePickerService.prototype.filterImages +
FilePickerService.prototype.filterAudio +
FilePickerService.prototype.filterVideo, 1],
["h", FilePickerService.prototype.filterImages, 1],
["i", FilePickerService.prototype.filterVideo, 1],
["z", 0, 0]];
testData.forEach(function (datum) {
document.getElementById(datum[0]).addEventListener("focus", function (aEvent) {
aEvent.target.removeEventListener("focus", arguments.callee, false);
synthesizeKey('VK_SPACE', {});
}, false);
});
var testData = [["a", FilePickerService.prototype.filterImages],
["b", FilePickerService.prototype.filterAudio],
["c", FilePickerService.prototype.filterVideo]];
var currentTest = 0;
function launchNextTest(aObserver)
@ -169,9 +183,9 @@ function runTests()
"appendFilters should have been called once");
is(observer.filters[0], FilePickerService.prototype.filterAll +
testData[currentTest][1],
"Incorrect filters have been added");
is(observer.filterIndex, 1,
"File picker should show the second filter index (first is zero)");
"Correct filters should have been added");
is(observer.filterIndex, testData[currentTest][2],
"File picker should show the correct filter index");
if (++currentTest == testData.length) {
obs.removeObserver(observer, "TEST_FILEPICKER_APPENDFILTER", false);

Просмотреть файл

@ -694,6 +694,8 @@ inDOMView::AttributeChanged(nsIDocument *aDocument, nsIContent* aContent,
return;
}
nsCOMPtr<nsIMutationObserver> kungFuDeathGrip(this);
// get the dom attribute node, if there is any
nsCOMPtr<nsIDOMNode> content(do_QueryInterface(aContent));
nsCOMPtr<nsIDOMElement> el(do_QueryInterface(aContent));
@ -855,6 +857,8 @@ inDOMView::ContentInserted(nsIDocument *aDocument, nsIContent* aContainer,
if (NS_FAILED(rv = RowToNode(parentRow, &parentNode)))
return;
nsCOMPtr<nsIMutationObserver> kungFuDeathGrip(this);
if (!parentNode->isOpen) {
// Parent is not open, so don't bother creating tree rows for the
// kids. But do indicate that it's now a container, if needed.
@ -924,6 +928,8 @@ inDOMView::ContentRemoved(nsIDocument *aDocument, nsIContent* aContainer, nsICon
if (NS_FAILED(rv = RowToNode(row, &oldNode)))
return;
nsCOMPtr<nsIMutationObserver> kungFuDeathGrip(this);
// The parent may no longer be a container. Note that we don't want
// to access oldNode after calling RemoveNode, so do this now.
inDOMViewNode* parentNode = oldNode->parent;

Просмотреть файл

@ -820,6 +820,9 @@ nsTreeContentView::AttributeChanged(nsIDocument *aDocument,
nsIAtom* aAttribute,
PRInt32 aModType)
{
// Lots of codepaths under here that do all sorts of stuff, so be safe.
nsCOMPtr<nsIMutationObserver> kungFuDeathGrip(this);
// Make sure this notification concerns us.
// First check the tag to see if it's one that we care about.
nsIAtom *tag = aContent->Tag();
@ -1024,6 +1027,9 @@ nsTreeContentView::ContentInserted(nsIDocument *aDocument,
return; // this is not for us
}
// Lots of codepaths under here that do all sorts of stuff, so be safe.
nsCOMPtr<nsIMutationObserver> kungFuDeathGrip(this);
if (childTag == nsGkAtoms::treechildren) {
PRInt32 index = FindContent(aContainer);
if (index >= 0) {
@ -1112,6 +1118,9 @@ nsTreeContentView::ContentRemoved(nsIDocument *aDocument,
return; // this is not for us
}
// Lots of codepaths under here that do all sorts of stuff, so be safe.
nsCOMPtr<nsIMutationObserver> kungFuDeathGrip(this);
if (tag == nsGkAtoms::treechildren) {
PRInt32 index = FindContent(aContainer);
if (index >= 0) {
@ -1155,6 +1164,8 @@ nsTreeContentView::ContentRemoved(nsIDocument *aDocument,
void
nsTreeContentView::NodeWillBeDestroyed(const nsINode* aNode)
{
// XXXbz do we need this strong ref? Do we drop refs to self in ClearRows?
nsCOMPtr<nsIMutationObserver> kungFuDeathGrip(this);
ClearRows();
}

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Просмотреть файл

@ -1,6 +1,6 @@
# FreeType 2 top Jamfile.
#
# Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 by
# Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@ -194,7 +194,7 @@ rule RefDoc
actions RefDoc
{
python $(FT2_SRC)/tools/docmaker/docmaker.py --prefix=ft2 --title=FreeType-2.3.12 --output=$(DOC_DIR) $(FT2_INCLUDE)/freetype/*.h $(FT2_INCLUDE)/freetype/config/*.h
python $(FT2_SRC)/tools/docmaker/docmaker.py --prefix=ft2 --title=FreeType-2.4.1 --output=$(DOC_DIR) $(FT2_INCLUDE)/freetype/*.h $(FT2_INCLUDE)/freetype/config/*.h
}
RefDoc refdoc ;

Просмотреть файл

@ -9,8 +9,8 @@
is called `libttf'. They are *not* compatible!
FreeType 2.3.12
===============
FreeType 2.4.1
==============
Please read the docs/CHANGES file, it contains IMPORTANT
INFORMATION.
@ -26,9 +26,9 @@
and download one of the following files.
freetype-doc-2.3.12.tar.bz2
freetype-doc-2.3.12.tar.gz
ftdoc2312.zip
freetype-doc-2.4.1.tar.bz2
freetype-doc-2.4.1.tar.gz
ftdoc241.zip
Bugs

Просмотреть файл

@ -33,7 +33,7 @@ should work on all platforms which have GNU make (or makepp).
----------------------------------------------------------------------
Copyright 2005, 2006, 2007, 2008, 2009 by
Copyright 2005, 2006, 2007, 2008, 2009, 2010 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used,
@ -43,4 +43,4 @@ this file you indicate that you have read the license and understand
and accept it fully.
--- end of README.CVS ---
--- end of README.git ---

Просмотреть файл

@ -1,8 +1,6 @@
This directory contains freetype2 v2.3.12 downloaded from
This directory contains freetype2 v2.4.1 downloaded from
http://savannah.nongnu.org/download/freetype/
Makefile.in is added for the mozilla build.
Additional patch applied locally:
http://git.savannah.gnu.org/cgit/freetype/freetype2.git/commit/?id=25e742c573e3b88e5a4e342733f1836466628ff8
(Add overflow check to `fvar' table; see bug 553273)

Просмотреть файл

@ -3,7 +3,7 @@
#
# Copyright 1996-2000, 2001, 2003, 2006, 2008, 2009 by
# Copyright 1996-2000, 2001, 2003, 2006, 2008, 2009, 2010 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@ -230,7 +230,8 @@ dist:
# The locations of the latest `config.guess' and `config.sub' versions (from
# GNU `config' CVS), relative to the `tmp' directory used during `make dist'.
# GNU `config' git repository), relative to the `tmp' directory used during
# `make dist'.
#
CONFIG_GUESS = ~/git/config/config.guess
CONFIG_SUB = ~/git/config/config.sub

6
modules/freetype2/builds/unix/config.guess поставляемый
Просмотреть файл

@ -4,7 +4,7 @@
# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
# Free Software Foundation, Inc.
timestamp='2009-12-30'
timestamp='2010-04-03'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
@ -92,7 +92,7 @@ if test $# != 0; then
exit 1
fi
trap 'exit 1' 1 2 15
trap 'exit 1' HUP INT TERM
# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
# compiler to aid in system detection is discouraged as it requires
@ -106,7 +106,7 @@ trap 'exit 1' 1 2 15
set_cc_for_build='
trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" HUP INT PIPE TERM ;
: ${TMPDIR=/tmp} ;
{ tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
{ test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||

53
modules/freetype2/builds/unix/config.sub поставляемый
Просмотреть файл

@ -4,7 +4,7 @@
# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
# Free Software Foundation, Inc.
timestamp='2010-01-22'
timestamp='2010-05-21'
# This file is (in principle) common to ALL GNU software.
# The presence of a machine in this file suggests that SOME GNU software
@ -124,8 +124,9 @@ esac
# Here we must recognize all the valid KERNEL-OS combinations.
maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
case $maybe_os in
nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
knetbsd*-gnu* | netbsd*-gnu* | \
kopensolaris*-gnu* | \
storm-chaos* | os2-emx* | rtmk-nova*)
os=-$maybe_os
@ -295,7 +296,7 @@ case $basic_machine in
| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
| sparcv8 | sparcv9 | sparcv9b | sparcv9v \
| spu | strongarm \
| tahoe | thumb | tic4x | tic80 | tron \
| tahoe | thumb | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
| ubicom32 \
| v850 | v850e \
| we32k \
@ -303,6 +304,15 @@ case $basic_machine in
| z8k | z80)
basic_machine=$basic_machine-unknown
;;
c54x)
basic_machine=tic54x-unknown
;;
c55x)
basic_machine=tic55x-unknown
;;
c6x)
basic_machine=tic6x-unknown
;;
m6811 | m68hc11 | m6812 | m68hc12 | picochip)
# Motorola 68HC11/12.
basic_machine=$basic_machine-unknown
@ -334,7 +344,7 @@ case $basic_machine in
| arm-* | armbe-* | armle-* | armeb-* | armv*-* \
| avr-* | avr32-* \
| bfin-* | bs2000-* \
| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
| c[123]* | c30-* | [cjt]90-* | c4x-* \
| clipper-* | craynv-* | cydra-* \
| d10v-* | d30v-* | dlx-* \
| elxsi-* \
@ -482,6 +492,15 @@ case $basic_machine in
basic_machine=powerpc-ibm
os=-cnk
;;
c54x-*)
basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
c55x-*)
basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
c6x-*)
basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
c90)
basic_machine=c90-cray
os=-unicos
@ -1075,18 +1094,6 @@ case $basic_machine in
basic_machine=t90-cray
os=-unicos
;;
tic54x | c54x*)
basic_machine=tic54x-unknown
os=-coff
;;
tic55x | c55x*)
basic_machine=tic55x-unknown
os=-coff
;;
tic6x | c6x*)
basic_machine=tic6x-unknown
os=-coff
;;
# This must be matched before tile*.
tilegx*)
basic_machine=tilegx-unknown
@ -1301,7 +1308,8 @@ case $os in
| -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
| -chorusos* | -chorusrdb* | -cegcc* \
| -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
| -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
| -mingw32* | -linux-gnu* | -linux-android* \
| -linux-newlib* | -linux-uclibc* \
| -uxpv* | -beos* | -mpeix* | -udk* \
| -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
| -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
@ -1484,6 +1492,15 @@ case $basic_machine in
c4x-* | tic4x-*)
os=-coff
;;
tic54x-*)
os=-coff
;;
tic55x-*)
os=-coff
;;
tic6x-*)
os=-coff
;;
# This must come before the *-dec entry.
pdp10-*)
os=-tops20

6392
modules/freetype2/builds/unix/configure поставляемый

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Просмотреть файл

@ -11,13 +11,13 @@
# indicate that you have read the license and understand and accept it
# fully.
AC_INIT([FreeType], [2.3.12], [freetype@nongnu.org], [freetype])
AC_INIT([FreeType], [2.4.1], [freetype@nongnu.org], [freetype])
AC_CONFIG_SRCDIR([ftconfig.in])
# Don't forget to update docs/VERSION.DLL!
version_info='10:0:4'
version_info='11:1:5'
AC_SUBST([version_info])
ft_version=`echo $version_info | tr : .`
AC_SUBST([ft_version])

Просмотреть файл

@ -17,7 +17,7 @@ AC_CONFIG_SRCDIR([ftconfig.in])
# Don't forget to update docs/VERSION.DLL!
version_info='10:0:4'
version_info='11:1:5'
AC_SUBST([version_info])
ft_version=`echo $version_info | tr : .`
AC_SUBST([ft_version])

Просмотреть файл

@ -16,7 +16,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\win32\vc2005\freetype2312.lib" SuppressStartupBanner="true" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\win32\vc2005\freetype241.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@ -33,7 +33,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\win32\vc2005\freetype2312MT.lib" SuppressStartupBanner="true" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\win32\vc2005\freetype241MT.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@ -50,7 +50,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\win32\vc2005\freetype2312ST.lib" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\win32\vc2005\freetype241ST.lib" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@ -67,7 +67,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\win32\vc2005\freetype2312_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\win32\vc2005\freetype241_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@ -84,7 +84,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\win32\vc2005\freetype2312ST_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\win32\vc2005\freetype241ST_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@ -101,7 +101,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\win32\vc2005\freetype2312MT_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\win32\vc2005\freetype241MT_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@ -374,6 +374,8 @@
</File>
<File RelativePath="..\..\..\src\base\ftwinfnt.c">
</File>
<File RelativePath="..\..\..\src\base\ftxf86.c">
</File>
<File RelativePath="..\..\..\src\base\ftlcdfil.c">
</File>
<File RelativePath="..\..\..\src\base\ftgxval.c">

Просмотреть файл

@ -11,14 +11,14 @@
<p>This directory contains project files for Visual C++, named
<tt>freetype.vcproj</tt>, and Visual Studio, called <tt>freetype.sln</tt>. It
compiles the following libraries from the FreeType 2.3.12 sources:</p>
compiles the following libraries from the FreeType 2.4.1 sources:</p>
<ul>
<pre>
freetype2312.lib - release build; single threaded
freetype2312_D.lib - debug build; single threaded
freetype2312MT.lib - release build; multi-threaded
freetype2312MT_D.lib - debug build; multi-threaded</pre>
freetype241.lib - release build; single threaded
freetype241_D.lib - debug build; single threaded
freetype241MT.lib - release build; multi-threaded
freetype241MT_D.lib - debug build; multi-threaded</pre>
</ul>
<p>Be sure to extract the files with the Windows (CR+LF) line endings. ZIP

Просмотреть файл

@ -70,7 +70,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\win32\vc2008\freetype2312.lib"
OutputFile="..\..\..\objs\win32\vc2008\freetype241.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -145,7 +145,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\win32\vc2008\freetype2312MT.lib"
OutputFile="..\..\..\objs\win32\vc2008\freetype241MT.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -220,7 +220,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\win32\vc2008\freetype2312ST.lib"
OutputFile="..\..\..\objs\win32\vc2008\freetype241ST.lib"
/>
<Tool
Name="VCALinkTool"
@ -292,7 +292,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\win32\vc2008\freetype2312_D.lib"
OutputFile="..\..\..\objs\win32\vc2008\freetype241_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -365,7 +365,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\win32\vc2008\freetype2312ST_D.lib"
OutputFile="..\..\..\objs\win32\vc2008\freetype241ST_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -439,7 +439,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\win32\vc2008\freetype2312MT_D.lib"
OutputFile="..\..\..\objs\win32\vc2008\freetype241MT_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -1319,6 +1319,10 @@
RelativePath="..\..\..\src\base\ftwinfnt.c"
>
</File>
<File
RelativePath="..\..\..\src\base\ftxf86.c"
>
</File>
<File
RelativePath="..\..\..\src\base\ftlcdfil.c"
>

Просмотреть файл

@ -11,14 +11,14 @@
<p>This directory contains project files for Visual C++, named
<tt>freetype.vcproj</tt>, and Visual Studio, called <tt>freetype.sln</tt>. It
compiles the following libraries from the FreeType 2.3.12 sources:</p>
compiles the following libraries from the FreeType 2.4.1 sources:</p>
<ul>
<pre>
freetype2312.lib - release build; single threaded
freetype2312_D.lib - debug build; single threaded
freetype2312MT.lib - release build; multi-threaded
freetype2312MT_D.lib - debug build; multi-threaded</pre>
freetype241.lib - release build; single threaded
freetype241_D.lib - debug build; single threaded
freetype241MT.lib - release build; multi-threaded
freetype241MT_D.lib - debug build; multi-threaded</pre>
</ul>
<p>Be sure to extract the files with the Windows (CR+LF) line endings. ZIP

Просмотреть файл

@ -54,7 +54,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
# ADD LIB32 /nologo /out:"..\..\..\objs\freetype2312.lib"
# ADD LIB32 /nologo /out:"..\..\..\objs\freetype241.lib"
!ELSEIF "$(CFG)" == "freetype - Win32 Debug"
@ -78,7 +78,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
# ADD LIB32 /nologo /out:"..\..\..\objs\freetype2312_D.lib"
# ADD LIB32 /nologo /out:"..\..\..\objs\freetype241_D.lib"
!ELSEIF "$(CFG)" == "freetype - Win32 Debug Multithreaded"
@ -102,8 +102,8 @@ BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo /out:"lib\freetype2312_D.lib"
# ADD LIB32 /nologo /out:"..\..\..\objs\freetype2312MT_D.lib"
# ADD BASE LIB32 /nologo /out:"lib\freetype241_D.lib"
# ADD LIB32 /nologo /out:"..\..\..\objs\freetype241MT_D.lib"
!ELSEIF "$(CFG)" == "freetype - Win32 Release Multithreaded"
@ -126,8 +126,8 @@ BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo /out:"lib\freetype2312.lib"
# ADD LIB32 /nologo /out:"..\..\..\objs\freetype2312MT.lib"
# ADD BASE LIB32 /nologo /out:"lib\freetype241.lib"
# ADD LIB32 /nologo /out:"..\..\..\objs\freetype241MT.lib"
!ELSEIF "$(CFG)" == "freetype - Win32 Release Singlethreaded"
@ -151,8 +151,8 @@ BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo /out:"..\..\..\objs\freetype2312.lib"
# ADD LIB32 /out:"..\..\..\objs\freetype2312ST.lib"
# ADD BASE LIB32 /nologo /out:"..\..\..\objs\freetype241.lib"
# ADD LIB32 /out:"..\..\..\objs\freetype241ST.lib"
# SUBTRACT LIB32 /nologo
!ELSEIF "$(CFG)" == "freetype - Win32 Debug Singlethreaded"
@ -177,8 +177,8 @@ BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo /out:"..\..\..\objs\freetype2312_D.lib"
# ADD LIB32 /nologo /out:"..\..\..\objs\freetype2312ST_D.lib"
# ADD BASE LIB32 /nologo /out:"..\..\..\objs\freetype241_D.lib"
# ADD LIB32 /nologo /out:"..\..\..\objs\freetype241ST_D.lib"
!ENDIF

Просмотреть файл

@ -69,7 +69,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\freetype2312.lib"
OutputFile="..\..\..\objs\freetype241.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -144,7 +144,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\freetype2312MT.lib"
OutputFile="..\..\..\objs\freetype241MT.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -219,7 +219,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\freetype2312ST.lib"
OutputFile="..\..\..\objs\freetype241ST.lib"
/>
<Tool
Name="VCALinkTool"
@ -291,7 +291,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\freetype2312_D.lib"
OutputFile="..\..\..\objs\freetype241_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -364,7 +364,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\freetype2312ST_D.lib"
OutputFile="..\..\..\objs\freetype241ST_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -438,7 +438,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\freetype2312MT_D.lib"
OutputFile="..\..\..\objs\freetype241MT_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -1318,6 +1318,10 @@
RelativePath="..\..\..\src\base\ftwinfnt.c"
>
</File>
<File
RelativePath="..\..\..\src\base\ftxf86.c"
>
</File>
<File
RelativePath="..\..\..\src\base\ftlcdfil.c"
>

Просмотреть файл

@ -11,14 +11,14 @@
<p>This directory contains project files for Visual C++, named
<tt>freetype.dsp</tt>, and Visual Studio, called <tt>freetype.sln</tt>. It
compiles the following libraries from the FreeType 2.3.12 sources:</p>
compiles the following libraries from the FreeType 2.4.1 sources:</p>
<ul>
<pre>
freetype2312.lib - release build; single threaded
freetype2312_D.lib - debug build; single threaded
freetype2312MT.lib - release build; multi-threaded
freetype2312MT_D.lib - debug build; multi-threaded</pre>
freetype241.lib - release build; single threaded
freetype241_D.lib - debug build; single threaded
freetype241MT.lib - release build; multi-threaded
freetype241MT_D.lib - debug build; multi-threaded</pre>
</ul>
<p>Be sure to extract the files with the Windows (CR+LF) line endings. ZIP

Просмотреть файл

@ -54,7 +54,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
# ADD LIB32 /nologo /out:"..\..\..\objs\freetype2312.lib"
# ADD LIB32 /nologo /out:"..\..\..\objs\freetype241.lib"
!ELSEIF "$(CFG)" == "freetype - Win32 Debug"
@ -78,7 +78,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
# ADD LIB32 /nologo /out:"..\..\..\objs\freetype2312_D.lib"
# ADD LIB32 /nologo /out:"..\..\..\objs\freetype241_D.lib"
!ELSEIF "$(CFG)" == "freetype - Win32 Debug Multithreaded"
@ -102,8 +102,8 @@ BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo /out:"lib\freetype2312_D.lib"
# ADD LIB32 /nologo /out:"..\..\..\objs\freetype2312MT_D.lib"
# ADD BASE LIB32 /nologo /out:"lib\freetype241_D.lib"
# ADD LIB32 /nologo /out:"..\..\..\objs\freetype241MT_D.lib"
!ELSEIF "$(CFG)" == "freetype - Win32 Release Multithreaded"
@ -126,8 +126,8 @@ BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo /out:"lib\freetype2312.lib"
# ADD LIB32 /nologo /out:"..\..\..\objs\freetype2312MT.lib"
# ADD BASE LIB32 /nologo /out:"lib\freetype241.lib"
# ADD LIB32 /nologo /out:"..\..\..\objs\freetype241MT.lib"
!ELSEIF "$(CFG)" == "freetype - Win32 Release Singlethreaded"
@ -151,8 +151,8 @@ BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo /out:"..\..\..\objs\freetype2312.lib"
# ADD LIB32 /out:"..\..\..\objs\freetype2312ST.lib"
# ADD BASE LIB32 /nologo /out:"..\..\..\objs\freetype241.lib"
# ADD LIB32 /out:"..\..\..\objs\freetype241ST.lib"
# SUBTRACT LIB32 /nologo
!ELSEIF "$(CFG)" == "freetype - Win32 Debug Singlethreaded"
@ -177,8 +177,8 @@ BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo /out:"..\..\..\objs\freetype2312_D.lib"
# ADD LIB32 /nologo /out:"..\..\..\objs\freetype2312ST_D.lib"
# ADD BASE LIB32 /nologo /out:"..\..\..\objs\freetype241_D.lib"
# ADD LIB32 /nologo /out:"..\..\..\objs\freetype241ST_D.lib"
!ENDIF

Просмотреть файл

@ -87,7 +87,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\freetype2312.lib"
OutputFile="..\..\..\objs\freetype241.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -162,7 +162,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\freetype2312MT.lib"
OutputFile="..\..\..\objs\freetype241MT.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -237,7 +237,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\freetype2312ST.lib"
OutputFile="..\..\..\objs\freetype241ST.lib"
/>
<Tool
Name="VCALinkTool"
@ -309,7 +309,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\freetype2312_D.lib"
OutputFile="..\..\..\objs\freetype241_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -382,7 +382,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\freetype2312ST_D.lib"
OutputFile="..\..\..\objs\freetype241ST_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -456,7 +456,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\freetype2312MT_D.lib"
OutputFile="..\..\..\objs\freetype241MT_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -534,7 +534,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\freetype2312.lib"
OutputFile="..\..\..\objs\freetype241.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -619,7 +619,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\freetype2312MT.lib"
OutputFile="..\..\..\objs\freetype241MT.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -704,7 +704,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\freetype2312ST.lib"
OutputFile="..\..\..\objs\freetype241ST.lib"
/>
<Tool
Name="VCALinkTool"
@ -785,7 +785,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\freetype2312_D.lib"
OutputFile="..\..\..\objs\freetype241_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -867,7 +867,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\freetype2312ST_D.lib"
OutputFile="..\..\..\objs\freetype241ST_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -950,7 +950,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\freetype2312MT_D.lib"
OutputFile="..\..\..\objs\freetype241MT_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -1036,7 +1036,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\freetype2312.lib"
OutputFile="..\..\..\objs\freetype241.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -1121,7 +1121,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\freetype2312MT.lib"
OutputFile="..\..\..\objs\freetype241MT.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -1206,7 +1206,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\freetype2312ST.lib"
OutputFile="..\..\..\objs\freetype241ST.lib"
/>
<Tool
Name="VCALinkTool"
@ -1287,7 +1287,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\freetype2312_D.lib"
OutputFile="..\..\..\objs\freetype241_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -1369,7 +1369,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\freetype2312ST_D.lib"
OutputFile="..\..\..\objs\freetype241ST_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -1452,7 +1452,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\freetype2312MT_D.lib"
OutputFile="..\..\..\objs\freetype241MT_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -1538,7 +1538,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\freetype2312.lib"
OutputFile="..\..\..\objs\freetype241.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -1623,7 +1623,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\freetype2312MT.lib"
OutputFile="..\..\..\objs\freetype241MT.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -1708,7 +1708,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\freetype2312ST.lib"
OutputFile="..\..\..\objs\freetype241ST.lib"
/>
<Tool
Name="VCALinkTool"
@ -1789,7 +1789,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\freetype2312_D.lib"
OutputFile="..\..\..\objs\freetype241_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -1871,7 +1871,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\freetype2312ST_D.lib"
OutputFile="..\..\..\objs\freetype241ST_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -1954,7 +1954,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\freetype2312MT_D.lib"
OutputFile="..\..\..\objs\freetype241MT_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -2040,7 +2040,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\freetype2312.lib"
OutputFile="..\..\..\objs\freetype241.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -2125,7 +2125,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\freetype2312MT.lib"
OutputFile="..\..\..\objs\freetype241MT.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -2210,7 +2210,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\freetype2312ST.lib"
OutputFile="..\..\..\objs\freetype241ST.lib"
/>
<Tool
Name="VCALinkTool"
@ -2291,7 +2291,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\freetype2312_D.lib"
OutputFile="..\..\..\objs\freetype241_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -2373,7 +2373,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\freetype2312ST_D.lib"
OutputFile="..\..\..\objs\freetype241ST_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -2456,7 +2456,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\freetype2312MT_D.lib"
OutputFile="..\..\..\objs\freetype241MT_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -2542,7 +2542,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\freetype2312.lib"
OutputFile="..\..\..\objs\freetype241.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -2627,7 +2627,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\freetype2312MT.lib"
OutputFile="..\..\..\objs\freetype241MT.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -2712,7 +2712,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\freetype2312ST.lib"
OutputFile="..\..\..\objs\freetype241ST.lib"
/>
<Tool
Name="VCALinkTool"
@ -2793,7 +2793,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\freetype2312_D.lib"
OutputFile="..\..\..\objs\freetype241_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -2875,7 +2875,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\freetype2312ST_D.lib"
OutputFile="..\..\..\objs\freetype241ST_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -2958,7 +2958,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\freetype2312MT_D.lib"
OutputFile="..\..\..\objs\freetype241MT_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -3044,7 +3044,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\freetype2312.lib"
OutputFile="..\..\..\objs\freetype241.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -3129,7 +3129,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\freetype2312MT.lib"
OutputFile="..\..\..\objs\freetype241MT.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -3214,7 +3214,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\freetype2312ST.lib"
OutputFile="..\..\..\objs\freetype241ST.lib"
/>
<Tool
Name="VCALinkTool"
@ -3295,7 +3295,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\freetype2312_D.lib"
OutputFile="..\..\..\objs\freetype241_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -3377,7 +3377,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\freetype2312ST_D.lib"
OutputFile="..\..\..\objs\freetype241ST_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -3460,7 +3460,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\freetype2312MT_D.lib"
OutputFile="..\..\..\objs\freetype241MT_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -8704,6 +8704,10 @@
RelativePath="..\..\..\src\base\ftwinfnt.c"
>
</File>
<File
RelativePath="..\..\..\src\base\ftxf86.c"
>
</File>
<File
RelativePath="..\..\..\src\base\ftlcdfil.c"
>

Просмотреть файл

@ -21,14 +21,14 @@ the following targets:
<li>PPC/SP WM6 (Windows Mobile 6)</li>
</ul>
It compiles the following libraries from the FreeType 2.3.12 sources:</p>
It compiles the following libraries from the FreeType 2.4.1 sources:</p>
<ul>
<pre>
freetype2312.lib - release build; single threaded
freetype2312_D.lib - debug build; single threaded
freetype2312MT.lib - release build; multi-threaded
freetype2312MT_D.lib - debug build; multi-threaded</pre>
freetype241.lib - release build; single threaded
freetype241_D.lib - debug build; single threaded
freetype241MT.lib - release build; multi-threaded
freetype241MT_D.lib - debug build; multi-threaded</pre>
</ul>
<p>Be sure to extract the files with the Windows (CR+LF) line endings. ZIP

Просмотреть файл

@ -21,7 +21,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2312.lib" SuppressStartupBanner="true" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype241.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@ -41,7 +41,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2312.lib" SuppressStartupBanner="true" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype241.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@ -61,7 +61,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2312.lib" SuppressStartupBanner="true" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype241.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@ -81,7 +81,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2312.lib" SuppressStartupBanner="true" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype241.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@ -101,7 +101,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2312.lib" SuppressStartupBanner="true" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype241.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@ -121,7 +121,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2312.lib" SuppressStartupBanner="true" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype241.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@ -141,7 +141,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2312MT.lib" SuppressStartupBanner="true" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype241MT.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@ -161,7 +161,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2312MT.lib" SuppressStartupBanner="true" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype241MT.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@ -181,7 +181,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2312MT.lib" SuppressStartupBanner="true" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype241MT.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@ -201,7 +201,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2312MT.lib" SuppressStartupBanner="true" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype241MT.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@ -221,7 +221,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2312MT.lib" SuppressStartupBanner="true" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype241MT.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@ -241,7 +241,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2312MT.lib" SuppressStartupBanner="true" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype241MT.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@ -261,7 +261,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2312ST.lib" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype241ST.lib" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@ -281,7 +281,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2312ST.lib" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype241ST.lib" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@ -301,7 +301,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2312ST.lib" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype241ST.lib" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@ -321,7 +321,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2312ST.lib" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype241ST.lib" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@ -341,7 +341,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2312ST.lib" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype241ST.lib" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@ -361,7 +361,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2312ST.lib" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype241ST.lib" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@ -381,7 +381,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2312_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype241_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@ -401,7 +401,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2312_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype241_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@ -421,7 +421,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2312_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype241_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@ -441,7 +441,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2312_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype241_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@ -461,7 +461,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2312_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype241_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@ -481,7 +481,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2312_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype241_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@ -501,7 +501,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2312ST_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype241ST_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@ -521,7 +521,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2312ST_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype241ST_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@ -541,7 +541,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2312ST_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype241ST_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@ -561,7 +561,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2312ST_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype241ST_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@ -581,7 +581,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2312ST_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype241ST_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@ -601,7 +601,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2312ST_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype241ST_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@ -621,7 +621,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2312MT_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype241MT_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@ -641,7 +641,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2312MT_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype241MT_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@ -661,7 +661,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2312MT_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype241MT_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@ -681,7 +681,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2312MT_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype241MT_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@ -701,7 +701,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2312MT_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype241MT_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@ -721,7 +721,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2312MT_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype241MT_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@ -741,7 +741,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2312MT.lib" SuppressStartupBanner="true" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype241MT.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@ -758,7 +758,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2312MT_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype241MT_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />

Просмотреть файл

@ -21,14 +21,14 @@ the following targets:
<li>PPC/SP WM6 (Windows Mobile 6)</li>
</ul>
It compiles the following libraries from the FreeType 2.3.12 sources:</p>
It compiles the following libraries from the FreeType 2.4.1 sources:</p>
<ul>
<pre>
freetype2312.lib - release build; single threaded
freetype2312_D.lib - debug build; single threaded
freetype2312MT.lib - release build; multi-threaded
freetype2312MT_D.lib - debug build; multi-threaded</pre>
freetype241.lib - release build; single threaded
freetype241_D.lib - debug build; single threaded
freetype241MT.lib - release build; multi-threaded
freetype241MT_D.lib - debug build; multi-threaded</pre>
</ul>
<p>Be sure to extract the files with the Windows (CR+LF) line endings. ZIP

Просмотреть файл

@ -88,7 +88,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2312.lib"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype241.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -177,7 +177,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2312.lib"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype241.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -266,7 +266,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2312.lib"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype241.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -355,7 +355,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2312.lib"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype241.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -444,7 +444,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2312.lib"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype241.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -533,7 +533,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2312.lib"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype241.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -621,7 +621,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2312MT.lib"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype241MT.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -709,7 +709,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2312MT.lib"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype241MT.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -797,7 +797,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2312MT.lib"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype241MT.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -885,7 +885,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2312MT.lib"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype241MT.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -973,7 +973,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2312MT.lib"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype241MT.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -1061,7 +1061,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2312MT.lib"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype241MT.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -1149,7 +1149,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2312ST.lib"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype241ST.lib"
/>
<Tool
Name="VCALinkTool"
@ -1236,7 +1236,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2312ST.lib"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype241ST.lib"
/>
<Tool
Name="VCALinkTool"
@ -1323,7 +1323,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2312ST.lib"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype241ST.lib"
/>
<Tool
Name="VCALinkTool"
@ -1410,7 +1410,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2312ST.lib"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype241ST.lib"
/>
<Tool
Name="VCALinkTool"
@ -1497,7 +1497,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2312ST.lib"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype241ST.lib"
/>
<Tool
Name="VCALinkTool"
@ -1584,7 +1584,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2312ST.lib"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype241ST.lib"
/>
<Tool
Name="VCALinkTool"
@ -1668,7 +1668,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2312_D.lib"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype241_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -1753,7 +1753,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2312_D.lib"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype241_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -1838,7 +1838,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2312_D.lib"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype241_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -1923,7 +1923,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2312_D.lib"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype241_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -2008,7 +2008,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2312_D.lib"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype241_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -2093,7 +2093,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2312_D.lib"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype241_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -2178,7 +2178,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2312ST_D.lib"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype241ST_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -2263,7 +2263,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2312ST_D.lib"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype241ST_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -2348,7 +2348,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2312ST_D.lib"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype241ST_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -2433,7 +2433,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2312ST_D.lib"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype241ST_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -2518,7 +2518,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2312ST_D.lib"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype241ST_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -2603,7 +2603,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2312ST_D.lib"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype241ST_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -2689,7 +2689,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2312MT_D.lib"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype241MT_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -2775,7 +2775,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2312MT_D.lib"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype241MT_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -2861,7 +2861,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2312MT_D.lib"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype241MT_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -2947,7 +2947,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2312MT_D.lib"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype241MT_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -3033,7 +3033,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2312MT_D.lib"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype241MT_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -3119,7 +3119,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2312MT_D.lib"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype241MT_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -3205,7 +3205,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2312MT.lib"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype241MT.lib"
SuppressStartupBanner="true"
/>
<Tool
@ -3279,7 +3279,7 @@
/>
<Tool
Name="VCLibrarianTool"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2312MT_D.lib"
OutputFile="..\..\..\objs\wince\vc2008-ce\freetype241MT_D.lib"
SuppressStartupBanner="true"
/>
<Tool

Просмотреть файл

@ -21,14 +21,14 @@ the following targets:
<li>PPC/SP WM6 (Windows Mobile 6)</li>
</ul>
It compiles the following libraries from the FreeType 2.3.12 sources:</p>
It compiles the following libraries from the FreeType 2.4.1 sources:</p>
<ul>
<pre>
freetype2312.lib - release build; single threaded
freetype2312_D.lib - debug build; single threaded
freetype2312MT.lib - release build; multi-threaded
freetype2312MT_D.lib - debug build; multi-threaded</pre>
freetype241.lib - release build; single threaded
freetype241_D.lib - debug build; single threaded
freetype241MT.lib - release build; multi-threaded
freetype241MT_D.lib - debug build; multi-threaded</pre>
</ul>
<p>Be sure to extract the files with the Windows (CR+LF) line endings. ZIP

Просмотреть файл

@ -488,8 +488,7 @@ FT_BEGIN_HEADER
/*************************************************************************/
/* */
/* Define TT_CONFIG_OPTION_BYTECODE_INTERPRETER if you want to compile */
/* a bytecode interpreter in the TrueType driver. Note that there are */
/* important patent issues related to the use of the interpreter. */
/* a bytecode interpreter in the TrueType driver. */
/* */
/* By undefining this, you will only compile the code necessary to load */
/* TrueType glyphs without hinting. */
@ -504,10 +503,13 @@ FT_BEGIN_HEADER
/* */
/* If you define TT_CONFIG_OPTION_UNPATENTED_HINTING, a special version */
/* of the TrueType bytecode interpreter is used that doesn't implement */
/* any of the patented opcodes and algorithms. Note that the */
/* TT_CONFIG_OPTION_UNPATENTED_HINTING macro is *ignored* if you define */
/* TT_CONFIG_OPTION_BYTECODE_INTERPRETER; in other words, either define */
/* TT_CONFIG_OPTION_BYTECODE_INTERPRETER or */
/* any of the patented opcodes and algorithms. The patents related to */
/* TrueType hinting have expired worldwide since May 2010; this option */
/* is now deprecated. */
/* */
/* Note that the TT_CONFIG_OPTION_UNPATENTED_HINTING macro is *ignored* */
/* if you define TT_CONFIG_OPTION_BYTECODE_INTERPRETER; in other words, */
/* either define TT_CONFIG_OPTION_BYTECODE_INTERPRETER or */
/* TT_CONFIG_OPTION_UNPATENTED_HINTING but not both at the same time. */
/* */
/* This macro is only useful for a small number of font files (mostly */

Просмотреть файл

@ -1,3 +1,38 @@
CHANGES BETWEEN 2.4.0 and 2.4.1
I. IMPORTANT CHANGES
- A serious bug in the CFF font module prevented display of many
glyphs in CFF fonts like `MinionPro-Regular.otf'.
======================================================================
CHANGES BETWEEN 2.3.12 and 2.4.0
I. IMPORTANT CHANGES
- Since May 2010, all patents regarding the TrueType bytecode
interpreter have expired worldwide. Consequently, we now define
TT_CONFIG_OPTION_BYTECODE_INTERPRETER by default (and undefine
TT_CONFIG_OPTION_UNPATENTED_HINTING).
- A new function `FT_Library_SetLcdFilterWeights' is available to
adjust the filter weights set by `FT_Library_SetLcdFilter'.
II. MISCELLANEOUS
- Thanks to many reports from Robert Święcki, FreeType's stability
in handling broken or damaged fonts is much improved.
- Support for LCD filter control has been added to the demo
programs `ftdiff' and `ftview'.
======================================================================
CHANGES BETWEEN 2.3.11 and 2.3.12
I. IMPORTANT CHANGES
@ -6,6 +41,7 @@ CHANGES BETWEEN 2.3.11 and 2.3.12
preferred family names: FT_PARAM_TAG_IGNORE_PREFERRED_FAMILY and
FT_PARAM_TAG_IGNORE_PREFERRED_SUBFAMILY.
II. MISCELLANEOUS
- Support for incremental font loading (controlled with the
@ -3378,7 +3414,8 @@ Extensions support:
------------------------------------------------------------------------
Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 by
Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
2010 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used,

Просмотреть файл

@ -7,13 +7,7 @@ overview of the documentation available:
I. Normal installation and upgrades
===================================
1. Native TrueType Hinting
Native TrueType hinting is disabled by default[1]. If you really
need it, read the file `TRUETYPE' for information.
2. Unix Systems (including Mac OS X, Cygwin, and MSys on Windows)
1. Unix Systems (including Mac OS X, Cygwin, and MSys on Windows)
Please read *both* `UPGRADE.UNIX' and `INSTALL.UNIX' to install or
upgrade FreeType 2 on a Unix system. Note that you *need* GNU
@ -23,22 +17,22 @@ I. Normal installation and upgrades
GNU Make VERSION 3.80 OR NEWER IS NEEDED!
3. On VMS with the `mms' build tool
2. On VMS with the `mms' build tool
See `INSTALL.VMS' for installation instructions on this platform.
4. Other systems using GNU Make
3. Other systems using GNU Make
On non-Unix platforms, it is possible to build the library using
GNU Make utility. Note that *NO OTHER MAKE TOOL WILL WORK*[2]!
GNU Make utility. Note that *NO OTHER MAKE TOOL WILL WORK*[1]!
This methods supports several compilers on Windows, OS/2, and
BeOS, including MinGW, Visual C++, Borland C++, and more.
Instructions are provided in the file `INSTALL.GNU'.
5. With an IDE Project File (e.g., for Visual Studio or CodeWarrior)
4. With an IDE Project File (e.g., for Visual Studio or CodeWarrior)
We provide a small number of `project files' for various IDEs to
automatically build the library as well. Note that these files
@ -49,7 +43,7 @@ I. Normal installation and upgrades
directory, where <system> stands for your OS or environment.
6. From you own IDE, or own Makefiles
5. From you own IDE, or own Makefiles
If you want to create your own project file, follow the
instructions given in the `INSTALL.ANY' document of this
@ -66,9 +60,7 @@ II. Custom builds of the library
----------------------------------------------------------------------
[1] More details on: http://www.freetype.org/patents.html
[2] make++, a make tool written in Perl, has sufficient support of GNU
[1] make++, a make tool written in Perl, has sufficient support of GNU
make extensions to build FreeType. See
http://makepp.sourceforge.net
@ -78,8 +70,8 @@ II. Custom builds of the library
----------------------------------------------------------------------
Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by
David Turner, Robert Wilhelm, and Werner Lemberg.
Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2010
by David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used,
modified, and distributed under the terms of the FreeType project

Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше