OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [libjava/] [gnu/] [gcj/] [xlib/] [natXImage.cc] - Blame information for rev 756

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 756 jeremybenn
/* Copyright (C) 2000  Free Software Foundation
2
 
3
   This file is part of libgcj.
4
 
5
This software is copyrighted work licensed under the terms of the
6
Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
7
details.  */
8
 
9
#include <X11/Xlib.h>
10
#include <X11/Xutil.h>
11
 
12
#include <gcj/cni.h>
13
#include <gnu/gcj/RawData.h>
14
 
15
#include <java/lang/OutOfMemoryError.h>
16
 
17
#include <gnu/gcj/xlib/Display.h>
18
#include <gnu/gcj/xlib/Screen.h>
19
#include <gnu/gcj/xlib/Visual.h>
20
#include <gnu/gcj/xlib/XImage.h>
21
#include <java/lang/System.h>
22
#include <java/io/PrintStream.h>
23
 
24
void gnu::gcj::xlib::XImage::init(Visual* visual, jint depth,
25
                                  jint format, jint xoffset,
26
                                  jint width, jint height,
27
                                  jint bitmapPad, jint bytesPerLine,
28
                                  jint bitsPerPixel)
29
{
30
  ::Display* dpy = (::Display*) visual->display->display;
31
  ::Visual* vis = (::Visual*) visual->getVisualStructure();
32
 
33
  char* data = 0; // no preallocated data
34
  ::XImage* ximage = XCreateImage(dpy, vis, depth, format, xoffset,
35
                                  data,
36
                                  width, height,
37
                                  bitmapPad,
38
                                  bytesPerLine
39
                                  );
40
  if (ximage == 0)
41
    {
42
      jstring errorMessage = JvNewStringLatin1("XCreateImage failed");
43
      throw new ::java::lang::OutOfMemoryError(errorMessage);
44
    }
45
 
46
  bool reinitialize = false;
47
 
48
  if ((bitsPerPixel != 0) && (ximage->bits_per_pixel != bitsPerPixel))
49
    {
50
      ximage->bits_per_pixel = bitsPerPixel;
51
      reinitialize = true;
52
    }
53
 
54
  // FIXME: make autoconf test?
55
  jshort endianTestShort[] = { 1 };
56
  jbyte* endianTestByte = reinterpret_cast<jbyte*>(endianTestShort);
57
 
58
  jint byteOrder;
59
  if (endianTestByte[0] == 1)
60
    {
61
      // little endian machine
62
      byteOrder = LEAST_SIGNIFICANT_B_FIRST_ORDER;
63
    }
64
  else
65
    {
66
      // big endian machine
67
      byteOrder = MOST_SIGNIFICANT_B_FIRST_ORDER;
68
    }
69
  /* NB: This doesn't consider those weird machines out there with
70
     middle-endian byte order. */
71
 
72
  if (byteOrder != ximage->byte_order)
73
    {
74
      ximage->byte_order = byteOrder;
75
      reinitialize = true;
76
    }
77
 
78
  if (reinitialize)
79
    XInitImage(ximage);
80
 
81
  structure = reinterpret_cast<gnu::gcj::RawData*>(ximage);
82
  // Notice that no image data has been allocated at this point
83
}
84
 
85
void gnu::gcj::xlib::XImage::init(Visual* visual,
86
                                  jint width,
87
                                  jint height)
88
{
89
  int depth = visual->getDepth();
90
 
91
  int format = ZPixmap; // Chunky, not planar.
92
  int offset = 0;
93
  int bitmapPad = 32; // FIXME, don't hardcode this
94
  int bytesPerLine = 0; // Let the server figure it out
95
 
96
  init(visual, depth, format, offset, width, height, bitmapPad,
97
       bytesPerLine, 0);
98
}
99
 
100
void gnu::gcj::xlib::XImage::internalSetData(jbyteArray data, jint offset)
101
{
102
  ::XImage* ximage = (::XImage*) structure;
103
  ximage->data = reinterpret_cast<char*>(elements(data)+offset);
104
}
105
 
106
void gnu::gcj::xlib::XImage::internalSetData(jshortArray data, jint offset)
107
{
108
  ::XImage* ximage = (::XImage*) structure;
109
  ximage->data = reinterpret_cast<char*>(elements(data)+offset);
110
}
111
 
112
void gnu::gcj::xlib::XImage::internalSetData(jintArray data, jint offset)
113
{
114
  ::XImage* ximage = (::XImage*) structure;
115
  ximage->data = reinterpret_cast<char*>(elements(data)+offset);
116
}
117
 
118
void gnu::gcj::xlib::XImage::finalize()
119
{
120
  ::XImage* ximage = (::XImage*) structure;
121
  if (ownsData)
122
    delete ximage->data;
123
 
124
  ximage->data = 0; // Never allow XLib to free the data allocation.
125
  dataRef = 0;
126
  XDestroyImage(ximage);
127
}
128
 
129
jint gnu::gcj::xlib::XImage::getWidth()
130
{
131
  ::XImage* ximage = (::XImage*) structure;
132
  return ximage->width;
133
}
134
 
135
jint gnu::gcj::xlib::XImage::getHeight()
136
{
137
  ::XImage* ximage = (::XImage*) structure;
138
  return ximage->height;
139
}
140
 
141
jint gnu::gcj::xlib::XImage::getDepth()
142
{
143
  ::XImage* ximage = (::XImage*) structure;
144
  return ximage->depth;
145
}
146
 
147
jint gnu::gcj::xlib::XImage::getFormat()
148
{
149
  ::XImage* ximage = (::XImage*) structure;
150
  return ximage->format;
151
}
152
 
153
jint gnu::gcj::xlib::XImage::getXOffset()
154
{
155
  ::XImage* ximage = (::XImage*) structure;
156
  return ximage->xoffset;
157
}
158
 
159
jint gnu::gcj::xlib::XImage::getImageByteOrder()
160
{
161
  ::XImage* ximage = (::XImage*) structure;
162
  return ximage->byte_order;
163
}
164
 
165
jint gnu::gcj::xlib::XImage::getBitmapBitOrder()
166
{
167
  ::XImage* ximage = (::XImage*) structure;
168
  return ximage->bitmap_bit_order;
169
}
170
 
171
jint gnu::gcj::xlib::XImage::getBitmapUnit()
172
{
173
  ::XImage* ximage = (::XImage*) structure;
174
  return ximage->bitmap_unit;
175
}
176
 
177
jint gnu::gcj::xlib::XImage::getBitmapPad()
178
{
179
  ::XImage* ximage = (::XImage*) structure;
180
  return ximage->bitmap_pad;
181
}
182
 
183
jint gnu::gcj::xlib::XImage::getBytesPerLine()
184
{
185
  ::XImage* ximage = (::XImage*) structure;
186
  return ximage->bytes_per_line;
187
}
188
 
189
jint gnu::gcj::xlib::XImage::getBitsPerPixel()
190
{
191
  ::XImage* ximage = (::XImage*) structure;
192
  return ximage->bits_per_pixel;
193
}
194
 
195
 
196
// True/Direct Color specific:
197
 
198
jint gnu::gcj::xlib::XImage::getRedMask()
199
{
200
  ::XImage* ximage = (::XImage*) structure;
201
  return ximage->red_mask;
202
}
203
 
204
jint gnu::gcj::xlib::XImage::getGreenMask()
205
{
206
  ::XImage* ximage = (::XImage*) structure;
207
  return ximage->green_mask;
208
}
209
 
210
jint gnu::gcj::xlib::XImage::getBlueMask()
211
{
212
  ::XImage* ximage = (::XImage*) structure;
213
  return ximage->blue_mask;
214
}
215
 
216
void gnu::gcj::xlib::XImage::setPixel(jint x, jint y, jint pixel)
217
{
218
  ::XImage* ximage = (::XImage*) structure;
219
  XPutPixel(ximage, x, y, pixel);
220
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.