Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
libSDL
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
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
PocketInsanity
libSDL
Commits
657d4fd1
Commit
657d4fd1
authored
Feb 03, 2011
by
Sam Lantinga
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Extended SDL_SetWindowData() to allow arbitrary named values.
parent
ddfdd2c2
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
87 additions
and
16 deletions
+87
-16
SDL_video.h
include/SDL_video.h
+20
-5
SDL_sysvideo.h
src/video/SDL_sysvideo.h
+9
-1
SDL_video.c
src/video/SDL_video.c
+58
-10
No files found.
include/SDL_video.h
View file @
657d4fd1
...
@@ -483,19 +483,34 @@ extern DECLSPEC void SDLCALL SDL_SetWindowIcon(SDL_Window * window,
...
@@ -483,19 +483,34 @@ extern DECLSPEC void SDLCALL SDL_SetWindowIcon(SDL_Window * window,
SDL_Surface
*
icon
);
SDL_Surface
*
icon
);
/**
/**
* \brief Associate an arbitrary pointer with a window.
* \brief Associate an arbitrary named pointer with a window.
*
* \param window The window to associate with the pointer.
* \param name The name of the pointer.
* \param userdata The associated pointer.
*
* \return The previous value associated with 'name'
*
* \note The name is case-sensitive.
*
*
* \sa SDL_GetWindowData()
* \sa SDL_GetWindowData()
*/
*/
extern
DECLSPEC
void
SDLCALL
SDL_SetWindowData
(
SDL_Window
*
window
,
extern
DECLSPEC
void
*
SDLCALL
SDL_SetWindowData
(
SDL_Window
*
window
,
const
char
*
name
,
void
*
userdata
);
void
*
userdata
);
/**
/**
* \brief Retrieve the data pointer associated with a window.
* \brief Retrieve the data pointer associated with a window.
*
*
* \param window The window to query.
* \param name The name of the pointer.
*
* \return The value associated with 'name'
*
* \sa SDL_SetWindowData()
* \sa SDL_SetWindowData()
*/
*/
extern
DECLSPEC
void
*
SDLCALL
SDL_GetWindowData
(
SDL_Window
*
window
);
extern
DECLSPEC
void
*
SDLCALL
SDL_GetWindowData
(
SDL_Window
*
window
,
const
char
*
name
);
/**
/**
* \brief Set the position of a window.
* \brief Set the position of a window.
...
...
src/video/SDL_sysvideo.h
View file @
657d4fd1
...
@@ -59,6 +59,13 @@ struct SDL_ShapeDriver
...
@@ -59,6 +59,13 @@ struct SDL_ShapeDriver
int
(
*
ResizeWindowShape
)(
SDL_Window
*
window
);
int
(
*
ResizeWindowShape
)(
SDL_Window
*
window
);
};
};
typedef
struct
SDL_WindowUserData
{
char
*
name
;
void
*
data
;
struct
SDL_WindowUserData
*
next
;
}
SDL_WindowUserData
;
/* Define the SDL window structure, corresponding to toplevel windows */
/* Define the SDL window structure, corresponding to toplevel windows */
struct
SDL_Window
struct
SDL_Window
{
{
...
@@ -75,7 +82,8 @@ struct SDL_Window
...
@@ -75,7 +82,8 @@ struct SDL_Window
SDL_WindowShaper
*
shaper
;
SDL_WindowShaper
*
shaper
;
void
*
userdata
;
SDL_WindowUserData
*
data
;
void
*
driverdata
;
void
*
driverdata
;
SDL_Window
*
prev
;
SDL_Window
*
prev
;
...
...
src/video/SDL_video.c
View file @
657d4fd1
...
@@ -982,20 +982,60 @@ SDL_SetWindowIcon(SDL_Window * window, SDL_Surface * icon)
...
@@ -982,20 +982,60 @@ SDL_SetWindowIcon(SDL_Window * window, SDL_Surface * icon)
}
}
}
}
void
void
*
SDL_SetWindowData
(
SDL_Window
*
window
,
void
*
userdata
)
SDL_SetWindowData
(
SDL_Window
*
window
,
const
char
*
name
,
void
*
userdata
)
{
{
CHECK_WINDOW_MAGIC
(
window
,
);
SDL_WindowUserData
*
prev
,
*
data
;
CHECK_WINDOW_MAGIC
(
window
,
NULL
);
/* See if the named data already exists */
prev
=
NULL
;
for
(
data
=
window
->
data
;
data
;
prev
=
data
,
data
=
data
->
next
)
{
if
(
SDL_strcmp
(
data
->
name
,
name
)
==
0
)
{
void
*
last_value
=
data
->
data
;
if
(
userdata
)
{
/* Set the new value */
data
->
data
=
userdata
;
}
else
{
/* Delete this value */
if
(
prev
)
{
prev
->
next
=
data
->
next
;
}
else
{
window
->
data
=
data
->
next
;
}
SDL_free
(
data
->
name
);
SDL_free
(
data
);
}
return
last_value
;
}
}
window
->
userdata
=
userdata
;
/* Add new data to the window */
if
(
userdata
)
{
data
=
(
SDL_WindowUserData
*
)
SDL_malloc
(
sizeof
(
*
data
));
data
->
name
=
SDL_strdup
(
name
);
data
->
data
=
userdata
;
data
->
next
=
window
->
data
;
window
->
data
=
data
;
}
return
NULL
;
}
}
void
*
void
*
SDL_GetWindowData
(
SDL_Window
*
window
)
SDL_GetWindowData
(
SDL_Window
*
window
,
const
char
*
name
)
{
{
SDL_WindowUserData
*
data
;
CHECK_WINDOW_MAGIC
(
window
,
NULL
);
CHECK_WINDOW_MAGIC
(
window
,
NULL
);
return
window
->
userdata
;
for
(
data
=
window
->
data
;
data
;
data
=
data
->
next
)
{
if
(
SDL_strcmp
(
data
->
name
,
name
)
==
0
)
{
return
data
->
data
;
}
}
return
NULL
;
}
}
void
void
...
@@ -1293,10 +1333,6 @@ SDL_DestroyWindow(SDL_Window * window)
...
@@ -1293,10 +1333,6 @@ SDL_DestroyWindow(SDL_Window * window)
CHECK_WINDOW_MAGIC
(
window
,
);
CHECK_WINDOW_MAGIC
(
window
,
);
if
(
window
->
title
)
{
SDL_free
(
window
->
title
);
}
/* Restore video mode, etc. */
/* Restore video mode, etc. */
SDL_UpdateFullscreenMode
(
window
,
SDL_FALSE
);
SDL_UpdateFullscreenMode
(
window
,
SDL_FALSE
);
...
@@ -1310,6 +1346,18 @@ SDL_DestroyWindow(SDL_Window * window)
...
@@ -1310,6 +1346,18 @@ SDL_DestroyWindow(SDL_Window * window)
/* Now invalidate magic */
/* Now invalidate magic */
window
->
magic
=
NULL
;
window
->
magic
=
NULL
;
/* Free memory associated with the window */
if
(
window
->
title
)
{
SDL_free
(
window
->
title
);
}
while
(
window
->
data
)
{
SDL_WindowUserData
*
data
=
window
->
data
;
window
->
data
=
data
->
next
;
SDL_free
(
data
->
name
);
SDL_free
(
data
);
}
/* Unlink the window from the list */
/* Unlink the window from the list */
display
=
window
->
display
;
display
=
window
->
display
;
if
(
window
->
next
)
{
if
(
window
->
next
)
{
...
...
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