Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
N
nx-libs
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
1
Issues
1
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
dimbor
nx-libs
Commits
0571ece6
Commit
0571ece6
authored
Apr 18, 2016
by
Mike Gabriel
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
hw/nxagent/NXglyph.c: Shrink file, drop duplicate code that can identically be…
hw/nxagent/NXglyph.c: Shrink file, drop duplicate code that can identically be found in render/glyph.c.
parent
12130a4d
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
10 additions
and
394 deletions
+10
-394
NXglyph.c
nx-X11/programs/Xserver/hw/nxagent/NXglyph.c
+1
-394
Imakefile
nx-X11/programs/Xserver/render/Imakefile
+2
-0
glyph.c
nx-X11/programs/Xserver/render/glyph.c
+7
-0
No files found.
nx-X11/programs/Xserver/hw/nxagent/NXglyph.c
View file @
0571ece6
...
...
@@ -40,27 +40,10 @@
* Author: Keith Packard, SuSE, Inc.
*/
#ifdef HAVE_DIX_CONFIG_H
#include <dix-config.h>
#endif
#include "misc.h"
#include "scrnintstr.h"
#include "os.h"
#include "regionstr.h"
#include "validate.h"
#include "windowstr.h"
#include "input.h"
#include "resource.h"
#include "colormapst.h"
#include "cursorstr.h"
#include "dixstruct.h"
#include "gcstruct.h"
#include "servermd.h"
#include "../../render/glyph.c"
#ifdef NXAGENT_SERVER
#include "picturestr.h"
#include "Render.h"
#define PANIC
...
...
@@ -68,240 +51,9 @@
#undef DEBUG
#undef TEST
#else
#include "picturestr.h"
#endif
#include "glyphstr.h"
#include <stdint.h>
/*
* From Knuth -- a good choice for hash/rehash values is p, p-2 where
* p and p-2 are both prime. These tables are sized to have an extra 10%
* free to avoid exponential performance degradation as the hash table fills
*/
static
GlyphHashSetRec
glyphHashSets
[]
=
{
{
32
,
43
,
41
},
{
64
,
73
,
71
},
{
128
,
151
,
149
},
{
256
,
283
,
281
},
{
512
,
571
,
569
},
{
1024
,
1153
,
1151
},
{
2048
,
2269
,
2267
},
{
4096
,
4519
,
4517
},
{
8192
,
9013
,
9011
},
{
16384
,
18043
,
18041
},
{
32768
,
36109
,
36107
},
{
65536
,
72091
,
72089
},
{
131072
,
144409
,
144407
},
{
262144
,
288361
,
288359
},
{
524288
,
576883
,
576881
},
{
1048576
,
1153459
,
1153457
},
{
2097152
,
2307163
,
2307161
},
{
4194304
,
4613893
,
4613891
},
{
8388608
,
9227641
,
9227639
},
{
16777216
,
18455029
,
18455027
},
{
33554432
,
36911011
,
36911009
},
{
67108864
,
73819861
,
73819859
},
{
134217728
,
147639589
,
147639587
},
{
268435456
,
295279081
,
295279079
},
{
536870912
,
590559793
,
590559791
}
};
#define NGLYPHHASHSETS (sizeof(glyphHashSets)/sizeof(glyphHashSets[0]))
const
CARD8
glyphDepths
[
GlyphFormatNum
]
=
{
1
,
4
,
8
,
16
,
32
};
GlyphHashRec
globalGlyphs
[
GlyphFormatNum
];
GlyphHashSetPtr
FindGlyphHashSet
(
CARD32
filled
)
{
int
i
;
for
(
i
=
0
;
i
<
NGLYPHHASHSETS
;
i
++
)
if
(
glyphHashSets
[
i
].
entries
>=
filled
)
return
&
glyphHashSets
[
i
];
return
0
;
}
static
int
_GlyphSetPrivateAllocateIndex
=
0
;
int
AllocateGlyphSetPrivateIndex
(
void
)
{
return
_GlyphSetPrivateAllocateIndex
++
;
}
void
ResetGlyphSetPrivateIndex
(
void
)
{
_GlyphSetPrivateAllocateIndex
=
0
;
}
Bool
_GlyphSetSetNewPrivate
(
GlyphSetPtr
glyphSet
,
int
n
,
void
*
ptr
)
{
void
**
new
;
if
(
n
>
glyphSet
->
maxPrivate
)
{
if
(
glyphSet
->
devPrivates
&&
glyphSet
->
devPrivates
!=
(
void
*
)(
&
glyphSet
[
1
]))
{
new
=
(
void
**
)
xrealloc
(
glyphSet
->
devPrivates
,
(
n
+
1
)
*
sizeof
(
void
*
));
if
(
!
new
)
return
FALSE
;
}
else
{
new
=
(
void
**
)
xalloc
((
n
+
1
)
*
sizeof
(
void
*
));
if
(
!
new
)
return
FALSE
;
if
(
glyphSet
->
devPrivates
)
memcpy
(
new
,
glyphSet
->
devPrivates
,
(
glyphSet
->
maxPrivate
+
1
)
*
sizeof
(
void
*
));
}
glyphSet
->
devPrivates
=
new
;
/* Zero out new, uninitialize privates */
while
(
++
glyphSet
->
maxPrivate
<
n
)
glyphSet
->
devPrivates
[
glyphSet
->
maxPrivate
]
=
(
void
*
)
0
;
}
glyphSet
->
devPrivates
[
n
]
=
ptr
;
return
TRUE
;
}
Bool
GlyphInit
(
ScreenPtr
pScreen
)
{
return
TRUE
;
}
GlyphRefPtr
FindGlyphRef
(
GlyphHashPtr
hash
,
CARD32
signature
,
Bool
match
,
GlyphPtr
compare
)
{
CARD32
elt
,
step
,
s
;
GlyphPtr
glyph
;
GlyphRefPtr
table
,
gr
,
del
;
CARD32
tableSize
=
hash
->
hashSet
->
size
;
table
=
hash
->
table
;
elt
=
signature
%
tableSize
;
step
=
0
;
del
=
0
;
for
(;;)
{
gr
=
&
table
[
elt
];
s
=
gr
->
signature
;
glyph
=
gr
->
glyph
;
if
(
!
glyph
)
{
if
(
del
)
gr
=
del
;
break
;
}
if
(
glyph
==
DeletedGlyph
)
{
if
(
!
del
)
del
=
gr
;
else
if
(
gr
==
del
)
break
;
}
else
if
(
s
==
signature
&&
(
!
match
||
memcmp
(
&
compare
->
info
,
&
glyph
->
info
,
compare
->
size
)
==
0
))
{
break
;
}
if
(
!
step
)
{
step
=
signature
%
hash
->
hashSet
->
rehash
;
if
(
!
step
)
step
=
1
;
}
elt
+=
step
;
if
(
elt
>=
tableSize
)
elt
-=
tableSize
;
}
return
gr
;
}
CARD32
HashGlyph
(
GlyphPtr
glyph
)
{
CARD32
*
bits
=
(
CARD32
*
)
&
(
glyph
->
info
);
CARD32
hash
;
int
n
=
glyph
->
size
/
sizeof
(
CARD32
);
hash
=
0
;
while
(
n
--
)
hash
^=
*
bits
++
;
return
hash
;
}
#ifdef CHECK_DUPLICATES
void
DuplicateRef
(
GlyphPtr
glyph
,
char
*
where
)
{
ErrorF
(
"Duplicate Glyph 0x%x from %s
\n
"
,
glyph
,
where
);
}
void
CheckDuplicates
(
GlyphHashPtr
hash
,
char
*
where
)
{
GlyphPtr
g
;
int
i
,
j
;
for
(
i
=
0
;
i
<
hash
->
hashSet
->
size
;
i
++
)
{
g
=
hash
->
table
[
i
].
glyph
;
if
(
!
g
||
g
==
DeletedGlyph
)
continue
;
for
(
j
=
i
+
1
;
j
<
hash
->
hashSet
->
size
;
j
++
)
if
(
hash
->
table
[
j
].
glyph
==
g
)
DuplicateRef
(
g
,
where
);
}
}
#else
#define CheckDuplicates(a,b)
#define DuplicateRef(a,b)
#endif
void
FreeGlyph
(
GlyphPtr
glyph
,
int
format
)
{
CheckDuplicates
(
&
globalGlyphs
[
format
],
"FreeGlyph"
);
if
(
--
glyph
->
refcnt
==
0
)
{
GlyphRefPtr
gr
;
int
i
;
int
first
;
first
=
-
1
;
for
(
i
=
0
;
i
<
globalGlyphs
[
format
].
hashSet
->
size
;
i
++
)
if
(
globalGlyphs
[
format
].
table
[
i
].
glyph
==
glyph
)
{
if
(
first
!=
-
1
)
DuplicateRef
(
glyph
,
"FreeGlyph check"
);
first
=
i
;
}
gr
=
FindGlyphRef
(
&
globalGlyphs
[
format
],
HashGlyph
(
glyph
),
TRUE
,
glyph
);
if
(
gr
-
globalGlyphs
[
format
].
table
!=
first
)
DuplicateRef
(
glyph
,
"Found wrong one"
);
if
(
gr
->
glyph
&&
gr
->
glyph
!=
DeletedGlyph
)
{
gr
->
glyph
=
DeletedGlyph
;
gr
->
signature
=
0
;
globalGlyphs
[
format
].
tableEntries
--
;
}
xfree
(
glyph
);
}
}
void
AddGlyph
(
GlyphSetPtr
glyphSet
,
GlyphPtr
glyph
,
Glyph
id
)
{
GlyphRefPtr
gr
;
...
...
@@ -342,26 +94,6 @@ AddGlyph (GlyphSetPtr glyphSet, GlyphPtr glyph, Glyph id)
CheckDuplicates
(
&
globalGlyphs
[
glyphSet
->
fdepth
],
"AddGlyph bottom"
);
}
Bool
DeleteGlyph
(
GlyphSetPtr
glyphSet
,
Glyph
id
)
{
GlyphRefPtr
gr
;
GlyphPtr
glyph
;
gr
=
FindGlyphRef
(
&
glyphSet
->
hash
,
id
,
FALSE
,
0
);
glyph
=
gr
->
glyph
;
if
(
glyph
&&
glyph
!=
DeletedGlyph
)
{
gr
->
glyph
=
DeletedGlyph
;
glyphSet
->
hash
.
tableEntries
--
;
FreeGlyph
(
glyph
,
glyphSet
->
fdepth
);
return
TRUE
;
}
return
FALSE
;
}
#ifdef NXAGENT_SERVER
GlyphPtr
FindGlyph
(
GlyphSetPtr
glyphSet
,
Glyph
id
)
{
GlyphRefPtr
gr
;
...
...
@@ -388,53 +120,6 @@ GlyphPtr FindGlyph (GlyphSetPtr glyphSet, Glyph id)
return
glyph
;
}
#else
GlyphPtr
FindGlyph
(
GlyphSetPtr
glyphSet
,
Glyph
id
)
{
GlyphPtr
glyph
;
glyph
=
FindGlyphRef
(
&
glyphSet
->
hash
,
id
,
FALSE
,
0
)
->
glyph
;
if
(
glyph
==
DeletedGlyph
)
glyph
=
0
;
return
glyph
;
}
#endif
GlyphPtr
AllocateGlyph
(
xGlyphInfo
*
gi
,
int
fdepth
)
{
int
size
;
GlyphPtr
glyph
;
size_t
padded_width
;
padded_width
=
PixmapBytePad
(
gi
->
width
,
glyphDepths
[
fdepth
]);
if
(
gi
->
height
&&
padded_width
>
(
UINT32_MAX
-
sizeof
(
GlyphRec
))
/
gi
->
height
)
return
0
;
size
=
gi
->
height
*
padded_width
;
glyph
=
(
GlyphPtr
)
xalloc
(
size
+
sizeof
(
GlyphRec
));
if
(
!
glyph
)
return
0
;
glyph
->
refcnt
=
0
;
glyph
->
size
=
size
+
sizeof
(
xGlyphInfo
);
glyph
->
info
=
*
gi
;
return
glyph
;
}
Bool
AllocateGlyphHash
(
GlyphHashPtr
hash
,
GlyphHashSetPtr
hashSet
)
{
hash
->
table
=
(
GlyphRefPtr
)
xalloc
(
hashSet
->
size
*
sizeof
(
GlyphRefRec
));
if
(
!
hash
->
table
)
return
FALSE
;
memset
(
hash
->
table
,
0
,
hashSet
->
size
*
sizeof
(
GlyphRefRec
));
hash
->
hashSet
=
hashSet
;
hash
->
tableEntries
=
0
;
return
TRUE
;
}
Bool
ResizeGlyphHash
(
GlyphHashPtr
hash
,
CARD32
change
,
Bool
global
)
{
...
...
@@ -497,81 +182,3 @@ ResizeGlyphHash (GlyphHashPtr hash, CARD32 change, Bool global)
CheckDuplicates
(
hash
,
"ResizeGlyphHash bottom"
);
return
TRUE
;
}
Bool
ResizeGlyphSet
(
GlyphSetPtr
glyphSet
,
CARD32
change
)
{
return
(
ResizeGlyphHash
(
&
glyphSet
->
hash
,
change
,
FALSE
)
&&
ResizeGlyphHash
(
&
globalGlyphs
[
glyphSet
->
fdepth
],
change
,
TRUE
));
}
GlyphSetPtr
AllocateGlyphSet
(
int
fdepth
,
PictFormatPtr
format
)
{
GlyphSetPtr
glyphSet
;
int
size
;
if
(
!
globalGlyphs
[
fdepth
].
hashSet
)
{
if
(
!
AllocateGlyphHash
(
&
globalGlyphs
[
fdepth
],
&
glyphHashSets
[
0
]))
return
FALSE
;
}
size
=
(
sizeof
(
GlyphSetRec
)
+
(
sizeof
(
void
*
)
*
_GlyphSetPrivateAllocateIndex
));
glyphSet
=
xalloc
(
size
);
if
(
!
glyphSet
)
return
FALSE
;
bzero
((
char
*
)
glyphSet
,
size
);
glyphSet
->
maxPrivate
=
_GlyphSetPrivateAllocateIndex
-
1
;
if
(
_GlyphSetPrivateAllocateIndex
)
glyphSet
->
devPrivates
=
(
void
*
)(
&
glyphSet
[
1
]);
if
(
!
AllocateGlyphHash
(
&
glyphSet
->
hash
,
&
glyphHashSets
[
0
]))
{
xfree
(
glyphSet
);
return
FALSE
;
}
glyphSet
->
refcnt
=
1
;
glyphSet
->
fdepth
=
fdepth
;
glyphSet
->
format
=
format
;
return
glyphSet
;
}
int
FreeGlyphSet
(
void
*
value
,
XID
gid
)
{
GlyphSetPtr
glyphSet
=
(
GlyphSetPtr
)
value
;
if
(
--
glyphSet
->
refcnt
==
0
)
{
CARD32
i
,
tableSize
=
glyphSet
->
hash
.
hashSet
->
size
;
GlyphRefPtr
table
=
glyphSet
->
hash
.
table
;
GlyphPtr
glyph
;
for
(
i
=
0
;
i
<
tableSize
;
i
++
)
{
glyph
=
table
[
i
].
glyph
;
if
(
glyph
&&
glyph
!=
DeletedGlyph
)
FreeGlyph
(
glyph
,
glyphSet
->
fdepth
);
}
if
(
!
globalGlyphs
[
glyphSet
->
fdepth
].
tableEntries
)
{
xfree
(
globalGlyphs
[
glyphSet
->
fdepth
].
table
);
globalGlyphs
[
glyphSet
->
fdepth
].
table
=
0
;
globalGlyphs
[
glyphSet
->
fdepth
].
hashSet
=
0
;
}
else
ResizeGlyphHash
(
&
globalGlyphs
[
glyphSet
->
fdepth
],
0
,
TRUE
);
xfree
(
table
);
if
(
glyphSet
->
devPrivates
&&
glyphSet
->
devPrivates
!=
(
void
*
)(
&
glyphSet
[
1
]))
xfree
(
glyphSet
->
devPrivates
);
xfree
(
glyphSet
);
}
return
Success
;
}
nx-X11/programs/Xserver/render/Imakefile
View file @
0571ece6
...
...
@@ -6,12 +6,14 @@ NULL =
#if (!(defined(NXAgentServer) && NXAgentServer))
NXAGENT_SKIP_SRCS = \
glyph.c \
miglyph.c \
mitrap.c \
picture.c \
render.c \
$(NULL)
NXAGENT_SKIP_OBJS = \
glyph.o \
miglyph.o \
mitrap.o \
picture.o \
...
...
nx-X11/programs/Xserver/render/glyph.c
View file @
0571ece6
...
...
@@ -268,6 +268,7 @@ FreeGlyph (GlyphPtr glyph, int format)
}
}
#ifndef NXAGENT_SERVER
void
AddGlyph
(
GlyphSetPtr
glyphSet
,
GlyphPtr
glyph
,
Glyph
id
)
{
...
...
@@ -301,6 +302,7 @@ AddGlyph (GlyphSetPtr glyphSet, GlyphPtr glyph, Glyph id)
gr
->
signature
=
id
;
CheckDuplicates
(
&
globalGlyphs
[
glyphSet
->
fdepth
],
"AddGlyph bottom"
);
}
#endif
/* NXAGENT_SERVER */
Bool
DeleteGlyph
(
GlyphSetPtr
glyphSet
,
Glyph
id
)
...
...
@@ -320,6 +322,7 @@ DeleteGlyph (GlyphSetPtr glyphSet, Glyph id)
return
FALSE
;
}
#ifndef NXAGENT_SERVER
GlyphPtr
FindGlyph
(
GlyphSetPtr
glyphSet
,
Glyph
id
)
{
...
...
@@ -330,6 +333,7 @@ FindGlyph (GlyphSetPtr glyphSet, Glyph id)
glyph
=
0
;
return
glyph
;
}
#endif
/* NXAGENT_SERVER */
GlyphPtr
AllocateGlyph
(
xGlyphInfo
*
gi
,
int
fdepth
)
...
...
@@ -363,6 +367,8 @@ AllocateGlyphHash (GlyphHashPtr hash, GlyphHashSetPtr hashSet)
return
TRUE
;
}
#ifndef NXAGENT_SERVER
Bool
ResizeGlyphHash
(
GlyphHashPtr
hash
,
CARD32
change
,
Bool
global
)
{
...
...
@@ -405,6 +411,7 @@ ResizeGlyphHash (GlyphHashPtr hash, CARD32 change, Bool global)
CheckDuplicates
(
hash
,
"ResizeGlyphHash bottom"
);
return
TRUE
;
}
#endif
/* NXAGENT_SERVER */
Bool
ResizeGlyphSet
(
GlyphSetPtr
glyphSet
,
CARD32
change
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment